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

Theorem eucalginv 16617
Description: The invariant of the step function 𝐸 for Euclid's Algorithm is the gcd operator applied to the state. (Contributed by Paul Chapman, 31-Mar-2011.) (Revised by Mario Carneiro, 29-May-2014.)
Hypothesis
Ref Expression
eucalgval.1 𝐸 = (𝑥 ∈ ℕ0, 𝑦 ∈ ℕ0 ↦ if(𝑦 = 0, ⟨𝑥, 𝑦⟩, ⟨𝑦, (𝑥 mod 𝑦)⟩))
Assertion
Ref Expression
eucalginv (𝑋 ∈ (ℕ0 × ℕ0) → ( gcd ‘(𝐸𝑋)) = ( gcd ‘𝑋))
Distinct variable group:   𝑥,𝑦,𝑋
Allowed substitution hints:   𝐸(𝑥,𝑦)

Proof of Theorem eucalginv
StepHypRef Expression
1 eucalgval.1 . . . 4 𝐸 = (𝑥 ∈ ℕ0, 𝑦 ∈ ℕ0 ↦ if(𝑦 = 0, ⟨𝑥, 𝑦⟩, ⟨𝑦, (𝑥 mod 𝑦)⟩))
21eucalgval 16615 . . 3 (𝑋 ∈ (ℕ0 × ℕ0) → (𝐸𝑋) = if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩))
32fveq2d 6910 . 2 (𝑋 ∈ (ℕ0 × ℕ0) → ( gcd ‘(𝐸𝑋)) = ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)))
4 1st2nd2 8051 . . . . . . . . 9 (𝑋 ∈ (ℕ0 × ℕ0) → 𝑋 = ⟨(1st𝑋), (2nd𝑋)⟩)
54adantr 480 . . . . . . . 8 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → 𝑋 = ⟨(1st𝑋), (2nd𝑋)⟩)
65fveq2d 6910 . . . . . . 7 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( mod ‘𝑋) = ( mod ‘⟨(1st𝑋), (2nd𝑋)⟩))
7 df-ov 7433 . . . . . . 7 ((1st𝑋) mod (2nd𝑋)) = ( mod ‘⟨(1st𝑋), (2nd𝑋)⟩)
86, 7eqtr4di 2792 . . . . . 6 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( mod ‘𝑋) = ((1st𝑋) mod (2nd𝑋)))
98oveq2d 7446 . . . . 5 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ((2nd𝑋) gcd ( mod ‘𝑋)) = ((2nd𝑋) gcd ((1st𝑋) mod (2nd𝑋))))
10 nnz 12631 . . . . . 6 ((2nd𝑋) ∈ ℕ → (2nd𝑋) ∈ ℤ)
11 xp1st 8044 . . . . . . . . . 10 (𝑋 ∈ (ℕ0 × ℕ0) → (1st𝑋) ∈ ℕ0)
1211adantr 480 . . . . . . . . 9 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → (1st𝑋) ∈ ℕ0)
1312nn0zd 12636 . . . . . . . 8 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → (1st𝑋) ∈ ℤ)
14 zmodcl 13927 . . . . . . . 8 (((1st𝑋) ∈ ℤ ∧ (2nd𝑋) ∈ ℕ) → ((1st𝑋) mod (2nd𝑋)) ∈ ℕ0)
1513, 14sylancom 588 . . . . . . 7 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ((1st𝑋) mod (2nd𝑋)) ∈ ℕ0)
1615nn0zd 12636 . . . . . 6 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ((1st𝑋) mod (2nd𝑋)) ∈ ℤ)
17 gcdcom 16546 . . . . . 6 (((2nd𝑋) ∈ ℤ ∧ ((1st𝑋) mod (2nd𝑋)) ∈ ℤ) → ((2nd𝑋) gcd ((1st𝑋) mod (2nd𝑋))) = (((1st𝑋) mod (2nd𝑋)) gcd (2nd𝑋)))
1810, 16, 17syl2an2 686 . . . . 5 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ((2nd𝑋) gcd ((1st𝑋) mod (2nd𝑋))) = (((1st𝑋) mod (2nd𝑋)) gcd (2nd𝑋)))
19 modgcd 16565 . . . . . 6 (((1st𝑋) ∈ ℤ ∧ (2nd𝑋) ∈ ℕ) → (((1st𝑋) mod (2nd𝑋)) gcd (2nd𝑋)) = ((1st𝑋) gcd (2nd𝑋)))
2013, 19sylancom 588 . . . . 5 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → (((1st𝑋) mod (2nd𝑋)) gcd (2nd𝑋)) = ((1st𝑋) gcd (2nd𝑋)))
219, 18, 203eqtrd 2778 . . . 4 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ((2nd𝑋) gcd ( mod ‘𝑋)) = ((1st𝑋) gcd (2nd𝑋)))
22 nnne0 12297 . . . . . . . . 9 ((2nd𝑋) ∈ ℕ → (2nd𝑋) ≠ 0)
2322adantl 481 . . . . . . . 8 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → (2nd𝑋) ≠ 0)
2423neneqd 2942 . . . . . . 7 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ¬ (2nd𝑋) = 0)
2524iffalsed 4541 . . . . . 6 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩) = ⟨(2nd𝑋), ( mod ‘𝑋)⟩)
2625fveq2d 6910 . . . . 5 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)) = ( gcd ‘⟨(2nd𝑋), ( mod ‘𝑋)⟩))
27 df-ov 7433 . . . . 5 ((2nd𝑋) gcd ( mod ‘𝑋)) = ( gcd ‘⟨(2nd𝑋), ( mod ‘𝑋)⟩)
2826, 27eqtr4di 2792 . . . 4 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)) = ((2nd𝑋) gcd ( mod ‘𝑋)))
295fveq2d 6910 . . . . 5 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( gcd ‘𝑋) = ( gcd ‘⟨(1st𝑋), (2nd𝑋)⟩))
30 df-ov 7433 . . . . 5 ((1st𝑋) gcd (2nd𝑋)) = ( gcd ‘⟨(1st𝑋), (2nd𝑋)⟩)
3129, 30eqtr4di 2792 . . . 4 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( gcd ‘𝑋) = ((1st𝑋) gcd (2nd𝑋)))
3221, 28, 313eqtr4d 2784 . . 3 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) ∈ ℕ) → ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)) = ( gcd ‘𝑋))
33 iftrue 4536 . . . . 5 ((2nd𝑋) = 0 → if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩) = 𝑋)
3433fveq2d 6910 . . . 4 ((2nd𝑋) = 0 → ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)) = ( gcd ‘𝑋))
3534adantl 481 . . 3 ((𝑋 ∈ (ℕ0 × ℕ0) ∧ (2nd𝑋) = 0) → ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)) = ( gcd ‘𝑋))
36 xp2nd 8045 . . . 4 (𝑋 ∈ (ℕ0 × ℕ0) → (2nd𝑋) ∈ ℕ0)
37 elnn0 12525 . . . 4 ((2nd𝑋) ∈ ℕ0 ↔ ((2nd𝑋) ∈ ℕ ∨ (2nd𝑋) = 0))
3836, 37sylib 218 . . 3 (𝑋 ∈ (ℕ0 × ℕ0) → ((2nd𝑋) ∈ ℕ ∨ (2nd𝑋) = 0))
3932, 35, 38mpjaodan 960 . 2 (𝑋 ∈ (ℕ0 × ℕ0) → ( gcd ‘if((2nd𝑋) = 0, 𝑋, ⟨(2nd𝑋), ( mod ‘𝑋)⟩)) = ( gcd ‘𝑋))
403, 39eqtrd 2774 1 (𝑋 ∈ (ℕ0 × ℕ0) → ( gcd ‘(𝐸𝑋)) = ( gcd ‘𝑋))
Colors of variables: wff setvar class
Syntax hints:  wi 4  wa 395  wo 847   = wceq 1536  wcel 2105  wne 2937  ifcif 4530  cop 4636   × cxp 5686  cfv 6562  (class class class)co 7430  cmpo 7432  1st c1st 8010  2nd c2nd 8011  0cc0 11152  cn 12263  0cn0 12523  cz 12610   mod cmo 13905   gcd cgcd 16527
This theorem was proved from axioms:  ax-mp 5  ax-1 6  ax-2 7  ax-3 8  ax-gen 1791  ax-4 1805  ax-5 1907  ax-6 1964  ax-7 2004  ax-8 2107  ax-9 2115  ax-10 2138  ax-11 2154  ax-12 2174  ax-ext 2705  ax-sep 5301  ax-nul 5311  ax-pow 5370  ax-pr 5437  ax-un 7753  ax-cnex 11208  ax-resscn 11209  ax-1cn 11210  ax-icn 11211  ax-addcl 11212  ax-addrcl 11213  ax-mulcl 11214  ax-mulrcl 11215  ax-mulcom 11216  ax-addass 11217  ax-mulass 11218  ax-distr 11219  ax-i2m1 11220  ax-1ne0 11221  ax-1rid 11222  ax-rnegex 11223  ax-rrecex 11224  ax-cnre 11225  ax-pre-lttri 11226  ax-pre-lttrn 11227  ax-pre-ltadd 11228  ax-pre-mulgt0 11229  ax-pre-sup 11230
This theorem depends on definitions:  df-bi 207  df-an 396  df-or 848  df-3or 1087  df-3an 1088  df-tru 1539  df-fal 1549  df-ex 1776  df-nf 1780  df-sb 2062  df-mo 2537  df-eu 2566  df-clab 2712  df-cleq 2726  df-clel 2813  df-nfc 2889  df-ne 2938  df-nel 3044  df-ral 3059  df-rex 3068  df-rmo 3377  df-reu 3378  df-rab 3433  df-v 3479  df-sbc 3791  df-csb 3908  df-dif 3965  df-un 3967  df-in 3969  df-ss 3979  df-pss 3982  df-nul 4339  df-if 4531  df-pw 4606  df-sn 4631  df-pr 4633  df-op 4637  df-uni 4912  df-iun 4997  df-br 5148  df-opab 5210  df-mpt 5231  df-tr 5265  df-id 5582  df-eprel 5588  df-po 5596  df-so 5597  df-fr 5640  df-we 5642  df-xp 5694  df-rel 5695  df-cnv 5696  df-co 5697  df-dm 5698  df-rn 5699  df-res 5700  df-ima 5701  df-pred 6322  df-ord 6388  df-on 6389  df-lim 6390  df-suc 6391  df-iota 6515  df-fun 6564  df-fn 6565  df-f 6566  df-f1 6567  df-fo 6568  df-f1o 6569  df-fv 6570  df-riota 7387  df-ov 7433  df-oprab 7434  df-mpo 7435  df-om 7887  df-1st 8012  df-2nd 8013  df-frecs 8304  df-wrecs 8335  df-recs 8409  df-rdg 8448  df-er 8743  df-en 8984  df-dom 8985  df-sdom 8986  df-sup 9479  df-inf 9480  df-pnf 11294  df-mnf 11295  df-xr 11296  df-ltxr 11297  df-le 11298  df-sub 11491  df-neg 11492  df-div 11918  df-nn 12264  df-2 12326  df-3 12327  df-n0 12524  df-z 12611  df-uz 12876  df-rp 13032  df-fl 13828  df-mod 13906  df-seq 14039  df-exp 14099  df-cj 15134  df-re 15135  df-im 15136  df-sqrt 15270  df-abs 15271  df-dvds 16287  df-gcd 16528
This theorem is referenced by:  eucalg  16620
  Copyright terms: Public domain W3C validator