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

Theorem eucalg 14300
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.

Upon halting, the 1st member of the final state  ( R `  N ) is equal to the gcd of the values comprising the input state  <. M ,  N >.. 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  |-  E  =  ( x  e.  NN0 ,  y  e.  NN0  |->  if ( y  =  0 , 
<. x ,  y >. ,  <. y ,  ( x  mod  y )
>. ) )
eucalg.2  |-  R  =  seq 0 ( ( E  o.  1st ) ,  ( NN0  X.  { A } ) )
eucalg.3  |-  A  = 
<. M ,  N >.
Assertion
Ref Expression
eucalg  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 1st `  ( R `  N )
)  =  ( M  gcd  N ) )
Distinct variable groups:    x, y, M    x, N, y    x, A, y    x, R
Allowed substitution hints:    R( y)    E( x, y)

Proof of Theorem eucalg
Dummy variable  z is distinct from all other variables.
StepHypRef Expression
1 nn0uz 11116 . . . . . . . 8  |-  NN0  =  ( ZZ>= `  0 )
2 eucalg.2 . . . . . . . 8  |-  R  =  seq 0 ( ( E  o.  1st ) ,  ( NN0  X.  { A } ) )
3 0zd 10872 . . . . . . . 8  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
0  e.  ZZ )
4 eucalg.3 . . . . . . . . 9  |-  A  = 
<. M ,  N >.
5 opelxpi 5020 . . . . . . . . 9  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  ->  <. M ,  N >.  e.  ( NN0  X.  NN0 ) )
64, 5syl5eqel 2546 . . . . . . . 8  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  ->  A  e.  ( NN0  X. 
NN0 ) )
7 eucalgval.1 . . . . . . . . . 10  |-  E  =  ( x  e.  NN0 ,  y  e.  NN0  |->  if ( y  =  0 , 
<. x ,  y >. ,  <. y ,  ( x  mod  y )
>. ) )
87eucalgf 14296 . . . . . . . . 9  |-  E :
( NN0  X.  NN0 ) --> ( NN0  X.  NN0 )
98a1i 11 . . . . . . . 8  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  ->  E : ( NN0  X.  NN0 ) --> ( NN0  X.  NN0 ) )
101, 2, 3, 6, 9algrf 14286 . . . . . . 7  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  ->  R : NN0 --> ( NN0 
X.  NN0 ) )
11 ffvelrn 6005 . . . . . . 7  |-  ( ( R : NN0 --> ( NN0 
X.  NN0 )  /\  N  e.  NN0 )  ->  ( R `  N )  e.  ( NN0  X.  NN0 ) )
1210, 11sylancom 665 . . . . . 6  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( R `  N
)  e.  ( NN0 
X.  NN0 ) )
13 1st2nd2 6810 . . . . . 6  |-  ( ( R `  N )  e.  ( NN0  X.  NN0 )  ->  ( R `
 N )  = 
<. ( 1st `  ( R `  N )
) ,  ( 2nd `  ( R `  N
) ) >. )
1412, 13syl 16 . . . . 5  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( R `  N
)  =  <. ( 1st `  ( R `  N ) ) ,  ( 2nd `  ( R `  N )
) >. )
1514fveq2d 5852 . . . 4  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
(  gcd  `  ( R `
 N ) )  =  (  gcd  `  <. ( 1st `  ( R `
 N ) ) ,  ( 2nd `  ( R `  N )
) >. ) )
16 df-ov 6273 . . . 4  |-  ( ( 1st `  ( R `
 N ) )  gcd  ( 2nd `  ( R `  N )
) )  =  (  gcd  `  <. ( 1st `  ( R `  N
) ) ,  ( 2nd `  ( R `
 N ) )
>. )
1715, 16syl6eqr 2513 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
(  gcd  `  ( R `
 N ) )  =  ( ( 1st `  ( R `  N
) )  gcd  ( 2nd `  ( R `  N ) ) ) )
184fveq2i 5851 . . . . . . . 8  |-  ( 2nd `  A )  =  ( 2nd `  <. M ,  N >. )
19 op2ndg 6786 . . . . . . . 8  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 2nd `  <. M ,  N >. )  =  N )
2018, 19syl5eq 2507 . . . . . . 7  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 2nd `  A
)  =  N )
2120fveq2d 5852 . . . . . 6  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( R `  ( 2nd `  A ) )  =  ( R `  N ) )
2221fveq2d 5852 . . . . 5  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 2nd `  ( R `  ( 2nd `  A ) ) )  =  ( 2nd `  ( R `  N )
) )
23 xp2nd 6804 . . . . . . . . 9  |-  ( A  e.  ( NN0  X.  NN0 )  ->  ( 2nd `  A )  e.  NN0 )
2423nn0zd 10963 . . . . . . . 8  |-  ( A  e.  ( NN0  X.  NN0 )  ->  ( 2nd `  A )  e.  ZZ )
25 uzid 11096 . . . . . . . 8  |-  ( ( 2nd `  A )  e.  ZZ  ->  ( 2nd `  A )  e.  ( ZZ>= `  ( 2nd `  A ) ) )
2624, 25syl 16 . . . . . . 7  |-  ( A  e.  ( NN0  X.  NN0 )  ->  ( 2nd `  A )  e.  (
ZZ>= `  ( 2nd `  A
) ) )
27 eqid 2454 . . . . . . . 8  |-  ( 2nd `  A )  =  ( 2nd `  A )
287, 2, 27eucalgcvga 14299 . . . . . . 7  |-  ( A  e.  ( NN0  X.  NN0 )  ->  ( ( 2nd `  A )  e.  ( ZZ>= `  ( 2nd `  A ) )  ->  ( 2nd `  ( R `  ( 2nd `  A ) ) )  =  0 ) )
2926, 28mpd 15 . . . . . 6  |-  ( A  e.  ( NN0  X.  NN0 )  ->  ( 2nd `  ( R `  ( 2nd `  A ) ) )  =  0 )
306, 29syl 16 . . . . 5  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 2nd `  ( R `  ( 2nd `  A ) ) )  =  0 )
3122, 30eqtr3d 2497 . . . 4  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 2nd `  ( R `  N )
)  =  0 )
3231oveq2d 6286 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( ( 1st `  ( R `  N )
)  gcd  ( 2nd `  ( R `  N
) ) )  =  ( ( 1st `  ( R `  N )
)  gcd  0 ) )
33 xp1st 6803 . . . 4  |-  ( ( R `  N )  e.  ( NN0  X.  NN0 )  ->  ( 1st `  ( R `  N
) )  e.  NN0 )
34 nn0gcdid0 14247 . . . 4  |-  ( ( 1st `  ( R `
 N ) )  e.  NN0  ->  ( ( 1st `  ( R `
 N ) )  gcd  0 )  =  ( 1st `  ( R `  N )
) )
3512, 33, 343syl 20 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( ( 1st `  ( R `  N )
)  gcd  0 )  =  ( 1st `  ( R `  N )
) )
3617, 32, 353eqtrrd 2500 . 2  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 1st `  ( R `  N )
)  =  (  gcd  `  ( R `  N
) ) )
37 gcdf 14241 . . . . . . 7  |-  gcd  :
( ZZ  X.  ZZ )
--> NN0
38 ffn 5713 . . . . . . 7  |-  (  gcd 
: ( ZZ  X.  ZZ ) --> NN0  ->  gcd  Fn  ( ZZ  X.  ZZ ) )
3937, 38ax-mp 5 . . . . . 6  |-  gcd  Fn  ( ZZ  X.  ZZ )
40 nn0ssz 10881 . . . . . . 7  |-  NN0  C_  ZZ
41 xpss12 5096 . . . . . . 7  |-  ( ( NN0  C_  ZZ  /\  NN0  C_  ZZ )  ->  ( NN0  X.  NN0 )  C_  ( ZZ  X.  ZZ ) )
4240, 40, 41mp2an 670 . . . . . 6  |-  ( NN0 
X.  NN0 )  C_  ( ZZ  X.  ZZ )
43 fnssres 5676 . . . . . 6  |-  ( (  gcd  Fn  ( ZZ 
X.  ZZ )  /\  ( NN0  X.  NN0 )  C_  ( ZZ  X.  ZZ ) )  ->  (  gcd  |`  ( NN0  X.  NN0 ) )  Fn  ( NN0  X.  NN0 ) )
4439, 42, 43mp2an 670 . . . . 5  |-  (  gcd  |`  ( NN0  X.  NN0 ) )  Fn  ( NN0  X.  NN0 )
457eucalginv 14297 . . . . . 6  |-  ( z  e.  ( NN0  X.  NN0 )  ->  (  gcd  `  ( E `  z
) )  =  (  gcd  `  z )
)
468ffvelrni 6006 . . . . . . 7  |-  ( z  e.  ( NN0  X.  NN0 )  ->  ( E `
 z )  e.  ( NN0  X.  NN0 ) )
47 fvres 5862 . . . . . . 7  |-  ( ( E `  z )  e.  ( NN0  X.  NN0 )  ->  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  ( E `  z ) )  =  (  gcd  `  ( E `  z
) ) )
4846, 47syl 16 . . . . . 6  |-  ( z  e.  ( NN0  X.  NN0 )  ->  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  ( E `  z ) )  =  (  gcd  `  ( E `  z
) ) )
49 fvres 5862 . . . . . 6  |-  ( z  e.  ( NN0  X.  NN0 )  ->  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  z )  =  (  gcd  `  z )
)
5045, 48, 493eqtr4d 2505 . . . . 5  |-  ( z  e.  ( NN0  X.  NN0 )  ->  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  ( E `  z ) )  =  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  z ) )
512, 8, 44, 50alginv 14288 . . . 4  |-  ( ( A  e.  ( NN0 
X.  NN0 )  /\  N  e.  NN0 )  ->  (
(  gcd  |`  ( NN0 
X.  NN0 ) ) `  ( R `  N ) )  =  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  ( R `  0 ) ) )
526, 51sylancom 665 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( (  gcd  |`  ( NN0  X.  NN0 ) ) `
 ( R `  N ) )  =  ( (  gcd  |`  ( NN0  X.  NN0 ) ) `
 ( R ` 
0 ) ) )
53 fvres 5862 . . . 4  |-  ( ( R `  N )  e.  ( NN0  X.  NN0 )  ->  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  ( R `  N ) )  =  (  gcd  `  ( R `  N
) ) )
5412, 53syl 16 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( (  gcd  |`  ( NN0  X.  NN0 ) ) `
 ( R `  N ) )  =  (  gcd  `  ( R `  N )
) )
55 0nn0 10806 . . . . 5  |-  0  e.  NN0
56 ffvelrn 6005 . . . . 5  |-  ( ( R : NN0 --> ( NN0 
X.  NN0 )  /\  0  e.  NN0 )  ->  ( R `  0 )  e.  ( NN0  X.  NN0 ) )
5710, 55, 56sylancl 660 . . . 4  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( R `  0
)  e.  ( NN0 
X.  NN0 ) )
58 fvres 5862 . . . 4  |-  ( ( R `  0 )  e.  ( NN0  X.  NN0 )  ->  ( (  gcd  |`  ( NN0  X. 
NN0 ) ) `  ( R `  0 ) )  =  (  gcd  `  ( R `  0
) ) )
5957, 58syl 16 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( (  gcd  |`  ( NN0  X.  NN0 ) ) `
 ( R ` 
0 ) )  =  (  gcd  `  ( R `  0 )
) )
6052, 54, 593eqtr3d 2503 . 2  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
(  gcd  `  ( R `
 N ) )  =  (  gcd  `  ( R `  0 )
) )
611, 2, 3, 6algr0 14285 . . . . 5  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( R `  0
)  =  A )
6261, 4syl6eq 2511 . . . 4  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( R `  0
)  =  <. M ,  N >. )
6362fveq2d 5852 . . 3  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
(  gcd  `  ( R `
 0 ) )  =  (  gcd  `  <. M ,  N >. )
)
64 df-ov 6273 . . 3  |-  ( M  gcd  N )  =  (  gcd  `  <. M ,  N >. )
6563, 64syl6eqr 2513 . 2  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
(  gcd  `  ( R `
 0 ) )  =  ( M  gcd  N ) )
6636, 60, 653eqtrd 2499 1  |-  ( ( M  e.  NN0  /\  N  e.  NN0 )  -> 
( 1st `  ( R `  N )
)  =  ( M  gcd  N ) )
Colors of variables: wff setvar class
Syntax hints:    -> wi 4    /\ wa 367    = wceq 1398    e. wcel 1823    C_ wss 3461   ifcif 3929   {csn 4016   <.cop 4022    X. cxp 4986    |` cres 4990    o. ccom 4992    Fn wfn 5565   -->wf 5566   ` cfv 5570  (class class class)co 6270    |-> cmpt2 6272   1stc1st 6771   2ndc2nd 6772   0cc0 9481   NN0cn0 10791   ZZcz 10860   ZZ>=cuz 11082    mod cmo 11978    seqcseq 12089    gcd cgcd 14228
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1623  ax-4 1636  ax-5 1709  ax-6 1752  ax-7 1795  ax-8 1825  ax-9 1827  ax-10 1842  ax-11 1847  ax-12 1859  ax-13 2004  ax-ext 2432  ax-sep 4560  ax-nul 4568  ax-pow 4615  ax-pr 4676  ax-un 6565  ax-cnex 9537  ax-resscn 9538  ax-1cn 9539  ax-icn 9540  ax-addcl 9541  ax-addrcl 9542  ax-mulcl 9543  ax-mulrcl 9544  ax-mulcom 9545  ax-addass 9546  ax-mulass 9547  ax-distr 9548  ax-i2m1 9549  ax-1ne0 9550  ax-1rid 9551  ax-rnegex 9552  ax-rrecex 9553  ax-cnre 9554  ax-pre-lttri 9555  ax-pre-lttrn 9556  ax-pre-ltadd 9557  ax-pre-mulgt0 9558  ax-pre-sup 9559
This theorem depends on definitions:  df-bi 185  df-or 368  df-an 369  df-3or 972  df-3an 973  df-tru 1401  df-ex 1618  df-nf 1622  df-sb 1745  df-eu 2288  df-mo 2289  df-clab 2440  df-cleq 2446  df-clel 2449  df-nfc 2604  df-ne 2651  df-nel 2652  df-ral 2809  df-rex 2810  df-reu 2811  df-rmo 2812  df-rab 2813  df-v 3108  df-sbc 3325  df-csb 3421  df-dif 3464  df-un 3466  df-in 3468  df-ss 3475  df-pss 3477  df-nul 3784  df-if 3930  df-pw 4001  df-sn 4017  df-pr 4019  df-tp 4021  df-op 4023  df-uni 4236  df-iun 4317  df-br 4440  df-opab 4498  df-mpt 4499  df-tr 4533  df-eprel 4780  df-id 4784  df-po 4789  df-so 4790  df-fr 4827  df-we 4829  df-ord 4870  df-on 4871  df-lim 4872  df-suc 4873  df-xp 4994  df-rel 4995  df-cnv 4996  df-co 4997  df-dm 4998  df-rn 4999  df-res 5000  df-ima 5001  df-iota 5534  df-fun 5572  df-fn 5573  df-f 5574  df-f1 5575  df-fo 5576  df-f1o 5577  df-fv 5578  df-riota 6232  df-ov 6273  df-oprab 6274  df-mpt2 6275  df-om 6674  df-1st 6773  df-2nd 6774  df-recs 7034  df-rdg 7068  df-er 7303  df-en 7510  df-dom 7511  df-sdom 7512  df-sup 7893  df-pnf 9619  df-mnf 9620  df-xr 9621  df-ltxr 9622  df-le 9623  df-sub 9798  df-neg 9799  df-div 10203  df-nn 10532  df-2 10590  df-3 10591  df-n0 10792  df-z 10861  df-uz 11083  df-rp 11222  df-fz 11676  df-fl 11910  df-mod 11979  df-seq 12090  df-exp 12149  df-cj 13014  df-re 13015  df-im 13016  df-sqrt 13150  df-abs 13151  df-dvds 14071  df-gcd 14229
This theorem is referenced by: (None)
  Copyright terms: Public domain W3C validator