proofs/storage_clone_certificate.bend

stelliferous@0.0.3.0 · 14 lines · 0 definitions

1import Base
2import stelliferous@0.0.3.0/proofs/storage_certificate.bend as Certificate
3import stelliferous@0.0.3.0/proofs/storage_witness.bend as Witness
4import stelliferous@0.0.3.0/proofs/traversal_witness.bend as TraversalWitness
5
6type Copies<-Element: Data,-pair: Array<Element> & Array<Element>> is Data:
7  Copies{left: Certificate.Certificate<Element,TraversalWitness.first(~Array<Element>,~Array<Element>,pair)>,right: Certificate.Certificate<Element,TraversalWitness.second(~Array<Element>,~Array<Element>,pair)>}
8
9def clone(~Element: Data,-input: Array<Element>,evidence: Certificate.Certificate<Element,input>,left: Certificate.Certificate<Element,input>,right: Certificate.Certificate<Element,input>) ->
10  Copies<Element,Array.clone(Element,input)>:
11  Certificate.Certificate{+depth,equation} = evidence
12  %Equal.sym(Array<Element> & Array<Element>,Array.clone(Element,input),(input,input),
13    Witness.clone(Element,depth,input,Certificate.witness_at(Element,depth,input,equation))) : Copies<Element,_>
14  Copies{left,right}