let O, E1, E2 be set ; :: thesis: for A1 being Action of O,E1
for A2 being Action of O,E2
for F being FinSequence of O st E1 c= E2 & ( for o being Element of O
for f1 being Function of E1,E1
for f2 being Function of E2,E2 st f1 = A1 . o & f2 = A2 . o holds
f1 = f2 | E1 ) holds
Product (F,A1) = (Product (F,A2)) | E1

let A1 be Action of O,E1; :: thesis: for A2 being Action of O,E2
for F being FinSequence of O st E1 c= E2 & ( for o being Element of O
for f1 being Function of E1,E1
for f2 being Function of E2,E2 st f1 = A1 . o & f2 = A2 . o holds
f1 = f2 | E1 ) holds
Product (F,A1) = (Product (F,A2)) | E1

let A2 be Action of O,E2; :: thesis: for F being FinSequence of O st E1 c= E2 & ( for o being Element of O
for f1 being Function of E1,E1
for f2 being Function of E2,E2 st f1 = A1 . o & f2 = A2 . o holds
f1 = f2 | E1 ) holds
Product (F,A1) = (Product (F,A2)) | E1

let F be FinSequence of O; :: thesis: ( E1 c= E2 & ( for o being Element of O
for f1 being Function of E1,E1
for f2 being Function of E2,E2 st f1 = A1 . o & f2 = A2 . o holds
f1 = f2 | E1 ) implies Product (F,A1) = (Product (F,A2)) | E1 )

defpred S1[ Nat] means for F being FinSequence of O st len F = \$1 holds
Product (F,A1) = (Product (F,A2)) | E1;
assume A1: E1 c= E2 ; :: thesis: ( ex o being Element of O ex f1 being Function of E1,E1 ex f2 being Function of E2,E2 st
( f1 = A1 . o & f2 = A2 . o & not f1 = f2 | E1 ) or Product (F,A1) = (Product (F,A2)) | E1 )

A2: S1[ 0 ]
proof
let F be FinSequence of O; :: thesis: ( len F = 0 implies Product (F,A1) = (Product (F,A2)) | E1 )
A3: now :: thesis: for x being object st x in dom (id E1) holds
(id E1) . x = (id E2) . x
let x be object ; :: thesis: ( x in dom (id E1) implies (id E1) . x = (id E2) . x )
assume A4: x in dom (id E1) ; :: thesis: (id E1) . x = (id E2) . x
then A5: x in E1 ;
thus (id E1) . x = x by
.= (id E2) . x by ; :: thesis: verum
end;
E1 = E2 /\ E1 by ;
then dom (id E1) = E2 /\ E1 ;
then A6: dom (id E1) = (dom (id E2)) /\ E1 ;
assume A7: len F = 0 ; :: thesis: Product (F,A1) = (Product (F,A2)) | E1
hence Product (F,A1) = id E1 by Def3
.= (id E2) | E1 by
.= (Product (F,A2)) | E1 by ;
:: thesis: verum
end;
assume A8: for o being Element of O
for f1 being Function of E1,E1
for f2 being Function of E2,E2 st f1 = A1 . o & f2 = A2 . o holds
f1 = f2 | E1 ; :: thesis: Product (F,A1) = (Product (F,A2)) | E1
per cases ( O is empty or not O is empty ) ;
suppose O is empty ; :: thesis: Product (F,A1) = (Product (F,A2)) | E1
then len F = 0 ;
hence Product (F,A1) = (Product (F,A2)) | E1 by A2; :: thesis: verum
end;
suppose A9: not O is empty ; :: thesis: Product (F,A1) = (Product (F,A2)) | E1
A10: for k being Nat st S1[k] holds
S1[k + 1]
proof
let k be Nat; :: thesis: ( S1[k] implies S1[k + 1] )
assume A11: S1[k] ; :: thesis: S1[k + 1]
now :: thesis: for F being FinSequence of O st len F = k + 1 holds
Product (F,A1) = (Product (F,A2)) | E1
let F be FinSequence of O; :: thesis: ( len F = k + 1 implies Product (F,A1) = (Product (F,A2)) | E1 )
assume A12: len F = k + 1 ; :: thesis: Product (F,A1) = (Product (F,A2)) | E1
then consider Fk being FinSequence of O, o being Element of O such that
A13: F = Fk ^ <*o*> by FINSEQ_2:19;
len F = (len Fk) + () by ;
then A14: k + 1 = (len Fk) + 1 by ;
A15: now :: thesis: for x being object st x in dom (Product (F,A1)) holds
(Product (F,A1)) . x = ((Product (F,A2)) | E1) . x
{o} c= O by ;
then rng <*o*> c= O by FINSEQ_1:38;
then reconsider Fo = <*o*> as FinSequence of O by FINSEQ_1:def 4;
let x be object ; :: thesis: ( x in dom (Product (F,A1)) implies (Product (F,A1)) . x = ((Product (F,A2)) | E1) . x )
assume A16: x in dom (Product (F,A1)) ; :: thesis: (Product (F,A1)) . x = ((Product (F,A2)) | E1) . x
then A17: x in E1 ;
A18: o in O by A9;
then o in dom A1 by FUNCT_2:def 1;
then A1 . o in rng A1 by FUNCT_1:3;
then consider f1 being Function such that
A19: f1 = A1 . o and
A20: dom f1 = E1 and
A21: rng f1 c= E1 by FUNCT_2:def 2;
A22: Product (Fo,A1) = f1 by ;
o in dom A2 by ;
then A2 . o in rng A2 by FUNCT_1:3;
then consider f2 being Function such that
A23: f2 = A2 . o and
A24: dom f2 = E2 and
rng f2 c= E2 by FUNCT_2:def 2;
A25: Product (Fo,A2) = f2 by ;
A26: f1 . x in rng f1 by ;
A27: Product (F,A2) = (Product (Fk,A2)) * (Product (Fo,A2)) by
.= (Product (Fk,A2)) * f2 by ;
Product (F,A1) = (Product (Fk,A1)) * (Product (Fo,A1)) by
.= (Product (Fk,A1)) * f1 by ;
hence (Product (F,A1)) . x = (Product (Fk,A1)) . (f1 . x) by
.= ((Product (Fk,A2)) | E1) . (f1 . x) by
.= (Product (Fk,A2)) . (f1 . x) by
.= (Product (Fk,A2)) . ((f2 | E1) . x) by A8, A19, A23, A22, A25
.= (Product (Fk,A2)) . (f2 . x) by
.= ((Product (Fk,A2)) * f2) . x by
.= ((Product (F,A2)) | E1) . x by ;
:: thesis: verum
end;
Product (F,A2) in Funcs (E2,E2) by FUNCT_2:9;
then ex f2 being Function st
( Product (F,A2) = f2 & dom f2 = E2 & rng f2 c= E2 ) by FUNCT_2:def 2;
then A28: dom ((Product (F,A2)) | E1) = E2 /\ E1 by RELAT_1:61
.= E1 by ;
Product (F,A1) in Funcs (E1,E1) by FUNCT_2:9;
then ex f1 being Function st
( Product (F,A1) = f1 & dom f1 = E1 & rng f1 c= E1 ) by FUNCT_2:def 2;
hence Product (F,A1) = (Product (F,A2)) | E1 by ; :: thesis: verum
end;
hence S1[k + 1] ; :: thesis: verum
end;
A29: for k being Nat holds S1[k] from NAT_1:sch 2(A2, A10);
reconsider k = len F as Element of NAT ;
k = len F ;
hence Product (F,A1) = (Product (F,A2)) | E1 by A29; :: thesis: verum
end;
end;