law ginv
lawful-bytes@0.1.1.0 · proof_grow.bend:379
import lawful-bytes@0.1.1.0/proof_grow.bend as ProofGrow
import Base
import lawful-bytes@0.1.1.0/proof_core.bend as C
import lawful-arrays@0.1.0.0/defs.bend as A
import lawful-arrays@0.1.0.0/proof_tree.bend as P
import lawful-arrays@0.1.0.0/proof_index.bend as I
379
380law ginv:
381 for +t: P.Tree<U32>
382 for +td: P.Tree<U32>
383 for +i: U32
384 for +d: Nat
385 for +e: Nat
386 for +hft: {A.full(U32, P.fromT(U32, t), d) == True{} : Bool}
387 for +hfd: {A.full(U32, P.fromT(U32, td), e) == True{} : Bool}
388 for +hd: {Nat.is_le(d, 29n) == True{} : Bool}
389 for +he29: {Nat.is_le(e, 29n) == True{} : Bool}
390 for +hjd: {Nat.is_lt(U32.to_nat(i), Nat.pow(2n, d)) == True{} : Bool}
391 for +hje: {Nat.is_lt(U32.to_nat(i), Nat.pow(2n, e)) == True{} : Bool}
392 for +ei1: {U32.to_nat((i + 1 : U32)) == Nat.add(U32.to_nat(i), 1n) : Nat}
393 for +hinv: {List.take(&2, U32, C.WL(td), U32.to_nat(i)) == List.take(&2, U32, C.WL(t), U32.to_nat(i)) : List<&2, U32>}
394 {List.take(&2, U32, C.WL(I.set_tree(U32, td, i, C.WD(t, i))), U32.to_nat((i + 1 : U32))) == List.take(&2, U32, C.WL(t), U32.to_nat((i + 1 : U32))) : List<&2, U32>}