defpred S1[ Nat] means for m, k, f, ie being Nat st ie is_represented_by $1,k & f > 0 holds
for e being Tuple of $1,NAT st e = DecSD2 ie,$1,k holds
(Pow_mod m,e,f,k) . $1 = (m |^ ie) mod f;
A1: S1[1]
proof
let m, k, f, ie be Nat; :: thesis: ( ie is_represented_by 1,k & f > 0 implies for e being Tuple of 1,NAT st e = DecSD2 ie,1,k holds
(Pow_mod m,e,f,k) . 1 = (m |^ ie) mod f )

assume A2: ( ie is_represented_by 1,k & f > 0 ) ; :: thesis: for e being Tuple of 1,NAT st e = DecSD2 ie,1,k holds
(Pow_mod m,e,f,k) . 1 = (m |^ ie) mod f

let e be Tuple of 1,NAT ; :: thesis: ( e = DecSD2 ie,1,k implies (Pow_mod m,e,f,k) . 1 = (m |^ ie) mod f )
assume A3: e = DecSD2 ie,1,k ; :: thesis: (Pow_mod m,e,f,k) . 1 = (m |^ ie) mod f
ie < (Radix k) |^ 1 by A2, RADIX_1:def 12;
then A4: ie < Radix k by NEWTON:10;
A5: 1 - 1 = 0 ;
A6: 1 in Seg 1 by FINSEQ_1:4, TARSKI:def 1;
len (DecSD2 ie,1,k) = 1 by FINSEQ_1:def 18;
then 1 in dom (DecSD2 ie,1,k) by A6, FINSEQ_1:def 3;
then e /. 1 = (DecSD2 ie,1,k) . 1 by A3, PARTFUN1:def 8
.= DigitDC2 ie,1,k by A6, Def5
.= (ie mod ((Radix k) |^ 1)) div ((Radix k) |^ 0 ) by A5, XREAL_0:def 2
.= (ie mod ((Radix k) |^ 1)) div 1 by NEWTON:9
.= ie mod ((Radix k) |^ 1) by NAT_2:6
.= ie mod (Radix k) by NEWTON:10
.= ie by A4, NAT_D:24 ;
then (m |^ ie) mod f = Table2 m,e,f,1 ;
hence (Pow_mod m,e,f,k) . 1 = (m |^ ie) mod f by Def9; :: thesis: verum
end;
A7: for n being Nat st n >= 1 & S1[n] holds
S1[n + 1]
proof
let n be Nat; :: thesis: ( n >= 1 & S1[n] implies S1[n + 1] )
assume A8: ( n >= 1 & S1[n] ) ; :: thesis: S1[n + 1]
A9: n + 1 >= 1 by NAT_1:12;
let m, k, f, ie be Nat; :: thesis: ( ie is_represented_by n + 1,k & f > 0 implies for e being Tuple of (n + 1),NAT st e = DecSD2 ie,(n + 1),k holds
(Pow_mod m,e,f,k) . (n + 1) = (m |^ ie) mod f )

assume A10: ( ie is_represented_by n + 1,k & f > 0 ) ; :: thesis: for e being Tuple of (n + 1),NAT st e = DecSD2 ie,(n + 1),k holds
(Pow_mod m,e,f,k) . (n + 1) = (m |^ ie) mod f

let e be Tuple of (n + 1),NAT ; :: thesis: ( e = DecSD2 ie,(n + 1),k implies (Pow_mod m,e,f,k) . (n + 1) = (m |^ ie) mod f )
assume A11: e = DecSD2 ie,(n + 1),k ; :: thesis: (Pow_mod m,e,f,k) . (n + 1) = (m |^ ie) mod f
reconsider n = n as Element of NAT by ORDINAL1:def 13;
deffunc H1( Nat) -> Element of NAT = e . ($1 + 1);
consider en being FinSequence of NAT such that
A12: len en = n and
A13: for i being Nat st i in dom en holds
en . i = H1(i) from FINSEQ_2:sch 1();
A14: dom en = Seg n by A12, FINSEQ_1:def 3;
reconsider en = en as Tuple of n,NAT by A12, FINSEQ_2:110;
A15: 1 in Seg 1 by FINSEQ_1:4, TARSKI:def 1;
then A16: 1 in Seg (1 + n) by FINSEQ_2:9;
A17: n in Seg n by A8, FINSEQ_1:3;
A18: n + 1 in Seg (n + 1) by A9, FINSEQ_1:3;
A19: for i being Element of NAT st i in Seg n holds
(Pow_mod m,en,f,k) . i = (Pow_mod m,e,f,k) . i
proof
defpred S2[ Element of NAT ] means ( $1 in Seg n implies (Pow_mod m,en,f,k) . $1 = (Pow_mod m,e,f,k) . $1 );
A20: S2[ 0 ] by FINSEQ_1:3;
A21: for i being Element of NAT st S2[i] holds
S2[i + 1]
proof
let i be Element of NAT ; :: thesis: ( S2[i] implies S2[i + 1] )
assume A22: ( i in Seg n implies (Pow_mod m,en,f,k) . i = (Pow_mod m,e,f,k) . i ) ; :: thesis: S2[i + 1]
assume A23: i + 1 in Seg n ; :: thesis: (Pow_mod m,en,f,k) . (i + 1) = (Pow_mod m,e,f,k) . (i + 1)
then A24: ( 1 <= i + 1 & i + 1 <= n ) by FINSEQ_1:3;
then A25: (i + 1) - 1 <= n - 1 by XREAL_1:11;
A26: ( i = 0 or i + 1 > 1 + 0 ) by XREAL_1:8;
A27: dom en = Seg n by A12, FINSEQ_1:def 3;
A28: dom e = Seg (len e) by FINSEQ_1:def 3;
then A29: dom e = Seg (n + 1) by FINSEQ_1:def 18;
now
per cases ( i = 0 or i >= 1 ) by A26, NAT_1:13;
case A30: i = 0 ; :: thesis: (Pow_mod m,en,f,k) . (i + 1) = (Pow_mod m,e,f,k) . (i + 1)
then (Pow_mod m,en,f,k) . (i + 1) = Table2 m,en,f,n by A8, Def9
.= (m |^ (en . n)) mod f by A17, A27, PARTFUN1:def 8
.= (m |^ (e . (n + 1))) mod f by A13, A17, A14
.= Table2 m,e,f,(n + 1) by A18, A29, PARTFUN1:def 8
.= (Pow_mod m,e,f,k) . 1 by A9, Def9 ;
hence (Pow_mod m,en,f,k) . (i + 1) = (Pow_mod m,e,f,k) . (i + 1) by A30; :: thesis: verum
end;
case A31: i >= 1 ; :: thesis: (Pow_mod m,en,f,k) . (i + 1) = (Pow_mod m,e,f,k) . (i + 1)
reconsider nn = n - 1 as Element of NAT by A8, INT_1:18;
A32: ( 1 <= i & i <= nn + 1 ) by A25, A31, NAT_1:12;
then A33: ( 1 <= i & i <= (n + 1) - 1 ) ;
A34: ex I1, I2 being Nat st
( I1 = (Pow_mod m,en,f,k) . i & I2 = (Pow_mod m,en,f,k) . (i + 1) & I2 = (((I1 |^ (Radix k)) mod f) * (Table2 m,en,f,(n -' i))) mod f ) by A8, A25, A31, Def9;
A35: ex I1, I2 being Nat st
( I1 = (Pow_mod m,e,f,k) . i & I2 = (Pow_mod m,e,f,k) . (i + 1) & I2 = (((I1 |^ (Radix k)) mod f) * (Table2 m,e,f,((n + 1) -' i))) mod f ) by A9, A33, Def9;
(1 + i) - i <= n - i by A24, XREAL_1:11;
then A36: 1 <= n -' i by A32, XREAL_1:235;
n -' i <= n by NAT_D:35;
then A37: n -' i in Seg n by A36, FINSEQ_1:3;
then A38: n -' i in dom en by A12, FINSEQ_1:def 3;
A39: (n + 1) -' i <= n + 1 by NAT_D:35;
i + 1 <= n by A23, FINSEQ_1:3;
then (i + 1) - 1 <= n - 1 by XREAL_1:11;
then (n + 1) -' i >= (n + 1) -' nn by NAT_D:41;
then (n + 1) -' i >= (n + 1) - (n - 1) by XREAL_0:def 2;
then 1 <= (n + 1) -' i by XXREAL_0:2;
then (n + 1) -' i in Seg (n + 1) by A39, FINSEQ_1:3;
then A40: (n + 1) -' i in dom e by A28, FINSEQ_1:def 18;
(Pow_mod m,en,f,k) . (i + 1) = (((((Pow_mod m,e,f,k) . i) |^ (Radix k)) mod f) * ((m |^ (en . (n -' i))) mod f)) mod f by A22, A32, A34, A38, FINSEQ_1:3, PARTFUN1:def 8
.= (((((Pow_mod m,e,f,k) . i) |^ (Radix k)) mod f) * ((m |^ (e . ((n -' i) + 1))) mod f)) mod f by A13, A37, A14
.= (((((Pow_mod m,e,f,k) . i) |^ (Radix k)) mod f) * ((m |^ (e . ((n + 1) -' i))) mod f)) mod f by A32, NAT_D:38
.= (((((Pow_mod m,e,f,k) . i) |^ (Radix k)) mod f) * (Table2 m,e,f,((n + 1) -' i))) mod f by A40, PARTFUN1:def 8 ;
hence (Pow_mod m,en,f,k) . (i + 1) = (Pow_mod m,e,f,k) . (i + 1) by A35; :: thesis: verum
end;
end;
end;
hence (Pow_mod m,en,f,k) . (i + 1) = (Pow_mod m,e,f,k) . (i + 1) ; :: thesis: verum
end;
for i being Element of NAT holds S2[i] from NAT_1:sch 1(A20, A21);
hence for i being Element of NAT st i in Seg n holds
(Pow_mod m,en,f,k) . i = (Pow_mod m,e,f,k) . i ; :: thesis: verum
end;
A41: n in Seg n by A8, FINSEQ_1:5;
set ien = SDDec2 en,k;
A42: ie = ((SDDec2 en,k) * (Radix k)) + (e /. 1)
proof
reconsider r2 = Radix k as Element of REAL by XREAL_0:def 1;
deffunc H2( Nat) -> Element of NAT = (DigitSD2 en,k) . $1;
consider rD being FinSequence of REAL such that
A43: len rD = n and
A44: for i being Nat st i in dom rD holds
rD . i = H2(i) from FINSEQ_2:sch 1();
reconsider rD = rD as Tuple of n,REAL by A43, FINSEQ_2:110;
A46: dom (DigitSD2 en,k) = Seg (len (DigitSD2 en,k)) by FINSEQ_1:def 3
.= Seg n by FINSEQ_1:def 18 ;
A47: dom rD = Seg n by A43, FINSEQ_1:def 3;
A48: 1 - 1 = 0 ;
A49: DigitSD2 e,k = <*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))
proof
A50: len (DigitSD2 e,k) = n + 1 by FINSEQ_1:def 18;
A51: len ((Radix k) * (DigitSD2 en,k)) = len (r2 * rD) by A44, A46, A47, FINSEQ_1:17
.= n by FINSEQ_1:def 18 ;
A52: len <*(SubDigit2 e,1,k)*> = 1 by FINSEQ_1:56;
A53: len (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) = (len <*(SubDigit2 e,1,k)*>) + (len ((Radix k) * (DigitSD2 en,k))) by FINSEQ_1:35
.= n + 1 by A51, FINSEQ_1:def 18 ;
then A54: len (DigitSD2 e,k) = len (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) by FINSEQ_1:def 18;
for i being Nat st 1 <= i & i <= len (DigitSD2 e,k) holds
(DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i
proof
let i be Nat; :: thesis: ( 1 <= i & i <= len (DigitSD2 e,k) implies (DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i )
assume A55: ( 1 <= i & i <= len (DigitSD2 e,k) ) ; :: thesis: (DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i
then A56: i <= n + 1 by FINSEQ_1:def 18;
then A57: i in Seg (n + 1) by A55, FINSEQ_1:3;
then A58: i in dom (DigitSD2 e,k) by A50, FINSEQ_1:def 3;
per cases ( i = 1 or i <> 1 ) ;
suppose A59: i = 1 ; :: thesis: (DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i
then (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i = SubDigit2 e,1,k by FINSEQ_1:58
.= (DigitSD2 e,k) /. 1 by A16, Def2
.= (DigitSD2 e,k) . 1 by A58, A59, PARTFUN1:def 8 ;
hence (DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i by A59; :: thesis: verum
end;
suppose A60: i <> 1 ; :: thesis: (DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i
1 - 1 <= i - 1 by A55, XREAL_1:11;
then reconsider i1 = i - 1 as Element of NAT by INT_1:16;
1 < i by A55, A60, XXREAL_0:1;
then 1 + 1 <= i by INT_1:20;
then A61: (1 + 1) - 1 <= i - 1 by XREAL_1:11;
A62: i - 1 <= (n + 1) - 1 by A56, XREAL_1:11;
then A63: i1 in Seg n by A61, FINSEQ_1:3;
A64: i1 in dom rD by A47, A61, A62, FINSEQ_1:3;
reconsider rs = rD . (i - 1) as Real ;
reconsider rs2 = (DigitSD2 en,k) . (i - 1) as Element of NAT ;
1 < i by A55, A60, XXREAL_0:1;
then (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i = ((Radix k) * (DigitSD2 en,k)) . (i - 1) by A52, A53, A56, FINSEQ_1:37
.= (r2 * rD) . (i - 1) by A44, A46, A47, FINSEQ_1:17
.= r2 * rs by RVSUM_1:67
.= (Radix k) * rs2 by A44, A46, A47, FINSEQ_1:17
.= (Radix k) * ((DigitSD2 en,k) /. i1) by A46, A47, A64, PARTFUN1:def 8
.= (Radix k) * (SubDigit2 en,i1,k) by A63, Def2
.= ((Radix k) * ((Radix k) |^ (i1 -' 1))) * (en . i1)
.= ((Radix k) |^ ((i1 -' 1) + 1)) * (en . i1) by NEWTON:11
.= ((Radix k) |^ i1) * (en . i1) by A61, XREAL_1:237
.= ((Radix k) |^ i1) * (e . (i1 + 1)) by A13, A63, A14
.= SubDigit2 e,i,k by A55, XREAL_1:235
.= (DigitSD2 e,k) /. i by A57, Def2 ;
hence (DigitSD2 e,k) . i = (<*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k))) . i by A58, PARTFUN1:def 8; :: thesis: verum
end;
end;
end;
hence DigitSD2 e,k = <*(SubDigit2 e,1,k)*> ^ ((Radix k) * (DigitSD2 en,k)) by A54, FINSEQ_1:18; :: thesis: verum
end;
dom e = Seg (len e) by FINSEQ_1:def 3;
then A65: 1 in dom e by A16, FINSEQ_1:def 18;
ie = SDDec2 e,k by A10, A11, Th15, NAT_1:12
.= (SubDigit2 e,1,k) + (Sum ((Radix k) * (DigitSD2 en,k))) by A49, RVSUM_1:106
.= (SubDigit2 e,1,k) + (Sum (r2 * rD)) by A44, A46, A47, FINSEQ_1:17
.= (SubDigit2 e,1,k) + (r2 * (Sum rD)) by RVSUM_1:117
.= (SubDigit2 e,1,k) + ((Radix k) * (SDDec2 en,k)) by A44, A46, A47, FINSEQ_1:17
.= (((Radix k) |^ 0 ) * (e . 1)) + ((Radix k) * (SDDec2 en,k)) by A48, XREAL_0:def 2
.= (1 * (e . 1)) + ((Radix k) * (SDDec2 en,k)) by NEWTON:9 ;
hence ie = ((SDDec2 en,k) * (Radix k)) + (e /. 1) by A65, PARTFUN1:def 8; :: thesis: verum
end;
then A66: ie >= (SDDec2 en,k) * (Radix k) by INT_1:19;
A67: Radix k > 0 by Th6;
ie < (Radix k) |^ (n + 1) by A10, RADIX_1:def 12;
then (SDDec2 en,k) * (Radix k) < (Radix k) |^ (n + 1) by A66, XXREAL_0:2;
then (SDDec2 en,k) * (Radix k) < ((Radix k) |^ n) * (Radix k) by NEWTON:11;
then SDDec2 en,k < (Radix k) |^ n by XREAL_1:66;
then A68: SDDec2 en,k is_represented_by n,k by RADIX_1:def 12;
A69: en = DecSD2 (SDDec2 en,k),n,k
proof
A70: len en = len (DecSD2 (SDDec2 en,k),n,k) by A12, FINSEQ_1:def 18;
for i being Nat st 1 <= i & i <= len en holds
en . i = (DecSD2 (SDDec2 en,k),n,k) . i
proof
let i be Nat; :: thesis: ( 1 <= i & i <= len en implies en . i = (DecSD2 (SDDec2 en,k),n,k) . i )
assume A71: ( 1 <= i & i <= len en ) ; :: thesis: en . i = (DecSD2 (SDDec2 en,k),n,k) . i
then A72: i in Seg n by A12, FINSEQ_1:3;
( 1 <= i + 1 & i + 1 <= n + 1 ) by A12, A71, XREAL_1:8, XREAL_1:31;
then A73: i + 1 in Seg (n + 1) by FINSEQ_1:3;
A74: e . 1 = DigitDC2 ie,1,k by A11, A16, Def5
.= (ie mod ((Radix k) |^ 1)) div ((Radix k) |^ 0 ) by XREAL_1:234
.= (ie mod ((Radix k) |^ 1)) div 1 by NEWTON:9
.= ie mod ((Radix k) |^ 1) by NAT_2:6
.= ie mod (Radix k) by NEWTON:10 ;
dom e = Seg (len e) by FINSEQ_1:def 3;
then A75: dom e = Seg (n + 1) by FINSEQ_1:def 18;
A76: ( 1 <= i + 1 & 0 < Radix k ) by A71, Th6, XREAL_1:31;
A77: ( Radix k <> 0 & i <> 0 ) by A71, Th6;
A78: ((e . 1) + ((SDDec2 en,k) * (Radix k))) div (Radix k) = [\(((e . 1) + ((SDDec2 en,k) * (Radix k))) / (Radix k))/] by INT_1:def 7
.= [\(((e . 1) / (Radix k)) + (SDDec2 en,k))/] by A76, XCMPLX_1:114
.= [\((e . 1) / (Radix k))/] + (SDDec2 en,k) by INT_1:51
.= ((e . 1) div (Radix k)) + (SDDec2 en,k) by INT_1:def 7
.= 0 + (SDDec2 en,k) by A67, A74, NAT_D:1, NAT_D:27 ;
en . i = e . (i + 1) by A13, A72, A14
.= DigitDC2 ie,(i + 1),k by A11, A73, Def5
.= ((((SDDec2 en,k) * (Radix k)) + (e /. 1)) div ((Radix k) |^ ((i + 1) -' 1))) mod (Radix k) by A42, A76, Th4
.= ((((SDDec2 en,k) * (Radix k)) + (e . 1)) div ((Radix k) |^ ((i + 1) -' 1))) mod (Radix k) by A15, A75, FINSEQ_2:9, PARTFUN1:def 8
.= ((((SDDec2 en,k) * (Radix k)) + (e . 1)) div ((Radix k) |^ i)) mod (Radix k) by NAT_D:34
.= ((((SDDec2 en,k) * (Radix k)) + (e . 1)) div ((Radix k) * ((Radix k) |^ (i -' 1)))) mod (Radix k) by A77, PEPIN:27
.= ((((e . 1) + ((SDDec2 en,k) * (Radix k))) div (Radix k)) div ((Radix k) |^ (i -' 1))) mod (Radix k) by NAT_2:29
.= DigitDC2 (SDDec2 en,k),i,k by A71, A76, A78, Th4 ;
hence en . i = (DecSD2 (SDDec2 en,k),n,k) . i by A72, Def5; :: thesis: verum
end;
hence en = DecSD2 (SDDec2 en,k),n,k by A70, FINSEQ_1:18; :: thesis: verum
end;
A79: n <= (n + 1) - 1 ;
n + 1 >= 1 by NAT_1:11;
then ex I1, I2 being Nat st
( I1 = (Pow_mod m,e,f,k) . n & I2 = (Pow_mod m,e,f,k) . (n + 1) & I2 = (((I1 |^ (Radix k)) mod f) * (Table2 m,e,f,((n + 1) -' n))) mod f ) by A8, A79, Def9;
then (Pow_mod m,e,f,k) . (n + 1) = (((((Pow_mod m,en,f,k) . n) |^ (Radix k)) mod f) * (Table2 m,e,f,((n + 1) -' n))) mod f by A19, A41
.= (((((m |^ (SDDec2 en,k)) mod f) |^ (Radix k)) mod f) * (Table2 m,e,f,((n + 1) -' n))) mod f by A8, A10, A68, A69
.= ((((m |^ (SDDec2 en,k)) |^ (Radix k)) mod f) * (Table2 m,e,f,((n + 1) -' n))) mod f by PEPIN:12
.= (((m |^ (SDDec2 en,k)) |^ (Radix k)) * (Table2 m,e,f,((n + 1) -' n))) mod f by EULER_2:10
.= ((m |^ ((SDDec2 en,k) * (Radix k))) * (Table2 m,e,f,((n + 1) -' n))) mod f by NEWTON:14
.= ((m |^ ((SDDec2 en,k) * (Radix k))) * ((m |^ (e /. 1)) mod f)) mod f by NAT_D:34
.= ((m |^ ((SDDec2 en,k) * (Radix k))) * (m |^ (e /. 1))) mod f by EULER_2:9
.= (m |^ (((SDDec2 en,k) * (Radix k)) + (e /. 1))) mod f by NEWTON:13 ;
hence (Pow_mod m,e,f,k) . (n + 1) = (m |^ ie) mod f by A42; :: thesis: verum
end;
for n being Nat st n >= 1 holds
S1[n] from NAT_1:sch 8(A1, A7);
hence for n being Nat st n >= 1 holds
for m, k, f, ie being Nat st ie is_represented_by n,k & f > 0 holds
for e being Tuple of n,NAT st e = DecSD2 ie,n,k holds
(Pow_mod m,e,f,k) . n = (m |^ ie) mod f ; :: thesis: verum