Metamath Proof Explorer


Theorem eucalginv

Description: The invariant of the step function E 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)

Ref Expression
Hypothesis eucalgval.1 E=x0,y0ify=0xyyxmody
Assertion eucalginv X0×0gcdEX=gcdX

Proof

Step Hyp Ref Expression
1 eucalgval.1 E=x0,y0ify=0xyyxmody
2 1 eucalgval X0×0EX=if2ndX=0X2ndXmodX
3 2 fveq2d X0×0gcdEX=gcdif2ndX=0X2ndXmodX
4 1st2nd2 X0×0X=1stX2ndX
5 4 adantr X0×02ndXX=1stX2ndX
6 5 fveq2d X0×02ndXmodX=mod1stX2ndX
7 df-ov 1stXmod2ndX=mod1stX2ndX
8 6 7 eqtr4di X0×02ndXmodX=1stXmod2ndX
9 8 oveq2d X0×02ndX2ndXgcdmodX=2ndXgcd1stXmod2ndX
10 nnz 2ndX2ndX
11 xp1st X0×01stX0
12 11 adantr X0×02ndX1stX0
13 12 nn0zd X0×02ndX1stX
14 zmodcl 1stX2ndX1stXmod2ndX0
15 13 14 sylancom X0×02ndX1stXmod2ndX0
16 15 nn0zd X0×02ndX1stXmod2ndX
17 gcdcom 2ndX1stXmod2ndX2ndXgcd1stXmod2ndX=1stXmod2ndXgcd2ndX
18 10 16 17 syl2an2 X0×02ndX2ndXgcd1stXmod2ndX=1stXmod2ndXgcd2ndX
19 modgcd 1stX2ndX1stXmod2ndXgcd2ndX=1stXgcd2ndX
20 13 19 sylancom X0×02ndX1stXmod2ndXgcd2ndX=1stXgcd2ndX
21 9 18 20 3eqtrd X0×02ndX2ndXgcdmodX=1stXgcd2ndX
22 nnne0 2ndX2ndX0
23 22 adantl X0×02ndX2ndX0
24 23 neneqd X0×02ndX¬2ndX=0
25 24 iffalsed X0×02ndXif2ndX=0X2ndXmodX=2ndXmodX
26 25 fveq2d X0×02ndXgcdif2ndX=0X2ndXmodX=gcd2ndXmodX
27 df-ov 2ndXgcdmodX=gcd2ndXmodX
28 26 27 eqtr4di X0×02ndXgcdif2ndX=0X2ndXmodX=2ndXgcdmodX
29 5 fveq2d X0×02ndXgcdX=gcd1stX2ndX
30 df-ov 1stXgcd2ndX=gcd1stX2ndX
31 29 30 eqtr4di X0×02ndXgcdX=1stXgcd2ndX
32 21 28 31 3eqtr4d X0×02ndXgcdif2ndX=0X2ndXmodX=gcdX
33 iftrue 2ndX=0if2ndX=0X2ndXmodX=X
34 33 fveq2d 2ndX=0gcdif2ndX=0X2ndXmodX=gcdX
35 34 adantl X0×02ndX=0gcdif2ndX=0X2ndXmodX=gcdX
36 xp2nd X0×02ndX0
37 elnn0 2ndX02ndX2ndX=0
38 36 37 sylib X0×02ndX2ndX=0
39 32 35 38 mpjaodan X0×0gcdif2ndX=0X2ndXmodX=gcdX
40 3 39 eqtrd X0×0gcdEX=gcdX