def bits.root_z

bend-osdev-caps@0.1.0.0 · PROOF.bend:587

import bend-osdev-caps@0.1.0.0/PROOF.bend as PROOF
import Base
import bend-osdev-caps@0.1.0.0/caps.bend as C

587def bits.root_z(+n: Nat, +i: Word(n), +b: Word(n)) -> {Word.or(n, Word.or(n, Word.and(n, i, C.CapBits.all(n)), Word.and(n, C.CapBits.all(n), b)), Word.zero(n)) == Word.or(n, i, b) : Word(n)}:
588  match n:
589    case 0n:
590      match i b:
591        case WNil{} WNil{}:
592          {==}
593    case 1n+n1:
594      match i b:
595        case WCon{True{}, +it} WCon{True{}, +bt}:
596          Equal.cong(Word(n1), Word(1n+n1), w => WCon{True{}, w}, Word.or(n1, Word.or(n1, Word.and(n1, it, C.CapBits.all(n1)), Word.and(n1, C.CapBits.all(n1), bt)), Word.zero(n1)), Word.or(n1, it, bt), bits.root_z(n1, it, bt))
597        case WCon{True{}, +it} WCon{False{}, +bt}:
598          Equal.cong(Word(n1), Word(1n+n1), w => WCon{True{}, w}, Word.or(n1, Word.or(n1, Word.and(n1, it, C.CapBits.all(n1)), Word.and(n1, C.CapBits.all(n1), bt)), Word.zero(n1)), Word.or(n1, it, bt), bits.root_z(n1, it, bt))
599        case WCon{False{}, +it} WCon{True{}, +bt}:
600          Equal.cong(Word(n1), Word(1n+n1), w => WCon{True{}, w}, Word.or(n1, Word.or(n1, Word.and(n1, it, C.CapBits.all(n1)), Word.and(n1, C.CapBits.all(n1), bt)), Word.zero(n1)), Word.or(n1, it, bt), bits.root_z(n1, it, bt))
601        case WCon{False{}, +it} WCon{False{}, +bt}:
602          Equal.cong(Word(n1), Word(1n+n1), w => WCon{False{}, w}, Word.or(n1, Word.or(n1, Word.and(n1, it, C.CapBits.all(n1)), Word.and(n1, C.CapBits.all(n1), bt)), Word.zero(n1)), Word.or(n1, it, bt), bits.root_z(n1, it, bt))

Uses (10)

Used by (1)