~/bend-docscommunity

proofs/lib/lemmas/proofs/map_insert_critbit.bend checks

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

11 imports
import Base
import ./string_compare.bend as N
import ./invariants.bend as Inv
import ./map_insert.bend as I
import ./map_difference.bend as D
import ./map_splice_critbit.bend as Splice
import ./map_insert_before.bend as Before
import ./map_insert_descent.bend as Descent
import ./map_seek_discriminator.bend as Discriminator
import ./map_critbit_parts.bend as Parts
import ./map_routing.bend as R

Laws

law order_lift provedsource · line 17 · raw

@+a:Nat -> @+b:Nat -> @order:Order(a, b) -> Order(1n+a, 1n+b)

law total_order provedsource · line 28 · raw

@a:Nat -> @b:Nat -> Order(a, b)

law equal_impossible provedsource · line 39 · raw

@-V:Data -> @+lo:Map<&2, V> -> @+hi:Map<&2, V> -> @+position:Nat -> @+key:String -> @+stored:String -> @distinct:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_difference.different(key, stored) -> @found:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_insert.seek_found(V, Map.seek(&2, V, MNode{position, lo, hi}, key)) == Some{stored} : Maybe<&2, String>} -> @equal:{Map.diff(key, stored) == position : Nat} -> @parts:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_critbit_parts.NodeFacts(V, position, lo, hi) -> Empty

law node_case provedsource · line 55 · raw

@-V:Data -> @+lo:Map<&2, V> -> @+hi:Map<&2, V> -> @+position:Nat -> @+key:String -> @+stored:String -> @+value:V -> @order:Order(Map.diff(key, stored), position) -> @distinct:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_difference.different(key, stored) -> @found:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_insert.seek_found(V, Map.seek(&2, V, MNode{position, lo, hi}, key)) == Some{stored} : Maybe<&2, String>} -> @valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, MNode{position, lo, hi}) == True{} : Bool} -> @lp:(@_:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, lo) == True{} : Bool} -> @_:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_insert.seek_found(V, Map.seek(&2, V, lo, key)) == Some{stored} : Maybe<&2, String>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, Map.ins(&2, V, lo, key, value, Map.diff(key, stored))) == True{} : Bool}) -> @hp:(@_:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, hi) == True{} : Bool} -> @_:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_insert.seek_found(V, Map.seek(&2, V, hi, key)) == Some{stored} : Maybe<&2, String>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, Map.ins(&2, V, hi, key, value, Map.diff(key, stored))) == True{} : Bool}) -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, Map.ins(&2, V, MNode{position, lo, hi}, key, value, Map.diff(key, stored))) == True{} : Bool}

law leaf provedsource · line 79 · raw

@-V:Data -> @+key:String -> @+stored:String -> @+actual:String -> @value:V -> @old:V -> @distinct:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_difference.different(key, stored) -> @found:{Some{actual} == Some{stored} : Maybe<&2, String>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, Map.ins(&2, V, MLeaf{actual, old}, key, value, Map.diff(key, stored))) == True{} : Bool}

law unequal_distinct provedsource · line 94 · raw

@+key:String -> @+stored:String -> @unequal:{String.eq(key, stored) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_difference.different(key, stored)

law insertion_at_seek provedsource · line 104 · raw

@-V:Data -> @tree:Map<&2, V> -> @+key:String -> @+stored:String -> @+value:V -> @+unequal:{String.eq(key, stored) == False{} : Bool} -> @found:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/map_insert.seek_found(V, Map.seek(&2, V, tree, key)) == Some{stored} : Maybe<&2, String>} -> @valid:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, tree) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/invariants.critbit(V, Map.ins(&2, V, tree, key, value, Map.diff(key, stored))) == True{} : Bool}

Full insertion critbit preservation at the leaf selected by actual seek. The public Map.set bridge must additionally handle replacement and empty seek.

Definitions

def Order source · line 14 · raw

@+a:Nat -> @+b:Nat -> Type

Constructive total ordering; neither an order oracle nor a public premise.