def map_step_refines_model
stelliferous@0.0.2.0 · proofs/traversal_array_refinement.bend:149
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
149def map_step_refines_model(~Element: Data,~Context: Data,~map: Context -> Element -> Element,
150 +state: Traversal.State<&2,&2,Unit,Tree.Tree<Element>,Context>) ->
151 {Traversal.map_step(~Element,~Context,~map,represent_map(~Element,~Context,state)) ==
152 represent_map(~Element,~Context,model_map_step(~Element,~Context,~unindexed(~Element,~Context,~map),state)) : Traversal.State<&2,&1,Unit,Array<Element>,Context>}:
153 Traversal.State{Unit{},+output,+position,+context} = state
154 %Equal.sym(Array<Element> & Element,Array.get(Element,Tree.pack(Element,output),position),
155 (Tree.pack(Element,output),Tree.read(Element,output,position)),StorageLaws.read(Element,output,position)) :
156 {Traversal.mapped_value(~Element,~Context,~map,position,context,_) ==
157 represent_map(~Element,~Context,model_map_step(~Element,~Context,~unindexed(~Element,~Context,~map),state)) : Traversal.State<&2,&1,Unit,Array<Element>,Context>}
158 %Equal.sym(Array<Element>,Array.set(Element,Tree.pack(Element,output),position,map(context,Tree.read(Element,output,position))),
159 Tree.pack(Element,Tree.write(Element,output,position,map(context,Tree.read(Element,output,position)))),
160 StorageLaws.write(Element,output,position,map(context,Tree.read(Element,output,position)))) :
161 {Traversal.State{Unit{},_,(position + 1 : U32),context} ==
162 represent_map(~Element,~Context,model_map_step(~Element,~Context,~unindexed(~Element,~Context,~map),state)) : Traversal.State<&2,&1,Unit,Array<Element>,Context>}
163 {==}