def div_exact
bend-collections-laws-crypto@1.0.0.0 · proofs/math/natural/lcm.bend:112
import bend-collections-laws-crypto@1.0.0.0/proofs/math/natural/lcm.bend as Lcm
import Base
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/logic.bend as L
import bend-collections-laws-crypto@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend as A
import bend-collections-laws-crypto@1.0.0.0/proofs/math/natural/arith.bend as R
112def div_exact(+x: Nat, +l: Nat, +g: Nat, +hg: {Nat.is_lt(0n, g) == True{} : Bool}, +e: {x == Nat.mul(l, g) : Nat}) -> {Nat.div(x, g) == l : Nat}:
113 match g:
114 case 0n:
115 Empty.absurd({Nat.div(x, 0n) == l : Nat}, L.false_true(hg))
116 case 1n+ +gp:
117 %Equal.sym(Nat, x, Nat.add(Nat.mul(l, 1n+gp), 0n), Equal.trans(Nat, x, Nat.mul(l, 1n+gp), Nat.add(Nat.mul(l, 1n+gp), 0n), e, Equal.sym(Nat, Nat.add(Nat.mul(l, 1n+gp), 0n), Nat.mul(l, 1n+gp), A.add_zero(Nat.mul(l, 1n+gp))))) : {Nat.div(_, 1n+gp) == l : Nat}
118 R.div_of(l, gp, 0n, {==})