def swap_low
bendtorch-core@0.1.0.0 · src/storage/refinement.bend:127
import bendtorch-core@0.1.0.0/src/storage/refinement.bend as Refinement
import Base
import bendtorch-core@0.1.0.0/src/storage/model.bend as Model
import bendtorch-core@0.1.0.0/src/storage/array.bend as Core
127def swap_low(-T: Data, -p: Nat, -original: Array<T>, -n: U32, -i: U32, -new: T,
128 ys: Array<T>,
129 child: Swap<T, p, original, U32.shr(n), i, U32.is_lt(i, U32.shr(U32.shr(n))), new>,
130 ey: Model.Balanced(T, p, ys)) -> Swap<T, 1n+p, ANode{original, ys}, n, i, True{}, new>:
131 match child:
132 case Swap{xs, old, equal, written, observed, ex}:
133 Swap{ANode{xs, ys}, old,
134 Equal.cong(Array<T> & T, Array<T> & T, r => Array.swap.lo(T, ys, r),
135 (xs, old), Array.swap.go(T, original, U32.shr(n), i, new,
136 U32.is_lt(i, U32.shr(U32.shr(n)))), equal),
137 Equal.cong(Array<T>, Array<T>, x => ANode{x, ys}, xs,
138 Core.write_path(T, p, original,
139 trace(p, U32.shr(n), i, U32.is_lt(i, U32.shr(U32.shr(n)))), new), written),
140 observed, (ex, ey)}