def operation
stelliferous@0.0.2.0 · proofs/traversal_certificate.bend:85
import stelliferous@0.0.2.0/proofs/traversal_certificate.bend as TraversalCertificate
import Base
import stelliferous@0.0.2.0/proofs/storage_tree_model.bend as Tree
import stelliferous@0.0.2.0/proofs/storage_certificate.bend as Certificate
import stelliferous@0.0.2.0/proofs/traversal_witness.bend as TraversalWitness
85def operation(~Reader: Type,~Element: Data,~Metadata: Data,~ReaderCertificate: @-reader: Reader -> Data,
86 ~operation: Metadata -> Reader -> Array<Element> -> Reader & Array<Element>,
87 ~preserves: @+depth: Nat -> @metadata: Metadata -> @-reader: Reader -> @-output: Array<Element> -> ReaderCertificate(reader) ->
88 {output == Tree.pack(Element,Certificate.normalized(Element,depth,Tree.reflect(Element,output))) : Array<Element>} ->
89 TraversalWitness.ResultEvidence<Reader,Element,reader,depth,operation(metadata,reader,output)>,
90 +metadata: Metadata,-reader: Reader,-output: Array<Element>,source_certificate: ReaderCertificate(reader),equation_certificate: ReaderCertificate(reader),
91 reader_certificate: ReaderCertificate(reader),output_certificate: Certificate.Certificate<Element,output>) ->
92 Certificates<Reader,Element,ReaderCertificate,operation(metadata,reader,output)>:
93 Certificate.Certificate{+depth,+equation} = output_certificate
94 Certificates{operation_source(~Reader,~Element,~Metadata,~ReaderCertificate,~operation,~preserves,metadata,reader,output,source_certificate,reader_certificate,depth,equation),
95 Certificate.Certificate{depth,operation_equation(~Reader,~Element,~Metadata,~ReaderCertificate,~operation,~preserves,metadata,reader,output,equation_certificate,depth,equation)}}