let S be non empty non void ManySortedSign ; :: thesis: for A being non-empty MSAlgebra of S
for o being OperSymbol of S
for C1, C2 being MSCongruence of A
for x1, y1 being set
for a1, b1 being FinSequence st [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) holds
for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))

let A be non-empty MSAlgebra of S; :: thesis: for o being OperSymbol of S
for C1, C2 being MSCongruence of A
for x1, y1 being set
for a1, b1 being FinSequence st [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) holds
for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))

let o be OperSymbol of S; :: thesis: for C1, C2 being MSCongruence of A
for x1, y1 being set
for a1, b1 being FinSequence st [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) holds
for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))

let C1, C2 be MSCongruence of A; :: thesis: for x1, y1 being set
for a1, b1 being FinSequence st [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) holds
for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))

let x1, y1 be set ; :: thesis: for a1, b1 being FinSequence st [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) holds
for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))

let a1, b1 be FinSequence; :: thesis: ( [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) implies for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o)) )

assume A1: [x1,y1] in (C1 . ((the_arity_of o) /. ((len a1) + 1))) \/ (C2 . ((the_arity_of o) /. ((len a1) + 1))) ; :: thesis: for x, y being Element of Args o,A st x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 holds
[((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))

let x, y be Element of Args o,A; :: thesis: ( x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 implies [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o)) )
assume A2: ( x = (a1 ^ <*x1*>) ^ b1 & y = (a1 ^ <*y1*>) ^ b1 ) ; :: thesis: [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))
then A3: ( x = a1 ^ (<*x1*> ^ b1) & y = a1 ^ (<*y1*> ^ b1) ) by FINSEQ_1:45;
now
per cases ( [x1,y1] in C1 . ((the_arity_of o) /. ((len a1) + 1)) or [x1,y1] in C2 . ((the_arity_of o) /. ((len a1) + 1)) ) by A1, XBOOLE_0:def 3;
suppose A4: [x1,y1] in C1 . ((the_arity_of o) /. ((len a1) + 1)) ; :: thesis: [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))
for n being Nat st n in dom x holds
[(x . n),(y . n)] in C1 . ((the_arity_of o) /. n)
proof
let n be Nat; :: thesis: ( n in dom x implies [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n) )
assume A5: n in dom x ; :: thesis: [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n)
then A6: ( n in dom (a1 ^ <*x1*>) or ex k being Nat st
( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) ) by A2, FINSEQ_1:38;
A8: n in dom (the_arity_of o) by A5, MSUALG_3:6;
then A9: n in dom (the Sorts of A * (the_arity_of o)) by PARTFUN1:def 4;
reconsider dz = dom (the_arity_of o) as non empty set by A5, MSUALG_3:6;
reconsider so = the Sorts of A * (the_arity_of o) as V2() ManySortedSet of ;
A10: not product so is empty ;
pi (Args o,A),n = pi (((the Sorts of A # ) * the Arity of S) . o),n by MSUALG_1:def 9
.= pi ((the Sorts of A # ) . (the Arity of S . o)),n by FUNCT_2:21
.= pi ((the Sorts of A # ) . (the_arity_of o)),n by MSUALG_1:def 6
.= pi (product (the Sorts of A * (the_arity_of o))),n by PBOOLE:def 19
.= (the Sorts of A * (the_arity_of o)) . n by A9, A10, CARD_3:22
.= the Sorts of A . ((the_arity_of o) . n) by A8, FUNCT_1:23
.= the Sorts of A . ((the_arity_of o) /. n) by A8, PARTFUN1:def 8 ;
then A11: x . n in the Sorts of A . ((the_arity_of o) /. n) by CARD_3:def 6;
now
per cases ( n in dom a1 or ex m being Nat st
( m in dom <*x1*> & n = (len a1) + m ) or ex k being Element of NAT st
( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) )
by A6, FINSEQ_1:38;
suppose A12: n in dom a1 ; :: thesis: [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n)
then A13: x . n = a1 . n by A3, FINSEQ_1:def 7;
y . n = a1 . n by A3, A12, FINSEQ_1:def 7;
hence [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n) by A11, A13, EQREL_1:11; :: thesis: verum
end;
suppose ex m being Nat st
( m in dom <*x1*> & n = (len a1) + m ) ; :: thesis: [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n)
then consider m being Nat such that
A14: ( m in dom <*x1*> & n = (len a1) + m ) ;
A15: m in Seg 1 by A14, FINSEQ_1:55;
then A16: m = 1 by FINSEQ_1:4, TARSKI:def 1;
then A17: n in Seg ((len a1) + 1) by A14, FINSEQ_1:6;
then n in Seg ((len a1) + (len <*x1*>)) by FINSEQ_1:57;
then n in Seg (len (a1 ^ <*x1*>)) by FINSEQ_1:35;
then A18: n in dom (a1 ^ <*x1*>) by FINSEQ_1:def 3;
n in Seg ((len a1) + (len <*y1*>)) by A17, FINSEQ_1:57;
then n in Seg (len (a1 ^ <*y1*>)) by FINSEQ_1:35;
then A19: n in dom (a1 ^ <*y1*>) by FINSEQ_1:def 3;
A20: x . n = (a1 ^ <*x1*>) . ((len a1) + 1) by A2, A14, A16, A18, FINSEQ_1:def 7
.= x1 by FINSEQ_1:59 ;
y . n = (a1 ^ <*y1*>) . ((len a1) + 1) by A2, A14, A16, A19, FINSEQ_1:def 7
.= y1 by FINSEQ_1:59 ;
hence [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n) by A4, A14, A15, A20, FINSEQ_1:4, TARSKI:def 1; :: thesis: verum
end;
suppose ex k being Element of NAT st
( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) ; :: thesis: [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n)
then consider k being Element of NAT such that
A21: ( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) ;
A22: x . n = b1 . k by A2, A21, FINSEQ_1:def 7;
n = ((len a1) + (len <*x1*>)) + k by A21, FINSEQ_1:35;
then n = ((len a1) + 1) + k by FINSEQ_1:57;
then n = ((len a1) + (len <*y1*>)) + k by FINSEQ_1:57;
then n = (len (a1 ^ <*y1*>)) + k by FINSEQ_1:35;
then y . n = b1 . k by A2, A21, FINSEQ_1:def 7;
hence [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n) by A11, A22, EQREL_1:11; :: thesis: verum
end;
end;
end;
hence [(x . n),(y . n)] in C1 . ((the_arity_of o) /. n) ; :: thesis: verum
end;
then [((Den o,A) . x),((Den o,A) . y)] in C1 . (the_result_sort_of o) by MSUALG_4:def 6;
hence [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o)) by XBOOLE_0:def 3; :: thesis: verum
end;
suppose A23: [x1,y1] in C2 . ((the_arity_of o) /. ((len a1) + 1)) ; :: thesis: [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o))
for n being Nat st n in dom x holds
[(x . n),(y . n)] in C2 . ((the_arity_of o) /. n)
proof
let n be Nat; :: thesis: ( n in dom x implies [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n) )
assume A24: n in dom x ; :: thesis: [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n)
then A25: ( n in dom (a1 ^ <*x1*>) or ex k being Nat st
( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) ) by A2, FINSEQ_1:38;
A27: n in dom (the_arity_of o) by A24, MSUALG_3:6;
then A28: n in dom (the Sorts of A * (the_arity_of o)) by PARTFUN1:def 4;
reconsider dz = dom (the_arity_of o) as non empty set by A24, MSUALG_3:6;
reconsider so = the Sorts of A * (the_arity_of o) as V2() ManySortedSet of ;
A29: not product so is empty ;
pi (Args o,A),n = pi (((the Sorts of A # ) * the Arity of S) . o),n by MSUALG_1:def 9
.= pi ((the Sorts of A # ) . (the Arity of S . o)),n by FUNCT_2:21
.= pi ((the Sorts of A # ) . (the_arity_of o)),n by MSUALG_1:def 6
.= pi (product (the Sorts of A * (the_arity_of o))),n by PBOOLE:def 19
.= (the Sorts of A * (the_arity_of o)) . n by A28, A29, CARD_3:22
.= the Sorts of A . ((the_arity_of o) . n) by A27, FUNCT_1:23
.= the Sorts of A . ((the_arity_of o) /. n) by A27, PARTFUN1:def 8 ;
then A30: x . n in the Sorts of A . ((the_arity_of o) /. n) by CARD_3:def 6;
now
per cases ( n in dom a1 or ex m being Nat st
( m in dom <*x1*> & n = (len a1) + m ) or ex k being Element of NAT st
( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) )
by A25, FINSEQ_1:38;
suppose A31: n in dom a1 ; :: thesis: [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n)
then A32: x . n = a1 . n by A3, FINSEQ_1:def 7;
y . n = a1 . n by A3, A31, FINSEQ_1:def 7;
hence [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n) by A30, A32, EQREL_1:11; :: thesis: verum
end;
suppose ex m being Nat st
( m in dom <*x1*> & n = (len a1) + m ) ; :: thesis: [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n)
then consider m being Nat such that
A33: ( m in dom <*x1*> & n = (len a1) + m ) ;
A34: m in Seg 1 by A33, FINSEQ_1:55;
then A35: m = 1 by FINSEQ_1:4, TARSKI:def 1;
then A36: n in Seg ((len a1) + 1) by A33, FINSEQ_1:6;
then n in Seg ((len a1) + (len <*x1*>)) by FINSEQ_1:57;
then n in Seg (len (a1 ^ <*x1*>)) by FINSEQ_1:35;
then A37: n in dom (a1 ^ <*x1*>) by FINSEQ_1:def 3;
n in Seg ((len a1) + (len <*y1*>)) by A36, FINSEQ_1:57;
then n in Seg (len (a1 ^ <*y1*>)) by FINSEQ_1:35;
then A38: n in dom (a1 ^ <*y1*>) by FINSEQ_1:def 3;
A39: x . n = (a1 ^ <*x1*>) . ((len a1) + 1) by A2, A33, A35, A37, FINSEQ_1:def 7
.= x1 by FINSEQ_1:59 ;
y . n = (a1 ^ <*y1*>) . ((len a1) + 1) by A2, A33, A35, A38, FINSEQ_1:def 7
.= y1 by FINSEQ_1:59 ;
hence [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n) by A23, A33, A34, A39, FINSEQ_1:4, TARSKI:def 1; :: thesis: verum
end;
suppose ex k being Element of NAT st
( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) ; :: thesis: [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n)
then consider k being Element of NAT such that
A40: ( k in dom b1 & n = (len (a1 ^ <*x1*>)) + k ) ;
A41: x . n = b1 . k by A2, A40, FINSEQ_1:def 7;
n = ((len a1) + (len <*x1*>)) + k by A40, FINSEQ_1:35;
then n = ((len a1) + 1) + k by FINSEQ_1:57;
then n = ((len a1) + (len <*y1*>)) + k by FINSEQ_1:57;
then n = (len (a1 ^ <*y1*>)) + k by FINSEQ_1:35;
then y . n = b1 . k by A2, A40, FINSEQ_1:def 7;
hence [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n) by A30, A41, EQREL_1:11; :: thesis: verum
end;
end;
end;
hence [(x . n),(y . n)] in C2 . ((the_arity_of o) /. n) ; :: thesis: verum
end;
then [((Den o,A) . x),((Den o,A) . y)] in C2 . (the_result_sort_of o) by MSUALG_4:def 6;
hence [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o)) by XBOOLE_0:def 3; :: thesis: verum
end;
end;
end;
hence [((Den o,A) . x),((Den o,A) . y)] in (C1 . (the_result_sort_of o)) \/ (C2 . (the_result_sort_of o)) ; :: thesis: verum