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# Writing word i keeps the copied prefix and extends it by one word.
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>}

Uses (27)

Used by (1)