The Mizar article:

The Chinese Remainder Theorem

by
Andrzej Kondracki

Received December 30, 1997

Copyright (c) 1997 Association of Mizar Users

MML identifier: WSIERP_1
[ MML identifier index ]


environ

 vocabulary ARYTM, INT_1, RAT_1, ARYTM_3, GROUP_1, ARYTM_1, PREPOWER, SQUARE_1,
      ABSVALUE, NAT_1, INT_2, FINSEQ_1, FUNCT_1, RELAT_1, BOOLE, RLVECT_1,
      MATRIX_2, CARD_3;
 notation TARSKI, XBOOLE_0, SUBSET_1, ORDINAL1, NUMBERS, XCMPLX_0, XREAL_0,
      INT_1, NAT_1, RAT_1, INT_2, PREPOWER, SQUARE_1, RELAT_1, FUNCT_1,
      FINSEQ_1, RVSUM_1, FINSEQ_4, MATRIX_2, GROUP_1, TREES_4, GOBOARD1;
 constructors REAL_1, NAT_1, INT_2, PREPOWER, SQUARE_1, FINSEQ_4, GROUP_1,
      GOBOARD1, TREES_4, MATRIX_2, CARD_4, MEMBERED;
 clusters SUBSET_1, INT_1, FINSEQ_1, RELSET_1, XREAL_0, NEWTON, RAT_1,
      SQUARE_1, NAT_1, MEMBERED, ORDINAL2;
 requirements REAL, NUMERALS, BOOLE, SUBSET, ARITHM;
 definitions FINSEQ_1, TARSKI;
 theorems AXIOMS, TARSKI, ABSVALUE, INT_1, NAT_1, INT_2, RAT_1, REAL_1, REAL_2,
      NEWTON, PREPOWER, SQUARE_1, NAT_LAT, FINSEQ_1, FINSEQ_2, FINSEQ_4,
      FUNCT_1, RVSUM_1, GR_CY_2, PRE_FF, ALGSEQ_1, CARD_4, FINSEQ_3, MATRIX_2,
      GOBOARD1, MATRLIN, FINSEQ_5, URYSOHN1, RLVECT_1, XBOOLE_1, XCMPLX_0,
      XCMPLX_1;
 schemes NAT_1, FINSEQ_1, FINSEQ_2;

begin :: PRELIMINARIES

 reserve x,y,z for real number,
         a,b,c,d,e,f,g,h for Nat,
         k,l,m,n,m1,n1,m2,n2 for Integer,
         q for Rational;

canceled;

theorem Th2:
 x|^2=x*x & (-x)|^2=x|^2
proof
 A1: x=x|^1 by NEWTON:10;
 A2: (-x)|^1=-x by NEWTON:10;
    x|^(1+1)=x*x by A1,NEWTON:13;
 then x|^2=(-x)*(-x) by XCMPLX_1:177
         .=(-x)|^(1+1) by A2,NEWTON:13;
 hence thesis by A1,NEWTON:13;
end;

theorem Th3:
 (-x)|^(2*a)=x|^(2*a) & (-x)|^(2*a+1)=-(x|^(2*a+1))
proof
 A1:(-x)|^(2*a)=((-x)|^2)|^a by NEWTON:14
              .=(x|^2)|^a by Th2
              .=x|^(2*a) by NEWTON:14;
   (-x)|^(2*a+1)=((-x)|^(2*a))*(-x) by NEWTON:11
             .=-(x|^(2*a))*x by A1,XCMPLX_1:175
             .=-(x|^(2*a+1)) by NEWTON:11;
 hence thesis by A1;
end;

canceled;

theorem Th5:
 x>=0 & y>=0 & d>0 & x|^d=y|^d implies x=y
proof
 assume A1: x>=0 & y>=0 & d>0 & x|^d=y|^d;
 then A2: d>=1 by RLVECT_1:98;
 then x = d -Root (x |^ d) by A1,PREPOWER:28
  .= y by A1,A2,PREPOWER:28;
 hence thesis;
end;

theorem Th6:
 x>max(y,z) iff (x>y & x>z)
proof
   now assume A1: x>max(y,z);
  then A2: x>=y & x>=z by SQUARE_1:50;
    now assume A3: x=y or x=z;
     now per cases by A3;
    suppose x=y;
     hence x=max(y,z) by A1,SQUARE_1:50;
    suppose x=z;
     hence x=max(y,z) by A1,SQUARE_1:50;
   end;
   hence contradiction by A1;
  end;
  hence x>y & x>z by A2,REAL_1:def 5;
 end;
 hence thesis by SQUARE_1:49;
end;

Lm1:
 (x>=0 iff x+y>=y) & (x>0 iff x+y>y)
 & (x>=0 iff y>=y-x) & (x>0 iff y>y-x)
proof
A1: x>=0 iff x+y>=0+y by AXIOMS:24,REAL_1:53;
 hence x>=0 iff x+y>=y;
A2: x>0 iff x+y>0+y by AXIOMS:24,REAL_1:53;
 hence x>0 iff x+y>y;
 thus x>=0 iff y>=y-x by A1,REAL_1:86;
 thus thesis by A2,REAL_1:84;
end;

Lm2:
 (x>=0 & y>=z) implies (x+y>=z & y>=z-x)
proof
 assume x>=0 & y>=z;
 then x+y>=z+0 by REAL_1:55;
 hence thesis by REAL_1:86;
end;

Lm3:
 (x>=0 & y>z or x>0 & y>=z) implies (x+y>z & y>z-x)
proof
 assume x>=0 & y>z or x>0 & y>=z;
 then x+y>z+0 by REAL_1:67;
 hence thesis by REAL_1:84;
end;

theorem
   (x<=0 & y>=z) implies (y-x>=z & y>=z+x)
proof
 assume x<=0 & y>=z;
 then y+0>=z+x by REAL_1:55;
 hence thesis by REAL_1:84;
end;

theorem
   (x<=0 & y>z or x<0 & y>=z) implies (y>z+x & y-x>z)
proof
 assume x<=0 & y>z or x<0 & y>=z;
 then y+0>z+x by REAL_1:67;
 hence thesis by REAL_1:86;
end;

Lm4:
 a divides b iff (a qua Integer) divides b
proof
 A1: a divides b implies (a qua Integer) divides b
  proof assume a divides b;
  then consider c such that A2: b=a*c by NAT_1:def 3;
  thus (a qua Integer) divides b by A2,INT_1:def 9;
 end;
   (a qua Integer) divides b implies a divides b
  proof assume A3: not thesis;
     now assume A4: a=0;
    consider k such that A5: a*k=b by A3,INT_1:def 9;
    thus contradiction by A3,A4,A5;
   end;
   then A6: a>0 by NAT_1:19;
   consider k such that A7: a*k=b by A3,INT_1:def 9;
     now assume A8: k<0;
     b>=0 by NAT_1:18;
    then b=0 by A6,A7,A8,REAL_2:123;
    hence contradiction by A3,NAT_1:53;
   end;
   then reconsider k as Nat by INT_1:16;
     a*k=b by A7;
   hence contradiction by A3,NAT_1:def 3;
  end;
 hence thesis by A1;
end;

Lm5:
 abs(a)=a
proof
   a>=0 by NAT_1:18;
 hence thesis by ABSVALUE:def 1;
end;

definition let k, a;
  cluster k |^ a -> integer;
  coherence
 proof
  defpred Q[Nat] means k|^$1 is Integer;
  A1: Q[0] by NEWTON:9;
  A2: for a st Q[a] holds Q[a+1]
   proof
    let a; assume k|^a is Integer;
    then reconsider b=k|^a as Integer;
      k|^(a+1)=k*b by NEWTON:11;
    hence thesis;
   end;
    for a holds Q[a] from Ind(A1,A2);
  hence thesis;
 end;
end;

definition let a,b;
  redefine func a|^b -> Nat;
  coherence by URYSOHN1:8;
end;

Lm6:
 for a ex b st a=2*b or a=2*b+1
proof
 let a;
 set b=a div 2, d=a mod 2;
 A1: a=2*b+d by NAT_1:47;
   d<2 by NAT_1:46;
 then a=2*b+0 or a=2*b+1 by A1,ALGSEQ_1:4;
 hence thesis;
end;

Lm7:
 d>0 & a|^d=b|^d implies a=b
proof
 assume A1: d>0 & a|^d=b|^d;
   a>=0 & b>=0 by NAT_1:18;
 hence thesis by A1,Th5;
end;

theorem Th9:
 k divides m & k divides n implies k divides m+n
proof
 assume A1: k divides m & k divides n;
 then consider m1 such that A2: m=k*m1 by INT_1:def 9;
 consider n1 such that A3: n=k*n1 by A1,INT_1:def 9;
   m+n=k*(m1+n1) by A2,A3,XCMPLX_1:8;
 hence thesis by INT_1:def 9;
end;

theorem Th10:
 k divides m & k divides n implies k divides m*m1+n*n1
proof
 assume k divides m & k divides n;
 then k divides m*m1 & k divides n*n1 by INT_2:12;
 hence thesis by Th9;
end;

Lm8:
 a gcd b = a hcf b
proof
   a gcd b = abs(a) hcf abs(b) by INT_2:def 3
        .= a hcf abs(b) by Lm5;
 hence thesis by Lm5;
end;

Lm9:
 a,b are_relative_prime iff a,(b qua Integer) are_relative_prime
proof
   a,b are_relative_prime iff (a hcf b)=1 by INT_2:def 6;
 then a,b are_relative_prime iff (a gcd b)=1 by Lm8;
 hence thesis by INT_2:def 4;
end;

theorem Th11:
 m gcd n = 1 & k gcd n = 1 implies m*k gcd n = 1
proof
 assume (m gcd n)=1 & (k gcd n)=1;
 then m,n are_relative_prime & k,n are_relative_prime by INT_2:def 4;
 then m*k,n are_relative_prime by INT_2:41;
 hence thesis by INT_2:def 4;
end;

theorem Th12:
 a hcf b=1 & c hcf b=1 implies a*c hcf b=1
proof
 assume a hcf b=1 & c hcf b=1;
 then a gcd b=1 & c gcd b=1 by Lm8;
 then a*c gcd b=1 by Th11;
 hence thesis by Lm8;
end;

theorem Th13:
 0 gcd m = abs m & 1 gcd m = 1
proof
 A1: m gcd 0=abs(m) hcf abs(0) by INT_2:def 3
            .=abs(m) hcf 0 by ABSVALUE:7
            .=abs(m) by NAT_LAT:36;
   m gcd 1=abs(m) hcf abs(1) by INT_2:def 3
         .=abs(m) hcf 1 by ABSVALUE:def 1
         .=1 by NAT_LAT:35;
 hence thesis by A1;
end;

theorem Th14:
 1,k are_relative_prime
proof
   1 gcd k = 1 by Th13;
 hence thesis by INT_2:def 4;
end;

theorem Th15:
 k,l are_relative_prime implies k|^a,l are_relative_prime
proof
 assume A1:k,l are_relative_prime;
 defpred P[Nat] means
  k|^$1,l are_relative_prime;
   k|^0=1 by NEWTON:9;
 then A2:P[0] by Th14;
 A3:for a st P[a] holds P[a+1]
  proof
   let a; assume k|^a,l are_relative_prime;
   then k*(k|^a),l are_relative_prime by A1,INT_2:41;
   hence thesis by NEWTON:11;
  end;
   for a holds P[a] from Ind(A2,A3);
 hence thesis;
end;

theorem Th16:
 k,l are_relative_prime implies k|^a,l|^b are_relative_prime
proof
 assume k,l are_relative_prime;
 then k|^a,l are_relative_prime by Th15;
 hence thesis by Th15;
end;

theorem Th17:
 k gcd l = 1 implies k gcd l|^b = 1 & k|^a gcd l|^b = 1
proof
 assume k gcd l=1;
 then A1: k,l are_relative_prime by INT_2:def 4;
 then A2: k,l|^b are_relative_prime by Th15;
   k|^a,l|^b are_relative_prime by A1,Th16;
 hence thesis by A2,INT_2:def 4;
end;

Lm10:
 a hcf b = 1 implies a hcf b|^d = 1 & a|^c hcf b|^d = 1
proof
 assume a hcf b=1;
 then a gcd b=1 by Lm8;
 then a gcd b|^d=1 & a|^c gcd b|^d=1 by Th17;
 hence thesis by Lm8;
end;

theorem
   abs m divides k iff m divides k
proof
 A1: now assume abs(m) divides k;
  then consider l such that A2: abs(m)*l=k by INT_1:def 9;
    now per cases;
   suppose m>=0;
    then m*l=k by A2,ABSVALUE:def 1;
    hence m divides k by INT_1:def 9;
   suppose m<0;
    then k=(-m)*l by A2,ABSVALUE:def 1
         .=m*(-l) by XCMPLX_1:176;
    hence m divides k by INT_1:def 9;
  end;
  hence m divides k;
 end;
   now assume m divides k;
  then consider l such that A3: m*l=k by INT_1:def 9;
    now per cases;
   suppose m>=0;
    then abs(m)*l=k by A3,ABSVALUE:def 1;
    hence (abs(m)) divides k by INT_1:def 9;
   suppose m<0;
    then abs(m)*(-l)=(-m)*(-l) by ABSVALUE:def 1
                  .=k by A3,XCMPLX_1:177;
    hence abs(m) divides k by INT_1:def 9;
  end;
  hence abs(m) divides k;
 end;
 hence thesis by A1;
end;

theorem Th19:
 a divides b implies (a|^c) divides (b|^c)
proof
 assume a divides b;
 then consider d such that A1: a*d=b by NAT_1:def 3;
   b|^c =(a|^c)*(d|^c) by A1,NEWTON:12;
 hence thesis by NAT_1:def 3;
end;

theorem Th20:
 a divides 1 implies a=1
proof
 assume A1: a divides 1;
 then a divides (1+1) by NAT_1:55;
 hence thesis by A1,NAT_LAT:13;
end;

theorem Th21:
 d divides a & a hcf b = 1 implies d hcf b = 1
proof
 assume d divides a & a hcf b = 1;
 then (b hcf d) divides 1 by NAT_LAT:41;
 hence thesis by Th20;
end;

Lm11:
 a<>0 implies (a divides b iff b/a is Nat)
proof
 assume A1: a<>0;
 A2: now assume a divides b;
  then consider d such that A3: b=a*d by NAT_1:def 3;
  thus b/a is Nat by A1,A3,XCMPLX_1:90;
 end;
   now assume b/a is Nat;
  then reconsider d=b/a as Nat;
    b=a*d by A1,XCMPLX_1:88;
  hence a divides b by NAT_1:def 3;
 end;
 hence thesis by A2;
end;

theorem
   k<>0 implies (k divides l iff l/k is Integer)
proof
 assume A1: k<>0;
 A2: now assume k divides l;
  then consider m such that A3: l=k*m by INT_1:def 9;
  thus l/k is Integer by A1,A3,XCMPLX_1:90;
 end;
   now assume l/k is Integer;
  then reconsider m=l/k as Integer;
    l=k*m by A1,XCMPLX_1:88;
  hence k divides l by INT_1:def 9;
 end;
 hence thesis by A2;
end;

Lm12:
 b<>0 & a*k=b implies k is Nat
proof
 assume A1: b<>0 & a*k=b;
 then a divides (b qua Integer) by INT_1:def 9;
 then A2: a divides b by Lm4;
 A3: a<>0 by A1;
 then k=b/a by A1,XCMPLX_1:90;
 hence thesis by A2,A3,Lm11;
end;

Lm13: a<=k implies k is Nat
proof
 assume A1: a<=k; a>=0 by NAT_1:18;
 hence thesis by A1,INT_1:16;
end;

Lm14:
 a+b<=c implies a<=c & b<=c
proof
 assume A1:a+b<=c;
   a<=a+b & b<=a+b by NAT_1:29;
 hence a<=c & b<=c by A1,AXIOMS:22;
end;

theorem
   a<=b-c implies a<=b & c <=b
proof
 assume a<=b-c;
 then a+c <=b by REAL_1:84;
 hence thesis by Lm14;
end;

Lm15:
 k<m iff k<=m-1
proof
 A1:now assume k<m;
  then k+1<=m by INT_1:20;
  hence k<=m-1 by REAL_1:84;
 end;
   now assume k<=m-1;
  then A2:k+1<=m by REAL_1:84;
    k<k+1 by REAL_1:69;
  hence k<m by A2,AXIOMS:22;
 end;
 hence thesis by A1;
end;

Lm16:
 k<m+1 iff k<=m
proof
   k<m+1 iff k-1<m by REAL_1:84;
 hence thesis by Lm15;
end;

reserve fs,fs1,fs2,fs3 for FinSequence;

Lm17:
 for f being Function holds (x in dom f & f.x in rng f) or f.x={}
proof
 let f be Function;
 per cases;
  suppose x in dom f;
   hence thesis by FUNCT_1:def 5;
  suppose not x in dom f;
   hence thesis by FUNCT_1:def 4;
end;

Lm18:
 for X being set holds 0 in X implies
   for s being FinSequence of X holds s.a is Element of X
proof
 let X be set; assume A1: 0 in X;
 let s be FinSequence of X;
 A2: s.a in rng s or s.a={} by Lm17;
   rng s c= X by FINSEQ_1:def 4;
 hence thesis by A1,A2;
end;

definition let f be FinSequence of INT; let a be set;
 cluster f.a -> integer;
 coherence
  proof
A1:rng f c= INT by FINSEQ_1:def 4;
   per cases;
   suppose a in dom f; then
   f.a in rng f by FUNCT_1:def 5;
   hence thesis by A1,INT_1:12;
   suppose not a in dom f; then
   f.a = 0 by FUNCT_1:def 4;
   hence thesis;
  end;
end;

definition let fp be FinSequence of NAT;
 let a;
 redefine func fp.a -> Nat;
 coherence by Lm18;
end;

definition
 let D be non empty set;
 let D1 be non empty Subset of D;
 let f1,f2 be FinSequence of D1;
redefine func f1^f2 -> FinSequence of D1;
 coherence
  proof
   thus rng(f1^f2) c= D1 by FINSEQ_1:def 4;
  end;
end;

definition
 let D be non empty set;
 let D1 be non empty Subset of D;
 redefine func <*>D1 -> empty FinSequence of D1;
 coherence;
end;

definition
 redefine func INT -> non empty Subset of REAL;
 coherence by INT_1:15;
end;

 reserve D for non empty set,
         v,v1,v2,v3 for set,
         fp for FinSequence of NAT,
         fr,fr1,fr2 for FinSequence of INT,
         ft for FinSequence of REAL;

definition let fr;
 redefine func Sum(fr) -> Element of INT;
 coherence
  proof
    defpred P[FinSequence of INT] means Sum $1 is Integer;
   A1: P[<*>INT] by RVSUM_1:102;
   A2:now
    let s be FinSequence of INT,m be Element of INT;
    assume P[s];
    then reconsider ss=Sum(s) as Integer;
    reconsider k=m as Integer;
      Sum(s^<*m*>)=ss+k by RVSUM_1:104;
    hence P[s^<*m*>];
   end;
     for fr1 holds P[fr1] from IndSeqD(A1,A2);
   then Sum(fr) is Integer;
   hence thesis by INT_1:def 2;
  end;
 redefine func Product(fr) -> Element of INT;
 coherence
  proof
    defpred P[FinSequence of INT] means Product $1 is Integer;
   A3: P[<*>INT] by RVSUM_1:124;
   A4:now
    let s be (FinSequence of INT),m be Element of INT; assume P[s];
    then reconsider pis=Product(s) as Integer;
    reconsider k=m as Integer;
      Product(s^<*m*>)=pis*k by RVSUM_1:126;
    hence P[s^<*m*>];
   end;
     for fr1 holds P[fr1] from IndSeqD(A3,A4);
   then Product(fr) is Integer;
   hence thesis by INT_1:def 2;
  end;
end;

definition let fp;
  redefine func Sum(fp) -> Nat;
 coherence
  proof defpred P[FinSequence of NAT] means Sum $1 is Nat;
   A1: P[<*>NAT] by RVSUM_1:102;
   A2:now
    let fp,a; assume P[fp];
    then reconsider sp=Sum(fp) as Nat;
      Sum(fp^<*a*>)=sp+a by RVSUM_1:104;
    hence P[fp^<*a*>];
   end;
     for fp holds P[fp] from IndSeqD(A1,A2);
   hence thesis;
  end;
  redefine func Product(fp) -> Nat;
 coherence
  proof defpred P[FinSequence of NAT] means Product $1 is Nat;
   A3: P[<*>NAT] by RVSUM_1:124;
   A4:now
    let fp,a; assume P[fp];
    then reconsider sp=Product(fp) as Nat;
      Product(fp^<*a*>)=sp*a by RVSUM_1:126;
    hence P[fp^<*a*>];
   end;
     for fp holds P[fp] from IndSeqD(A3,A4);
   hence thesis;
  end;
end;

Lm19:
 a in dom fs implies ex fs1,fs2 st fs=fs1^<*fs.a*>^fs2 &
    len fs1=a-1 & len fs2=len fs -a
proof
 assume A1: a in dom fs;
 then a>=1 & a<=len fs by FINSEQ_3:27;
 then reconsider b=len fs-a, d=a-1 as Nat by INT_1:18;
   len fs=a+b by XCMPLX_1:27;
 then consider fs3,fs2 such that
     A2: len fs3=a & len fs2=b & fs=fs3^fs2 by FINSEQ_2:25;
   a<>0 by A1,FINSEQ_3:27;
 then fs3 <> {} by A2,FINSEQ_1:25;
 then a in dom fs3 by A2,FINSEQ_5:6;
 then A3: fs3.a=fs.a by A2,FINSEQ_1:def 7;
 A4:a=d+1 by XCMPLX_1:27;
 then consider fs1,v such that
A5: fs3=fs1^<*v*> by A2,FINSEQ_2:21;
A6: len fs1 + 1=d+1 by A2,A4,A5,FINSEQ_2:19;
 then A7: len fs1=d by XCMPLX_1:2;
   fs.a=v by A3,A4,A5,A6,FINSEQ_1:59;
 hence thesis by A2,A5,A7;
end;

definition let a,fs;
 redefine func Del (fs,a) means
:Def1: it=fs if not a in dom fs
  otherwise len it + 1 = len fs & for b holds
      (b<a implies it.b=fs.b) & (b>=a implies it.b=fs.(b+1));
  compatibility
  proof
    let IT be FinSequence;
    thus not a in dom fs implies (IT = Del(fs,a) iff IT = fs)
      by MATRIX_2:8;
    assume A1: a in dom fs;
    hereby assume A2:IT = Del(fs,a);
     then consider m be Nat such that
A3:  len fs = m + 1 & len IT = m by A1,MATRIX_2:8;
     thus len IT + 1 = len fs by A3;
     let b;
     thus b<a implies IT.b=fs.b by A2,A3,GOBOARD1:8;
     assume A4:b>=a;
     per cases;
     suppose b<=len IT;
     hence IT.b=fs.(b+1) by A1,A2,A3,A4,GOBOARD1:9;
     suppose A5:b > len IT;
     then not b in dom IT by FINSEQ_3:27;
then A6:   IT.b = {} by FUNCT_1:def 4;
       b+1 > len IT + 1 by A5,REAL_1:53;
     then not b+1 in dom fs by A3,FINSEQ_3:27;
     hence IT.b=fs.(b+1) by A6,FUNCT_1:def 4;
    end;
    assume A7: len IT + 1 = len fs &
    for b holds (b<a implies IT.b=fs.b) & (b>=a implies IT.b=fs.(b+1));
    consider m be Nat such that
A8: len fs = m + 1 & len Del(fs,a) = m by A1,MATRIX_2:8;
A9: len IT = len Del (fs,a) by A7,A8,XCMPLX_1:2;
   for k be Nat st 1 <= k & k <= len IT holds IT.k=(Del(fs,a)).k
    proof
      let k be Nat;
      assume A10:1 <= k & k <= len IT;
      per cases;
      suppose A11:k < a; then IT.k=fs.k by A7;
      hence thesis by A7,A11,GOBOARD1:8;
      suppose A12:k >= a; then IT.k=fs.(k+1) by A7;
      hence thesis by A1,A7,A10,A12,GOBOARD1:9;
    end;
    hence thesis by A9,FINSEQ_1:18;
  end;
  correctness;
end;

Lm20:
 a in dom fs & fs=fs1^<*v*>^fs2 & len fs1=a-1 implies Del(fs,a)=fs1^fs2
proof
 assume A1: a in dom fs & fs=fs1^<*v*>^fs2 & len fs1=a-1;
 then len fs=len(fs1^<*v*>)+len fs2 by FINSEQ_1:35
           .=len fs1 +1 +len fs2 by FINSEQ_2:19
           .=a +len fs2 by A1,XCMPLX_1:27;
 then A2: len fs2=len fs -a by XCMPLX_1:26;
 A3: fs=fs1^(<*v*>^fs2) by A1,FINSEQ_1:45;
 A4: len<*v*>=1 by FINSEQ_1:56;
   len fs=(a-1) + len(<*v*>^fs2) by A1,A3,FINSEQ_1:35;
 then A5: len(<*v*>^fs2)=len fs -(a-1) by XCMPLX_1:26;
 A6: len(Del(fs,a))+1=len fs by A1,Def1;
 then len(Del(fs,a))=len fs -1 by XCMPLX_1:26
              .=len fs -a +a -1 by XCMPLX_1:27
              .=len fs2 +len fs1 by A1,A2,XCMPLX_1:29;
 then A7: len(fs1^fs2)=len(Del(fs,a)) by FINSEQ_1:35;
   now let e; assume A8: 1<=e & e<=len Del(fs,a);
    now per cases;
   suppose A9: e<a;
    then e<=a-1 by Lm15;
then A10:  e in dom fs1 by A1,A8,FINSEQ_3:27;
    hence (fs1^fs2).e=fs1.e by FINSEQ_1:def 7
             .=fs.e by A3,A10,FINSEQ_1:def 7
             .=(Del(fs,a)).e by A1,A9,Def1;
   suppose A11: e>=a;
    then A12: e>a-1 by Lm15;
    then A13: e+1>a by REAL_1:84;
    then e+1-a>0 by SQUARE_1:11;
    then e+1-a+1>0+1 by REAL_1:53;
    then A14: e+1-(a-1)>len<*v*> by A4,XCMPLX_1:37;
      a>a-1 by INT_1:26; then A15: e+1>a-1 by A13,AXIOMS:22;
    then e+1-(a-1)>0 by SQUARE_1:11;
    then reconsider f=e+1-(a-1) as Nat by INT_1:16;
    A16: e+1<=len fs by A6,A8,AXIOMS:24;
    then A17: e+1-(a-1)<=len(<*v*>^fs2) by A5,REAL_1:49;
    thus (fs1^fs2).e=fs2.(e-len fs1) by A1,A7,A8,A12,FINSEQ_1:37
             .=fs2.(e+(1-a)) by A1,XCMPLX_1:38
             .=fs2.(e+1-a) by XCMPLX_1:29
             .=fs2.(e+1-(a-1+1)) by XCMPLX_1:27
             .=fs2.(f-1) by XCMPLX_1:36
             .=(<*v*>^fs2).f by A4,A14,A17,FINSEQ_1:37
             .=(fs1^(<*v*>^fs2)).(e+1) by A1,A3,A15,A16,FINSEQ_1:37
             .=(Del(fs,a)).e by A1,A3,A11,Def1;
  end;
  hence (fs1^fs2).e=(Del(fs,a)).e;
 end;
 hence thesis by A7,FINSEQ_1:18;
end;

Lm21:
 dom Del(fs,a) c= dom fs
proof
   now assume A1: a in dom fs;
     dom fs=Seg len fs by FINSEQ_1:def 3
          .= Seg(len(Del(fs,a))+1) by A1,Def1
          .= Seg len(Del(fs,a)) \/ {len(Del(fs,a))+1} by FINSEQ_1:11
          .= dom(Del(fs,a)) \/ {len(Del(fs,a))+1} by FINSEQ_1:def 3;
  hence dom(Del(fs,a)) c= dom fs by XBOOLE_1:7;
 end;
 hence thesis by Def1;
end;

definition
 let D; let a;
 let fs be FinSequence of D;
redefine func Del(fs,a) -> FinSequence of D;
 coherence
  proof
   A1: rng fs c= D by FINSEQ_1:def 4;
     rng Del(fs,a) c= rng fs by MATRLIN:2;
   hence rng Del(fs,a) c= D by A1,XBOOLE_1:1;
  end;
end;

definition
 let D; let D1 be non empty Subset of D;
 let a; let fs be FinSequence of D1;
redefine func Del(fs,a) -> FinSequence of D1;
 coherence
  proof
   thus rng(Del(fs,a)) c= D1 by FINSEQ_1:def 4;
  end;
end;

Lm22:
 (a<=len fs1 implies Del(fs1^fs2,a)=Del(fs1,a)^fs2) &
 (a>=1 implies Del(fs1^fs2,len fs1 +a)=fs1^Del(fs2,a))
proof
 set f=fs1^fs2;
 A1:len f=len fs1 + len fs2 &
   len((Del(fs1,a))^fs2)=len(Del(fs1,a)) + len fs2 &
   len(fs1^Del(fs2,a))=len fs1 + len Del(fs2,a) by FINSEQ_1:35;
 A2:now assume A3:a<=len fs1;
  set f1= Del(f,a);
  set f2=((Del(fs1,a))^fs2);
  set f3=<*f.a*>;
    len fs1<=len f by A1,NAT_1:29;
  then A4: a<=len f by A3,AXIOMS:22;
    now per cases;
   suppose a<1; then A5: not a in dom fs1 & not a in dom f by FINSEQ_3:27;
    hence f1=f by Def1
           .=f2 by A5,Def1;
   suppose a>=1; then A6: a in dom f & a in dom fs1 by A3,A4,FINSEQ_3:27;
    then consider g1,g2 being FinSequence such that A7:
         f=g1^f3^g2 & len g1=a-1 & len g2=len f -a by Lm19;
      len(g1^f3)=a-1+1 by A7,FINSEQ_2:19
             .=a by XCMPLX_1:27;
    then consider t being FinSequence such that A8:
        fs1=g1^f3^t by A3,A7,FINSEQ_1:64;
    A9: Del(fs1,a)=g1^t by A6,A7,A8,Lm20;
      g1^f3^g2=g1^f3^(t^fs2) by A7,A8,FINSEQ_1:45;
    then A10: g2=t^fs2 by FINSEQ_1:46;
    thus f1=g1^g2 by A6,A7,Lm20
          .=f2 by A9,A10,FINSEQ_1:45;
  end;
  hence f1=f2;
 end;
   now assume A11: a>=1;
  set f1= Del(f,len fs1 + a);
  set f2=fs1^Del(fs2,a);
    now per cases;
   suppose A12: a>len fs2; then A13: not a in dom fs2 by FINSEQ_3:27;
      len fs1 + a>len f by A1,A12,REAL_1:53;
    then not (len fs1 + a) in dom f by FINSEQ_3:27;
    hence f1=fs1^fs2 by Def1
           .=f2 by A13,Def1;
   suppose A14: a<=len fs2; then A15: a in dom fs2 by A11,FINSEQ_3:27;
    A16: len fs1 + a <= len f by A1,A14,AXIOMS:24;
      len fs1 + a>=1 by A11,NAT_1:37;
    then A17: (len fs1 + a) in dom f by A16,FINSEQ_3:27;
    then consider g1,g2 being FinSequence such that A18:
       f=g1^<*f.(len fs1 +a)*>^g2 & len g1=len fs1 +a -1
       & len g2=len f -(len fs1 +a) by Lm19;
    A19: f1=g1^g2 by A17,A18,Lm20;
    A20: f=g1^(<*f.(len fs1 +a)*>^g2) by A18,FINSEQ_1:45;
      a-1>=0 by A11,SQUARE_1:12;
    then len fs1 +(a-1)>=len fs1 by Lm1;
    then len g1>=len fs1 by A18,XCMPLX_1:29;
    then consider t being FinSequence such that A21:
      fs1^t=g1 by A20,FINSEQ_1:64;
      fs1^(t^<*f.(len fs1 +a)*>^g2)=fs1^(t^<*f.(len fs1 +a)*>)^g2 by FINSEQ_1:
45
          .=f by A18,A21,FINSEQ_1:45;
    then A22: fs2=t^<*f.(len fs1 +a)*>^g2 by FINSEQ_1:46;
      len g1=len fs1 + len t by A21,FINSEQ_1:35;
    then len fs1 +(a-1)=len fs1 +len t by A18,XCMPLX_1:29;
    then len t=a-1 by XCMPLX_1:2;
    then Del(fs2,a)=t^g2 by A15,A22,Lm20;
    hence f1=f2 by A19,A21,FINSEQ_1:45;
  end;
  hence f1=f2;
 end;
 hence thesis by A2;
end;

Lm23:
 Del(<*v*>^fs,1)=fs & Del(fs^<*v*>,len fs + 1)=fs
proof
 A1: len <*v*>=1 by FINSEQ_1:56;
 A2: 1<=len <*v*> by FINSEQ_1:56;
 A3: Del(<*v*>,1)={}
  proof
     1 in dom <*v*> by A1,FINSEQ_3:27;
   then len(Del(<*v*>,1))+1=1 by A1,Def1;
   then len(Del(<*v*>,1))=0 by XCMPLX_1:3;
   hence thesis by FINSEQ_1:25;
  end;
 A4: fs^{}=fs & {}^fs=fs by FINSEQ_1:47;
 hence Del(<*v*>^fs,1)=fs by A2,A3,Lm22;
 thus thesis by A3,A4,Lm22;
end;

canceled 2;

theorem
   Del(<*v1*>,1) = {} & Del(<*v1,v2*>,1) = <*v2*> & Del(<*v1,v2*>,2) = <*v1*> &
 Del(<*v1,v2,v3*>,1) = <*v2,v3*> & Del(<*v1,v2,v3*>,2) = <*v1,v3*> &
 Del(<*v1,v2,v3*>,3) = <*v1,v2*>
proof
 thus Del(<*v1*>,1)=Del(<*v1*>^{},1) by FINSEQ_1:47
             .={} by Lm23;
   <*v1,v2*>=(<*v1*>^<*v2*>) by FINSEQ_1:def 9;
 hence Del(<*v1,v2*>,1)=<*v2*> by Lm23;
   len <*v1*> =1 by FINSEQ_1:56;
 hence A1: Del(<*v1,v2*>,2)=Del(<*v1*>^<*v2*>,len <*v1*> +1)
    by FINSEQ_1:def 9
                 .=<*v1*> by Lm23;
 thus Del(<*v1,v2,v3*>,1)=Del(<*v1*>^<*v2,v3*>,1) by FINSEQ_1:60
                  .=<*v2,v3*> by Lm23;
A2: len<*v1,v2*>=2 by FINSEQ_1:61;
 then A3: 2<=len<*v1,v2*> & len <*v1,v2*>+1=3;
 thus Del(<*v1,v2,v3*>,2)=Del(<*v1,v2*>^<*v3*>,2) by FINSEQ_1:60
                   .=<*v1*>^<*v3*> by A1,A2,Lm22
                   .=<*v1,v3*> by FINSEQ_1:def 9;
 thus Del(<*v1,v2,v3*>,3)=Del(<*v1,v2*>^<*v3*>,3) by FINSEQ_1:60
                   .=<*v1,v2*> by A3,Lm23;
end;

Lm24:
 1<=len fs implies
  fs=<*fs.1*>^Del(fs,1) & fs=Del(fs,len fs)^<*fs.(len fs)*>
proof
 assume A1: 1<=len fs;
 set fs1=<*fs.1*>^Del(fs,1);
 set fs2=Del(fs,len fs)^<*fs.(len fs)*>;
 A2: len <*fs.1*>=1 & len <*fs.(len fs)*>=1 by FINSEQ_1:56;
 A3: 1 in dom fs by A1,FINSEQ_3:27;
 A4: len fs in dom fs by A1,FINSEQ_3:27;
 then len(Del(fs,len fs))+1=len fs by Def1;
 then A5: len Del(fs,len fs)=len fs -1 by XCMPLX_1:26;
 A6: len fs=len <*fs.1*> + len Del(fs,1) by A2,A3,Def1
          .=len fs1 by FINSEQ_1:35;
 A7: len fs=len <*fs.(len fs)*> + len Del(fs,len fs) by A2,A4,Def1
          .=len fs2 by FINSEQ_1:35;
   for b st 1<=b & b<=len fs holds fs.b=fs1.b
  proof
   let b; assume A8: 1<=b & b<=len fs;
     now per cases by A8,AXIOMS:21;
    suppose A9: b=1;
       1 in dom <*fs.1*> by A2,FINSEQ_3:27;
     hence fs1.b=<*fs.1*>.1 by A9,FINSEQ_1:def 7
               .=fs.b by A9,FINSEQ_1:57;
    suppose A10: b>1;
     then A11: b-1>0 by SQUARE_1:11;
     then reconsider e=b-1 as Nat by INT_1:16;
     A12: e>=1 by A11,RLVECT_1:98;
     thus fs1.b=(Del(fs,1)).e by A2,A6,A8,A10,FINSEQ_1:37
               .=fs.(e+1) by A3,A12,Def1
               .=fs.b by XCMPLX_1:27;
   end;
   hence thesis;
  end;
 hence fs1=fs by A6,FINSEQ_1:18;
   for b st 1<=b & b<=len fs holds fs.b=fs2.b
  proof
   let b; assume A13: 1<=b & b<=len fs;
     now per cases by A13,AXIOMS:21;
    suppose A14: b=len fs;
     reconsider e=b-(b-1) as Nat by XCMPLX_1:18;
       b>len Del(fs,len fs) by A5,A14,INT_1:26;
     hence fs2.b=<*fs.(len fs)*>.e by A5,A7,A14,FINSEQ_1:37
               .=<*fs.(len fs)*>.1 by XCMPLX_1:18
               .=fs.b by A14,FINSEQ_1:57;
    suppose A15: b<len fs;
     then b+1 <= len fs by NAT_1:38;
     then b <= len(Del(fs,len fs)) by A5,REAL_1:84;
     then b in dom Del(fs,len fs) by A13,FINSEQ_3:27;
     hence fs2.b=(Del(fs,len fs)).b by FINSEQ_1:def 7
               .=fs.b by A4,A15,Def1;
   end;
   hence thesis;
  end;
 hence fs2=fs by A7,FINSEQ_1:18;
end;

Lm25:
 a in dom ft implies Product Del(ft,a)*(ft.a)=Product(ft)
proof
 defpred P[Nat] means
   $1 in dom ft implies (ft.$1)*Product(Del(ft,$1))=Product(ft);
 A1: P[0] by FINSEQ_3:27;
 A2: for a st P[a] holds P[a+1]
  proof
   let a such that P[a];
     now per cases by NAT_1:19;
    suppose A3: a=0;
     thus P[a+1]
      proof
       assume a+1 in dom ft;
       then 1 <= a+1 & a + 1 <= len ft by FINSEQ_3:27;
       then <*ft.1*>^Del(ft,1)=ft by A3,Lm24;
       then Product(ft)=Product(<*ft.1*>)*Product Del(ft,1) by RVSUM_1:127
                .=(ft.1)*Product Del(ft,1) by RVSUM_1:125;
       hence thesis by A3;
      end;
    suppose A4: a>0 & a<len ft;
     A5: a+1>=1 by NAT_1:29;
       a+1<=len ft by A4,NAT_1:38;
     then A6: (a+1) in dom ft by A5,FINSEQ_3:27;
     then consider fs1,fs2 such that A7: ft=fs1^<*ft.(a+1)*>^fs2 &
        len fs1=(a+1)-1 & len fs2=len ft-(a+1) by Lm19;
     A8: Del(ft,a+1)=fs1^fs2 by A6,A7,Lm20;
     then reconsider fs1 as FinSequence of REAL by FINSEQ_1:50;
     reconsider fs2 as FinSequence of REAL by A7,FINSEQ_1:50;
       Product(ft)=Product(fs1^<*ft.(a+1)*>)*Product(fs2) by A7,RVSUM_1:127
        .=Product(fs1)*Product(<*ft.(a+1)*>)*Product(fs2) by RVSUM_1:127
        .=(ft.(a+1))*Product(fs1)*Product(fs2) by RVSUM_1:125
        .=(ft.(a+1))*(Product(fs1)*Product(fs2)) by XCMPLX_1:4;
     hence P[a+1] by A8,RVSUM_1:127;
    suppose a>=len ft;
     then len ft < a+1 by NAT_1:38;
     hence P[a+1] by FINSEQ_3:27;
   end;
   hence thesis;
  end;
   for a holds P[a] from Ind(A1,A2);
 hence thesis;
end;

theorem
   a in dom ft implies Sum Del(ft,a)+(ft.a)=Sum(ft)
proof
 defpred P[Nat] means
   $1 in dom ft implies (ft.$1)+Sum Del(ft,$1)=Sum(ft);
 A1: P[0] by FINSEQ_3:27;
 A2: for a st P[a] holds P[a+1]
  proof
   let a such that P[a];
     now per cases by NAT_1:19;
    suppose A3: a=0;
     thus P[a+1]
      proof
       assume a+1 in dom ft;
       then 1<=a+1 & a+1<=len ft by FINSEQ_3:27;
       then <*ft.1*>^Del(ft,1)=ft by A3,Lm24;
       then Sum(ft)=Sum(<*ft.1*>)+Sum Del(ft,1) by RVSUM_1:105
                .=(ft.1)+Sum Del(ft,1) by RVSUM_1:103;
       hence thesis by A3;
      end;
    suppose A4: a>0 & a<len ft;
     A5: a+1>=1 by NAT_1:29;
       a+1<=len ft by A4,NAT_1:38;
     then A6: (a+1) in dom ft by A5,FINSEQ_3:27;
     then consider fs1,fs2 such that A7: ft=fs1^<*ft.(a+1)*>^fs2 &
        len fs1=(a+1)-1 & len fs2=len ft-(a+1) by Lm19;
     A8:  Del(ft,a+1)=fs1^fs2 by A6,A7,Lm20;
     then reconsider fs1 as FinSequence of REAL by FINSEQ_1:50;
     reconsider fs2 as FinSequence of REAL by A7,FINSEQ_1:50;
       Sum(ft)=Sum(fs1^<*ft.(a+1)*>)+Sum(fs2) by A7,RVSUM_1:105
        .=Sum(fs1)+Sum(<*ft.(a+1)*>)+Sum(fs2) by RVSUM_1:105
        .=(ft.(a+1))+Sum(fs1)+Sum(fs2) by RVSUM_1:103
        .=(ft.(a+1))+(Sum(fs1)+Sum(fs2)) by XCMPLX_1:1;
     hence P[a+1] by A8,RVSUM_1:105;
    suppose a>=len ft;
     then a+1 > len ft by NAT_1:38;
     hence P[a+1] by FINSEQ_3:27;
   end;
   hence thesis;
  end;
   for a holds P[a] from Ind(A1,A2);
 hence thesis;
end;

theorem
   a in dom fp implies Product(fp)/fp.a is Nat
proof
 assume a in dom fp;
 then consider fs1,fs2 such that A1: fp=fs1^<*fp.a*>^fs2 &
     len fs1=a-1 & len fs2=len fp -a by Lm19;
 per cases;
 suppose A2:fp.a<>0;
 reconsider fs2 as FinSequence of NAT by A1,FINSEQ_1:50;
   fs1^<*fp.a*> is FinSequence of NAT by A1,FINSEQ_1:50;
 then reconsider fs1 as FinSequence of NAT by FINSEQ_1:50;
   Product(fp)=Product(fs1^<*fp.a*>)*Product(fs2) by A1,RVSUM_1:127
    .=(fp.a)*Product(fs1)*Product(fs2) by RVSUM_1:126
    .=(fp.a)*(Product(fs1)*Product(fs2)) by XCMPLX_1:4;
 hence thesis by A2,XCMPLX_1:90;
 suppose A3:fp.a=0;
   Product(fp)/fp.a = Product(fp)*(fp.a)" by XCMPLX_0:def 9
                 .= Product(fp)*0 by A3,XCMPLX_0:def 7
                 .= 0;
 hence thesis;
end;

::  BEGINING

theorem Th29:
 numerator(q),denominator(q) are_relative_prime
proof
 set k=numerator(q);
 set h=denominator(q);
 A1: h<>0 by RAT_1:def 3;
 assume A2: not k,h are_relative_prime;
 reconsider a=k gcd h as Nat by INT_2:29;
 A3: a<>1 by A2,INT_2:def 4;
   a<>0 by A1,INT_2:35;
 then a>0 by NAT_1:19;
 then a>=0+1 by NAT_1:38;
 then A4: a>1 by A3,REAL_1:def 5;
 A5: a divides k by INT_2:31;
   (k gcd h) divides h by INT_2:32;
 then A6: a divides h by Lm4;
 consider l such that A7: k=a*l by A5,INT_1:def 9;
 consider b such that A8: h=a*b by A6,NAT_1:def 3;
 thus contradiction by A4,A7,A8,RAT_1:62;
end;

theorem
   q<>0 & q=k/a & a<>0 & k,a are_relative_prime
         implies k=numerator(q) & a=denominator(q)
proof
 assume A1: q<>0 & q=k/a & a<>0 & k,a are_relative_prime;
 then consider b such that
A2: k=numerator(q)*b & a=denominator(q)*b by RAT_1:60;
   numerator(q),denominator(q) are_relative_prime by Th29;
 then k gcd a = abs(b) by A2,INT_2:39;
 then 1=abs(b) by A1,INT_2:def 4
      .=b by Lm5;
 hence thesis by A2;
end;

theorem Th31:
 (ex q st a=q|^b) implies ex k st a=k|^b
proof
 given q such that A1: a=q|^b;
   now
  A2: now assume A3: b=0;
   then a=1 by A1,NEWTON:9;
   then a=1|^0 by NEWTON:9;
   hence thesis by A3;
  end;
    now assume A4: b<>0;
   set k=numerator(q);
   set d=denominator(q);
   A5: k,d are_relative_prime by Th29;
   A6: q=k/d by RAT_1:37;
      d<>0 by RAT_1:def 3;
   then A7: d|^b <>0 by CARD_4:51;
     a=(k|^b)/(d|^b) by A1,A6,PREPOWER:15;
   then A8: a*(d |^ b)=(k |^ b) by A7,XCMPLX_1:88;
     (k |^ b),d are_relative_prime by A5,Th15;
   then A9:(k|^b gcd d)=1 by INT_2:def 4;
   consider e such that A10: e+1=b by A4,NAT_1:22;
     (k |^ b)=a*((d |^ e)*d) by A8,A10,NEWTON:11
          .=(a*(d |^ e))*d by XCMPLX_1:4;
   then d divides (k |^ b) by INT_1:def 9;
   then d divides ((k |^ b) gcd d) by INT_2:33;
   then d=1 or d=-1 by A9,INT_2:17;
   hence thesis by A1,A6,INT_2:9;
  end;
  hence thesis by A2;
 end;
 hence thesis;
end;

theorem Th32:
 (ex q st a=q|^d) implies ex b st a=b|^d
proof
 assume ex q st a=q|^d;
 then consider k such that A1: a=k|^d by Th31;
 A2: now assume A3: a=0;
  then d<>0 by A1,NEWTON:9;
  then d>=1 by RLVECT_1:98;
  then a=0|^d by A3,NEWTON:16;
  hence thesis;
 end;
 A4: now assume A5: d=0;
  then a=1 by A1,NEWTON:9;
  then a=1|^0 by NEWTON:9;
  hence thesis by A5;
 end;
   now assume d<>0;
    now assume A6: not k is Nat;
   consider c such that A7: k=c or k=-c by INT_1:8;
   consider e such that A8: d=2*e or d=2*e+1 by Lm6;
   A9: now assume d=2*e;
    then a=c|^d by A1,A7,Th3;
    hence thesis;
   end;
     now assume d=2*e+1;
    then -c|^d=a by A1,A6,A7,Th3;
    then -a is Nat;
    hence thesis by A2,INT_2:8;
   end;
   hence thesis by A8,A9;
  end;
  hence thesis by A1;
 end;
 hence thesis by A4;
end;

theorem
   e>0 & (a|^e) divides (b|^e) implies a divides b
proof
 assume A1: e>0 & (a|^e) divides (b|^e);
 then consider f such that A2: (a|^e)*f=(b|^e) by NAT_1:def 3;
 A3: e>=1 by A1,RLVECT_1:98;
 A4: now assume A5: a=0;
  then 0 divides (b|^e) by A1,A3,NEWTON:16;
  then ex f st 0*f=b|^e by NAT_1:def 3;
  hence thesis by A5,CARD_4:51;
 end;
 A6: now assume b=0;
  then a*0=b;
  hence thesis by NAT_1:def 3;
 end;
   now assume a<>0 & b<>0;
  then a|^e<>0 by CARD_4:51;
  then A8: f=(b|^e)/(a|^e) by A2,XCMPLX_1:90
           .=(b/a)|^e by PREPOWER:15;
  consider d such that A9: f=d|^e by A8,Th32;
    b|^e=(a*d)|^e by A2,A9,NEWTON:12;
  then b=a*d by A1,Lm7;
  hence thesis by NAT_1:def 3;
 end;
 hence thesis by A4,A6;
end;

theorem Th34:
 ex m,n st a hcf b = a*m+b*n
proof
 A1: ex m,n st 0 hcf c =0*m+c*n
 proof
    0 hcf c =0*0+c*1 by NAT_LAT:36;
  hence thesis;
 end;
   now per cases;
  suppose a=0;
   hence thesis by A1;
  suppose A2: b=0;
   then consider m,n such that A3: (a hcf b)=0*m+a*n by A1;
   thus thesis by A2,A3;
  suppose a<>0 & b<>0;
   then a>0 & b>0 by NAT_1:19;
   then A4: b>0 & a+b>b by REAL_1:69;
   defpred P[set] means ex m,n st $1=a*m+b*n & $1<>0;
     a+b=a*1+b*1;
   then A5: ex c st P[c] by A4;
   consider d such that A6: P[d] & for c st P[c] holds d<=c from Min(A5);
   A7: d>0 by A6,NAT_1:19;
   consider m,n such that A8: d=a*m+b*n by A6;
    consider e,f such that A9: a=d*e+f & f<d by A7,NAT_1:42;
      now assume A10: f<>0;
       f=a-d*e by A9,XCMPLX_1:26
     .=a*1-(a*m*e+b*n*e) by A8,XCMPLX_1:8
     .=(a*1-a*m*e)-b*n*e by XCMPLX_1:36
     .=(a*1-a*(m*e))-b*n*e by XCMPLX_1:4
     .=a*(1-m*e)-b*n*e by XCMPLX_1:40
     .=a*(1-m*e)-b*(n*e) by XCMPLX_1:4
     .=a*(1-m*e)+-b*(n*e) by XCMPLX_0:def 8
     .=a*(1-m*e)+b*(-(n*e)) by XCMPLX_1:175;
     hence contradiction by A6,A9,A10;
    end;
   then A11: d divides a by A9,NAT_1:def 3;
    consider e,f such that A12: b=d*e+f & f<d by A7,NAT_1:42;
      now assume A13:f<>0;
       f=b-d*e by A12,XCMPLX_1:26
     .=b*1-(b*n*e+a*m*e) by A8,XCMPLX_1:8
     .=(b*1-b*n*e)-a*m*e by XCMPLX_1:36
     .=(b*1-b*(n*e))-a*m*e by XCMPLX_1:4
     .=b*(1-n*e)-a*m*e by XCMPLX_1:40
     .=b*(1-n*e)-a*(m*e) by XCMPLX_1:4
     .=b*(1-n*e)+-a*(m*e) by XCMPLX_0:def 8
     .=b*(1-n*e)+a*(-(m*e)) by XCMPLX_1:175;
     hence contradiction by A6,A12,A13;
    end;
   then d divides b by A12,NAT_1:def 3;
   then A14: d divides (a hcf b) by A11,NAT_1:def 5;
     (a hcf b) divides a & (a hcf b) divides b by NAT_1:def 5;
   then (a hcf b) divides (a qua Integer) & (a hcf b) divides
(b qua Integer) by Lm4;
   then (a hcf b) divides (d qua Integer) by A8,Th10;
   then (a hcf b) divides d by Lm4;
   then (a hcf b)=d by A14,NAT_1:52;
   hence thesis by A8;
  end;
 hence thesis;
end;

theorem Th35:
 ex m1,n1 st m gcd n = m*m1+n*n1
proof
   m gcd n=abs(m) hcf abs(n) by INT_2:def 3;
 then consider m1,n1 such that A1: abs(m)*m1+abs(n)*n1=(m gcd n) by Th34;
    now per cases;
   suppose m>=0 & n>=0;
    then abs(m)=m & abs(n)=n by ABSVALUE:def 1;
    hence thesis by A1;
   suppose m>=0 & n<0;
    then abs(m)=m & abs(n)=-n by ABSVALUE:def 1;
    then (m gcd n)=m*m1+n*(-n1) by A1,XCMPLX_1:176;
    hence thesis;
   suppose m<0 & n>=0;
    then abs(m)=-m & abs(n)=n by ABSVALUE:def 1;
    then (m gcd n)=m*(-m1)+n*n1 by A1,XCMPLX_1:176;
    hence thesis;
   suppose m<0 & n<0;
    then A2: abs(m)=-m & abs(n)=-n by ABSVALUE:def 1;
    then m gcd n=m*(-m1)+abs(n)*n1 by A1,XCMPLX_1:176
                 .=m*(-m1)+n*(-n1) by A2,XCMPLX_1:176;
    hence thesis;
  end;
 hence thesis;
end;

theorem Th36:
 m divides n*k & m gcd n=1 implies m divides k
proof
 assume A1: m divides n*k & (m gcd n)=1;
 then consider m1,n1 such that A2: m*m1+n*n1=1 by Th35;
   k=(m*m1+n*n1)*k by A2
 .=m*m1*k+n*n1*k by XCMPLX_1:8
 .=m*m1*k+n1*(n*k) by XCMPLX_1:4
 .=m*(m1*k)+(n*k)*n1 by XCMPLX_1:4;
 hence thesis by A1,Th10;
end;

theorem Th37:
 a hcf b=1 & a divides b*c implies a divides c
proof
 assume A1: a hcf b=1 & a divides b*c;
 then A2:a gcd b=1 by Lm8;
   a divides (b*c qua Integer) by A1,Lm4;
 then a divides (c qua Integer) by A2,Th36;
 hence thesis by Lm4;
end;

theorem Th38:
 a<>0 & b<>0 implies ex c,d st a hcf b=a*c-b*d
proof
 assume A1: a<>0 & b<>0;
 consider m,n such that A2: (a hcf b)=a*m+b*n by Th34;
 A3: a>0 & b>0 by A1,NAT_1:19;
 set k=[/max(-m/b,n/a)\]+1;
   k>max(-m/b,n/a) by INT_1:57;
 then k>-m/b & k>n/a by Th6;
 then k>(-m)/b & k>n/a by XCMPLX_1:188;
 then k*b>-m & k*a>n by A3,REAL_2:177;
 then k*b--m>0 & k*a-n>0 by SQUARE_1:11;
 then k*b+m>0 & k*a-n>0 by XCMPLX_1:151;
 then reconsider e=k*b+m,d=k*a-n as Nat by INT_1:16;
   a*e-b*d=a*m+a*(k*b)-b*d by XCMPLX_1:8
       .=a*m+a*(k*b)-(b*(k*a)-b*n) by XCMPLX_1:40
       .=a*m+a*(k*b)-b*(k*a)+b*n by XCMPLX_1:37
       .=a*m+(a*(k*b)-b*(k*a))+b*n by XCMPLX_1:29
       .=a*m+(a*b*k-b*(a*k))+b*n by XCMPLX_1:4
       .=a*m+(b*a*k-b*a*k)+b*n by XCMPLX_1:4
       .=a*m+0+b*n by XCMPLX_1:14;
 hence thesis by A2;
end;

theorem
   f>0 & g>0 & (f hcf g)=1 & a|^f=b|^g implies ex e st a=e|^g & b=e|^f
proof
 assume A1: f>0 & g>0 & (f hcf g)=1 & a|^f=b|^g;
 then A2: f>=1 & g>=1 by RLVECT_1:98;
   now per cases;
  suppose A3: a=0;
   then a|^f=0 by A2,NEWTON:16;
   then a=0|^g & b=0|^f by A1,A3,CARD_4:51;
   hence thesis;
  suppose A4: b=0;
   then b|^g=0 by A2,NEWTON:16;
   then a=0|^g & b=0|^f by A1,A4,CARD_4:51;
   hence thesis;
  suppose A5: a<>0 & b<>0;
   consider c,d such that A6: f*c-g*d=1 by A1,Th38;
   reconsider q=(b|^c)/(a|^d) as Rational;
     a=a #Z 1 by PREPOWER:45
   .=(a |^ (f*c))/(a |^ (d*g)) by A5,A6,PREPOWER:53
   .=((a |^ f) |^ c)/(a |^ (d*g)) by NEWTON:14
   .=((b |^ g) |^ c)/((a |^ d) |^ g) by A1,NEWTON:14
   .=(b |^ (g*c))/((a |^ d) |^ g) by NEWTON:14
   .=((b |^ c) |^ g)/((a |^ d) |^ g) by NEWTON:14
   .=q|^g by PREPOWER:15;
   then consider h such that A7: a=h|^g by Th32;
     b|^g=h|^(f*g) by A1,A7,NEWTON:14
      .=(h|^f)|^g by NEWTON:14;
   then b=h|^f by A1,Lm7;
   hence thesis by A7;
 end;
 hence thesis;
end;

reserve x,y,t for Integer;

theorem Th40:
 (ex x,y st m*x+n*y=k) iff (m gcd n) divides k
proof
 A1: now given x,y such that A2: m*x+n*y=k;
  A3: (m gcd n) divides m by INT_2:31;
    (m gcd n) divides n by INT_2:32;
  hence (m gcd n) divides k by A2,A3,Th10;
 end;
   now assume A4: (m gcd n) divides k;
    now
    consider l such that A5: (m gcd n)*l=k by A4,INT_1:def 9;
    consider m1,n1 such that A6: (m gcd n)=m*m1+n*n1 by Th35;
      k=m*m1*l+n*n1*l by A5,A6,XCMPLX_1:8
    .=m*(m1*l)+n*n1*l by XCMPLX_1:4
    .=m*(m1*l)+n*(n1*l) by XCMPLX_1:4;
    hence ex x,y st m*x+n*y=k;
  end;
  hence ex x,y st m*x+n*y=k;
 end;
 hence thesis by A1;
end;

theorem
   m<>0 & n<>0 & m*m1+n*n1=k implies
   for x,y st m*x+n*y=k ex t st x=m1+t*(n/(m gcd n)) & y=n1-t*(m/(m gcd n))
proof
 assume A1: m<>0& n<>0 & m*m1+n*n1=k;
 let x,y such that A2: m*x+n*y=k;
 A3: (m gcd n)<>0 by A1,INT_2:35;
 consider m2,n2 such that A4: m=(m gcd n)*m2 & n=(m gcd n)*n2
                  & m2,n2 are_relative_prime by A1,INT_2:38;
 A5: m2=m/(m gcd n) & n2=n/(m gcd n) by A3,A4,XCMPLX_1:90;
 A6: (n2 gcd m2)=1 by A4,INT_2:def 4;
 A7: m2<>0 & n2<>0 by A1,A4;
   m*x-m*m1=n*n1-n*y by A1,A2,XCMPLX_1:33;
 then m*(x-m1)=n*n1-n*y by XCMPLX_1:40
             .=n*(n1-y) by XCMPLX_1:40;
 then A8: m2*(x-m1)=(n*(n1-y))/(m gcd n) by A5,XCMPLX_1:75
                  .=n2*(n1-y) by A5,XCMPLX_1:75;
 then A9: (x-m1)/n2=(n1-y)/m2 by A7,XCMPLX_1:95;
   n2 divides (m2*(x-m1)) by A8,INT_1:def 9;
 then n2 divides (x-m1) by A6,Th36;
 then consider t such that A10: n2*t=x-m1 by INT_1:def 9;
   t=(x-m1)/n2 by A7,A10,XCMPLX_1:90;
 then t*m2=n1-y by A7,A9,XCMPLX_1:88;
 then A11:y=n1-t*m2 by XCMPLX_1:18;
   x=m1+t*n2 by A10,XCMPLX_1:27;
 hence thesis by A5,A11;
end;

theorem
   a hcf b=1 & a*b=c|^d implies ex e,f st a=e|^d & b=f|^d
proof
 assume A1: (a hcf b)=1 & a*b=c|^d;
 set e=(a hcf c);
 A2: e=(a gcd c) by Lm8;
 A3: e divides c & e divides a by NAT_1:def 5;
 then A4: (e|^d) divides (c|^d) by Th19;
   (e hcf b)=1 by A1,A3,Th21;
 then (e|^d hcf b)=1 by Lm10;
 then (e|^d) divides a by A1,A4,Th37;
 then consider g such that A5: (e|^d)*g=a by NAT_1:def 3;
 A6: now assume A7: d=0;
  then a*b=1 by A1,NEWTON:9;
  then a divides 1 & b divides 1 by NAT_1:def 3;
  then a=1 & b=1 by Th20;
  then a=1|^0 & b=1|^0 by NEWTON:9;
  hence thesis by A7;
 end;
   now assume d<>0;
  then A8: d>=1 by RLVECT_1:98;
  then consider d1 being Nat such that A9: d=1+d1 by NAT_1:28;
  A10: now assume e=0;
   then A11: a=0 & 0=c by INT_2:5;
   then b=1 by A1,NAT_LAT:36;
   then A12: b=1|^d by NEWTON:15;
     a=0|^d by A8,A11,NEWTON:16;
   hence thesis by A12;
  end;
    now assume A13: e<>0;
   then A14: a<>0 or c <>0;
   then A15: a <> 0 by A1,CARD_4:51;
   A16: now assume A17: 0=c;
    then a*b=0 by A1,A8,NEWTON:16;
    then A18: b=0 by A14,A17,XCMPLX_1:6;
    then a=1 by A1,NAT_LAT:36;
    then A19: a=1|^d by NEWTON:15;
      b=0|^d by A8,A18,NEWTON:16;
    hence thesis by A19;
   end;
     now assume A20: c <>0;
    A21: e|^d<>0 by A13,CARD_4:51;
    consider a1,c1 being Integer such that
      A22: a=e*a1 & e*c1=c & a1,(c1 qua Integer) are_relative_prime
         by A2,A20,INT_2:38;
    reconsider a1,c1 as Nat by A15,A20,A22,Lm12;
    A23: a1=a/e & c1=c/e by A13,A22,XCMPLX_1:90;
      a1,c1 are_relative_prime by A22,Lm9;
    then A24: (a1 hcf c1)=1 by INT_2:def 6;
      a1=(e|^(d1+1))*g/e by A5,A9,A13,A22,XCMPLX_1:90
     .=(e*(e|^d1)*g)/e by NEWTON:11
     .=e*((e|^d1)*g)/e by XCMPLX_1:4
     .=(e|^d1)*g by A13,XCMPLX_1:90;
    then g divides a1 by NAT_1:def 3;
    then (g hcf c1)=1 by A24,Th21;
    then A25: (g hcf c1|^d)=1 by Lm10;
    A26: c1|^d=(c|^d)/(e|^d) by A23,PREPOWER:15
            .=(e|^d)*(g*b)/(e|^d) by A1,A5,XCMPLX_1:4
            .=g*b by A21,XCMPLX_1:90;
    then g divides (c1|^d) by NAT_1:def 3;
    then g=1 by A25,NAT_LAT:30;
    hence thesis by A5,A26;
   end;
   hence thesis by A16;
  end;
  hence thesis by A10;
 end;
 hence thesis by A6;
end;

:: Chinese remainder theorem

theorem Th43:
 for d holds
   (for a st a in dom fp holds fp.a hcf d=1) implies (Product(fp) hcf d)=1
proof
 let d;
 defpred TH[FinSequence of NAT] means
  (for a st a in dom $1 holds ($1.a hcf d)=1) implies (Product($1) hcf d)=1;
 A1: TH[<*>NAT] by NAT_LAT:35,RVSUM_1:124;
 A2:now
  let fp,a such that A3: TH[fp];
  thus TH[fp^<*a*>]
  proof
  set fp1=fp^<*a*>;
  assume A4: for b st b in dom fp1 holds fp1.b hcf d=1;
  A5: dom fp c= dom fp1 by FINSEQ_1:39;
A6:for b st b in dom fp holds fp.b hcf d=1
   proof let b; assume A7: b in dom fp;
    then fp1.b hcf d=1 by A4,A5;
    hence thesis by A7,FINSEQ_1:def 7;
   end;
  A8: len fp1=len fp + 1 by FINSEQ_2:19;
  then fp1 <> {} by FINSEQ_1:25;
  then len fp1 in dom fp1 by FINSEQ_5:6;
  then fp1.len fp1 hcf d=1 by A4;
  then A9: a hcf d=1 by A8,FINSEQ_1:59;
    Product(fp1)=Product(fp)*a by RVSUM_1:126;
  hence Product(fp1) hcf d=1 by A3,A6,A9,Th12;
  end;
 end;
   for fp holds TH[fp] from IndSeqD(A1,A2);
 hence thesis;
end;

theorem
   len fp>=2 &
 (for b,c st b in dom fp & c in dom fp & b<>c holds (fp.b hcf fp.c)=1)
           implies
 for fr st len fr=len fp holds ex fr1 st (len fr1=len fp &
 for b st b in dom fp holds (fp.b)*(fr1.b)+(fr.b)=(fp.1)*(fr1.1)+(fr.1))
proof
 defpred RP[FinSequence of NAT] means
   for b,c st b in dom $1 & c in dom $1 & b<>c holds ($1.b hcf $1.c)=1;
 defpred CC[FinSequence of NAT] means
   for fr st len fr=len $1 holds ex fr1 st (len fr1=len $1 &
      for b st b in dom $1 holds
      ($1.b)*(fr1.b)+(fr.b)=($1.1)*(fr1.1)+(fr.1));
 defpred TH[FinSequence of NAT] means
   (len $1>=2 & RP[$1]) implies CC[$1];
 A1:now len <*>NAT=0 by FINSEQ_1:32;
  hence TH[<*>NAT];
 end;
 A2:now
  let fp,d such that A3: TH[fp];
  set fp1=fp^<*d*>;
  set k=len fp;
    now assume A4:len fp1>=2 & RP[fp1];
   A5: len fp1=k+1 by FINSEQ_2:19;
     now per cases by A4,REAL_1:def 5;
    suppose A6: len fp1=2;
       now
      let fr such that len fr=len fp1;
        fp1.1 hcf fp1.2=1
       proof
          1 in dom fp1 & 2 in dom fp1 & 1<>2 by A6,FINSEQ_3:27;
        hence thesis by A4;
       end;
      then (fp1.1 hcf fp1.2) divides (fr.1 - fr.2) by INT_2:16;
      then (fp1.1 gcd fp1.2) divides (fr.1 - fr.2) by Lm8;
      then consider m,n such that A7:(fp1.1)*m+(fp1.2)*n=fr.1-fr.2 by Th40;
      reconsider x=-m,y=n as Element of INT by INT_1:12;
      take fr1=<*x,y*>;
      thus len fr1=len fp1 by A6,FINSEQ_1:61;
      let b such that A8:b in dom fp1;
A9:    b in Seg len fp1 by A8,FINSEQ_1:def 3;
        now per cases by A6,A9,FINSEQ_1:4,TARSKI:def 2;
       suppose b=1;
        hence (fp1.b)*(fr1.b)+(fr.b)=(fp1.1)*(fr1.1)+(fr.1);
       suppose A10:b=2;
        A11: fr1.1=-m & fr1.2=n by FINSEQ_1:61;
          (fp1.2)*n-(fp1.1)*(-m)=(fp1.2)*n--(fp1.1)*m by XCMPLX_1:175
                        .=fr.1-fr.2 by A7,XCMPLX_1:151;
        hence (fp1.b)*(fr1.b)+(fr.b)=(fp1.1)*(fr1.1)+(fr.1)
          by A10,A11,XCMPLX_1:34;
      end;
      hence (fp1.b)*(fr1.b)+(fr.b)=(fp1.1)*(fr1.1)+fr.1;
     end;
     hence CC[fp1];
    suppose A12: len fp1 > 2;
     then A13: k+1 > 1+1 by FINSEQ_2:19;
     then A14: k >= 1+1 by NAT_1:38;
A15:  RP[fp]
      proof
       let b,c such that A16: b in dom fp & c in dom fp & b<>c;
       A17: dom fp c= dom fp1 by FINSEQ_1:39;
         fp1.b=fp.b & (fp1.c)=fp.c by A16,FINSEQ_1:def 7;
       hence thesis by A4,A16,A17;
      end;
       now let fr2; assume A18: len fr2=len fp1;
      then len fr2 <> 0 by A12;
      then consider fr being FinSequence of INT,m being Element of INT
         such that A19: fr2=fr^<*m*> by FINSEQ_2:22;
      reconsider m as Integer;
A20:   k + 1=len fr + 1 by A5,A18,A19,FINSEQ_2:19;
then A21:  k=len fr by XCMPLX_1:2;
      then consider fr1 such that
A22:   len fr1=k & for b st b in dom fp holds
            (fp.b)*(fr1.b)+(fr.b)=(fp.1)*(fr1.1)+(fr.1)
            by A3,A13,A15,NAT_1:38;
        a in dom fp implies fp.a hcf d=1
       proof
        assume A23: a in dom fp;
        then A24: fp1.a=fp.a by FINSEQ_1:def 7;
        A25: dom fp c= dom fp1 by FINSEQ_1:39;
        A26: fp1.(len fp+1)=d by FINSEQ_1:59;
          len fp+1>len fp by NAT_1:38;
        then A27: len fp+1 <> a by A23,FINSEQ_3:27;
          fp1 <> {} by A5,FINSEQ_1:25;
        then (len fp+1) in dom fp1 by A5,FINSEQ_5:6;
        hence thesis by A4,A23,A24,A25,A26,A27;
       end;
      then Product(fp) hcf d=1 by Th43;
      then Product(fp) gcd d=1 by Lm8;
      then (Product(fp) gcd d) divides (fr2.(k+1)-(fp.1)*(fr1.1)-fr2.1)
        by INT_2:16;
      then consider m1,n1 such that
     A28: Product(fp)*m1+d*n1=(fr2.(k+1)-(fp.1)*(fr1.1)-fr2.1) by Th40;
      deffunc F(Nat) = Product Del(fp,$1)*m1+fr1.$1;
      consider s2 being FinSequence such that
       A29: len s2=k & for a st a in Seg k holds s2.a=F(a) from SeqLambda;
        for a st a in dom s2 holds s2.a in INT
       proof
        let a; assume a in dom s2;
        then a in Seg len s2 by FINSEQ_1:def 3;
        then s2.a=Product Del(fp,a)*m1+fr1.a by A29;
        hence thesis by INT_1:12;
       end;
      then reconsider s2 as FinSequence of INT by FINSEQ_2:14;
      reconsider x=-n1 as Element of INT by INT_1:12;
      take fr3=s2^<*x*>;
      thus len fr3=len fp1 by A5,A29,FINSEQ_2:19;
      let b such that A30: b in dom fp1;
      thus (fp1.b)*(fr3.b)+(fr2.b)=(fp1.1)*(fr3.1)+(fr2.1)
       proof
        A31: 1<=b & b<=k+1 by A5,A30,FINSEQ_3:27;
        A32: c in Seg k implies (fp1.c)*(fr3.c)=Product(fp)*m1+(fp.c)*(fr1.c)
         proof
          assume A33: c in Seg k;
          then A34: c in dom fp & c in dom s2 by A29,FINSEQ_1:def 3;
          then A35: fp.c = fp1.c by FINSEQ_1:def 7;
            fr3.c = s2.c by A34,FINSEQ_1:def 7
               .=Product Del(fp,c)*m1+fr1.c by A29,A33;
          hence (fp1.c)*(fr3.c)=
                    (fp1.c)*(Product Del(fp,c)*m1)+(fp1.c)*(fr1.c)
                      by XCMPLX_1:8
                  .=(fp.c)*Product Del(fp,c)*m1+(fp.c)*(fr1.c)
                    by A35,XCMPLX_1:4
                  .=Product(fp)*m1+(fp.c)*(fr1.c) by A34,Lm25;
         end;
          now per cases by A31,NAT_1:26;
         suppose A36: b<=k; then 1<=k by A31,AXIOMS:22;
           then A37: 1 in Seg k & b in Seg k by A31,A36,FINSEQ_1:3;
           then 1 in dom fr & b in dom fr by A21,FINSEQ_1:def 3;
           then A38: fr2.1=fr.1 & fr2.b=fr.b by A19,FINSEQ_1:def 7;
A39:         b in dom fp by A37,FINSEQ_1:def 3;
           thus (fp1.b)*(fr3.b)+(fr2.b)=
                       Product(fp)*m1+(fp.b)*(fr1.b)+(fr2.b) by A32,A37
                      .=Product(fp)*m1+((fp.b)*(fr1.b)+(fr.b)) by A38,XCMPLX_1:
1
                      .=Product(fp)*m1+((fp.1)*(fr1.1)+(fr.1)) by A22,A39
                      .=Product(fp)*m1+(fp.1)*(fr1.1)+(fr.1) by XCMPLX_1:1
                      .=(fp1.1)*(fr3.1)+(fr2.1) by A32,A37,A38;
         suppose A40: b=k+1;
          then A41: fr2.b-((fp.1)*(fr1.1)+fr2.1)
                          =d*n1+Product(fp)*m1 by A28,XCMPLX_1:36;
            1<=k by A14,AXIOMS:22;
          then 1 in Seg k by FINSEQ_1:3;
          then A42: (fp1.1)*(fr3.1)+(fr2.1)=
                        Product(fp)*m1+(fp.1)*(fr1.1)+(fr2.1) by A32
                      .=Product(fp)*m1+((fp.1)*(fr1.1)+(fr2.1)) by XCMPLX_1:1
                      .=fr2.b-d*n1 by A41,XCMPLX_1:35
                      .=fr2.b+-d*n1 by XCMPLX_0:def 8
                      .=fr2.b+d*(-n1) by XCMPLX_1:175;
            fp1.b=d & fr2.b=m & fr3.b=-n1
             by A19,A20,A29,A40,FINSEQ_1:59;
          hence (fp1.1)*(fr3.1)+(fr2.1)=(fp1.b)*(fr3.b)+(fr2.b) by A42;
        end;
        hence thesis;
       end;
     end;
     hence CC[fp1];
    end;
   hence CC[fp1];
  end;
  hence TH[fp1];
 end;
   for fp holds TH[fp] from IndSeqD(A1,A2);
 hence thesis;
end;

:: THUE'S THEOREM

Lm26:
 a divides b & b<a implies b=0
proof
 assume A1: not thesis;
 then b>0 by NAT_1:19;
 hence contradiction by A1,NAT_1:54;
end;

Lm27:
 k divides m iff k divides (abs(m))
proof
 per cases;
  suppose m>=0; hence thesis by ABSVALUE:def 1;
  suppose m<0; then abs(m)=-m by ABSVALUE:def 1;
   hence thesis by INT_2:14;
end;

Lm28:
 a divides m iff a divides abs(m)
proof
   a divides m iff a divides (abs(m) qua Integer) by Lm27;
 hence thesis by Lm4;
end;

Lm29:
 m*n mod n=0
proof
 per cases;
 suppose A1: n<>0;
 hence m*n mod n=m*n-(m*n div n)*n by INT_1:def 8
           .=m*n-[\(m*n)/n/]*n by INT_1:def 7
           .=m*n-[\m/]*n by A1,XCMPLX_1:90
           .=m*n-m*n by INT_1:47
           .=0 by XCMPLX_1:14;
 suppose n=0;
 hence thesis by INT_1:def 8;
end;

Lm30:
 k mod n=m mod n implies (k-m) mod n=0
proof
 assume A1: k mod n=m mod n;
 per cases;
 suppose A2:n <> 0;
 then k-(k div n)*n=m mod n by A1,INT_1:def 8
          .=m-(m div n)*n by A2,INT_1:def 8;
 then k-m=n*(k div n)-n*(m div n) by XCMPLX_1:24
        .=n*((k div n)-(m div n)) by XCMPLX_1:40;
 hence thesis by Lm29;
 suppose n = 0;
 hence thesis by INT_1:def 8;
end;

Lm31:
 n <> 0 & m mod n=0 implies n divides m
proof
 assume n <> 0 & m mod n=0;
 then m=(m div n)*n+0 by GR_CY_2:4
      .=(m div n)*n;
 hence thesis by INT_1:def 9;
end;

Lm32:
 (1<x implies 1<sqrt x & sqrt x<x)
 & (0<x & x<1 implies 0<sqrt x & sqrt x<1 & x<sqrt x)
proof
 hereby assume A1: 1<x;
  then A2: x>0 by AXIOMS:22;
  thus 1<sqrt x by A1,SQUARE_1:83,95;
  then sqrt x<(sqrt x)^2 by SQUARE_1:76;
  hence sqrt x<x by A2,SQUARE_1:def 4;
 end;
 hereby assume A3: 0<x & x<1;
  hence A4: 0<sqrt x by SQUARE_1:82,95;
  thus sqrt x<1 by A3,SQUARE_1:83,95;
  then (sqrt x)^2<sqrt x by A4,SQUARE_1:75;
  hence x<sqrt x by A3,SQUARE_1:def 4;
 end;
end;

canceled;

theorem
    a<>0 & a gcd k=1 implies ex b,e st 0<>b & 0<>e & b<=sqrt a & e<=sqrt a
         & (a divides (k*b+e) or a divides (k*b-e))
proof
 assume A1: a<>0 & (a gcd k)=1;
 then A2: a>=1 by RLVECT_1:98;
 A3: a>0 by A1,NAT_1:19;
 per cases by A2,REAL_1:def 5;
  suppose A4: a=1;
   take b=1, e=1;
   thus b<>0 & e<>0;
   thus b<=sqrt a & e<=sqrt a by A4,SQUARE_1:83;
   thus a divides k*b+e or a divides k*b-e by A4,INT_2:16;
  suppose A5: a>1;
   then A6: sqrt a<a by Lm32;
   set d=[\sqrt a/];
   set d1=d+1;
   A7: sqrt a>0 by A3,SQUARE_1:93;
   A8: d<=sqrt a & d>sqrt a -1 by INT_1:def 4;
   then A9: d<a by A6,AXIOMS:22;
     sqrt a>1 by A5,SQUARE_1:83,95;
   then sqrt a -1>0 by SQUARE_1:11;
   then A10: d>0 by A8,AXIOMS:22;
   then reconsider d as Nat by INT_1:16;
A11: d+1>=1 & 1>0 by A10,Lm1;
   A12: d1>0 by A10,Lm1;
   reconsider d1 as Nat by A11;
   set e1=d1^2;
     e1=d1*d1 by SQUARE_1:def 3;
   then reconsider e1 as Nat;
     sqrt a<d1 by A8,REAL_1:84;
   then (sqrt a)^2<e1 by A7,SQUARE_1:78;
   then A13: a<e1 by A3,SQUARE_1:def 4;
   deffunc F(Nat) = 1+ ((k*(($1-1) div d1)+(($1-1) mod d1)) mod a);
   consider fs such that A14: len fs=e1 & for b st b in Seg e1 holds
     fs.b=F(b) from SeqLambda;
   A15: Seg e1=dom fs by A14,FINSEQ_1:def 3;
   A16: rng fs c= Seg a
    proof
      let v; assume v in rng fs;
      then consider b such that A17:
      b in dom fs & fs.b=v by FINSEQ_2:11;
        b in Seg e1 by A14,A17,FINSEQ_1:def 3;
      then A18: v=1+ ((k*((b-1) div d1)+((b-1) mod d1)) mod a) by A14,A17;
      then reconsider v1=v as Integer;
        0<=((k*((b-1) div d1)+((b-1) mod d1)) mod a) by A3,GR_CY_2:2;
      then A19: 1<=v1 by A18,Lm1;
      then reconsider v1 as Nat by Lm13;
        ((k*((b-1) div d1)+((b-1) mod d1)) mod a)<a by A3,GR_CY_2:3;
      then v1<=a by A18,Lm16;
      hence v in Seg a by A19,FINSEQ_1:3;
    end;
     Seg a c= Seg e1 by A13,FINSEQ_1:7;
   then A20: rng fs c= dom fs by A15,A16,XBOOLE_1:1;
     rng fs <> dom fs by A13,A15,A16,FINSEQ_1:7;
   then not fs is one-to-one by A20,FINSEQ_4:74;
   then consider v1,v2 being set such that A21:
      v1 in dom fs & v2 in dom fs & fs.v1=fs.v2 & v1<>v2 by FUNCT_1:def 8;
   reconsider v1,v2 as Nat by A21;
   A22: 1<=v1 & v1<=e1 & 1<=v2 & v2<=e1 by A14,A21,FINSEQ_3:27;
   set x1=(v1-1) div d1, x2=(v2-1) div d1, x=x1-x2;
   set y1=(v1-1) mod d1, y2=(v2-1) mod d1, y=y1-y2;
   A23: x<>0 or y<>0
    proof
     assume not thesis;
     then x1=x2 & y1=y2 by XCMPLX_1:15;
     then v1-1=x2*d1+y2 by A11,GR_CY_2:4
            .=v2-1 by A11,GR_CY_2:4;
     hence contradiction by A21,XCMPLX_1:19;
    end;
   A24: y1<d1 & y2<d1 by A12,GR_CY_2:3;
   A25: y1>=0 & y2>=0 by A12,GR_CY_2:2;
   A26: abs(y)<=d
    proof
       y<d1 by A24,A25,Lm3;
     then A27: y<=d by Lm16;
       y2-y1<d1 by A24,A25,Lm3;
     then y2-y1<=d by Lm16;
     then -(y2-y1)>=-d by REAL_1:50;
     then y>=-d by XCMPLX_1:143;
     hence thesis by A27,ABSVALUE:12;
    end;
   then A28: abs(y)<a by A9,AXIOMS:22;
   A29: abs(x)<=d
    proof
     A30: x1=[\(v1-1)/d1/] & x2=[\(v2-1)/d1/] by INT_1:def 7;
     then A31: x1<=(v1-1)/d1 & x2<=(v2-1)/d1 by INT_1:def 4;
       v1-1<=e1-1 & v2-1<=e1-1 by A22,REAL_1:49;
     then A32: (v1-1)/d1<=(e1-1)/d1 & (v2-1)/d1<=(e1-1)/d1 by A12,REAL_1:73;
     A33: (e1-1)/d1=(d1*d1-1)/d1 by SQUARE_1:def 3
           .=d1-1/d1 by A11,XCMPLX_1:128;
       1/d1>0 by A12,REAL_2:127;
     then (e1-1)/d1<d1 by A33,Lm1;
     then (v1-1)/d1<d1 & (v2-1)/d1<d1 by A32,AXIOMS:22;
     then x1<d1 & x2<d1 by A31,AXIOMS:22;
     then A34: x1<=d & x2<=d by Lm16;
     A35: [\0/]=0 by INT_1:47;
       v1-1>=0 & v2-1>=0 by A22,SQUARE_1:12;
     then (v1-1)/d1>=0 & (v2-1)/d1>=0 by A12,REAL_2:125;
     then x1>=0 & x2>=0 by A30,A35,PRE_FF:11;
     then A36: x<=d & x2-x1<=d by A34,Lm2;
     then -(x2-x1)>=-d by REAL_1:50;
     then x>=-d by XCMPLX_1:143;
     hence thesis by A36,ABSVALUE:12;
    end;
   then A37: abs(x)<a by A9,AXIOMS:22;
     fs.v1=1+((k*x1+y1) mod a) & fs.v2=1+((k*x2+y2) mod a) by A14,A15,A21;
   then (k*x1+y1) mod a=(k*x2+y2) mod a by A21,XCMPLX_1:2;
   then ((k*x1+y1)-(k*x2+y2)) mod a = 0 by Lm30;
   then A38: a divides (k*x1+y1)-(k*x2+y2) by A1,Lm31;
   A39: (k*x1+y1)-(k*x2+y2)=k*x1+y1-k*x2-y2 by XCMPLX_1:36
         .=k*x1-k*x2+y1-y2 by XCMPLX_1:29
         .=k*x+y1-y2 by XCMPLX_1:40
         .=k*x+y by XCMPLX_1:29;
   set d2=k*x+y;
   A40: -d2=-(k*x)-y by XCMPLX_1:161
     .=k*(-x)-y by XCMPLX_1:175;
   then A41: -d2=k*(-x)+-y by XCMPLX_0:def 8;
   A42: now assume A43: x=0;
    then a divides (abs(y)) by A38,A39,Lm28;
    then abs(y)=0 by A28,Lm26;
    hence contradiction by A23,A43,ABSVALUE:7;
   end;
   A44: now assume A45: y=0;
    then a divides x by A1,A38,A39,Th36;
    then a divides (abs(x)) by Lm28;
    then abs(x)=0 by A37,Lm26;
    hence contradiction by A23,A45,ABSVALUE:7;
   end;
   take b=abs(x), e=abs(y);
   thus b<>0 & e<>0 by A42,A44,ABSVALUE:7;
   thus b<=sqrt a by A8,A29,AXIOMS:22;
   thus e<=sqrt a by A8,A26,AXIOMS:22;
     (b=x or b=-x) & (e=y or e=-y) by INT_1:30;
   hence a divides k*b+e or a divides
      k*b-e by A38,A39,A40,A41,INT_2:14,XCMPLX_1:151;
end;

theorem
    dom Del(fs,a) c= dom fs by Lm21;

theorem
    Del (<*v*>^fs, 1) = fs & Del (fs^<*v*>, len fs + 1) = fs by Lm23;

Back to top