def restore

stelliferous@0.0.2.0 · proofs/word_subtraction.bend:94

import stelliferous@0.0.2.0/proofs/word_subtraction.bend as WordSubtraction
import Base
import stelliferous@0.0.2.0/proofs/natural_addition.bend as Addition
import stelliferous@0.0.2.0/proofs/word_encoding.bend as WordEncoding

94def restore(+a: Nat,+b: Nat,h: {Nat.is_le(b,a) == True{} : Bool}) -> {Nat.add(Nat.sub(a,b),b) == a : Nat}:
95  match a b:
96    case 0n 0n:
97      {==}
98    case 0n 1n+b:
99      Empty.absurd({Nat.add(Nat.sub(0n,1n+b),1n+b) == 0n : Nat},WordEncoding.false_true(h))
100    case 1n+ +a 0n:
101      Addition.zero_right(1n+a)
102    case 1n+ +a 1n+ +b:
103      %Equal.sym(Nat,Nat.add(Nat.sub(a,b),1n+b),1n+Nat.add(Nat.sub(a,b),b),Addition.successor_right(Nat.sub(a,b),b)) : {_ == 1n+a : Nat}
104      %restore(a,b,h) : {1n+Nat.add(Nat.sub(a,b),b) == 1n+_ : Nat}
105      {==}

Uses (10)

Used by (3)