def gcd_both

bend-collections-laws-math@1.0.0.0 · proofs/math/natural/gcd.bend:75

import bend-collections-laws-math@1.0.0.0/proofs/math/natural/gcd.bend as Gcd
import Base
import bend-collections-laws-math@1.0.0.0/proofs/lib/nat.bend as N
import bend-collections-laws-math@1.0.0.0/proofs/lib/logic.bend as L
import bend-collections-laws-math@1.0.0.0/proofs/lib/lemmas/proofs/nat_algebra.bend as A
import bend-collections-laws-math@1.0.0.0/src/math/natural.bend as M
import bend-collections-laws-math@1.0.0.0/proofs/math/natural/arith.bend as R

75def gcd_both(fuel: Nat, +a: Nat, +b: Nat, +hb: {Nat.is_le(b, fuel) == True{} : Bool}) -> divides_both(a, b, M.gcd_go(fuel, a, b), ws(fuel, a, b)):
76  match fuel b:
77    case 0n 0n:
78      (Equal.sym(Nat, Nat.add(a, 0n), a, A.add_zero(a)), {==})
79    case 0n 1n+bp:
80      Empty.absurd(divides_both(a, 1n+bp, M.gcd_go(0n, a, 1n+bp), ws(0n, a, 1n+bp)), L.false_true(hb))
81    case 1n+f 0n:
82      (Equal.sym(Nat, Nat.add(a, 0n), a, A.add_zero(a)), {==})
83    case 1n+ +f 1n+ +bp:
84      step_both(bp, a, M.gcd_go(f, 1n+bp, Nat.mod(a, 1n+bp)), ws(f, 1n+bp, Nat.mod(a, 1n+bp)), gcd_both(f, 1n+bp, Nat.mod(a, 1n+bp), N.le_trans(Nat.mod(a, 1n+bp), bp, f, N.lt_succ_le(Nat.mod(a, 1n+bp), bp, R.dm_lt(bp, a)), hb)))

Uses (17)

Used by (4)