def update_step_refines_model

stelliferous@0.0.2.0 · proofs/traversal_array_refinement.bend:188

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

188def update_step_refines_model(~Reader: Type,~Model: Data,~Element: Data,~Sample: Data,~Context: Data,
189  ~pack_reader: Model -> Reader,~read: Reader -> Context -> U32 -> Reader & Sample,
190  ~sample: Model -> Context -> U32 -> Sample,~combine: Element -> Sample -> Element,~destination: Context -> U32 -> U32,
191  ~read_matches: @+reader: Model -> @+context: Context -> @+position: U32 ->
192    {read(pack_reader(reader),context,position) == (pack_reader(reader),sample(reader,context,position)) : Reader & Sample},
193  +state: Traversal.State<&2,&2,Model,Tree.Tree<Element>,Context>) ->
194  {Traversal.update_step(~Reader,~Element,~Sample,~Context,~read,~combine,~destination,
195      represent(~Reader,~Model,~Element,~Context,~pack_reader,state)) ==
196    represent(~Reader,~Model,~Element,~Context,~pack_reader,model_update_step(~Model,~Element,~Sample,~Context,~sample,~combine,~destination,state)) :
197    Traversal.State<&1,&1,Reader,Array<Element>,Context>}:
198  Traversal.State{+reader,+output,+position,+context} = state
199  %Equal.sym(Array<Element> & Element,Array.get(Element,Tree.pack(Element,output),destination(context,position)),
200    (Tree.pack(Element,output),Tree.read(Element,output,destination(context,position))),StorageLaws.read(Element,output,destination(context,position))) :
201    {Traversal.update_current(~Reader,~Element,~Sample,~Context,~read,~combine,~destination,pack_reader(reader),position,context,_) ==
202      represent(~Reader,~Model,~Element,~Context,~pack_reader,model_update_step(~Model,~Element,~Sample,~Context,~sample,~combine,~destination,
203        Traversal.State{reader,output,position,context})) : Traversal.State<&1,&1,Reader,Array<Element>,Context>}
204  %Equal.sym(Reader & Sample,read(pack_reader(reader),context,position),(pack_reader(reader),sample(reader,context,position)),read_matches(reader,context,position)) :
205    {Traversal.update_sample(~Reader,~Element,~Sample,~Context,~combine,~destination,position,context,Tree.pack(Element,output),
206      Tree.read(Element,output,destination(context,position)),_) ==
207      represent(~Reader,~Model,~Element,~Context,~pack_reader,model_update_step(~Model,~Element,~Sample,~Context,~sample,~combine,~destination,
208        Traversal.State{reader,output,position,context})) : Traversal.State<&1,&1,Reader,Array<Element>,Context>}
209  %Equal.sym(Array<Element>,Array.set(Element,Tree.pack(Element,output),destination(context,position),
210      combine(Tree.read(Element,output,destination(context,position)),sample(reader,context,position))),
211    Tree.pack(Element,Tree.write(Element,output,destination(context,position),
212      combine(Tree.read(Element,output,destination(context,position)),sample(reader,context,position)))),
213    StorageLaws.write(Element,output,destination(context,position),combine(Tree.read(Element,output,destination(context,position)),sample(reader,context,position)))) :
214    {Traversal.State{pack_reader(reader),_,(position + 1 : U32),context} ==
215      represent(~Reader,~Model,~Element,~Context,~pack_reader,model_update_step(~Model,~Element,~Sample,~Context,~sample,~combine,~destination,
216        Traversal.State{reader,output,position,context})) : Traversal.State<&1,&1,Reader,Array<Element>,Context>}
217  {==}

Uses (20)

Used by (1)