let U be non empty set ; :: thesis: for S1, S2 being Language st TheNorSymbOf S1 = TheNorSymbOf S2 & TheEqSymbOf S1 = TheEqSymbOf S2 & the adicity of S1 | (OwnSymbolsOf S1) = the adicity of S2 | (OwnSymbolsOf S1) holds
for I1 being Element of U -InterpretersOf S1
for I2 being Element of U -InterpretersOf S2
for phi1 being wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 )

let S1, S2 be Language; :: thesis: ( TheNorSymbOf S1 = TheNorSymbOf S2 & TheEqSymbOf S1 = TheEqSymbOf S2 & the adicity of S1 | (OwnSymbolsOf S1) = the adicity of S2 | (OwnSymbolsOf S1) implies for I1 being Element of U -InterpretersOf S1
for I2 being Element of U -InterpretersOf S2
for phi1 being wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 ) )

set II1 = U -InterpretersOf S1;
set II2 = U -InterpretersOf S2;
set N1 = TheNorSymbOf S1;
set N2 = TheNorSymbOf S2;
set F1 = S1 -firstChar ;
set F2 = S2 -firstChar ;
set a1 = the adicity of S1;
set a2 = the adicity of S2;
set O1 = OwnSymbolsOf S1;
set O2 = OwnSymbolsOf S2;
set d = U -deltaInterpreter ;
set E1 = TheEqSymbOf S1;
set E2 = TheEqSymbOf S2;
set AS1 = AtomicFormulaSymbolsOf S1;
set AS2 = AtomicFormulaSymbolsOf S2;
assume B2: TheNorSymbOf S1 = TheNorSymbOf S2 ; :: thesis: ( not TheEqSymbOf S1 = TheEqSymbOf S2 or not the adicity of S1 | (OwnSymbolsOf S1) = the adicity of S2 | (OwnSymbolsOf S1) or for I1 being Element of U -InterpretersOf S1
for I2 being Element of U -InterpretersOf S2
for phi1 being wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 ) )

assume B3: ( TheEqSymbOf S1 = TheEqSymbOf S2 & the adicity of S1 | (OwnSymbolsOf S1) = the adicity of S2 | (OwnSymbolsOf S1) ) ; :: thesis: for I1 being Element of U -InterpretersOf S1
for I2 being Element of U -InterpretersOf S2
for phi1 being wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 )

defpred S1[ Nat] means for I1 being Element of U -InterpretersOf S1
for I2 being Element of U -InterpretersOf S2
for phi1 being $1 -wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being $1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 );
B0: S1[ 0 ]
proof
let I1 be Element of U -InterpretersOf S1; :: thesis: for I2 being Element of U -InterpretersOf S2
for phi1 being 0 -wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being 0 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

let I2 be Element of U -InterpretersOf S2; :: thesis: for phi1 being 0 -wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being 0 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

let phi1 be 0 -wff string of S1; :: thesis: ( I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) implies ex phi2 being 0 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 ) )

set TE1 = I1 -TermEval ;
set TE2 = I2 -TermEval ;
set X = rng phi1;
reconsider XX = (rng phi1) /\ (OwnSymbolsOf S1) as Subset of (OwnSymbolsOf S1) ;
reconsider r1 = (S1 -firstChar) . phi1 as relational Element of S1 ;
C1: the adicity of S1 | XX = ( the adicity of S1 | (OwnSymbolsOf S1)) | (rng phi1) by RELAT_1:71
.= the adicity of S2 | XX by B3, RELAT_1:71 ;
assume I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) ; :: thesis: ex phi2 being 0 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

then (I2 | (OwnSymbolsOf S1)) | (rng phi1) = I1 | XX by RELAT_1:71;
then I1 | XX = I2 | XX by RELAT_1:71;
then consider phi2 being 0wff string of S2 such that
C2: ( phi2 = phi1 & I2 -AtomicEval phi2 = I1 -AtomicEval phi1 ) by C1, Lm52, B3;
reconsider phi2 = phi2 as 0 -wff string of S2 ;
take phi2 ; :: thesis: ( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )
set st1 = SubTerms phi1;
set st2 = SubTerms phi2;
reconsider r2 = (S2 -firstChar) . phi2 as relational Element of S2 ;
thus ( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 ) by C2; :: thesis: verum
end;
B1: for n being Nat st S1[n] holds
S1[n + 1]
proof
let n be Nat; :: thesis: ( S1[n] implies S1[n + 1] )
assume D0: S1[n] ; :: thesis: S1[n + 1]
let I1 be Element of U -InterpretersOf S1; :: thesis: for I2 being Element of U -InterpretersOf S2
for phi1 being n + 1 -wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

let I2 be Element of U -InterpretersOf S2; :: thesis: for phi1 being n + 1 -wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

let phi1 be n + 1 -wff string of S1; :: thesis: ( I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) implies ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 ) )

set X = rng phi1;
assume D2: I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) ; :: thesis: ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

reconsider h1 = head phi1 as n -wff string of S1 ;
set t = tail phi1;
set s1 = (S1 -firstChar) . phi1;
consider h2 being n -wff string of S2 such that
D1: ( h1 = h2 & I1 -TruthEval h1 = I2 -TruthEval h2 ) by D0, D2;
per cases ( phi1 is exal or ( not phi1 is 0wff & not phi1 is exal ) or phi1 is 0wff ) ;
suppose phi1 is exal ; :: thesis: ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

then reconsider phi11 = phi1 as n + 1 -wff exal string of S1 ;
reconsider l1 = (S1 -firstChar) . phi11 as literal Element of S1 ;
E1: l1 in OwnSymbolsOf S1 by FOMODEL1:def 19;
EE2: I1 . l1 = I2 . l1 by D2, E1, FUNCT_1:49;
l1 in dom I2 by EE2, FUNCT_1:def 2;
then l1 in OwnSymbolsOf S2 by PARTFUN1:def 2;
then reconsider l2 = l1 as own Element of S2 ;
(abs (ar l2)) -tuples_on U = dom (I2 . l2) by PARTFUN1:def 2
.= 0 -tuples_on U by EE2, FUNCT_2:def 1 ;
then ( not l2 is relational & not l2 is operational ) ;
then reconsider l2 = l2 as literal Element of S2 ;
reconsider phi2 = <*l2*> ^ h2 as n + 1 -wff exal string of S2 ;
take phi2 ; :: thesis: ( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )
E0: phi1 = (<*l1*> ^ h1) ^ (tail phi11) by FOMODEL2:23
.= <*l1*> ^ h1 ;
hence phi1 = phi2 by D1; :: thesis: I1 -TruthEval phi1 = I2 -TruthEval phi2
( I1 -TruthEval phi11 = 1 iff I2 -TruthEval phi2 = 1 )
proof
hereby :: thesis: ( I2 -TruthEval phi2 = 1 implies I1 -TruthEval phi11 = 1 )
assume I1 -TruthEval phi11 = 1 ; :: thesis: I2 -TruthEval phi2 = 1
then consider u being Element of U such that
F0: ((l1,u) ReassignIn I1) -TruthEval h1 = 1 by E0, FOMODEL2:19;
reconsider I11 = (l1,u) ReassignIn I1 as Element of U -InterpretersOf S1 ;
reconsider I22 = (l2,u) ReassignIn I2 as Element of U -InterpretersOf S2 ;
I11 | (OwnSymbolsOf S1) = (I1 | (OwnSymbolsOf S1)) +* ((l1 .--> ({} .--> u)) | (OwnSymbolsOf S1)) by FUNCT_4:71
.= I22 | (OwnSymbolsOf S1) by D2, FUNCT_4:71 ;
then consider h22 being n -wff string of S2 such that
F1: ( h22 = h1 & I11 -TruthEval h1 = I22 -TruthEval h22 ) by D0;
thus I2 -TruthEval phi2 = 1 by F1, D1, F0, FOMODEL2:19; :: thesis: verum
end;
assume I2 -TruthEval phi2 = 1 ; :: thesis: I1 -TruthEval phi11 = 1
then consider u2 being Element of U such that
F2: ((l2,u2) ReassignIn I2) -TruthEval h2 = 1 by FOMODEL2:19;
reconsider I11 = (l1,u2) ReassignIn I1 as Element of U -InterpretersOf S1 ;
reconsider I22 = (l2,u2) ReassignIn I2 as Element of U -InterpretersOf S2 ;
I11 | (OwnSymbolsOf S1) = (I1 | (OwnSymbolsOf S1)) +* ((l1 .--> ({} .--> u2)) | (OwnSymbolsOf S1)) by FUNCT_4:71
.= I22 | (OwnSymbolsOf S1) by D2, FUNCT_4:71 ;
then consider h222 being n -wff string of S2 such that
F3: ( h222 = h1 & I11 -TruthEval h1 = I22 -TruthEval h222 ) by D0;
thus I1 -TruthEval phi11 = 1 by E0, F2, F3, D1, FOMODEL2:19; :: thesis: verum
end;
then ( I1 -TruthEval phi1 = 1 iff not I2 -TruthEval phi2 = 0 ) by FOMODEL0:39;
hence I1 -TruthEval phi1 = I2 -TruthEval phi2 by FOMODEL0:39; :: thesis: verum
end;
suppose ( not phi1 is 0wff & not phi1 is exal ) ; :: thesis: ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

then reconsider phi11 = phi1 as non 0wff n + 1 -wff non exal string of S1 ;
reconsider t1 = tail phi11 as n -wff string of S1 ;
consider t2 being n -wff string of S2 such that
E0: ( t1 = t2 & I1 -TruthEval t1 = I2 -TruthEval t2 ) by D0, D2;
reconsider phi2 = (<*(TheNorSymbOf S2)*> ^ h2) ^ t2 as non 0wff n + 1 -wff non exal string of S2 ;
take phi2 ; :: thesis: ( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )
( ((S1 -firstChar) . phi11) \+\ (TheNorSymbOf S1) = {} & ((S2 -firstChar) . phi2) \+\ (TheNorSymbOf S2) = {} ) ;
then E1: ( (S1 -firstChar) . phi1 = TheNorSymbOf S1 & (S2 -firstChar) . phi2 = TheNorSymbOf S2 & phi11 = (<*((S1 -firstChar) . phi11)*> ^ h1) ^ t1 & h2 = head phi2 & t2 = tail phi2 ) by FOMODEL0:29, FOMODEL2:23;
hence phi1 = phi2 by E0, D1, B2; :: thesis: I1 -TruthEval phi1 = I2 -TruthEval phi2
set b1 = I1 -TruthEval h1;
set c1 = I1 -TruthEval t1;
set b2 = I2 -TruthEval h2;
set c2 = I2 -TruthEval t2;
set A1 = I1 -TruthEval phi11;
set A2 = I2 -TruthEval phi2;
( (I1 -TruthEval phi11) \+\ ((I1 -TruthEval (head phi11)) 'nor' (I1 -TruthEval (tail phi11))) = {} & (I2 -TruthEval phi2) \+\ ((I2 -TruthEval (head phi2)) 'nor' (I2 -TruthEval (tail phi2))) = {} ) ;
then ( I1 -TruthEval phi11 = (I1 -TruthEval h1) 'nor' (I1 -TruthEval t1) & I2 -TruthEval phi2 = (I2 -TruthEval h2) 'nor' (I2 -TruthEval t2) ) by E1, FOMODEL0:29;
hence I1 -TruthEval phi1 = I2 -TruthEval phi2 by D1, E0; :: thesis: verum
end;
suppose phi1 is 0wff ; :: thesis: ex phi2 being n + 1 -wff string of S2 st
( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 )

then consider phi2 being 0 -wff string of S2 such that
E0: ( phi1 = phi2 & I1 -TruthEval phi1 = I2 -TruthEval phi2 ) by B0, D2;
phi2 is 0 + (0 * (n + 1)) -wff ;
then phi2 is 0 + (n + 1) -wff ;
then reconsider phi22 = phi2 as n + 1 -wff string of S2 ;
take phi22 ; :: thesis: ( phi1 = phi22 & I1 -TruthEval phi1 = I2 -TruthEval phi22 )
thus ( phi1 = phi22 & I1 -TruthEval phi1 = I2 -TruthEval phi22 ) by E0; :: thesis: verum
end;
end;
end;
B4: for n being Nat holds S1[n] from NAT_1:sch 2(B0, B1);
let I1 be Element of U -InterpretersOf S1; :: thesis: for I2 being Element of U -InterpretersOf S2
for phi1 being wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 )

let I2 be Element of U -InterpretersOf S2; :: thesis: for phi1 being wff string of S1 st I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) holds
ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 )

let phi1 be wff string of S1; :: thesis: ( I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) implies ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 ) )

set d = Depth phi1;
reconsider phi11 = phi1 null 0 as (Depth phi1) + 0 -wff string of S1 ;
assume I1 | (OwnSymbolsOf S1) = I2 | (OwnSymbolsOf S1) ; :: thesis: ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 )

then ex phi2 being Depth phi1 -wff string of S2 st
( phi2 = phi11 & I2 -TruthEval phi2 = I1 -TruthEval phi11 ) by B4;
hence ex phi2 being wff string of S2 st
( phi2 = phi1 & I2 -TruthEval phi2 = I1 -TruthEval phi1 ) ; :: thesis: verum