MPE Home Metamath Proof Explorer < Previous   Next >
Nearby theorems
Mirrors  >  Home  >  MPE Home  >  Th. List  >  eucalg Structured version   Visualization version   GIF version

Theorem eucalg 16725
Description: Euclid's Algorithm computes the greatest common divisor of two nonnegative integers by repeatedly replacing the larger of them with its remainder modulo the smaller until the remainder is 0. Theorem 1.15 in [ApostolNT] p. 20.

Upon halting, the first member of the final state (𝑅‘𝑁) is equal to the gcd of the values comprising the input state ⟨𝑀, 𝑁⟩. This is Metamath 100 proof #69 (greatest common divisor algorithm). (Contributed by Paul Chapman, 31-Mar-2011.) (Proof shortened by Mario Carneiro, 29-May-2014.)

Hypotheses
Ref Expression
eucalgval.1 𝐸 = (𝑥 ∈ ℕ0, 𝑦 ∈ ℕ0 ↦ if(𝑦 = 0, ⟨𝑥, 𝑦⟩, ⟨𝑦, (𝑥 mod 𝑦)⟩))
eucalg.2 𝑅 = seq0((𝐸 ∘ 1st ), (ℕ0 × {𝐴}))
eucalg.3 𝐴 = ⟨𝑀, 𝑁⟩
Assertion
Ref Expression
eucalg ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (1st ‘(𝑅‘𝑁)) = (𝑀 gcd 𝑁))
Distinct variable groups:   𝑥,𝑦,𝑀   𝑥,𝑁,𝑦   𝑥,𝐴,𝑦   𝑥,𝑅
Allowed substitution hints:   𝑅(𝑦)   𝐸(𝑥, 𝑦)

Proof of Theorem eucalg
Dummy variable 𝑧 is distinct from all other variables.
StepHypRef Expression
1 nn0uz 12973 . . . . . . . 8 ℕ0 = (ℤ≥‘0)
2 eucalg.2 . . . . . . . 8 𝑅 = seq0((𝐸 ∘ 1st ), (ℕ0 × {𝐴}))
3 0zd 12675 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 0 ∈ ℤ)
4 eucalg.3 . . . . . . . . 9 𝐴 = ⟨𝑀, 𝑁⟩
5 opelxpi 5684 . . . . . . . . 9 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ⟨𝑀, 𝑁⟩ ∈ (ℕ0 × ℕ0))
64, 5eqeltrid 2864 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝐴 ∈ (ℕ0 × ℕ0))
7 eucalgval.1 . . . . . . . . . 10 𝐸 = (𝑥 ∈ ℕ0, 𝑦 ∈ ℕ0 ↦ if(𝑦 = 0, ⟨𝑥, 𝑦⟩, ⟨𝑦, (𝑥 mod 𝑦)⟩))
87eucalgf 16721 . . . . . . . . 9 𝐸:(ℕ0 × ℕ0)⟶(ℕ0 × ℕ0)
98a1i 11 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝐸:(ℕ0 × ℕ0)⟶(ℕ0 × ℕ0))
101, 2, 3, 6, 9algrf 16711 . . . . . . 7 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝑅:ℕ0⟶(ℕ0 × ℕ0))
11 ffvelcdm 7069 . . . . . . 7 ((𝑅:ℕ0⟶(ℕ0 × ℕ0) ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) ∈ (ℕ0 × ℕ0))
1210, 11sylancom 600 . . . . . 6 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) ∈ (ℕ0 × ℕ0))
13 1st2nd2 8023 . . . . . 6 ((𝑅‘𝑁) ∈ (ℕ0 × ℕ0) → (𝑅‘𝑁) = ⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1412, 13syl 18 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) = ⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1514fveq2d 6877 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ( gcd ‘⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩))
16 df-ov 7411 . . . 4 ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))) = ( gcd ‘⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1715, 16eqtr4di 2813 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))))
184fveq2i 6876 . . . . . . . 8 (2nd ‘𝐴) = (2nd ‘⟨𝑀, 𝑁⟩)
19 op2ndg 7997 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘⟨𝑀, 𝑁⟩) = 𝑁)
2018, 19eqtrid 2807 . . . . . . 7 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘𝐴) = 𝑁)
2120fveq2d 6877 . . . . . 6 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘(2nd ‘𝐴)) = (𝑅‘𝑁))
2221fveq2d 6877 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘(𝑅‘(2nd ‘𝐴))) = (2nd ‘(𝑅‘𝑁)))
23 xp2nd 8017 . . . . . . . . 9 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ ℕ0)
2423nn0zd 12688 . . . . . . . 8 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ ℤ)
25 uzid 12950 . . . . . . . 8 ((2nd ‘𝐴) ∈ ℤ → (2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)))
2624, 25syl 18 . . . . . . 7 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)))
27 eqid 2760 . . . . . . . 8 (2nd ‘𝐴) = (2nd ‘𝐴)
287, 2, 27eucalgcvga 16724 . . . . . . 7 (𝐴 ∈ (ℕ0 × ℕ0) → ((2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)) → (2nd ‘(𝑅‘(2nd ‘𝐴))) = 0))
2926, 28mpd 16 . . . . . 6 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘(𝑅‘(2nd ‘𝐴))) = 0)
306, 29syl 18 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘(𝑅‘(2nd ‘𝐴))) = 0)
3122, 30eqtr3d 2797 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘(𝑅‘𝑁)) = 0)
3231oveq2d 7424 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))) = ((1st ‘(𝑅‘𝑁)) gcd 0))
33 xp1st 8016 . . . 4 ((𝑅‘𝑁) ∈ (ℕ0 × ℕ0) → (1st ‘(𝑅‘𝑁)) ∈ ℕ0)
34 nn0gcdid0 16659 . . . 4 ((1st ‘(𝑅‘𝑁)) ∈ ℕ0 → ((1st ‘(𝑅‘𝑁)) gcd 0) = (1st ‘(𝑅‘𝑁)))
3512, 33, 343syl 19 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ((1st ‘(𝑅‘𝑁)) gcd 0) = (1st ‘(𝑅‘𝑁)))
3617, 32, 353eqtrrd 2800 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (1st ‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘𝑁)))
377eucalginv 16722 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → ( gcd ‘(𝐸‘𝑧)) = ( gcd ‘𝑧))
388ffvelcdmi 7071 . . . . . . 7 (𝑧 ∈ (ℕ0 × ℕ0) → (𝐸‘𝑧) ∈ (ℕ0 × ℕ0))
3938fvresd 6893 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝐸‘𝑧)) = ( gcd ‘(𝐸‘𝑧)))
40 fvres 6892 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘𝑧) = ( gcd ‘𝑧))
4137, 39, 403eqtr4d 2805 . . . . 5 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝐸‘𝑧)) = (( gcd ↾ (ℕ0 × ℕ0))‘𝑧))
422, 8, 41alginv 16713 . . . 4 ((𝐴 ∈ (ℕ0 × ℕ0) ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘𝑁)) = (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘0)))
436, 42sylancom 600 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘𝑁)) = (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘0)))
4412fvresd 6893 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘𝑁)))
45 0nn0 12591 . . . . 5 0 ∈ ℕ0
46 ffvelcdm 7069 . . . . 5 ((𝑅:ℕ0⟶(ℕ0 × ℕ0) ∧ 0 ∈ ℕ0) → (𝑅‘0) ∈ (ℕ0 × ℕ0))
4710, 45, 46sylancl 598 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) ∈ (ℕ0 × ℕ0))
4847fvresd 6893 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘0)) = ( gcd ‘(𝑅‘0)))
4943, 44, 483eqtr3d 2803 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘0)))
501, 2, 3, 6algr0 16710 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) = 𝐴)
5150, 4eqtrdi 2811 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) = ⟨𝑀, 𝑁⟩)
5251fveq2d 6877 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘0)) = ( gcd ‘⟨𝑀, 𝑁⟩))
53 df-ov 7411 . . 3 (𝑀 gcd 𝑁) = ( gcd ‘⟨𝑀, 𝑁⟩)
5452, 53eqtr4di 2813 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘0)) = (𝑀 gcd 𝑁))
5536, 49, 543eqtrd 2799 1 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (1st ‘(𝑅‘𝑁)) = (𝑀 gcd 𝑁))
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   → wi 4   ∧ wa 401   = wceq 1570   ∈ wcel 2145  ifcif 4481  {csn 4583  ⟨cop 4589   × cxp 5645   ↾ cres 5649   ∘ ccom 5651  ⟶wf 6523  ‘cfv 6527  (class class class)co 7408   ∈ cmpo 7410  1st c1st 7982  2nd c2nd 7983  0cc0 11172  ℕ0cn0 12576  ℤcz 12663  ℤ≥cuz 12935   mod cmo 13978  seqcseq 14113   gcd cgcd 16632
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1828  ax-4 1842  ax-5 1943  ax-6 2000  ax-7 2041  ax-8 2147  ax-9 2155  ax-10 2178  ax-11 2194  ax-12 2213  ax-ext 2732  ax-sep 5248  ax-nul 5259  ax-pow 5326  ax-pr 5390  ax-un 7734  ax-cnex 11228  ax-resscn 11229  ax-1cn 11230  ax-icn 11231  ax-addcl 11232  ax-addrcl 11233  ax-mulcl 11234  ax-mulrcl 11235  ax-mulcom 11236  ax-addass 11237  ax-mulass 11238  ax-distr 11239  ax-i2m1 11240  ax-1ne0 11241  ax-1rid 11242  ax-rnegex 11243  ax-rrecex 11244  ax-cnre 11245  ax-pre-lttri 11246  ax-pre-lttrn 11247  ax-pre-ltadd 11248  ax-pre-mulgt0 11249  ax-pre-sup 11250
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1573  df-fal 1583  df-ex 1813  df-nf 1817  df-sb 2100  df-mo 2564  df-eu 2594  df-clab 2739  df-cleq 2752  df-clel 2835  df-nfc 2909  df-ne 2956  df-nel 3062  df-ral 3077  df-rex 3087  df-rmo 3365  df-reu 3366  df-rab 3413  df-v 3452  df-sbc 3739  df-csb 3847  df-dif 3901  df-un 3903  df-in 3905  df-ss 3915  df-pss 3918  df-nul 4279  df-if 4482  df-pw 4558  df-sn 4584  df-pr 4586  df-op 4590  df-uni 4867  df-iun 4952  df-br 5103  df-opab 5167  df-mpt 5186  df-tr 5212  df-id 5542  df-eprel 5547  df-po 5555  df-so 5556  df-fr 5600  df-we 5602  df-xp 5653  df-rel 5654  df-cnv 5655  df-co 5656  df-dm 5657  df-rn 5658  df-res 5659  df-ima 5660  df-pred 6293  df-ord 6354  df-on 6355  df-lim 6356  df-suc 6357  df-iota 6483  df-fun 6529  df-fn 6530  df-f 6531  df-f1 6532  df-fo 6533  df-f1o 6534  df-fv 6535  df-riota 7365  df-ov 7411  df-oprab 7412  df-mpo 7413  df-om 7861  df-1st 7984  df-2nd 7985  df-frecs 8277  df-wrecs 8308  df-recs 8357  df-rdg 8396  df-er 8695  df-en 8952  df-dom 8953  df-sdom 8954  df-sup 9412  df-inf 9413  df-pnf 11317  df-mnf 11318  df-xr 11319  df-ltxr 11320  df-le 11321  df-sub 11515  df-neg 11516  df-div 11944  df-nn 12306  df-2 12375  df-3 12376  df-n0 12577  df-z 12664  df-uz 12936  df-rp 13091  df-fz 13610  df-fl 13901  df-mod 13979  df-seq 14114  df-exp 14174  df-cj 15234  df-re 15235  df-im 15236  df-sqrt 15370  df-abs 15371  df-dvds 16391  df-gcd 16633
This theorem is used by: (None)
  Copyright terms: Public domain W3C validator