proofs/lib/u32seq.bend checks
raw source on the hub · import bend-collections-laws-containers@1.0.0.0/proofs/lib/u32seq.bend as U32seq
8 imports
import Base import ./logic.bend as L import ./nat.bend as N import ./list.bend as LL import ./u32.bend as U import ./u32alg.bend as UA import ../../spec/lib/common.bend as SC import ../../spec/lib/u32seq.bend as Q
Definitions
def addat source · line 12 · raw
@xs:List<&2, U32> -> @+i:Nat -> @+v:U32 -> List<&2, U32>
def sum_append source · line 21 · raw
@+xs:List<&2, U32> -> @+ys:List<&2, U32> -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.append(U32, xs, ys)) == U32.add(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(xs), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(ys)) : U32}
def sum_zeros source · line 29 · raw
@+n:Nat -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.zeros(n)) == 0 : U32}
def length_addat source · line 37 · raw
@+xs:List<&2, U32> -> @+i:Nat -> @+v:U32 -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(U32, addat(xs, i, v)) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(U32, xs) : Nat}
def sum_addat source · line 47 · raw
@+xs:List<&2, U32> -> @+i:Nat -> @+v:U32 -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(U32, xs)) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(addat(xs, i, v)) == U32.add(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(xs), v) : U32}Adding v at an index below the length adds v to the sum.
def addat_left source · line 60 · raw
@+xs:List<&2, U32> -> @+ys:List<&2, U32> -> @+i:Nat -> @+v:U32 -> @+h:{Nat.is_lt(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(U32, xs)) == True{} : Bool} -> {addat(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.append(U32, xs, ys), i, v) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.append(U32, addat(xs, i, v), ys) : List<&2, U32>}
def addat_right source · line 69 · raw
@+xs:List<&2, U32> -> @+ys:List<&2, U32> -> @+i:Nat -> @+v:U32 -> @+h:{Nat.is_le(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(U32, xs), i) == True{} : Bool} -> {addat(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.append(U32, xs, ys), i, v) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.append(U32, xs, addat(ys, Nat.sub(i, 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.length(U32, xs)), v)) : List<&2, U32>}
def take_addat source · line 80 · raw
@+xs:List<&2, U32> -> @+i:Nat -> @+v:U32 -> @+n:Nat -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.take(U32, addat(xs, i, v), n) == addat(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.take(U32, xs, n), i, v) : List<&2, U32>}
def update_addat source · line 94 · raw
@+xs:List<&2, U32> -> @+i:Nat -> @+y:U32 -> @+v:U32 -> @+e:{0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.nth(U32, xs, i) == Some{y} : Maybe<&2, U32>} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.update(U32, xs, i, U32.add(y, v)) == addat(xs, i, v) : List<&2, U32>}The spec's "update index i with (old + v)" is addat.
def sum_slice source · line 105 · raw
@+xs:List<&2, U32> -> @+l:Nat -> @+r:Nat -> @+h:{Nat.is_le(l, r) == True{} : Bool} -> {U32.sub(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.take(U32, xs, r)), 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.take(U32, xs, l))) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.sum(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.slice(xs, l, r)) : U32}sum of the slice [l, r) is the difference of prefix sums
def sub_le_mono source · line 111 · raw
@+l:Nat -> @+r:Nat -> @+n:Nat -> @+h:{Nat.is_le(r, n) == True{} : Bool} -> {Nat.is_le(Nat.sub(r, l), Nat.sub(n, l)) == True{} : Bool}slicing the first n values equals slicing the whole list when r <= n
def slice_take source · line 124 · raw
@+xs:List<&2, U32> -> @+n:Nat -> @+l:Nat -> @+r:Nat -> @+h:{Nat.is_le(r, n) == True{} : Bool} -> @+hl:{Nat.is_le(l, r) == True{} : Bool} -> {0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.slice(0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/common.take(U32, xs, n), l, r) == 0x5c489f5d9646d7cc9aa3dd8137e9dc07/spec/lib/u32seq.slice(xs, l, r) : List<&2, U32>}