~/bend-docscommunity

proofs/lib/lemmas/src/public.bend checks

raw source on the hub · import bend-collections-laws-containers@1.0.0.0/proofs/lib/lemmas/src/public.bend as Public

5 imports
import Base
import ../types/model.bend as T
import ./cache.bend as C
import ./entry_ops.bend as Entry
import ./time.bend as Time

Types

type Request source · line 11 · raw

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

Callback-free public dispatcher. Through src/host.bend the adapter starts one Request and answers every Waiting progress with exactly one provider event: a validated sample resumes; a failed provider adopts abandon(pending). No user code runs here and no event list is ever produced for the host.

type Answer source · line 31 · raw

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

type Shape source · line 42 · raw

@-K:Data -> Data

type Pending source · line 50 · raw

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

type Progress source · line 56 · raw

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

Definitions

def zero_time source · line 60 · raw

0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64

def item_value source · line 63 · raw

@-K:Data -> @-V:Data -> @zero:V -> @item:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @present:Bool -> V

def item_key source · line 68 · raw

@-K:Data -> @-V:Data -> @zero:K -> @item:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @present:Bool -> K

def shaped source · line 73 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+item:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> @+present:Bool -> @shape:Shape<K> -> Answer<K, V>

def finish_step source · line 82 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @step:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V> -> @shape:Shape<K> -> Progress<K, V>

def prepare_room source · line 87 · raw

@-K:Data -> @-V:Data -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @full:Bool -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V>

Add: room is made (and the eviction counted) before the clock is requested.

def prepare_found source · line 92 · raw

@-K:Data -> @-V:Data -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @found:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V>

def prepare_add source · line 97 · raw

@-K:Data -> @-V:Data -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V>

def retained_key source · line 101 · raw

@-K:Data -> @-V:Data -> @key:K -> @found:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> K

A present key keeps its stored original key; an absent key is inserted as given.

def finish_add source · line 108 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @key:K -> @value:V -> @deadline:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @evicted:Bool -> Progress<K, V>

After the optional clock sample the prepared cache has room (or holds the key), so the insertion is one store; its flag is the pre-clock eviction result.

def add_lifetime source · line 111 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @key:K -> @value:V -> @ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @evicted:Bool -> @immortal:Bool -> Progress<K, V>

def add_prepared source · line 116 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @step:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V> -> @code:String -> @key:K -> @value:V -> @+ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Progress<K, V>

def add_found source · line 120 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @key:K -> @value:V -> @ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @+found:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> Progress<K, V>

def add_with_lifetime source · line 123 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+code:String -> @key:K -> @value:V -> @ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Progress<K, V>

def add source · line 126 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @key:K -> @value:V -> Progress<K, V>

def finish_read source · line 131 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @now:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @tracked:Bool -> @shape:Shape<K> -> Progress<K, V>

Reads request the clock only for a present entry with a finite deadline.

def read_lifetime source · line 134 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @tracked:Bool -> @shape:Shape<K> -> @immortal:Bool -> Progress<K, V>

def read_found source · line 139 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @tracked:Bool -> @shape:Shape<K> -> @found:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> Progress<K, V>

def read source · line 144 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+code:String -> @tracked:Bool -> @shape:Shape<K> -> Progress<K, V>

def oldest_found source · line 149 · raw

@-K:Data -> @-V:Data -> @zero_key:K -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+code:String -> @found:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> Progress<K, V>

GetOldest captures the stored original key before the untracked read; an expired oldest entry is removed while its key is still returned.

def oldest_order source · line 154 · raw

@-K:Data -> @-V:Data -> @zero_key:K -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @order:List<&2, String> -> Progress<K, V>

def get_oldest source · line 159 · raw

@-K:Data -> @-V:Data -> @zero_key:K -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> Progress<K, V>

def finish_refresh source · line 165 · raw

@-K:Data -> @-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @now:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Progress<K, V>

Refresh counts the hit and moves recency before its clock request. A zero lifetime (only then is the immortal branch taken) stores the zero sentinel.

def refresh_lifetime source · line 169 · raw

@-K:Data -> @-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @code:String -> @+entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @immortal:Bool -> Progress<K, V>

def refresh_prepared source · line 174 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @code:String -> @+ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @step:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V> -> Progress<K, V>

def refresh source · line 179 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+code:String -> @ns:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Progress<K, V>

def complete source · line 184 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @shape:Shape<K> -> Progress<K, V>

Keys, Values and PurgeExpired process only the oldest expired prefix. Each inspected finite oldest entry costs exactly one clock request.

def expire_lifetime source · line 187 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @remaining:Nat -> @shape:Shape<K> -> @immortal:Bool -> Progress<K, V>

def expire_entry source · line 192 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @remaining:Nat -> @shape:Shape<K> -> @entry:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> Progress<K, V>

def expire_next source · line 197 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @remaining:Nat -> @shape:Shape<K> -> Progress<K, V>

def expire_decide source · line 202 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @remaining:Nat -> @shape:Shape<K> -> @expired:Bool -> Progress<K, V>

def expire_sampled source · line 207 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @remaining:Nat -> @shape:Shape<K> -> @now:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> @entry:Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>> -> Progress<K, V>

def expire source · line 212 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @shape:Shape<K> -> Progress<K, V>

def purge source · line 216 · raw

@-K:Data -> @-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V>

With no removal observer, full Purge is one native Map.new replacement.

def removed_oldest source · line 220 · raw

@-K:Data -> @-V:Data -> @zero_key:K -> @zero_value:V -> @step:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Step<K, V> -> Progress<K, V>

def start source · line 224 · raw

@-K:Data -> @-V:Data -> @encode:(@_:K -> String) -> @zero_key:K -> @zero_value:V -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @request:Request<K, V> -> Progress<K, V>

def resume source · line 246 · raw

@-K:Data -> @-V:Data -> @zero_value:V -> @pending:Pending<K, V> -> @now:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Int64 -> Progress<K, V>

Exactly one accepted sample answers one Waiting progress.

def abandon source · line 254 · raw

@-K:Data -> @-V:Data -> @pending:Pending<K, V> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V>

State retained by the host when the awaited clock request fails.