def left_inside

bendtorch-core@0.1.0.0 · src/tensor/contracts/broadcast_proof.bend:55

import bendtorch-core@0.1.0.0/src/tensor/contracts/broadcast_proof.bend as BroadcastProof
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/tensor/word_conversion.bend as Conversion
import bendtorch-core@0.1.0.0/src/tensor/contracts/pointwise.bend as Pointwise
import bendtorch-core@0.1.0.0/src/tensor/contracts/broadcast.bend as Broadcast

55def left_inside(+plan: Shape.BroadcastPlan, +count: Nat,
56  +room: {Nat.is_le(count, Shape.logical_numel(Shape.dimensions(Shape.output_shape(plan)))) == True{} : Bool}) ->
57  {Pointwise.inside(~Shape.BroadcastPlan, ~Broadcast.left_map, plan, count, Shape.logical_numel(Shape.dimensions(Shape.left_shape(plan)))) == True{} : Bool}:
58  match count:
59    case 0n:
60      {==}
61    case 1n+previous:
62      +total = Shape.logical_numel(Shape.dimensions(Shape.output_shape(plan)))
63      +bound = Shape.logical_numel(Shape.dimensions(Shape.left_shape(plan)))
64      %Equal.sym(Bool, Pointwise.inside(~Shape.BroadcastPlan, ~Broadcast.left_map, plan, previous, bound), True{},
65        left_inside(plan, previous, Conversion.le_predecessor(previous, total, room))) :
66        {Bool.and(_, Nat.is_lt(Broadcast.left_map(plan, previous), bound)) == True{} : Bool}
67      %Equal.sym(Bool, Nat.is_lt(Broadcast.left_map(plan, previous), bound), True{},
68        left_walk_bound(plan, Shape.index_map(plan), previous, Conversion.le_successor_lt(previous, total, room))) :
69        {Bool.and(True{}, _) == True{} : Bool}
70      {==}

Uses (17)

Used by (1)