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# The one-thread tree hands `start` back and fills every cell as CellIs
160# says.
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))

Uses (15)

Used by (1)