def dvd_lcm_left
bend-collections-laws-crypto@1.0.0.0 · proofs/math/natural/lcm.bend:145
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/src/math/natural.bend as M
import bend-collections-laws-crypto@1.0.0.0/proofs/math/natural/gcd.bend as G
145def dvd_lcm_left(+a: Nat, +b: Nat) -> {M.lcm(a, b) == Nat.mul(lcm_wl(a, b), a) : Nat}:
146 match a b:
147 case 0n b0:
148 {==}
149 case 1n+ ap 0n:
150 {==}
151 case 1n+ +ap 1n+ +bp:
152 +g = M.gcd(1n+ap, 1n+bp)
153 +la = G.wl(G.ws(1n+bp, 1n+ap, 1n+bp))
154 +lb = G.wr(G.ws(1n+bp, 1n+ap, 1n+bp))
155 %Equal.sym(Nat, M.lcm(1n+ap, 1n+bp), Nat.mul(la, 1n+bp), lcm_pos(ap, bp)) : {_ == Nat.mul(lb, 1n+ap) : Nat}
156 %Equal.sym(Nat, 1n+bp, Nat.mul(lb, g), G.gcd_dvd_right(1n+ap, 1n+bp)) : {Nat.mul(la, _) == Nat.mul(lb, 1n+ap) : Nat}
157 %Equal.sym(Nat, 1n+ap, Nat.mul(la, g), G.gcd_dvd_left(1n+ap, 1n+bp)) : {Nat.mul(la, Nat.mul(lb, g)) == Nat.mul(lb, _) : Nat}
158 swap_cw(la, lb, g)