def ud.sub_add

bend-osdev-u32@0.1.0.0 · PROOF_div.bend:57

import bend-osdev-u32@0.1.0.0/PROOF_div.bend as PROOFDiv
import Base
import bend-osdev-u32@0.1.0.0/LAWS.bend as UL

57# r < bp + 1 gives (bp - r) + r == bp
58def ud.sub_add(+bp: Nat, +r: Nat, h: {Nat.is_lt(r, 1n+bp) == True{} : Bool}) -> {Nat.add(Nat.sub(bp, r), r) == bp : Nat}:
59  match bp r:
60    case 0n 0n:
61      {==}
62    case 0n 1n+q:
63      ud.ex_falso({Nat.add(Nat.sub(0n, 1n+q), 1n+q) == 0n : Nat}, ud.no_lt_one(q, h))
64    case 1n+b 0n:
65      UL.nat_add_zero(1n+b)
66    case 1n+b 1n+q:
67      Equal.trans(Nat, Nat.add(Nat.sub(b, q), 1n+q), 1n+Nat.add(Nat.sub(b, q), q), 1n+b, UL.nat_add_succ(Nat.sub(b, q), q), Equal.cong(Nat, Nat, z => 1n+z, Nat.add(Nat.sub(b, q), q), b, ud.sub_add(b, q, h)))

Uses (11)

Used by (1)