def cells_snoc
bendtorch-core@0.1.0.0 · src/autograd/tensor_vjp_PROOF.bend:44
import bendtorch-core@0.1.0.0/src/autograd/tensor_vjp_PROOF.bend as TensorVjpPROOF
import Base
import bendtorch-core@0.1.0.0/src/shape/core.bend as Shape
import bendtorch-core@0.1.0.0/src/storage/LAWS.bend as StorageLaws
import bendtorch-core@0.1.0.0/src/tensor/elementwise.bend as Elementwise
import bendtorch-core@0.1.0.0/src/autograd/tensor_vjp_LAWS.bend as Laws
44def cells_snoc(+operation: Elementwise.Operation, +plan: Shape.BroadcastPlan,
45 +left: Shape.Shape, +left_fill: F32, +left_ops: List<&2, StorageLaws.Op>,
46 +right: Shape.Shape, +right_fill: F32, +right_ops: List<&2, StorageLaws.Op>, +previous: Nat,
47 +before: List<&2, F32>, +word: F32, +other: F32,
48 rest: {before == Laws.cells(operation, plan, left, left_fill, left_ops, right, right_fill, right_ops, previous) : List<&2, F32>},
49 last: {word == other : F32}) ->
50 {List.append(&2, F32, before, [word]) ==
51 List.append(&2, F32, Laws.cells(operation, plan, left, left_fill, left_ops, right, right_fill, right_ops, previous), [other]) : List<&2, F32>}:
52 Equal.trans(List<&2, F32>, List.append(&2, F32, before, [word]),
53 List.append(&2, F32, Laws.cells(operation, plan, left, left_fill, left_ops, right, right_fill, right_ops, previous), [word]),
54 List.append(&2, F32, Laws.cells(operation, plan, left, left_fill, left_ops, right, right_fill, right_ops, previous), [other]),
55 Equal.cong(List<&2, F32>, List<&2, F32>, values => List.append(&2, F32, values, [word]),
56 before, Laws.cells(operation, plan, left, left_fill, left_ops, right, right_fill, right_ops, previous), rest),
57 Equal.cong(F32, List<&2, F32>,
58 value => List.append(&2, F32, Laws.cells(operation, plan, left, left_fill, left_ops, right, right_fill, right_ops, previous), [value]),
59 word, other, last))