fact: Definition gcd a b := let: (a1, b1) := if norm a < norm b then (b, a) else (a, b) in if a1 == 0 then b1 else let fix loop (n : nat) (aa bb : R) {struct n} := let rr := aa %% bb in if rr == 0 then bb else if n is n1.+1 then loop n1 bb rr else rr in loop (norm a1) a1 b1.
imports: HB(structures) Coq(ssreflect ssrfun ssrbool Arith.Wf_nat) mathcomp(eqtype ssrnat div seq path) mathcomp(ssralg fintype perm tuple choice generic_quotient) mathcomp(matrix bigop zmodp mxalgebra poly) stronglydiscrete