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

Theorem eucalg 16791
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 13030 . . . . . . . 8 ℕ0 = (ℤ≥‘0)
2 eucalg.2 . . . . . . . 8 𝑅 = seq0((𝐸 ∘ 1st ), (ℕ0 × {𝐴}))
3 0zd 12732 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 0 ∈ ℤ)
4 eucalg.3 . . . . . . . . 9 𝐴 = ⟨𝑀, 𝑁⟩
5 opelxpi 5692 . . . . . . . . 9 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ⟨𝑀, 𝑁⟩ ∈ (ℕ0 × ℕ0))
64, 5eqeltrid 2868 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝐴 ∈ (ℕ0 × ℕ0))
7 eucalgval.1 . . . . . . . . . 10 𝐸 = (𝑥 ∈ ℕ0, 𝑦 ∈ ℕ0 ↦ if(𝑦 = 0, ⟨𝑥, 𝑦⟩, ⟨𝑦, (𝑥 mod 𝑦)⟩))
87eucalgf 16787 . . . . . . . . 9 𝐸:(ℕ0 × ℕ0)⟶(ℕ0 × ℕ0)
98a1i 11 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝐸:(ℕ0 × ℕ0)⟶(ℕ0 × ℕ0))
101, 2, 3, 6, 9algrf 16777 . . . . . . 7 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → 𝑅:ℕ0⟶(ℕ0 × ℕ0))
11 ffvelcdm 7105 . . . . . . 7 ((𝑅:ℕ0⟶(ℕ0 × ℕ0) ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) ∈ (ℕ0 × ℕ0))
1210, 11sylancom 600 . . . . . 6 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) ∈ (ℕ0 × ℕ0))
13 1st2nd2 8064 . . . . . 6 ((𝑅‘𝑁) ∈ (ℕ0 × ℕ0) → (𝑅‘𝑁) = ⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1412, 13syl 18 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘𝑁) = ⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1514fveq2d 6912 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ( gcd ‘⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩))
16 df-ov 7446 . . . 4 ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))) = ( gcd ‘⟨(1st ‘(𝑅‘𝑁)), (2nd ‘(𝑅‘𝑁))⟩)
1715, 16eqtr4di 2816 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))))
184fveq2i 6911 . . . . . . . 8 (2nd ‘𝐴) = (2nd ‘⟨𝑀, 𝑁⟩)
19 op2ndg 8038 . . . . . . . 8 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘⟨𝑀, 𝑁⟩) = 𝑁)
2018, 19eqtrid 2810 . . . . . . 7 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘𝐴) = 𝑁)
2120fveq2d 6912 . . . . . 6 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘(2nd ‘𝐴)) = (𝑅‘𝑁))
2221fveq2d 6912 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘(𝑅‘(2nd ‘𝐴))) = (2nd ‘(𝑅‘𝑁)))
23 xp2nd 8058 . . . . . . . . 9 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ ℕ0)
2423nn0zd 12745 . . . . . . . 8 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ ℤ)
25 uzid 13007 . . . . . . . 8 ((2nd ‘𝐴) ∈ ℤ → (2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)))
2624, 25syl 18 . . . . . . 7 (𝐴 ∈ (ℕ0 × ℕ0) → (2nd ‘𝐴) ∈ (ℤ≥‘(2nd ‘𝐴)))
27 eqid 2763 . . . . . . . 8 (2nd ‘𝐴) = (2nd ‘𝐴)
287, 2, 27eucalgcvga 16790 . . . . . . 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 2800 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (2nd ‘(𝑅‘𝑁)) = 0)
3231oveq2d 7459 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ((1st ‘(𝑅‘𝑁)) gcd (2nd ‘(𝑅‘𝑁))) = ((1st ‘(𝑅‘𝑁)) gcd 0))
33 xp1st 8057 . . . 4 ((𝑅‘𝑁) ∈ (ℕ0 × ℕ0) → (1st ‘(𝑅‘𝑁)) ∈ ℕ0)
34 nn0gcdid0 16722 . . . 4 ((1st ‘(𝑅‘𝑁)) ∈ ℕ0 → ((1st ‘(𝑅‘𝑁)) gcd 0) = (1st ‘(𝑅‘𝑁)))
3512, 33, 343syl 19 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ((1st ‘(𝑅‘𝑁)) gcd 0) = (1st ‘(𝑅‘𝑁)))
3617, 32, 353eqtrrd 2803 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (1st ‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘𝑁)))
377eucalginv 16788 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → ( gcd ‘(𝐸‘𝑧)) = ( gcd ‘𝑧))
388ffvelcdmi 7107 . . . . . . 7 (𝑧 ∈ (ℕ0 × ℕ0) → (𝐸‘𝑧) ∈ (ℕ0 × ℕ0))
3938fvresd 6928 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝐸‘𝑧)) = ( gcd ‘(𝐸‘𝑧)))
40 fvres 6927 . . . . . 6 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘𝑧) = ( gcd ‘𝑧))
4137, 39, 403eqtr4d 2808 . . . . 5 (𝑧 ∈ (ℕ0 × ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝐸‘𝑧)) = (( gcd ↾ (ℕ0 × ℕ0))‘𝑧))
422, 8, 41alginv 16779 . . . 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 6928 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘𝑁)))
45 0nn0 12648 . . . . 5 0 ∈ ℕ0
46 ffvelcdm 7105 . . . . 5 ((𝑅:ℕ0⟶(ℕ0 × ℕ0) ∧ 0 ∈ ℕ0) → (𝑅‘0) ∈ (ℕ0 × ℕ0))
4710, 45, 46sylancl 598 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) ∈ (ℕ0 × ℕ0))
4847fvresd 6928 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (( gcd ↾ (ℕ0 × ℕ0))‘(𝑅‘0)) = ( gcd ‘(𝑅‘0)))
4943, 44, 483eqtr3d 2806 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘𝑁)) = ( gcd ‘(𝑅‘0)))
501, 2, 3, 6algr0 16776 . . . . 5 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) = 𝐴)
5150, 4eqtrdi 2814 . . . 4 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (𝑅‘0) = ⟨𝑀, 𝑁⟩)
5251fveq2d 6912 . . 3 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘0)) = ( gcd ‘⟨𝑀, 𝑁⟩))
53 df-ov 7446 . . 3 (𝑀 gcd 𝑁) = ( gcd ‘⟨𝑀, 𝑁⟩)
5452, 53eqtr4di 2816 . 2 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → ( gcd ‘(𝑅‘0)) = (𝑀 gcd 𝑁))
5536, 49, 543eqtrd 2802 1 ((𝑀 ∈ ℕ0 ∧ 𝑁 ∈ ℕ0) → (1st ‘(𝑅‘𝑁)) = (𝑀 gcd 𝑁))
Colors of variables:    wff setvar class
This proof depends on syntax axioms:   → wi 4   ∧ wa 401   = wceq 1570   ∈ wcel 2147  ifcif 4485  {csn 4588  ⟨cop 4838   × cxp 5653   ↾ cres 5657   ∘ ccom 5659  ⟶wf 6554  ‘cfv 6558  (class class class)co 7443   ∈ cmpo 7445  1st c1st 8023  2nd c2nd 8024  0cc0 11227  ℕ0cn0 12633  ℤcz 12720  ℤ≥cuz 12992   mod cmo 14036  seqcseq 14171   gcd cgcd 16693
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 1945  ax-6 2002  ax-7 2043  ax-8 2149  ax-9 2157  ax-10 2180  ax-11 2197  ax-12 2216  ax-ext 2735  ax-sep 5252  ax-nul 5263  ax-pow 5331  ax-pr 5395  ax-un 7775  ax-cnex 11283  ax-resscn 11284  ax-1cn 11285  ax-icn 11286  ax-addcl 11287  ax-addrcl 11288  ax-mulcl 11289  ax-mulrcl 11290  ax-mulcom 11291  ax-addass 11292  ax-mulass 11293  ax-distr 11294  ax-i2m1 11295  ax-1ne0 11296  ax-1rid 11297  ax-rnegex 11298  ax-rrecex 11299  ax-cnre 11300  ax-pre-lttri 11301  ax-pre-lttrn 11302  ax-pre-ltadd 11303  ax-pre-mulgt0 11304  ax-pre-sup 11305
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 2102  df-mo 2567  df-eu 2597  df-clab 2742  df-cleq 2755  df-clel 2839  df-nfc 2913  df-ne 2960  df-nel 3066  df-ral 3081  df-rex 3091  df-rmo 3369  df-reu 3370  df-rab 3417  df-v 3456  df-sbc 3743  df-csb 3852  df-ss 3901  df-pss 4017  df-dif 4050  df-in 4094  df-un 4154  df-nul 4282  df-if 4486  df-pw 4562  df-sn 4589  df-pr 4591  df-op 4839  df-uni 4871  df-iun 4956  df-br 5107  df-opab 5171  df-mpt 5190  df-tr 5216  df-id 5550  df-eprel 5555  df-po 5563  df-so 5564  df-fr 5608  df-we 5610  df-xp 5661  df-rel 5662  df-cnv 5663  df-co 5664  df-dm 5665  df-rn 5666  df-res 5667  df-ima 5668  df-pred 6322  df-ord 6383  df-on 6384  df-lim 6385  df-suc 6386  df-iota 6512  df-fun 6560  df-fn 6561  df-f 6562  df-f1 6563  df-fo 6564  df-f1o 6565  df-fv 6566  df-riota 7400  df-ov 7446  df-oprab 7447  df-mpo 7448  df-om 7902  df-1st 8025  df-2nd 8026  df-frecs 8327  df-wrecs 8358  df-recs 8407  df-rdg 8446  df-er 8745  df-en 9002  df-dom 9003  df-sdom 9004  df-sup 9461  df-inf 9462  df-pnf 11372  df-mnf 11373  df-xr 11374  df-ltxr 11375  df-le 11376  df-sub 11570  df-neg 11571  df-div 12001  df-nn 12363  df-2 12432  df-3 12433  df-n0 12634  df-z 12721  df-uz 12993  df-rp 13148  df-fz 13667  df-fl 13959  df-mod 14037  df-seq 14172  df-exp 14232  df-cj 15295  df-re 15296  df-im 15297  df-sqrt 15431  df-abs 15432  df-dvds 16452  df-gcd 16694
This theorem is used by: (None)
  Copyright terms: Public domain W3C validator