def gcd_fuel

bend-collections-laws-math@1.0.0.0 · proofs/math/typed/natfuel.bend:57

import bend-collections-laws-math@1.0.0.0/proofs/math/typed/natfuel.bend as Natfuel
import Base
import bend-collections-laws-math@1.0.0.0/src/math/natural.bend as M

57def gcd_fuel(+f1: Nat, +f2: Nat, +a: Nat, +b: Nat, +h1: {ends(f1, a, b) == True{} : Bool}, +h2: {ends(f2, a, b) == True{} : Bool}) -> {M.gcd_go(f1, a, b) == M.gcd_go(f2, a, b) : Nat}:
58  match f1 f2 b:
59    case 0n _ 0n:
60      Equal.sym(Nat, M.gcd_go(f2, a, 0n), a, gz(f2, a))
61    case 0n _ 1n+bp:
62      Empty.absurd({M.gcd_go(0n, a, 1n+bp) == M.gcd_go(f2, a, 1n+bp) : Nat}, true_ne_false(Equal.sym(Bool, False{}, True{}, h1)))
63    case 1n+g1 _ 0n:
64      Equal.sym(Nat, M.gcd_go(f2, a, 0n), a, gz(f2, a))
65    case 1n+g1 0n 1n+bp:
66      Empty.absurd({M.gcd_go(1n+g1, a, 1n+bp) == M.gcd_go(0n, a, 1n+bp) : Nat}, true_ne_false(Equal.sym(Bool, False{}, True{}, h2)))
67    case 1n+ +g1 1n+ +g2 1n+ +bp:
68      gcd_fuel(g1, g2, 1n+bp, Nat.mod(a, 1n+bp), h1, h2)

Uses (9)

Used by (1)