proofs/containers/bitset/index.bend checks
raw source on the hub · import bend-collections-laws-containers@1.0.0.0/proofs/containers/bitset/index.bend as Index
4 imports
import Base import ../../lib/logic.bend as L import ../../lib/nat.bend as N import ../../../src/containers/bitset.bend as B
Definitions
def bump source · line 17 · raw
@p:Pair(Nat, Nat) -> Pair(Nat, Nat)
def acc source · line 22 · raw
@i:Nat -> @m:Nat -> @+d:Nat -> @+r:Nat -> {Nat.divmod.go(i, m, 1n+d, r) == bump(Nat.divmod.go(i, m, d, r)) : Pair(Nat, Nat)}The quotient accumulator of Nat.divmod.go is exactly an accumulator.
def peel_go source · line 32 · raw
@+i:Nat -> @+d:Nat -> {Nat.divmod.go(Nat.add(32n, i), 31n, d, 0n) == Nat.divmod.go(i, 31n, 1n+d, 0n) : Pair(Nat, Nat)}32 unfoldings: the dividend loses 32, the quotient gains one.
def peel source · line 35 · raw
@+i:Nat -> {Nat.divmod(Nat.add(32n, i), 32n) == bump(Nat.divmod(i, 32n)) : Pair(Nat, Nat)}
def fst_bump source · line 39 · raw
@p:Pair(Nat, Nat) -> {Pair.fst(Nat, Nat, bump(p)) == 1n+Pair.fst(Nat, Nat, p) : Nat}
def snd_bump source · line 43 · raw
@p:Pair(Nat, Nat) -> {Pair.snd(Nat, Nat, bump(p)) == Pair.snd(Nat, Nat, p) : Nat}
def wordix_peel source · line 47 · raw
@+i:Nat -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.wordix(Nat.add(32n, i)) == 1n+0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.wordix(i) : Nat}
def bitix_peel source · line 52 · raw
@+i:Nat -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bitix(Nat.add(32n, i)) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bitix(i) : Nat}
def small_go source · line 58 · raw
@i:Nat -> @m:Nat -> @+r:Nat -> @+h:{Nat.is_le(i, m) == True{} : Bool} -> {Nat.divmod.go(i, m, 0n, r) == (0n, Nat.add(r, i)) : Pair(Nat, Nat)}A dividend that never reaches the divisor never advances the quotient.
def small source · line 69 · raw
@+i:Nat -> @+h:{Nat.is_lt(i, 32n) == True{} : Bool} -> {Nat.divmod(i, 32n) == (0n, i) : Pair(Nat, Nat)}
def wordix_small source · line 72 · raw
@+i:Nat -> @+h:{Nat.is_lt(i, 32n) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.wordix(i) == 0n : Nat}
def bitix_small source · line 75 · raw
@+i:Nat -> @+h:{Nat.is_lt(i, 32n) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bitix(i) == i : Nat}
def add_sub32 source · line 79 · raw
@+i:Nat -> @+h:{Nat.is_lt(i, 32n) == False{} : Bool} -> {Nat.add(32n, Nat.sub(i, 32n)) == i : Nat}The form the word walk needs: for i >= 32, i = 32 + (i - 32).
def wordix_step source · line 82 · raw
@+i:Nat -> @+h:{Nat.is_lt(i, 32n) == False{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.wordix(i) == 1n+0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.wordix(Nat.sub(i, 32n)) : Nat}
def bitix_step source · line 86 · raw
@+i:Nat -> @+h:{Nat.is_lt(i, 32n) == False{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bitix(i) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bitix(Nat.sub(i, 32n)) : Nat}