~/bend-docscommunity

proofs/lib/lemmas/proofs/abstraction_lookup.bend checks

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

16 imports
import Base
import ./representation_access.bend as Access
import ./cache_populated.bend as Pop
import ./cache_delete_membership.bend as D
import ./map_routing.bend as R
import ../src/cache.bend as C
import ../src/codec.bend as Codec
import ../types/model.bend as T
import ./refinement.bend as F
import ./abstraction_bindings.bend as B
import ./abstraction_identity.bend as Identity
import ./abstraction_recency.bend as Recency
import ./enumeration_suffix.bend as Enum
import ./cache_key_identity.bend as Key
import ./invariants.bend as Inv
import ./representation_parts.bend as Parts

Definitions

def string_binding source · line 31 · raw

@-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<String, V> -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<String, V> -> @valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.representation(String, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/codec.string_encode, V, c) == True{} : Bool} -> @member:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.contains(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<String, V>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.model_bindings(String, V, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/refinement.abstract(String, V, c)), entry) -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.lookup(String, V, c, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_identity.entry_code(String, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/codec.string_encode, V, entry)) == Some{entry} : Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<String, V>>}

def integer_binding source · line 34 · raw

@-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V> -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V> -> @valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.representation(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/codec.integer_encode, V, c) == True{} : Bool} -> @member:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.contains(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.model_bindings(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/refinement.abstract(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V, c)), entry) -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.lookup(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V, c, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_identity.entry_code(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/codec.integer_encode, V, entry)) == Some{entry} : Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Integer, V>>}

def word64_binding source · line 37 · raw

@-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<Word(64n), V> -> @entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<Word(64n), V> -> @valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.representation(Word(64n), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/cache_key_identity.word64_encode, V, c) == True{} : Bool} -> @member:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.contains(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<Word(64n), V>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.model_bindings(Word(64n), V, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/refinement.abstract(Word(64n), V, c)), entry) -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.lookup(Word(64n), V, c, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_identity.entry_code(Word(64n), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/cache_key_identity.word64_encode, V, entry)) == Some{entry} : Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<Word(64n), V>>}

Templates

template from_origin source · line 21 · raw

@-K:Data -> @-encode:(@_:K -> String) -> @-V:Data -> @c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/refinement.storage_critbit(K, V, c) == True{} : Bool} -> @identities:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_recency.cache_identities(K, encode, V, c) == True{} : Bool} -> @origin:Sigma<&2, &1, String, code => 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.origin_at(K, V, c, code, entry)> -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.lookup(K, V, c, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_identity.entry_code(K, encode, V, entry)) == Some{entry} : Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>>}

An abstract binding's exact key, value and deadline correspond to an actual lookup. This is independent of native enumeration order and needs no injective codec premise: encoded identity and native lookup uniqueness suffice here.

template binding source · line 28 · raw

@-K:Data -> @-encode:(@_:K -> String) -> @-V:Data -> @+c:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.Cache<K, V> -> @+entry:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V> -> @+valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.representation(K, encode, V, c) == True{} : Bool} -> @member:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.contains(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_bindings.model_bindings(K, V, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/refinement.abstract(K, V, c)), entry) -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/src/cache.lookup(K, V, c, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/abstraction_identity.entry_code(K, encode, V, entry)) == Some{entry} : Maybe<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/types/model.Entry<K, V>>}