~/bend-docscommunity

proofs/containers/hash_table/modn.bend checks

raw source on the hub · import bend-collections-laws-containers@1.0.0.0/proofs/containers/hash_table/modn.bend as Modn

6 imports
import Base
import ../../lib/nat.bend as N
import ../../lib/lemmas/proofs/nat_algebra.bend as NA
import ../../lib/lemmas/proofs/word_value.bend as WV
import ../../lib/u32div.bend as UD
import ./cyc.bend as CY

Definitions

def pos source · line 13 · raw

@+n:Nat -> @+h:Nat -> @+t:Nat -> Nat

def dist source · line 16 · raw

@+n:Nat -> @+h:Nat -> @+j:Nat -> Nat

def dm_e2 source · line 19 · raw

@+bp:Nat -> @+v:Nat -> @g:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/word_value.go_equation(bp, v, bp, 0n, 0n) -> {v == Nat.add(Nat.mul(Nat.div(v, 1n+bp), 1n+bp), Nat.mod(v, 1n+bp)) : Nat}

def dm_l2 source · line 23 · raw

@+bp:Nat -> @+v:Nat -> @g:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/lib/lemmas/proofs/word_value.go_equation(bp, v, bp, 0n, 0n) -> {Nat.is_lt(Nat.mod(v, 1n+bp), 1n+bp) == True{} : Bool}

def dm_eq source · line 28 · raw

@+bp:Nat -> @+v:Nat -> {v == Nat.add(Nat.mul(Nat.div(v, 1n+bp), 1n+bp), Nat.mod(v, 1n+bp)) : Nat}

v == (v / n) n + v mod n, and v mod n < n

def dm_lt source · line 31 · raw

@+bp:Nat -> @+v:Nat -> {Nat.is_lt(Nat.mod(v, 1n+bp), 1n+bp) == True{} : Bool}

def absorb source · line 35 · raw

@+bp:Nat -> @+q:Nat -> @+r:Nat -> {Nat.mod(Nat.add(Nat.mul(q, 1n+bp), r), 1n+bp) == Nat.mod(r, 1n+bp) : Nat}

(q n + r) mod n == r mod n

def mod_inner source · line 47 · raw

@+bp:Nat -> @+x:Nat -> @+y:Nat -> {Nat.mod(Nat.add(x, Nat.mod(y, 1n+bp)), 1n+bp) == Nat.mod(Nat.add(x, y), 1n+bp) : Nat}

x + (y mod n) and x + y agree mod n

def pos_lt source · line 56 · raw

@+bp:Nat -> @+h:Nat -> @+t:Nat -> {Nat.is_lt(pos(1n+bp, h, t), 1n+bp) == True{} : Bool}

def dist_lt source · line 59 · raw

@+bp:Nat -> @+h:Nat -> @+j:Nat -> {Nat.is_lt(dist(1n+bp, h, j), 1n+bp) == True{} : Bool}

def pos_dist source · line 63 · raw

@+bp:Nat -> @+h:Nat -> @+j:Nat -> @+hh:{Nat.is_lt(h, 1n+bp) == True{} : Bool} -> @+hj:{Nat.is_lt(j, 1n+bp) == True{} : Bool} -> {pos(1n+bp, h, dist(1n+bp, h, j)) == j : Nat}

walking dist(h, j) steps from h reaches j

def dist_pos source · line 72 · raw

@+bp:Nat -> @+h:Nat -> @+t:Nat -> @+hh:{Nat.is_lt(h, 1n+bp) == True{} : Bool} -> @+ht:{Nat.is_lt(t, 1n+bp) == True{} : Bool} -> {dist(1n+bp, h, pos(1n+bp, h, t)) == t : Nat}

the distance from h to the bucket t < n steps after h is t

def pos_next source · line 82 · raw

@+bp:Nat -> @+h:Nat -> @+t:Nat -> {Nat.mod(1n+pos(1n+bp, h, t), 1n+bp) == pos(1n+bp, h, 1n+t) : Nat}

the bucket after pos(h, t) is pos(h, t + 1)