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

Theorem eucalg 16763
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 13004 . . . . . . . 8 ℕ0 = (ℤ≥‘0)
2 eucalg.2 . . . . . . . 8 𝑅 = seq0((𝐸 ∘ 1st ), (ℕ0 × {𝐴}))
3 0zd 12706 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 0 ∈ ℤ)
4 eucalg.3 . . . . . . . . 9 𝐴 = ⟨𝑀, 𝑁⟩
5 opelxpi 5687 . . . . . . . . 9 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ⟨𝑀, 𝑁⟩ ∈ (ℕ0 × ℕ0))
64, 5eqeltrid 2864 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝐴 ∈ (ℕ0 × ℕ0))
7 eucalgval.1 . . . . . . . . . 10 𝐸 = (𝑥 ∈ ℕ0, 𝑦 ∈ ℕ0 ↦ if(𝑦 = 0, ⟨𝑥, 𝑦⟩, ⟨𝑦, (𝑥 mod 𝑦)⟩))
87eucalgf 16759 . . . . . . . . 9 𝐸:(ℕ0 × ℕ0)⟶(ℕ0 × ℕ0)
98a1i 11 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝐸:(ℕ0 × ℕ0)⟶(ℕ0 × ℕ0))
101, 2, 3, 6, 9algrf 16749 . . . . . . 7 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝑅:ℕ0⟶(ℕ0 × ℕ0))
11 ffvelcdm 7081 . . . . . . 7 ((𝑅:ℕ0⟶(ℕ0 × ℕ0) ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) ∈ (ℕ0 × ℕ0))
1210, 11sylancom 600 . . . . . 6 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) ∈ (ℕ0 × ℕ0))
13 1st2nd2 8040 . . . . . 6 ((𝑅‘𝑁) ∈ (ℕ0 × ℕ0) → (𝑅‘𝑁) = ⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1412, 13syl 18 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) = ⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1514fveq2d 6889 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ( gcd ‘⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩))
16 df-ov 7423 . . . 4 ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))) = ( gcd ‘⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1715, 16eqtr4di 2813 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))))
184fveq2i 6888 . . . . . . . 8 (2nd ‘𝐴) = (2nd ‘⟨𝑀, 𝑁⟩)
19 op2ndg 8014 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘⟨𝑀, 𝑁⟩) = 𝑁)
2018, 19eqtrid 2807 . . . . . . 7 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘𝐴) = 𝑁)
2120fveq2d 6889 . . . . . 6 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘(2nd ‘𝐴)) = (𝑅‘𝑁))
2221fveq2d 6889 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘(𝑅‘(2nd ‘𝐴))) = (2nd ‘(𝑅‘𝑁)))
23 xp2nd 8034 . . . . . . . . 9 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ ℕ0)
2423nn0zd 12719 . . . . . . . 8 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ ℤ)
25 uzid 12981 . . . . . . . 8 ((2nd ‘𝐴) ∈ ℤ → (2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)))
2624, 25syl 18 . . . . . . 7 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)))
27 eqid 2760 . . . . . . . 8 (2nd ‘𝐴) = (2nd ‘𝐴)
287, 2, 27eucalgcvga 16762 . . . . . . 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 7436 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))) = ((1st ‘(𝑅‘𝑁)) gcd 0))
33 xp1st 8033 . . . 4 ((𝑅‘𝑁) ∈ (ℕ0 × ℕ0) → (1st ‘(𝑅‘𝑁)) ∈ ℕ0)
34 nn0gcdid0 16694 . . . 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 16760 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → ( gcd ‘(𝐸‘𝑧)) = ( gcd ‘𝑧))
388ffvelcdmi 7083 . . . . . . 7 (𝑧 ∈ (ℕ0 × ℕ0) → (𝐸‘𝑧) ∈ (ℕ0 × ℕ0))
3938fvresd 6905 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝐸‘𝑧)) = ( gcd ‘(𝐸‘𝑧)))
40 fvres 6904 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘𝑧) = ( gcd ‘𝑧))
4137, 39, 403eqtr4d 2805 . . . . 5 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝐸‘𝑧)) = (( gcd ↾ (ℕ0 × ℕ0))‘𝑧))
422, 8, 41alginv 16751 . . . 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 6905 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘𝑁)))
45 0nn0 12622 . . . . 5 0 ∈ ℕ0
46 ffvelcdm 7081 . . . . 5 ((𝑅:ℕ0⟶(ℕ0 × ℕ0) ∧ 0 ∈ ℕ0) → (𝑅‘0) ∈ (ℕ0 × ℕ0))
4710, 45, 46sylancl 598 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) ∈ (ℕ0 × ℕ0))
4847fvresd 6905 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘0)) = ( gcd ‘(𝑅‘0)))
4943, 44, 483eqtr3d 2803 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘0)))
501, 2, 3, 6algr0 16748 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) = 𝐴)
5150, 4eqtrdi 2811 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) = ⟨𝑀, 𝑁⟩)
5251fveq2d 6889 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘0)) = ( gcd ‘⟨𝑀, 𝑁⟩))
53 df-ov 7423 . . 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 1569   ∈ wcel 2144  ifcif 4481  {csn 4583  ⟨cop 4589   × cxp 5648   ↾ cres 5652   ∘ ccom 5654  ⟶wf 6534  ‘cfv 6538  (class class class)co 7420   ∈ cmpo 7422  1st c1st 7999  2nd c2nd 8000  0cc0 11201  ℕ0cn0 12607  ℤcz 12694  ℤ≥cuz 12966   mod cmo 14010  seqcseq 14145   gcd cgcd 16665
This proof depends on axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1827  ax-4 1841  ax-5 1942  ax-6 1999  ax-7 2040  ax-8 2146  ax-9 2154  ax-10 2177  ax-11 2193  ax-12 2212  ax-ext 2732  ax-sep 5248  ax-nul 5259  ax-pow 5326  ax-pr 5390  ax-un 7751  ax-cnex 11257  ax-resscn 11258  ax-1cn 11259  ax-icn 11260  ax-addcl 11261  ax-addrcl 11262  ax-mulcl 11263  ax-mulrcl 11264  ax-mulcom 11265  ax-addass 11266  ax-mulass 11267  ax-distr 11268  ax-i2m1 11269  ax-1ne0 11270  ax-1rid 11271  ax-rnegex 11272  ax-rrecex 11273  ax-cnre 11274  ax-pre-lttri 11275  ax-pre-lttrn 11276  ax-pre-ltadd 11277  ax-pre-mulgt0 11278  ax-pre-sup 11279
This proof depends on definitions:  df-bi 210  df-an 402  df-or 862  df-3or 1104  df-3an 1105  df-tru 1572  df-fal 1582  df-ex 1812  df-nf 1816  df-sb 2099  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-ss 3896  df-pss 4014  df-dif 4047  df-in 4091  df-un 4151  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 5545  df-eprel 5550  df-po 5558  df-so 5559  df-fr 5603  df-we 5605  df-xp 5656  df-rel 5657  df-cnv 5658  df-co 5659  df-dm 5660  df-rn 5661  df-res 5662  df-ima 5663  df-pred 6304  df-ord 6365  df-on 6366  df-lim 6367  df-suc 6368  df-iota 6494  df-fun 6540  df-fn 6541  df-f 6542  df-f1 6543  df-fo 6544  df-f1o 6545  df-fv 6546  df-riota 7377  df-ov 7423  df-oprab 7424  df-mpo 7425  df-om 7878  df-1st 8001  df-2nd 8002  df-frecs 8300  df-wrecs 8331  df-recs 8380  df-rdg 8419  df-er 8718  df-en 8975  df-dom 8976  df-sdom 8977  df-sup 9435  df-inf 9436  df-pnf 11346  df-mnf 11347  df-xr 11348  df-ltxr 11349  df-le 11350  df-sub 11544  df-neg 11545  df-div 11975  df-nn 12337  df-2 12406  df-3 12407  df-n0 12608  df-z 12695  df-uz 12967  df-rp 13122  df-fz 13641  df-fl 13933  df-mod 14011  df-seq 14146  df-exp 14206  df-cj 15267  df-re 15268  df-im 15269  df-sqrt 15403  df-abs 15404  df-dvds 16424  df-gcd 16666
This theorem is used by: (None)
  Copyright terms: Public domain W3C validator