def cancel_right
bendtorch-core@0.1.0.0 · src/shape/unique_proofs.bend:23
import bendtorch-core@0.1.0.0/src/shape/unique_proofs.bend as UniqueProofs
import Base
import bendtorch-core@0.1.0.0/src/shape/broadcast_proofs.bend as Broadcast
23def cancel_right(+a: Nat, +b: Nat, +c: Nat, equal: {Nat.add(a, c) == Nat.add(b, c) : Nat}) -> {a == b : Nat}:
24 match c:
25 case 0n:
26 Equal.trans(Nat, a, Nat.add(a, 0n), b, Equal.sym(Nat, Nat.add(a, 0n), a, Broadcast.add_zero(a)), Equal.trans(Nat, Nat.add(a, 0n), Nat.add(b, 0n), b, equal, Broadcast.add_zero(b)))
27 case 1n+p:
28 cancel_right(a, b, p, succ_injective(Nat.add(a, p), Nat.add(b, p), Equal.trans(Nat, 1n+Nat.add(a, p), Nat.add(a, 1n+p), 1n+Nat.add(b, p), Broadcast.add_succ(a, p), Equal.trans(Nat, Nat.add(a, 1n+p), Nat.add(b, 1n+p), 1n+Nat.add(b, p), equal, Equal.sym(Nat, 1n+Nat.add(b, p), Nat.add(b, 1n+p), Broadcast.add_succ(b, p))))))