def step_refines_model
stelliferous@0.0.2.0 · proofs/traversal_array_refinement.bend:25
import stelliferous@0.0.2.0/proofs/traversal_array_refinement.bend as TraversalArrayRefinement
import Base
import stelliferous@0.0.2.0/traversal_array.bend as Traversal
import stelliferous@0.0.2.0/proofs/storage_tree_model.bend as Tree
import stelliferous@0.0.2.0/proofs/storage_refinement.bend as StorageLaws
25def step_refines_model(~Reader: Type,~Model: Data,~Element: Data,~Context: Data,
26 ~pack_reader: Model -> Reader,~read: Reader -> Context -> U32 -> Reader & Element,
27 ~sample: Model -> Context -> U32 -> Element,~destination: Context -> U32 -> U32,
28 ~read_matches: @+reader: Model -> @+context: Context -> @+position: U32 ->
29 {read(pack_reader(reader),context,position) == (pack_reader(reader),sample(reader,context,position)) : Reader & Element},
30 +state: Traversal.State<&2,&2,Model,Tree.Tree<Element>,Context>) ->
31 {Traversal.step(~Reader,~Element,~Context,~read,~destination,represent(~Reader,~Model,~Element,~Context,~pack_reader,state)) ==
32 represent(~Reader,~Model,~Element,~Context,~pack_reader,model_step(~Model,~Element,~Context,~sample,~destination,state)) :
33 Traversal.State<&1,&1,Reader,Array<Element>,Context>}:
34 Traversal.State{+reader,+output,+position,+context} = state
35 %Equal.sym(Reader & Element,read(pack_reader(reader),context,position),(pack_reader(reader),sample(reader,context,position)),read_matches(reader,context,position)) :
36 {Traversal.store(~Reader,~Element,~Context,~destination,position,context,Tree.pack(Element,output),_) ==
37 represent(~Reader,~Model,~Element,~Context,~pack_reader,model_step(~Model,~Element,~Context,~sample,~destination,
38 Traversal.State{reader,output,position,context})) : Traversal.State<&1,&1,Reader,Array<Element>,Context>}
39 %Equal.sym(Array<Element>,Array.set(Element,Tree.pack(Element,output),destination(context,position),sample(reader,context,position)),
40 Tree.pack(Element,Tree.write(Element,output,destination(context,position),sample(reader,context,position))),
41 StorageLaws.write(Element,output,destination(context,position),sample(reader,context,position))) :
42 {Traversal.State{pack_reader(reader),_,(position + 1 : U32),context} ==
43 represent(~Reader,~Model,~Element,~Context,~pack_reader,model_step(~Model,~Element,~Context,~sample,~destination,
44 Traversal.State{reader,output,position,context})) : Traversal.State<&1,&1,Reader,Array<Element>,Context>}
45 {==}