def bounded_read_observation_case

stelliferous@0.0.2.0 · proofs/storage_refinement.bend:322

import stelliferous@0.0.2.0/proofs/storage_refinement.bend as StorageRefinement
import Base
import stelliferous@0.0.2.0/storage_buffer.bend as Storage
import stelliferous@0.0.2.0/proofs/storage_tree_model.bend as Tree

322def bounded_read_observation_case(~Element: Data,+fallback: Element,+present: Bool,+length: U32,+tree: Tree.Tree<Element>,+index: U32,
323  +order: {U32.is_lt(index,length) == present : Bool},room: {U32.is_le(length,Tree.capacity(Element,tree)) == True{} : Bool}) ->
324  {Storage.read_or(Element,fallback,Tree.pack(Element,tree),index,length) ==
325    (Tree.pack(Element,tree),Maybe.default(&2,Element,List.get(&2,Element,
326      Tree.read_sequence(~Element,U32.to_nat(length),0,tree),U32.to_nat(index)),fallback)) : Array<Element> & Element}:
327  %Equal.sym(Array<Element> & Element,Storage.read_or(Element,fallback,Tree.pack(Element,tree),index,length),
328    (Tree.pack(Element,tree),Bool.pick(Element,U32.is_lt(index,length) && U32.is_le(length,Tree.capacity(Element,tree)),Tree.read(Element,tree,index),fallback)),
329    bounded_read(~Element,fallback,tree,index,length)) :
330    {_ == (Tree.pack(Element,tree),Maybe.default(&2,Element,List.get(&2,Element,
331      Tree.read_sequence(~Element,U32.to_nat(length),0,tree),U32.to_nat(index)),fallback)) : Array<Element> & Element}
332  %Equal.sym(Bool,U32.is_le(length,Tree.capacity(Element,tree)),True{},room) :
333    {(Tree.pack(Element,tree),Bool.pick(Element,U32.is_lt(index,length) && _,Tree.read(Element,tree,index),fallback)) ==
334      (Tree.pack(Element,tree),Maybe.default(&2,Element,List.get(&2,Element,
335        Tree.read_sequence(~Element,U32.to_nat(length),0,tree),U32.to_nat(index)),fallback)) : Array<Element> & Element}
336  %Equal.sym(Bool,U32.is_lt(index,length),present,order) :
337    {(Tree.pack(Element,tree),Bool.pick(Element,_ && True{},Tree.read(Element,tree,index),fallback)) ==
338      (Tree.pack(Element,tree),Maybe.default(&2,Element,List.get(&2,Element,
339        Tree.read_sequence(~Element,U32.to_nat(length),0,tree),U32.to_nat(index)),fallback)) : Array<Element> & Element}
340  %Equal.sym(Maybe<&2,Element>,List.get(&2,Element,Tree.read_sequence(~Element,U32.to_nat(length),0,tree),U32.to_nat(index)),
341    Bool.pick(Maybe<&2,Element>,present,Some{Tree.read(Element,tree,index)},None{}),sequence_lookup_case(~Element,present,length,tree,index,order)) :
342    {(Tree.pack(Element,tree),Bool.pick(Element,present && True{},Tree.read(Element,tree,index),fallback)) ==
343      (Tree.pack(Element,tree),Maybe.default(&2,Element,_,fallback)) : Array<Element> & Element}
344  %default_after_presence(~Element,fallback,present,Tree.read(Element,tree,index)) :
345    {(Tree.pack(Element,tree),Bool.pick(Element,present && True{},Tree.read(Element,tree,index),fallback)) ==
346      (Tree.pack(Element,tree),_) : Array<Element> & Element}
347  {==}

Uses (23)

Used by (1)