~/bend-docscommunity

proofs/containers/bitset/proof.bend checks

raw source on the hub · import bend-collections-laws-containers@1.0.0.0/proofs/containers/bitset/proof.bend as Proof

17 imports
import Base
import ../../lib/array.bend as A
import ../../../spec/lib/common.bend as SC
import ../../../spec/containers/bitset.bend as S
import ../../../src/containers/bitset.bend as B
import ../../../src/containers/types/bitset.bend as E
import ./lists.bend as BL
import ./word.bend as W
import ./index.bend as IX
import ./depth.bend as DP
import ./arr.bend as AR
import ./state.bend as ST
import ./steps.bend as BS
import ./trace.bend as BT
import ../../lib/logic.bend as L
import ../../lib/nat.bend as N
import ../../lib/list.bend as LL

Definitions

def capacity source · line 40 · raw

@+n:Nat -> Type

def new_abs source · line 43 · raw

@+n:Nat -> @+h:{Nat.is_le(n, Nat.mul(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.pow2(0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.depth_for(n)), 32n)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.model(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/trace.initial(n)) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.new(n) : List<&2, Bool>}

def new_inv source · line 46 · raw

@+n:Nat -> @+h:{Nat.is_le(n, Nat.mul(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.pow2(0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.depth_for(n)), 32n)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.good(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/trace.initial(n)) == True{} : Bool}

def new_real source · line 49 · raw

@+n:Nat -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.new(n) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.real(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/trace.initial(n)) : 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.Bitset}

def from_bools source · line 52 · raw

@+ys:List<&2, Bool> -> @+hf:{Nat.is_le(0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bool_count(ys), Nat.mul(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.pow2(0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.depth_for(0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.bool_count(ys))), 32n)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/steps.FromOK(ys)

def step_ok source · line 55 · raw

@sh:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh -> @op:0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Op -> @+g:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.good(sh) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/steps.StepOK(sh, op)

def shadow_unique source · line 61 · raw

@+a:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh -> @+b:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh -> @+e:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.real(a) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.real(b) : 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.Bitset} -> {a == b : 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh}

A runtime bitset determines its shadow, so "the operation lands on the array of THIS shadow, whose model is the spec's" pins the abstract state: the laws above cannot be satisfied by naming a different shadow.

def trace_new source · line 65 · raw

@+n:Nat -> @+ops:List<&2, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Op> -> @+h:{Nat.is_le(n, Nat.mul(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.pow2(0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/bitset.depth_for(n)), 32n)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/trace.TraceOK(ops, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/trace.initial(n))

Arbitrary finite operation traces from the real constructor.

def Impl source · line 71 · raw

@sh:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh -> @op:0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Op -> @Post:(@_:Pair(List<&2, Bool>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Obs) -> Type) -> Type

---- the implementation ----

def impl_of source · line 74 · raw

@-sh:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh -> @-op:0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Op -> @-Post:(@_:Pair(List<&2, Bool>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Obs) -> Type) -> @k:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/steps.StepOK(sh, op) -> @pf:Post(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.step(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.model(sh), op)) -> Impl(sh, op, Post)

def impl source · line 79 · raw

@sh:0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.Sh -> @op:0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Op -> @+g:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.good(sh) == True{} : Bool} -> @-Post:(@_:Pair(List<&2, Bool>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Obs) -> Type) -> @pf:Post(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.step(0x5c489f5d9646d7cc9aa3dd8137e9dc07/proofs/containers/bitset/state.model(sh), op)) -> Impl(sh, op, Post)

def succ_ne_zero source · line 83 · raw

@+a:Nat -> @+e:{1n+a == 0n : Nat} -> Empty

---- arithmetic and Boolean facts ----

def zero_ne_succ source · line 86 · raw

@+a:Nat -> @+e:{0n == 1n+a : Nat} -> Empty

def succ_pick source · line 89 · raw

@+b:Bool -> @+x:Nat -> @+y:Nat -> {1n+Bool.pick(Nat, b, x, y) == Bool.pick(Nat, b, 1n+x, 1n+y) : Nat}

def zero_add source · line 96 · raw

@+n:Nat -> {Nat.add(0n, n) == n : Nat}

def succ_add source · line 99 · raw

@+a:Nat -> @+b:Nat -> {Nat.add(1n+a, b) == Nat.add(a, 1n+b) : Nat}

def inset_nth source · line 105 · raw

@+xs:List<&2, Bool> -> @+k:Nat -> @+b:Bool -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.nth(Bool, xs, k) == Some{b} : Maybe<&2, Bool>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, k) == b : Bool}

---- Contains ----

def gr_y source · line 109 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> @+y:Maybe<&2, Bool> -> @+hy:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.nth(Bool, xs, i) == y : Maybe<&2, Bool>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.ob(xs, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Get{i}) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.OBit{Done{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, i)}} : 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Obs}

def get_result source · line 117 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Contains.get_result(xs, i, h)

def get_frame source · line 120 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Contains.get_frame(xs, i)

def get_outside source · line 123 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_le(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), i) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Contains.get_outside(xs, i, h)

def count_result source · line 128 · raw

@+xs:List<&2, Bool> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Length.count_result(xs)

---- Length (the member count), Capacity (the universe) ----

def count_frame source · line 131 · raw

@+xs:List<&2, Bool> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Length.count_frame(xs)

def length_result source · line 134 · raw

@+xs:List<&2, Bool> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Capacity.length_result(xs)

def length_frame source · line 137 · raw

@+xs:List<&2, Bool> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Capacity.length_frame(xs)

def new_contains source · line 141 · raw

@+n:Nat -> @+k:Nat -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Empty_Set.new_contains(n, k)

---- Empty_Set: no member, Length 0, over the universe [0, n) ----

def new_count source · line 150 · raw

@+n:Nat -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Empty_Set.new_count(n)

def new_length source · line 157 · raw

@+n:Nat -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Empty_Set.new_length(n)

def assign_is source · line 161 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+v:Bool -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> @+y:Maybe<&2, Bool> -> @+hy:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.nth(Bool, xs, i) == y : Maybe<&2, Bool>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.assign(xs, i, v) == (0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, v), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.OUnit{Done{Unit{}}}) : Pair(List<&2, Bool>, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Obs)}

---- the update of one bit ----

def inset_update_same source · line 169 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+v:Bool -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, v), i) == v : Bool}

def inset_update_other source · line 172 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+j:Nat -> @+v:Bool -> @+ne:{Nat.is_eq(i, j) == False{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, v), j) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, j) : Bool}

def cu_set source · line 176 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.count(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, True{})) == Bool.pick(Nat, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, i), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.count(xs), 1n+0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.count(xs)) : Nat}

count after setting a bit: one more unless it was set

def cu_clear source · line 191 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.count(xs) == Bool.pick(Nat, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, i), 1n+0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.count(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, False{})), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.count(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, False{}))) : Nat}

count after clearing a bit: one less if it was set

def set_model source · line 206 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.nx(xs, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Set{i}) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, True{}) : List<&2, Bool>}

---- Include / Insert (set) ----

def set_contains source · line 210 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Include.set_contains(xs, i, h)

def set_others source · line 214 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> @+j:Nat -> @+ne:{Nat.is_eq(i, j) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Include.set_others(xs, i, h, j, ne)

def set_universe source · line 218 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Include.set_universe(xs, i, h)

def set_outside source · line 222 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_le(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), i) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Include.set_outside(xs, i, h)

def clear_model source · line 227 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.nx(xs, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/src/containers/types/bitset.Clear{i}) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(Bool, xs, i, False{}) : List<&2, Bool>}

---- Exclude / Delete (clear) ----

def clear_contains source · line 231 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Exclude.clear_contains(xs, i, h)

def clear_others source · line 235 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> @+j:Nat -> @+ne:{Nat.is_eq(i, j) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Exclude.clear_others(xs, i, h, j, ne)

def clear_universe source · line 239 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Exclude.clear_universe(xs, i, h)

def clear_outside source · line 243 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_le(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), i) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Exclude.clear_outside(xs, i, h)

def set_count source · line 248 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Include.set_count(xs, i, h)

Include: one more member unless it was one (Insert's Pre: it was not)

def clear_count source · line 253 · raw

@+xs:List<&2, Bool> -> @+i:Nat -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs)) == True{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Exclude.clear_count(xs, i, h)

Exclude: one member less if it was one (Delete's Pre: it was)

def union_pt source · line 258 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.zip_or(xs, ys), k) == Bool.or(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, k), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(ys, k)) : Bool}

---- Union (1180) ----

def union_contains source · line 271 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Union.union_contains(xs, ys, k, h)

def union_mismatch source · line 276 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+h:{Nat.is_eq(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys)) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Union.union_mismatch(xs, ys, h)

def intersection_pt source · line 281 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.zip_and(xs, ys), k) == Bool.and(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, k), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(ys, k)) : Bool}

---- Intersection (1279) ----

def intersection_contains source · line 294 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Intersection.intersection_contains(xs, ys, k, h)

def intersection_mismatch source · line 299 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+h:{Nat.is_eq(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys)) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Intersection.intersection_mismatch(xs, ys, h)

def difference_pt source · line 304 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.zip_diff(xs, ys), k) == Bool.and(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, k), Bool.not(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(ys, k))) : Bool}

---- Difference (1340) ----

def difference_contains source · line 317 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Difference.difference_contains(xs, ys, k, h)

def difference_mismatch source · line 322 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+h:{Nat.is_eq(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys)) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Difference.difference_mismatch(xs, ys, h)

def symmetric_difference_pt source · line 327 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.zip_xor(xs, ys), k) == Bool.xor(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, k), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(ys, k)) : Bool}

---- Symmetric_Difference (1404) ----

def symmetric_difference_contains source · line 340 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+k:Nat -> @+h:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys) : Nat} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Symmetric_Difference.symmetric_difference_contains(xs, ys, k, h)

def xor_mismatch source · line 345 · raw

@+xs:List<&2, Bool> -> @+ys:List<&2, Bool> -> @+h:{Nat.is_eq(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, xs), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(Bool, ys)) == False{} : Bool} -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Symmetric_Difference.xor_mismatch(xs, ys, h)

def to_list_result source · line 349 · raw

@+xs:List<&2, Bool> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Elements.to_list_result(xs)

def to_list_frame source · line 352 · raw

@+xs:List<&2, Bool> -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Elements.to_list_frame(xs)

def members_above source · line 356 · raw

@+xs:List<&2, Bool> -> @+off:Nat -> @+j:Nat -> @+h:{Nat.is_lt(j, off) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.nmem(j, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.members(xs, off)) == False{} : Bool}

no member below the offset

def rel_add source · line 366 · raw

@+off:Nat -> @+p:Nat -> {Nat.add(1n+off, p) == Nat.add(1n+p, off) : Nat}

def ne_add_succ source · line 369 · raw

@+off:Nat -> @+p:Nat -> {Nat.is_eq(off, Nat.add(1n+p, off)) == False{} : Bool}

def members_pt source · line 373 · raw

@+xs:List<&2, Bool> -> @+k:Nat -> @+off:Nat -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.nmem(Nat.add(k, off), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.members(xs, off)) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.inset(xs, k) : Bool}

the member at relative index k is there exactly when bit k is set

def elements_contains source · line 392 · raw

@+xs:List<&2, Bool> -> @+k:Nat -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Elements.elements_contains(xs, k)

def elements_length source · line 397 · raw

@+xs:List<&2, Bool> -> @+off:Nat -> 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/containers/bitset.Elements.elements_length(xs, off)

as many elements as members (SPARK: Length (Elements) = Length (Container))