import Base import ./storage_certificate.bend as Certificate import ./storage_witness.bend as Witness import ./traversal_witness.bend as TraversalWitness type Copies<-Element: Data,-pair: Array & Array> is Data: Copies{left: Certificate.Certificate,~Array,pair)>,right: Certificate.Certificate,~Array,pair)>} def clone(~Element: Data,-input: Array,evidence: Certificate.Certificate,left: Certificate.Certificate,right: Certificate.Certificate) -> Copies: Certificate.Certificate{+depth,equation} = evidence %Equal.sym(Array & Array,Array.clone(Element,input),(input,input), Witness.clone(Element,depth,input,Certificate.witness_at(Element,depth,input,equation))) : Copies Copies{left,right}