def bit_split_bit

bend-collections-laws-crypto@1.0.0.0 · proofs/lib/nat.bend:360

import bend-collections-laws-crypto@1.0.0.0/proofs/lib/nat.bend as Nat
import Base
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/spec/numeric.bend as S

360# bit + 2u == bit' + 2v determines both parts.
361def bit_split_bit(+b: Bool, +c: Bool, +u: Nat, +v: Nat, e: {Nat.add(S.bit_value(b), Nat.double(u)) == Nat.add(S.bit_value(c), Nat.double(v)) : Nat}) -> {b == c : Bool}:
362  match b c:
363    case False{} False{}:
364      {==}
365    case True{} True{}:
366      {==}
367    case False{} True{}:
368      Empty.absurd({False{} == True{} : Bool}, even_odd(u, v, e))
369    case True{} False{}:
370      Empty.absurd({True{} == False{} : Bool}, even_odd(v, u, Equal.sym(Nat, 1n+Nat.double(u), Nat.double(v), e)))

Uses (8)

Used by (2)