def w64.zero
bend-osdev-algo@0.1.0.0 · PROOF.bend:560
import bend-osdev-algo@0.1.0.0/PROOF.bend as PROOF
import Base
import bend-osdev-word64@0.1.0.0/word64.bend as W
import bend-osdev-word64@0.1.0.0/LAWS.bend as WL
import bend-osdev-algo@0.1.0.0/algo.bend as A
560def w64.zero(+a: W.W64, +e: {A.bits64.word(a) == Word.zero(64n) : Word(64n)}) -> {a == W.W64.zero() : W.W64}:
561 +l = A.bits32.word(W.W64.lo(a))
562 +h = A.bits32.word(W.W64.hi(a))
563 +c = W.W64.bits.cat(32n, 32n, l, h)
564 +el = Equal.trans(Word(32n), l, W.W64.bits.lo(32n, 32n, c), Word.zero(32n), Equal.sym(Word(32n), W.W64.bits.lo(32n, 32n, c), l, w64.lo_cat(32n, 32n, l, h)), Equal.cong(Word(64n), Word(32n), v => W.W64.bits.lo(32n, 32n, v), c, Word.zero(64n), e))
565 +eh = Equal.trans(Word(32n), h, W.W64.bits.hi(32n, 32n, c), Word.zero(32n), Equal.sym(Word(32n), W.W64.bits.hi(32n, 32n, c), h, w64.hi_cat(32n, 32n, l, h)), Equal.cong(Word(64n), Word(32n), v => W.W64.bits.hi(32n, 32n, v), c, Word.zero(64n), e))
566 %WL.parts_of(a) : {_ == W.W64.zero() : W.W64}
567 %Equal.sym(U32, W.W64.hi(a), 0, u32.zero(W.W64.hi(a), eh)) : {W.W64.from_parts(_, W.W64.lo(a)) == W.W64.zero() : W.W64}
568 %Equal.sym(U32, W.W64.lo(a), 0, u32.zero(W.W64.lo(a), el)) : {W.W64.from_parts(0, _) == W.W64.zero() : W.W64}
569 {==}