def sig_v

bend-collections-laws-math@1.0.0.0 · proofs/math/typed/f64divq.bend:59

import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64divq.bend as F64divq
import Base
import bend-collections-laws-math@1.0.0.0/spec/lib/common.bend as C
import bend-collections-laws-math@1.0.0.0/spec/math/f64.bend as SF
import bend-collections-laws-math@1.0.0.0/spec/math/w64.bend as SW
import bend-collections-laws-math@1.0.0.0/src/math/f64.bend as F
import bend-collections-laws-math@1.0.0.0/src/math/w64.bend as X
import bend-collections-laws-math@1.0.0.0/src/math/u64.bend as WU
import bend-collections-laws-math@1.0.0.0/proofs/lib/word.bend as WD
import bend-collections-laws-math@1.0.0.0/proofs/math/typed/f64mulp.bend as MP

59def sig_v(+one: Nat, +h1: {one == 1n : Nat}, +d1: U32, +d2: U32, +r2w: WU.U64, +c: U32, +hc: {c == U32{WD.pw(32n, 30n)} : U32}) -> {SW.value(X.or_bit(X.add(WU.U64{0, c}, X.shr(WU.U64{d2, d1}, 2n)), Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))) == SW.jam(Nat.add(C.shift(62n, one), C.high(2n, SW.value(WU.U64{d2, d1}))), SF.b2n(Bool.or(Bool.not(Nat.is_eq(SW.value(r2w), 0n)), Bool.not(Nat.is_eq(C.low(2n, SW.value(WU.U64{d2, d1})), 0n))))) : Nat}:
60  +o1 = MP.orv(X.add(WU.U64{0, c}, X.shr(WU.U64{d2, d1}, 2n)), Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))
61  +o2 = Equal.cong(Nat, Nat, z => SW.jam(z, SF.b2n(Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))), SW.value(X.add(WU.U64{0, c}, X.shr(WU.U64{d2, d1}, 2n))), Nat.add(C.shift(62n, one), C.high(2n, SW.value(WU.U64{d2, d1}))), w1_v(one, h1, d1, d2, c, hc))
62  +o3 = Equal.cong(Bool, Nat, t => SW.jam(Nat.add(C.shift(62n, one), C.high(2n, SW.value(WU.U64{d2, d1}))), SF.b2n(t)), Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))), Bool.or(Bool.not(Nat.is_eq(SW.value(r2w), 0n)), Bool.not(Nat.is_eq(C.low(2n, SW.value(WU.U64{d2, d1})), 0n))), flag_v(d1, d2, r2w))
63  Equal.trans(Nat, SW.value(X.or_bit(X.add(WU.U64{0, c}, X.shr(WU.U64{d2, d1}, 2n)), Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))), SW.jam(SW.value(X.add(WU.U64{0, c}, X.shr(WU.U64{d2, d1}, 2n))), SF.b2n(Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))), SW.jam(Nat.add(C.shift(62n, one), C.high(2n, SW.value(WU.U64{d2, d1}))), SF.b2n(Bool.or(Bool.not(Nat.is_eq(SW.value(r2w), 0n)), Bool.not(Nat.is_eq(C.low(2n, SW.value(WU.U64{d2, d1})), 0n))))), o1, Equal.trans(Nat, SW.jam(SW.value(X.add(WU.U64{0, c}, X.shr(WU.U64{d2, d1}, 2n))), SF.b2n(Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))), SW.jam(Nat.add(C.shift(62n, one), C.high(2n, SW.value(WU.U64{d2, d1}))), SF.b2n(Bool.or(F.nz(r2w), Bool.not(U32.is_zero(U32.and(d2, 3)))))), SW.jam(Nat.add(C.shift(62n, one), C.high(2n, SW.value(WU.U64{d2, d1}))), SF.b2n(Bool.or(Bool.not(Nat.is_eq(SW.value(r2w), 0n)), Bool.not(Nat.is_eq(C.low(2n, SW.value(WU.U64{d2, d1})), 0n))))), o2, o3))

Uses (26)

Used by (1)