def model_update_step

stelliferous@0.0.2.0 · proofs/traversal_array_refinement.bend:178

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

178# In-place binary updates use the current destination value in left position.
179# This theorem models sequential writes, including modular/overlapping raw
180# addresses. Valid view guards and non-overlap are separate obligations.
181def model_update_step(~Model: Data,~Element: Data,~Sample: Data,~Context: Data,
182  ~sample: Model -> Context -> U32 -> Sample,~combine: Element -> Sample -> Element,~destination: Context -> U32 -> U32,
183  state: Traversal.State<&2,&2,Model,Tree.Tree<Element>,Context>) -> Traversal.State<&2,&2,Model,Tree.Tree<Element>,Context>:
184  Traversal.State{+reader,+output,+position,+context} = state
185  Traversal.State{reader,Tree.write(Element,output,destination(context,position),
186    combine(Tree.read(Element,output,destination(context,position)),sample(reader,context,position))),(position + 1 : U32),context}

Uses (6)

Used by (2)