~/bend-docscommunity

proofs/lib/lemmas/spec/cache.bend checks

raw source on the hub · import bend-collections-laws-containers@1.0.0.0/proofs/lib/lemmas/spec/cache.bend as Cache

3 imports
import Base
import ./numeric.bend as N
import ../types/model.bend as T

Types

type Model source · line 10 · raw

@-K:Data -> @-V:Data -> Data

Independent abstract finite-map representation. Well-formed states have one binding per key and a recency permutation of exactly those keys. No native Map, implementation, codec, or proof imports occur in this specification. Binding-list order is not observable: full refinement must compare finite-map lookup extensionally (or canonicalize bindings), while recency order is exact.

type Observation source · line 13 · raw

@-K:Data -> @-V:Data -> Data

type Command source · line 60 · raw

@-K:Data -> @-V:Data -> Data

Typed public commands. Independent observations and clock effects are defined in public_commands.bend, and finite caller traces in traces.bend.

type PrefixFailure source · line 142 · raw

@-K:Data -> @-V:Data -> Data

Expiration consumes a clock sample only when the current oldest deadline is finite. A finite future deadline stops; an immortal oldest also stops without looking at any subsequent binding. This model returns removed oldest entries plus unused clock samples; transport exhaustion is an explicit failure.

type ExpiredPrefix source · line 145 · raw

@-K:Data -> @-V:Data -> Data

Definitions

def initial source · line 16 · raw

@-K:Data -> @-V:Data -> @capacity:Nat -> Model<K, V>

def length source · line 19 · raw

@-K:Data -> @-V:Data -> @s:Model<K, V> -> Nat

def set_lifetime source · line 23 · raw

@-K:Data -> @-V:Data -> @s:Model<K, V> -> @lifetime:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Model<K, V>

def reset_metrics source · line 27 · raw

@-K:Data -> @-V:Data -> @s:Model<K, V> -> Pair(Model<K, V>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Metrics)

def missing_get source · line 31 · raw

@-K:Data -> @-V:Data -> @s:Model<K, V> -> Observation<K, V>

def missing_remove source · line 35 · raw

@-K:Data -> @-V:Data -> @s:Model<K, V> -> Observation<K, V>

def is_expired source · line 39 · raw

@deadline:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @now:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Bool

Signed comparisons, including sentinel, specified independently.

def callbacks source · line 44 · raw

@-K:Data -> @-V:Data -> @entries:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @+enabled:Bool -> List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.LruEvent<K, V>>

Legacy pure event metadata. Supported initial states disable it and expose no registration command; no user function is represented or executed here.

def purged source · line 54 · raw

@-K:Data -> @-V:Data -> @s:Model<K, V> -> Model<K, V>

Full purge is defined from the ordered entries, not from implementation steps.

def choose_entry source · line 81 · raw

@-K:Data -> @-V:Data -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @rest:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @equal:Bool -> Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>>

Abstract finite-map operations use user-key equality, never encoding or Map.

def omit_entry source · line 95 · raw

@-K:Data -> @-V:Data -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @rest:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @equal:Bool -> List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>>

def omit_key source · line 109 · raw

@-K:Data -> @key:K -> @rest:List<&2, K> -> @equal:Bool -> List<&2, K>

def prefix_prepend source · line 148 · raw

@-K:Data -> @-V:Data -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @rest:Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>> -> Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>>

def prefix_decide source · line 155 · raw

@-K:Data -> @-V:Data -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @tail:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @times:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64> -> @expired:Bool -> @rest:Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>> -> Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>>

def prefix_missing source · line 162 · raw

@-K:Data -> @-V:Data -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @tail:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @immortal:Bool -> Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>>

def prefix_sampled source · line 169 · raw

@-K:Data -> @-V:Data -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @tail:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @now:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @times:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64> -> @expired:Bool -> @rest:Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>> -> @immortal:Bool -> Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>>

def expired_prefix source · line 176 · raw

@-K:Data -> @-V:Data -> @ordered:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @times:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64> -> Result<&2, &2, PrefixFailure<K, V>, ExpiredPrefix<K, V>>

def create_decision source · line 185 · raw

@-K:Data -> @-V:Data -> @capacity:Nat -> @valid:Bool -> Result<&2, &2, String, Model<K, V>>

def construct source · line 192 · raw

@-K:Data -> @-V:Data -> @capacity:U32 -> @size:U32 -> @zero:Bool -> @reserved:Bool -> @small:Bool -> Result<&2, &2, String, Model<K, V>>

def new_with_size source · line 203 · raw

@-K:Data -> @-V:Data -> @+capacity:U32 -> @+size:U32 -> Result<&2, &2, String, Model<K, V>>

Templates

template find source · line 88 · raw

@-K:Data -> @-same:(@_:K -> @_:K -> Bool) -> @-V:Data -> @bindings:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @+key:K -> Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>>

template erase source · line 102 · raw

@-K:Data -> @-same:(@_:K -> @_:K -> Bool) -> @-V:Data -> @bindings:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @+key:K -> List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>>

template unlist source · line 116 · raw

@-K:Data -> @-same:(@_:K -> @_:K -> Bool) -> @order:List<&2, K> -> @+key:K -> List<&2, K>

template remove_existing source · line 123 · raw

@-K:Data -> @-same:(@_:K -> @_:K -> Bool) -> @-V:Data -> @s:Model<K, V> -> @+key:K -> @+entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> Observation<K, V>

template remove_decision source · line 127 · raw

@-K:Data -> @-same:(@_:K -> @_:K -> Bool) -> @-V:Data -> @s:Model<K, V> -> @key:K -> @found:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> Observation<K, V>

template remove source · line 134 · raw

@-K:Data -> @-same:(@_:K -> @_:K -> Bool) -> @-V:Data -> @+s:Model<K, V> -> @+key:K -> Observation<K, V>