template content source · line 40 · raw
@-Element:Data -> @model:Model<Element> -> Content<Element>
raw source on the hub · import stelliferous@0.0.2.0/proofs/storage_buffer_model.bend as Storage_buffer_model
Proof-only canonical owners retain the actual certificate. They support induction through affine Buffer callers without duplicating native arrays.
import Base import ../storage_buffer.bend as Storage import ./storage_tree_model.bend as Tree import ./storage_refinement.bend as StorageLaws import ./storage_certificate.bend as Certificate import ./storage_shape.bend as Shape import ./storage_witness.bend as Witness import ./word_power_of_two.bend as Power import ./nat_order.bend as Order
@-Element:Data -> Data
Content @-Element:Data -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.Tree<Element> -> @length:Nat -> Content<Element>
@-Element:Data -> @-content:Content<Element> -> Data
ContentReady @-Element:Data -> @-content:Content<Element> -> @depth:Nat -> @balanced:0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_shape.Balanced(Element, depth, content_tree(Element, content)) -> @depth_ok:{Nat.is_le(depth, 30n) == True{} : Bool} -> @room:{Nat.is_le(content_length(Element, content), U32.to_nat(0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.capacity(Element, content_tree(Element, content)))) == True{} : Bool} -> ContentReady<Element, content>@-Element:Data -> Data
Model @-Element:Data -> @tree:0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.Tree<Element> -> @length:Nat -> @certificate:0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_certificate.Certificate<Element, 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.pack(Element, tree)> -> Model<Element>
@-Element:Data -> @-model:Model<Element> -> Data
Logical length and the native machine depth are independent of the stored element values. Allocation establishes them; content-preserving operations carry them with the same owner.
Sized @-Element:Data -> @-model:Model<Element> -> @depth_ok:{Nat.is_le(depth(Element, model), 30n) == True{} : Bool} -> @room:{Nat.is_le(length(Element, model), U32.to_nat(0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.capacity(Element, tree(Element, model)))) == True{} : Bool} -> Sized<Element, model>@-Element:Data -> @-buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Data
Observation @-Element:Data -> @-buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @model:Model<Element> -> @equation:{pack(Element, model) == buffer : 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>} -> Observation<Element, buffer>@-Element:Data -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Content<Element>
@-Element:Data -> @index:U32 -> @content:Content<Element> -> Element
@-Element:Data -> @content:Content<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.Tree<Element>
@-Element:Data -> @content:Content<Element> -> Nat
@-Element:Data -> @model:Model<Element> -> Content<Element>
@-Element:Data -> @model:Model<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>
@-Element:Data -> @model:Model<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.Tree<Element>
@-Element:Data -> @model:Model<Element> -> Nat
@-Element:Data -> @+model:Model<Element> -> {content_length(Element, content(Element, model)) == length(Element, model) : Nat}
@-Element:Data -> @model:Model<Element> -> Nat
@-Element:Data -> @+model:Model<Element> -> 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_shape.Balanced(Element, depth(Element, model), tree(Element, model))
@-Element:Data -> @+model:Model<Element> -> @+depth_ok:{Nat.is_le(depth(Element, model), 30n) == True{} : Bool} -> {U32.is_le(0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.capacity(Element, tree(Element, model)), 2147483648) == True{} : Bool}
@-Element:Data -> @+model:Model<Element> -> @depth_ok:{Nat.is_le(depth(Element, model), 30n) == True{} : Bool} -> {U32.is_le(0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.capacity(Element, tree(Element, model)), 1073741824) == True{} : Bool}
@-Element:Data -> @+model:Model<Element> -> @evidence:ContentReady<Element, content(Element, model)> -> Sized<Element, model>
@-Element:Data -> @+model:Model<Element> -> @evidence:Sized<Element, model> -> ContentReady<Element, content(Element, model)>
@-Element:Data -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Data
@-Element:Data -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @ready:NativeReady(Element, buffer) -> ContentReady<Element, contents(Element, buffer)>
@-Element:Data -> @+model:Model<Element> -> @ready:NativeReady(Element, pack(Element, model)) -> Sized<Element, model>
@-Element:Data -> @-buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @+model:Model<Element> -> @equation:{pack(Element, model) == buffer : 0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element>} -> @ready:NativeReady(Element, buffer) -> Sized<Element, model>
@-Element:Data -> @+depth:Nat -> @+fill:Element -> 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_certificate.Certificate<Element, 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.pack(Element, 0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.fresh(Element, depth, fill))>
@-Element:Data -> @+depth:Nat -> @+fill:Element -> @length:Nat -> Model<Element>
@-Element:Data -> @+depth:Nat -> @+fill:Element -> @+length:Nat -> @depth_ok:{Nat.is_le(depth, 30n) == True{} : Bool} -> @room:{Nat.is_le(length, U32.to_nat(U32.shln(1, depth))) == True{} : Bool} -> Sized<Element, fresh(Element, depth, fill, length)>
@-Element:Data -> @+model:Model<Element> -> {contents(Element, pack(Element, model)) == content(Element, model) : Content<Element>}
@-Element:Data -> @length:Nat -> @-storage:Array<Element> -> @-tree:0x9be3b13bf249759bc81e1958bcd1a4c0/proofs/storage_tree_model.Tree<Element> -> Type
@-Element:Data -> @buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Observation<Element, buffer>
@-Element:Data -> @-Context:Data -> @-Proposition:(@_:Context -> @-buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> Type) -> @+context:Context -> @-buffer:0x9be3b13bf249759bc81e1958bcd1a4c0/storage_buffer.Buffer<Element> -> @observation:Observation<Element, buffer> -> @canonical:(@+model:Model<Element> -> Proposition(context, pack(Element, model))) -> Proposition(context, buffer)