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# n - k + k = n, for k <= n
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      {==}

Uses (10)

Used by (1)