def fit_3210

bendtorch-core@0.1.0.0 · src/tensor/axis_algebra.bend:2087

import bendtorch-core@0.1.0.0/src/tensor/axis_algebra.bend as AxisAlgebra
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/axis_spec.bend as Axis

2087def fit_3210(+dims: List<&2, Nat>, +coords: List<&2, Nat>, dl: {List.length(&2, Nat, dims) == 4n : Nat}, cl: {List.length(&2, Nat, coords) == 4n : Nat}) -> {Shape.fit(Axis.order(Nat, dims, [3n, 2n, 1n, 0n]), Axis.order(Nat, coords, [3n, 2n, 1n, 0n])) == Shape.fit(dims, coords) : Bool}:
2088  match dims:
2089    case Nil{}:
2090      Empty.absurd({Shape.fit(Axis.order(Nat, Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, coords, [3n, 2n, 1n, 0n])) == Shape.fit(Nil{}, coords) : Bool}, nat_clash(0n, 4n, dl, {==}))
2091    case +d0 <> Nil{}:
2092      Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, coords, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> Nil{}, coords) : Bool}, nat_clash(1n, 4n, dl, {==}))
2093    case +d0 <> +d1 <> Nil{}:
2094      Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, coords, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> Nil{}, coords) : Bool}, nat_clash(2n, 4n, dl, {==}))
2095    case +d0 <> +d1 <> +d2 <> Nil{}:
2096      Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, coords, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> Nil{}, coords) : Bool}, nat_clash(3n, 4n, dl, {==}))
2097    case +d0 <> +d1 <> +d2 <> +d3 <> Nil{}:
2098      match coords:
2099        case Nil{}:
2100          Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> d3 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, Nil{}, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> d3 <> Nil{}, Nil{}) : Bool}, nat_clash(0n, 4n, cl, {==}))
2101        case +c0 <> Nil{}:
2102          Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> d3 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, c0 <> Nil{}, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> d3 <> Nil{}, c0 <> Nil{}) : Bool}, nat_clash(1n, 4n, cl, {==}))
2103        case +c0 <> +c1 <> Nil{}:
2104          Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> d3 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, c0 <> c1 <> Nil{}, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> d3 <> Nil{}, c0 <> c1 <> Nil{}) : Bool}, nat_clash(2n, 4n, cl, {==}))
2105        case +c0 <> +c1 <> +c2 <> Nil{}:
2106          Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> d3 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, c0 <> c1 <> c2 <> Nil{}, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> d3 <> Nil{}, c0 <> c1 <> c2 <> Nil{}) : Bool}, nat_clash(3n, 4n, cl, {==}))
2107        case +c0 <> +c1 <> +c2 <> +c3 <> Nil{}:
2108          Equal.trans(Bool, Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c0, d0), True{})))), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), Equal.cong(Bool, Bool, value => Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), value)), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c0, d0), True{})), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), True{})), and_swap(Nat.is_lt(c1, d1), Nat.is_lt(c0, d0), True{})), Equal.trans(Bool, Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), True{})))), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), Equal.cong(Bool, Bool, value => Bool.and(Nat.is_lt(c3, d3), value), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), True{}))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{}))), and_swap(Nat.is_lt(c2, d2), Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), True{}))), Equal.trans(Bool, Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), and_swap(Nat.is_lt(c3, d3), Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{}))), Equal.trans(Bool, Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), Equal.cong(Bool, Bool, value => Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c3, d3), value)), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c1, d1), True{})), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), True{})), and_swap(Nat.is_lt(c2, d2), Nat.is_lt(c1, d1), True{})), Equal.trans(Bool, Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), Equal.cong(Bool, Bool, value => Bool.and(Nat.is_lt(c0, d0), value), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), True{}))), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), True{}))), and_swap(Nat.is_lt(c3, d3), Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), True{}))), Equal.trans(Bool, Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})))), Equal.cong(Bool, Bool, value => Bool.and(Nat.is_lt(c0, d0), Bool.and(Nat.is_lt(c1, d1), value)), Bool.and(Nat.is_lt(c3, d3), Bool.and(Nat.is_lt(c2, d2), True{})), Bool.and(Nat.is_lt(c2, d2), Bool.and(Nat.is_lt(c3, d3), True{})), and_swap(Nat.is_lt(c3, d3), Nat.is_lt(c2, d2), True{})), {==}))))))
2109        case +c0 <> +c1 <> +c2 <> +c3 <> +c4 <> +ct:
2110          Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> d3 <> Nil{}, [3n, 2n, 1n, 0n]), Axis.order(Nat, c0 <> c1 <> c2 <> c3 <> c4 <> ct, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> d3 <> Nil{}, c0 <> c1 <> c2 <> c3 <> c4 <> ct) : Bool}, nat_clash(5n+List.length(&2, Nat, ct), 4n, cl, {==}))
2111    case +d0 <> +d1 <> +d2 <> +d3 <> +d4 <> +dt:
2112      Empty.absurd({Shape.fit(Axis.order(Nat, d0 <> d1 <> d2 <> d3 <> d4 <> dt, [3n, 2n, 1n, 0n]), Axis.order(Nat, coords, [3n, 2n, 1n, 0n])) == Shape.fit(d0 <> d1 <> d2 <> d3 <> d4 <> dt, coords) : Bool}, nat_clash(5n+List.length(&2, Nat, dt), 4n, dl, {==}))

Uses (13)

Used by (1)