def bit_split_val

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

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

372def bit_split_val(+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}) -> {u == v : Nat}:
373  match b c:
374    case False{} False{}:
375      double_inj(u, v, e)
376    case True{} True{}:
377      double_inj(u, v, succ_inj(Nat.double(u), Nat.double(v), e))
378    case False{} True{}:
379      Empty.absurd({u == v : Nat}, even_odd(u, v, e))
380    case True{} False{}:
381      Empty.absurd({u == v : Nat}, even_odd(v, u, Equal.sym(Nat, 1n+Nat.double(u), Nat.double(v), e)))

Uses (10)

Used by (3)