def restored

stelliferous@0.0.2.0 · proofs/storage_certificate.bend:39

import stelliferous@0.0.2.0/proofs/storage_certificate.bend as StorageCertificate
import Base
import stelliferous@0.0.2.0/proofs/storage_tree_model.bend as Tree
import stelliferous@0.0.2.0/proofs/storage_witness.bend as Witness

39def restored(-Element: Data,+depth: Nat,-storage: Array<Element>,witness: Witness.Witness(Element,depth,storage)) ->
40  {Tree.pack(Element,normalized(Element,depth,Tree.reflect(Element,storage))) == storage : Array<Element>}:
41  match depth witness:
42    case 0n Witness.Leaf{value,owner}:
43      %Equal.sym(Array<Element>,storage,ALeaf{value},owner) :
44        {Tree.pack(Element,normalized(Element,0n,Tree.reflect(Element,_))) == _ : Array<Element>}
45      {==}
46    case 1n+ +rest Witness.Node{left,right,owner,left_balanced,right_balanced}:
47      %Equal.sym(Array<Element>,storage,ANode{left,right},owner) :
48        {Tree.pack(Element,normalized(Element,1n+rest,Tree.reflect(Element,_))) == _ : Array<Element>}
49      %restored(Element,rest,left,left_balanced) :
50        {ANode{Tree.pack(Element,normalized(Element,rest,Tree.reflect(Element,left))),
51          Tree.pack(Element,normalized(Element,rest,Tree.reflect(Element,right)))} == ANode{_,right} : Array<Element>}
52      %restored(Element,rest,right,right_balanced) :
53        {ANode{Tree.pack(Element,normalized(Element,rest,Tree.reflect(Element,left))),
54          Tree.pack(Element,normalized(Element,rest,Tree.reflect(Element,right)))} ==
55          ANode{Tree.pack(Element,normalized(Element,rest,Tree.reflect(Element,left))),_} : Array<Element>}
56      {==}

Uses (9)

Used by (10)