type Facts
bendtorch-core@0.1.0.0 · src/tensor/axis_algebra.bend:200
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
200type Facts<-rank: Nat, -axes: List<&2, Nat>> is Type:
201 Certified{inverse_valid: {True{} == Axis.valid(rank, Axis.inverse_axes(rank, axes)) : Bool},
202 inverse_selected: {Axis.inverse(rank, axes) == Some{Axis.inverse_axes(rank, axes)} : Maybe<&2, List<&2, Nat>>},
203 inverse_restored: {Axis.inverse_axes(rank, Axis.inverse_axes(rank, axes)) == axes : List<&2, Nat>},
204 lists: @-A: Data -> @+items: List<&2, A> -> @length: {List.length(&2, A, items) == rank : Nat} -> ListFacts<A, rank, axes, items>,
205 product: @+dims: List<&2, Nat> -> @length: {List.length(&2, Nat, dims) == rank : Nat} -> {Shape.numel(Axis.order(Nat, dims, axes)) == Shape.numel(dims) : Nat},
206 fit: @+dims: List<&2, Nat> -> @+coords: List<&2, Nat> -> @dl: {List.length(&2, Nat, dims) == rank : Nat} -> @cl: {List.length(&2, Nat, coords) == rank : Nat} ->
207 {Shape.fit(Axis.order(Nat, dims, axes), Axis.order(Nat, coords, axes)) == Shape.fit(dims, coords) : Bool}}