def nat.sub_add
bend-osdev-algo@0.1.0.0 · PROOF.bend:123
import bend-osdev-algo@0.1.0.0/PROOF.bend as PROOF
import Base
123
124def nat.sub_add(n: Nat, k: Nat, e: {Nat.is_le(k, n) == True{} : Bool}) -> {Nat.add(Nat.sub(n, k), k) == n : Nat}:
125 match n k:
126 case 0n 0n:
127 {==}
128 case 0n 1n+kp:
129 Empty.absurd({Nat.add(0n, 1n+kp) == 0n : Nat}, absurd.ft(e))
130 case 1n+np 0n:
131 nat.add_zero(1n+np)
132 case 1n+ +np 1n+ +kp:
133 %Equal.sym(Nat, Nat.add(Nat.sub(np, kp), 1n+kp), 1n+Nat.add(Nat.sub(np, kp), kp), nat.add_succ(Nat.sub(np, kp), kp)) : {_ == 1n+np : Nat}
134 %nat.sub_add(np, kp, e) : {1n+Nat.add(Nat.sub(np, kp), kp) == 1n+_ : Nat}
135 {==}