def modulo
import stelliferous@0.0.2.0/proofs/u32_division.bend as U32Divisionimport Base
import stelliferous@0.0.2.0/proofs/binary_division.bend as BinaryDivision
161def modulo(+a: U32,+b: U32,+cap: U32,+cap_ok: {U32.is_le(cap,2147483648) == True{} : Bool},+divisor_bound: {Nat.is_le(Nat.double(U32.to_nat(b)),
162 U32.to_nat(cap)) == True{} : Bool},+positive: {Nat.is_lt(0n,U32.to_nat(b)) == True{} : Bool}) -> {U32.to_nat(U32.mod(a,
163 b)) == Nat.mod(U32.to_nat(a),U32.to_nat(b)) : Nat}:
164 U32{+w} = a
165 U32{+bw} = b
166 +b = {U32{bw} : U32}
167 %Equal.sym(Bool,U32.is_zero(b),False{},nonzero(b,positive)) : {U32.to_nat(U32.mod.if(w,b,_)) == Nat.mod(Word.to_nat(32n,w),U32.to_nat(b)) : Nat}
168 %Equal.sym(Nat,Nat.mod(Word.to_nat(32n,w),U32.to_nat(b)),BinaryDivision.remainder(BinaryDivision.go(32n,w,U32.to_nat(b))),natural_remainder(w,
169 U32.to_nat(b),positive)) : {U32.to_nat(U32.mod.fin(U32.divmod.go(32n,w,b))) == _ : Nat}
170 %go(32n,w,b,cap,cap_ok,divisor_bound,positive) : {U32.to_nat(U32.mod.fin(U32.divmod.go(32n,w,b))) == BinaryDivision.remainder(_) : Nat}
171 remainder_decode(U32.divmod.go(32n,w,b))
Uses (22)
Used by (0)
No other definition uses this definition.