def tree_facts
bendtorch-core@0.1.0.0 · src/tensor/parallel_proofs.bend:159
import bendtorch-core@0.1.0.0/src/tensor/parallel_proofs.bend as ParallelProofs
import Base
import bendtorch-core@0.1.0.0/src/tensor/parallel.bend as Build
159
160
161def tree_facts(~P: Data, ~A: Type, ~B: Type, ~cell: @+p: P -> @+position: Nat -> (A & B) -> Bool -> F32 & (A & B),
162 +p: P, -start: (A & B), +depth: Nat, +count: Nat, +base: Nat, state: (A & B), -at: {state == start : (A & B)},
163 -keeps: Keeps(~P, ~A, ~B, ~cell, p, start)) ->
164 Fact<TreeFacts(~P, ~A, ~B, ~cell, p, start, depth, count, base, Build.tree(~P, ~A, ~B, ~cell, p, depth, count, base, state))>:
165 match depth:
166 case 0n:
167 leaf_facts(~P, ~A, ~B, ~cell, p, start, count, base, cell(p, base, state, Nat.is_lt(base, count)),
168 Equal.cong((A & B), F32 & (A & B), s => cell(p, base, s, Nat.is_lt(base, count)), state, start, at), keeps)
169 case 1n+inner:
170 match inner:
171 case 0n:
172 pair_facts(~P, ~A, ~B, ~cell, p, start, count, base, cell(p, base, state, Nat.is_lt(base, count)),
173 Equal.cong((A & B), F32 & (A & B), s => cell(p, base, s, Nat.is_lt(base, count)), state, start, at), keeps)
174 case 1n+below:
175 node_facts(~P, ~A, ~B, ~cell, p, start, inner, count, base,
176 l => r => Build.tree(~P, ~A, ~B, ~cell, p, inner, count, Build.upper(inner, base), (l, r)),
177 Build.tree(~P, ~A, ~B, ~cell, p, inner, count, base, state),
178 tree_facts(~P, ~A, ~B, ~cell, p, start, inner, count, base, state, at, keeps),
179 l => r => at => tree_facts(~P, ~A, ~B, ~cell, p, start, inner, count, Build.upper(inner, base), (l, r), at, keeps))