def fold_step_refines_model

stelliferous@0.0.2.0 · proofs/traversal_array_refinement.bend:99

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

99def fold_step_refines_model(~Reader: Type,~Model: Data,~Element: Data,~Accumulator: Data,~Context: Data,
100  ~pack_reader: Model -> Reader,~read: Reader -> Context -> U32 -> Reader & Element,
101  ~sample: Model -> Context -> U32 -> Element,~combine: Accumulator -> Element -> Accumulator,
102  ~read_matches: @+reader: Model -> @+context: Context -> @+position: U32 ->
103    {read(pack_reader(reader),context,position) == (pack_reader(reader),sample(reader,context,position)) : Reader & Element},
104  +state: Traversal.State<&2,&2,Model,Accumulator,Context>) ->
105  {Traversal.fold_step(~Reader,~Element,~Accumulator,~Context,~read,~combine,
106      represent_fold(~Reader,~Model,~Accumulator,~Context,~pack_reader,state)) ==
107    represent_fold(~Reader,~Model,~Accumulator,~Context,~pack_reader,
108      model_fold_step(~Model,~Element,~Accumulator,~Context,~sample,~combine,state)) : Traversal.State<&1,&2,Reader,Accumulator,Context>}:
109  Traversal.State{+reader,+accumulator,+position,+context} = state
110  %Equal.sym(Reader & Element,read(pack_reader(reader),context,position),(pack_reader(reader),sample(reader,context,position)),
111    read_matches(reader,context,position)) :
112    {Traversal.fold_value(~Reader,~Element,~Accumulator,~Context,~combine,accumulator,position,context,_) ==
113      represent_fold(~Reader,~Model,~Accumulator,~Context,~pack_reader,
114        model_fold_step(~Model,~Element,~Accumulator,~Context,~sample,~combine,Traversal.State{reader,accumulator,position,context})) :
115      Traversal.State<&1,&2,Reader,Accumulator,Context>}
116  {==}

Uses (9)

Used by (1)