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  {==}

Uses (20)

Used by (1)