:: Homomorphisms of Many Sorted Algebras
:: by Ma{\l}gorzata Korolkiewicz
::
:: Received April 25, 1994
:: Copyright (c) 1994-2018 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies STRUCT_0, XBOOLE_0, MSUALG_1, NAT_1, PBOOLE, SUBSET_1, FUNCT_1,
RELAT_1, MEMBER_1, CARD_3, MARGREL1, TARSKI, FUNCT_6, NUMBERS, FINSEQ_4,
PARTFUN1, WELLORD1, GROUP_6, MSUALG_2, UNIALG_2, MSUALG_3;
notations TARSKI, XBOOLE_0, XTUPLE_0, SUBSET_1, ORDINAL1, NUMBERS, NAT_1,
RELAT_1, FUNCT_1, PBOOLE, PARTFUN1, FUNCT_2, FINSEQ_1, FINSEQ_2, CARD_3,
FUNCT_6, STRUCT_0, PRALG_1, MSUALG_1, MSUALG_2, PRALG_2;
constructors PRALG_1, MSUALG_2, PRALG_2, RELSET_1, FINSEQ_2, XTUPLE_0;
registrations FUNCT_2, FUNCOP_1, CARD_3, FUNCT_1, STRUCT_0, MSUALG_1,
MSUALG_2, ORDINAL1, RELAT_1, RELSET_1, PBOOLE, FINSEQ_1;
requirements BOOLE, SUBSET;
definitions TARSKI, MSUALG_2, XBOOLE_0;
equalities XBOOLE_0;
expansions TARSKI, MSUALG_2, XBOOLE_0;
theorems FUNCT_1, FUNCT_2, FINSEQ_1, PBOOLE, CARD_3, MSUALG_1, PRALG_1,
MSUALG_2, RELAT_1, PRALG_2, FUNCT_6, FINSEQ_2, XBOOLE_0, FUNCOP_1,
PARTFUN1;
schemes FUNCT_1, CLASSES1;
begin
reserve S for non void non empty ManySortedSign,
U1,U2 for MSAlgebra over S,
o for OperSymbol of S,
n for Nat;
:: PRELIMINARIES - MANY SORTED FUNCTIONS
definition
let I be non empty set, A,B be ManySortedSet of I, F be ManySortedFunction
of A,B, i be Element of I;
redefine func F.i -> Function of A.i,B.i;
coherence by PBOOLE:def 15;
end;
definition
let S be non empty ManySortedSign;
let U1,U2 be MSAlgebra over S;
mode ManySortedFunction of U1,U2 is ManySortedFunction of the Sorts of U1,
the Sorts of U2;
end;
definition
let I be set,A be ManySortedSet of I;
func id A -> ManySortedFunction of A,A means
:Def1:
for i be set st i in I holds it.i = id (A.i);
existence
proof
deffunc F(object)=id (A.$1);
consider f being Function such that
A1: dom f = I & for i be object st i in I holds f.i = F(i) from FUNCT_1:
sch 3;
reconsider f as ManySortedSet of I by A1,PARTFUN1:def 2,RELAT_1:def 18;
for x be object st x in dom f holds f.x is Function
proof
let x be object;
assume x in dom f;
then f.x = id (A.x) by A1;
hence thesis;
end;
then reconsider f as ManySortedFunction of I by FUNCOP_1:def 6;
for i be object st i in I holds f.i is Function of A.i,A.i
proof
let i be object;
assume i in I;
then f.i = id (A.i) by A1;
hence thesis;
end;
then reconsider f as ManySortedFunction of A,A by PBOOLE:def 15;
take f;
thus thesis by A1;
end;
uniqueness
proof
let F,G be ManySortedFunction of A,A;
assume that
A2: for i be set st i in I holds F.i = id (A.i) and
A3: for i be set st i in I holds G.i = id (A.i);
A4: now
let i be object;
assume
A5: i in I;
then F.i = id (A.i) by A2;
hence F.i = G.i by A3,A5;
end;
dom F = I & dom G = I by PARTFUN1:def 2;
hence thesis by A4,FUNCT_1:2;
end;
end;
definition
let IT be Function;
attr IT is "1-1" means
for i be set, f be Function st i in dom IT & IT.i = f holds f is one-to-one;
end;
registration
let I be set;
cluster "1-1" for ManySortedFunction of I;
existence
proof
set A = the ManySortedSet of I;
take F = id A;
let i be set, f be Function;
A1: dom (id A) = I by PARTFUN1:def 2;
assume i in dom F & F.i = f;
then f = id (A.i) by A1,Def1;
hence thesis;
end;
end;
theorem Th1:
for I be set,F be ManySortedFunction of I holds F is "1-1" iff
for i be set st i in I holds F.i is one-to-one
proof
let I be set;
let F be ManySortedFunction of I;
A1: dom F = I by PARTFUN1:def 2;
hence F is "1-1" implies for i be set st i in I holds F.i is one-to-one;
assume for i be set st i in I holds F.i is one-to-one;
then for i be set, f being Function st i in dom F & f = F.i holds f is
one-to-one by A1;
hence thesis;
end;
definition
let I be set, A,B be ManySortedSet of I;
let IT be ManySortedFunction of A,B;
attr IT is "onto" means
for i be set st i in I holds rng(IT.i) = B.i;
end;
theorem Th2:
for I be set, A,B,C be ManySortedSet of I, F be
ManySortedFunction of A,B, G be ManySortedFunction of B,C holds dom (G ** F) =
I & for i be set st i in I holds (G**F).i = (G.i)*(F.i)
proof
let I be set, A,B,C be ManySortedSet of I, F be ManySortedFunction of A,B, G
be ManySortedFunction of B,C;
dom F = I & dom G = I by PARTFUN1:def 2;
then (dom F) /\ (dom G) = I;
hence
A1: dom (G ** F) = I by PBOOLE:def 19;
let i be set;
thus thesis by A1,PBOOLE:def 19;
end;
definition
let I be set, A be ManySortedSet of I, B,C be non-empty ManySortedSet of I,
F be ManySortedFunction of A,B, G be ManySortedFunction of B,C;
redefine func G**F -> ManySortedFunction of A,C;
coherence
proof
dom (G ** F) = I by Th2;
then reconsider fg = G ** F as ManySortedSet of I by PARTFUN1:def 2
,RELAT_1:def 18;
reconsider fg as ManySortedFunction of I;
for i be object st i in I holds fg.i is Function of A.i,C.i
proof
let i be object;
assume
A1: i in I;
then reconsider f = F.i as Function of A.i,B.i by PBOOLE:def 15;
reconsider g = G.i as Function of B.i,C.i by A1,PBOOLE:def 15;
(G**F).i = g*f by A1,Th2;
hence thesis by A1;
end;
hence thesis by PBOOLE:def 15;
end;
end;
theorem
for I be set,A,B be ManySortedSet of I, F be ManySortedFunction of A,B
holds F**(id A) = F
proof
let I be set, A,B be ManySortedSet of I, F be ManySortedFunction of A,B;
dom (F**(id A)) = (dom F) /\ dom id A by PBOOLE:def 19
.= I /\ dom id A by PARTFUN1:def 2
.= I /\ I by PARTFUN1:def 2
.= I;
then reconsider G = F**(id A) as ManySortedFunction of I by PARTFUN1:def 2
,RELAT_1:def 18;
now
let i be object;
assume
A1: i in I;
then reconsider f = F.i as Function of A.i,B.i by PBOOLE:def 15;
reconsider g = (id A).i as Function of A.i,A.i by A1,PBOOLE:def 15;
A2: G.i = f*g by A1,Th2
.= f*(id (A.i)) by A1,Def1;
per cases;
suppose
B.i = {} implies A.i = {};
then dom f = A.i by FUNCT_2:def 1;
hence G.i = F.i by A2,RELAT_1:52;
end;
suppose
B.i = {} & A.i <> {};
then f = {};
hence G.i = F.i by A2;
end;
end;
hence thesis by PBOOLE:3;
end;
theorem Th4:
for I be set, A,B be ManySortedSet of I for F be
ManySortedFunction of A, B holds (id B)**F = F
proof
let I be set;
let A,B be ManySortedSet of I;
let F be ManySortedFunction of A, B;
dom ((id B)**F) = (dom id B) /\ dom F by PBOOLE:def 19
.= I /\ dom F by PARTFUN1:def 2
.= I /\ I by PARTFUN1:def 2
.= I;
then reconsider G = (id B)**F as ManySortedFunction of I by PARTFUN1:def 2
,RELAT_1:def 18;
now
let i be object;
assume
A1: i in I;
then reconsider f = F.i as Function of A.i, B.i by PBOOLE:def 15;
reconsider g = (id B).i as Function of B.i, B.i by A1,PBOOLE:def 15;
g = id (B.i) & G.i = g * f by A1,Def1,Th2;
hence G.i = F.i by FUNCT_2:17;
end;
hence thesis by PBOOLE:3;
end;
definition
let I be set, A,B be ManySortedSet of I, F be ManySortedFunction of A,B;
assume that
A1: F is "1-1" and
A2: F is "onto";
func F"" -> ManySortedFunction of B,A means
:Def4:
for i be set st i in I holds it.i = (F.i)";
existence
proof
defpred P[object,object] means $2 = (F.$1)";
A3: for i be object st i in I ex u be object st P[i,u];
consider H being Function such that
A4: dom H = I & for i be object st i in I holds P[i,H.i] from CLASSES1:
sch 1 (A3);
reconsider H as ManySortedSet of I by A4,PARTFUN1:def 2,RELAT_1:def 18;
for x be object st x in dom H holds H.x is Function
proof
let x be object;
assume
A5: x in dom H;
then x in I by PARTFUN1:def 2;
then reconsider f = F.x as Function of A.x,B.x by PBOOLE:def 15;
H.x = f" by A4,A5;
hence thesis;
end;
then reconsider H as ManySortedFunction of I by FUNCOP_1:def 6;
for i be object st i in I holds H.i is Function of B.i,A.i
proof
let i be object;
assume
A6: i in I;
then reconsider f = F.i as Function of A.i,B.i by PBOOLE:def 15;
i in dom F by A6,PARTFUN1:def 2;
then
A7: f is one-to-one by A1;
rng f = B.i by A2,A6;
then f" is Function of B.i,A.i by A7,FUNCT_2:25;
hence thesis by A4,A6;
end;
then reconsider H as ManySortedFunction of B,A by PBOOLE:def 15;
take H;
thus thesis by A4;
end;
uniqueness
proof
let H1,H2 be ManySortedFunction of B,A;
assume that
A8: for i be set st i in I holds H1.i = (F.i)" and
A9: for i be set st i in I holds H2.i = (F.i)";
now
let i be object;
assume
A10: i in I;
then reconsider f = F.i as Function of A.i,B.i by PBOOLE:def 15;
H1.i = f" by A8,A10;
hence H1.i = H2.i by A9,A10;
end;
hence thesis by PBOOLE:3;
end;
end;
theorem Th5:
for I be set,A,B be non-empty ManySortedSet of I, H be
ManySortedFunction of A,B, H1 be ManySortedFunction of B,A st H is "1-1" "onto"
& H1 = H"" holds H**H1 = id B & H1**H = id A
proof
let I be set, A,B be non-empty ManySortedSet of I, H be ManySortedFunction
of A,B, H1 be ManySortedFunction of B,A;
assume that
A1: H is "1-1" "onto" and
A2: H1 = H"";
A3: now
let i be set;
assume
A4: i in I;
then reconsider h = H.i as Function of A.i,B.i by PBOOLE:def 15;
reconsider h1 = H1.i as Function of B.i,A.i by A4,PBOOLE:def 15;
i in dom H by A4,PARTFUN1:def 2;
then
A5: h is one-to-one by A1;
h1 = h" by A1,A2,A4,Def4;
then h*h1 = id rng h by A5,FUNCT_1:39;
then h*h1 = id (B.i) by A1,A4;
hence (H**H1).i = id (B.i) by A4,Th2;
end;
for i be set st i in I holds (H1**H).i = id (A.i)
proof
let i be set;
assume
A6: i in I;
then reconsider h = H.i as Function of A.i,B.i by PBOOLE:def 15;
reconsider h1 = H1.i as Function of B.i,A.i by A6,PBOOLE:def 15;
i in dom H by A6,PARTFUN1:def 2;
then
A7: h is one-to-one by A1;
h1 = h" & dom h = A.i by A1,A2,A6,Def4,FUNCT_2:def 1;
then h1*h = id (A.i) by A7,FUNCT_1:39;
hence thesis by A6,Th2;
end;
hence thesis by A3,Def1;
end;
registration
let S;
let U1 be non-empty MSAlgebra over S;
let o;
cluster Args(o,U1) -> functional;
coherence
proof
Args(o,U1) = product ((the Sorts of U1)*(the_arity_of o)) by PRALG_2:3;
hence thesis;
end;
end;
begin
:: HOMOMORPHISMS OF MANY SORTED ALGEBRAS
theorem Th6:
for U1 being MSAlgebra over S for x be Function st x in Args(o,U1
) holds dom x = dom (the_arity_of o) & for y be set st y in dom ((the Sorts of
U1) * (the_arity_of o)) holds x.y in ((the Sorts of U1) * (the_arity_of o)).y
proof
let U1 be MSAlgebra over S;
let x be Function;
A1: Args(o,U1) = product((the Sorts of U1) * (the_arity_of o)) by PRALG_2:3;
dom (the Sorts of U1) = (the carrier of S) by PARTFUN1:def 2;
then
A2: rng (the_arity_of o) c= dom (the Sorts of U1) by FINSEQ_1:def 4;
assume
A3: x in Args(o,U1);
then dom x = dom ((the Sorts of U1) * (the_arity_of o)) by A1,CARD_3:9;
hence thesis by A3,A1,A2,CARD_3:9,RELAT_1:27;
end;
definition
let S;
let U1,U2 be MSAlgebra over S;
let o;
let F be ManySortedFunction of U1,U2;
let x be Element of Args(o,U1);
assume that
A1: Args(o,U1) <> {} and
A2: Args(o,U2) <> {};
func F # x -> Element of Args(o,U2) equals
:Def5:
(Frege(F*the_arity_of o)).
x;
coherence
proof
A3: dom((the Sorts of U1)*(the_arity_of o)) = dom(F*the_arity_of o)
proof
hereby
let e be object;
assume
A4: e in dom((the Sorts of U1)*(the_arity_of o));
then (the_arity_of o).e in dom the Sorts of U1 by FUNCT_1:11;
then (the_arity_of o).e in the carrier of S by PARTFUN1:def 2;
then
A5: (the_arity_of o).e in dom F by PARTFUN1:def 2;
e in dom the_arity_of o by A4,FUNCT_1:11;
then e in dom(F*the_arity_of o) by A5,FUNCT_1:11;
hence e in dom(F*the_arity_of o);
end;
let e be object;
assume e in dom(F*the_arity_of o);
then e in dom(F*the_arity_of o);
then
A6: e in dom the_arity_of o by FUNCT_1:11;
then reconsider f = e as Element of NAT;
(the_arity_of o).f in the carrier of S by A6,FINSEQ_2:11;
then (the_arity_of o).e in dom the Sorts of U1 by PARTFUN1:def 2;
hence thesis by A6,FUNCT_1:11;
end;
now
let e be object;
A7: product((the Sorts of U2)*(the_arity_of o)) <> {} by A2,PRALG_2:3;
assume e in dom(F*the_arity_of o);
then e in dom(F*the_arity_of o);
then
A8: e in dom the_arity_of o by FUNCT_1:11;
then reconsider f = e as Element of NAT;
(the_arity_of o).f in the carrier of S by A8,FINSEQ_2:11;
then (the_arity_of o).e in dom the Sorts of U2 by PARTFUN1:def 2;
then
A9: e in dom((the Sorts of U2)*(the_arity_of o)) by A8,FUNCT_1:11;
A10: ((the Sorts of U2)*(the_arity_of o)).e = (the Sorts of U2).((
the_arity_of o).e) by A8,FUNCT_1:13;
A11: now
assume (the Sorts of U2).((the_arity_of o).e) = {};
then {} in rng((the Sorts of U2)*(the_arity_of o)) by A9,A10,
FUNCT_1:def 3;
hence contradiction by A7,CARD_3:26;
end;
reconsider Foe = F.((the_arity_of o).e) as Function of (the Sorts of U1)
.((the_arity_of o).e), (the Sorts of U2).((the_arity_of o).e) by A8,FINSEQ_2:11
,PBOOLE:def 15;
thus ((the Sorts of U1)*(the_arity_of o)).e = (the Sorts of U1).((
the_arity_of o).e) by A8,FUNCT_1:13
.= dom Foe by A11,FUNCT_2:def 1
.= proj1 Foe
.= proj1 ((F*the_arity_of o).e) by A8,FUNCT_1:13;
end;
then
A12: (the Sorts of U1) * (the_arity_of o) = doms(F*the_arity_of o) by A3,
FUNCT_6:def 2;
x in Args(o,U1) by A1;
then
A13: x in product((the Sorts of U1) * (the_arity_of o)) by PRALG_2:3;
then consider f being Function such that
A14: x = f and
dom f = dom doms(F*the_arity_of o) and
A15: for e being object st e in dom doms(F*the_arity_of o) holds f.e in (
doms(F*the_arity_of o)).e by A12,CARD_3:def 5;
A16: dom((F*the_arity_of o)..f) = dom(F*the_arity_of o) by PRALG_1:def 17;
A17: rng the_arity_of o c= the carrier of S by FINSEQ_1:def 4;
then
A18: rng the_arity_of o c= dom the Sorts of U2 by PARTFUN1:def 2;
rng the_arity_of o c= dom F by A17,PARTFUN1:def 2;
then
A19: dom(F*the_arity_of o) = dom the_arity_of o by RELAT_1:27
.= dom((the Sorts of U2)*(the_arity_of o)) by A18,RELAT_1:27;
A20: now
let e be object;
A21: product((the Sorts of U2)*(the_arity_of o)) <> {} by A2,PRALG_2:3;
assume
A22: e in dom((the Sorts of U2)*(the_arity_of o));
then
A23: e in dom the_arity_of o by FUNCT_1:11;
then reconsider
g = F.((the_arity_of o).e) as Function of (the Sorts of U1).(
(the_arity_of o).e), (the Sorts of U2).((the_arity_of o).e) by FINSEQ_2:11
,PBOOLE:def 15;
reconsider r = e as Element of NAT by A23;
g = (F*the_arity_of o).e by A19,A22,FUNCT_1:12;
then
A24: ((F*the_arity_of o)..f).e = g.(f.e) by A19,A22,PRALG_1:def 17;
A25: ((the Sorts of U2)*(the_arity_of o)).e = (the Sorts of U2).((
the_arity_of o).e) by A23,FUNCT_1:13;
A26: now
assume (the Sorts of U2).((the_arity_of o).e) = {};
then {} in rng((the Sorts of U2)*(the_arity_of o)) by A22,A25,
FUNCT_1:def 3;
hence contradiction by A21,CARD_3:26;
end;
(the_arity_of o).r in the carrier of S by A23,FINSEQ_2:11;
then (the_arity_of o).e in dom the Sorts of U1 by PARTFUN1:def 2;
then e in dom((the Sorts of U1)*(the_arity_of o)) by A23,FUNCT_1:11;
then f.e in (doms(F*the_arity_of o)).e by A12,A15;
then f.e in (the Sorts of U1).((the_arity_of o).e) by A12,A23,FUNCT_1:13;
then g.(f.e) in (the Sorts of U2).((the_arity_of o).e) by A26,FUNCT_2:5;
hence
((F*the_arity_of o)..f).e in ((the Sorts of U2)*(the_arity_of o)).e
by A22,A24,FUNCT_1:12;
end;
(Frege(F*the_arity_of o)).x = (F*the_arity_of o)..f by A13,A12,A14,
PRALG_2:def 2;
then (Frege(F*the_arity_of o)).x in product((the Sorts of U2)*(
the_arity_of o)) by A16,A19,A20,CARD_3:9;
hence thesis by PRALG_2:3;
end;
correctness;
end;
Lm1: now
let S;
let U1,U2 be MSAlgebra over S;
let o;
let F be ManySortedFunction of U1,U2;
let x be Element of Args(o,U1), f,u be Function;
assume that
A1: x = f and
A2: x in Args(o,U1) and
A3: u in Args(o,U2);
A4: rng the_arity_of o c= the carrier of S by FINSEQ_1:def 4;
then
A5: rng the_arity_of o c= dom the Sorts of U1 by PARTFUN1:def 2;
A6: F#x = (Frege(F*the_arity_of o)).x by A2,A3,Def5;
A7: dom((the Sorts of U1)*(the_arity_of o)) = dom(F*the_arity_of o)
proof
hereby
let e be object;
assume
A8: e in dom((the Sorts of U1)*(the_arity_of o));
then (the_arity_of o).e in dom the Sorts of U1 by FUNCT_1:11;
then (the_arity_of o).e in the carrier of S by PARTFUN1:def 2;
then
A9: (the_arity_of o).e in dom F by PARTFUN1:def 2;
e in dom the_arity_of o by A8,FUNCT_1:11;
then e in dom(F*the_arity_of o) by A9,FUNCT_1:11;
hence e in dom(F*the_arity_of o);
end;
let e be object;
assume e in dom(F*the_arity_of o);
then e in dom(F*the_arity_of o);
then
A10: e in dom the_arity_of o by FUNCT_1:11;
then reconsider f = e as Element of NAT;
(the_arity_of o).f in the carrier of S by A10,FINSEQ_2:11;
then (the_arity_of o).e in dom the Sorts of U1 by PARTFUN1:def 2;
hence thesis by A10,FUNCT_1:11;
end;
A11: Args(o,U2) = product((the Sorts of U2) * (the_arity_of o)) by PRALG_2:3;
then
A12: dom u = dom((the Sorts of U2) * (the_arity_of o)) by A3,CARD_3:9;
A13: Args(o,U1) = product((the Sorts of U1) * (the_arity_of o)) by PRALG_2:3;
then
A14: dom f = dom((the Sorts of U1) * (the_arity_of o)) by A1,A2,CARD_3:9
.= dom the_arity_of o by A5,RELAT_1:27;
rng the_arity_of o c= dom the Sorts of U2 by A4,PARTFUN1:def 2;
then
A15: dom u = dom the_arity_of o by A12,RELAT_1:27;
now
let e be object;
assume e in dom(F*the_arity_of o);
then e in dom(F*the_arity_of o);
then
A16: e in dom the_arity_of o by FUNCT_1:11;
then reconsider
Foe = F.((the_arity_of o).e) as Function of (the Sorts of U1).(
(the_arity_of o).e), (the Sorts of U2).((the_arity_of o).e) by FINSEQ_2:11
,PBOOLE:def 15;
((the Sorts of U2)*the_arity_of o).e in rng ((the Sorts of U2)*
the_arity_of o) by A12,A15,A16,FUNCT_1:def 3;
then
A17: ((the Sorts of U2)*the_arity_of o).e <> {} by A3,A11,CARD_3:26;
((the Sorts of U1)*(the_arity_of o)).e = (the Sorts of U1).((
the_arity_of o) .e) & ((the Sorts of U2)*(the_arity_of o)).e = (the Sorts of U2
).(( the_arity_of o).e) by A16,FUNCT_1:13;
hence ((the Sorts of U1)*(the_arity_of o)).e = dom Foe by A17,FUNCT_2:def 1
.= proj1 Foe
.= proj1 ((F*the_arity_of o).e) by A16,FUNCT_1:13;
end;
then
A18: (the Sorts of U1) * (the_arity_of o) = doms(F*the_arity_of o) by A7,
FUNCT_6:def 2;
hereby
assume u = F#x;
then
A19: u = (Frege(F*the_arity_of o)).x by A2,A3,Def5;
let n;
assume
A20: n in dom f;
then (the_arity_of o).n in the carrier of S by A14,FINSEQ_2:11;
then (the_arity_of o).n in dom F by PARTFUN1:def 2;
then
A21: n in dom(F*the_arity_of o) by A14,A20,FUNCT_1:11;
then
A22: (F*the_arity_of o).n = F.((the_arity_of o).n) by FUNCT_1:12
.= F.((the_arity_of o)/.n) by A14,A20,PARTFUN1:def 6;
thus u.n = ((F*the_arity_of o)..f).n by A1,A2,A13,A18,A19,PRALG_2:def 2
.= (F.((the_arity_of o)/.n)).(f.n) by A21,A22,PRALG_1:def 17;
end;
F#x is Element of product((the Sorts of U2) * (the_arity_of o)) by PRALG_2:3;
then reconsider g = F#x as Function;
A23: rng the_arity_of o c= dom F by A4,PARTFUN1:def 2;
assume
A24: for n st n in dom f holds u.n = (F.((the_arity_of o)/.n)).(f.n);
A25: now
let e be object;
assume
A26: e in dom f;
then reconsider n = e as Nat by A14;
(the_arity_of o).n in the carrier of S by A14,A26,FINSEQ_2:11;
then (the_arity_of o).n in dom F by PARTFUN1:def 2;
then
A27: n in dom(F*the_arity_of o) by A14,A26,FUNCT_1:11;
then
A28: (F*the_arity_of o).n = F.((the_arity_of o).n) by FUNCT_1:12
.= (F.((the_arity_of o)/.n)) by A14,A26,PARTFUN1:def 6;
thus u.e = (F.((the_arity_of o)/.n)).(f.n) by A24,A26
.= ((F*the_arity_of o)..f).n by A27,A28,PRALG_1:def 17
.= g.e by A1,A2,A13,A18,A6,PRALG_2:def 2;
end;
F#x = (F*the_arity_of o)..f by A1,A2,A13,A18,A6,PRALG_2:def 2;
then dom g = dom(F*the_arity_of o) by PRALG_1:def 17
.= dom f by A14,A23,RELAT_1:27;
hence u = F#x by A14,A15,A25,FUNCT_1:2;
end;
definition
let S;
let U1,U2 be non-empty MSAlgebra over S;
let o;
let F be ManySortedFunction of U1,U2;
let x be Element of Args(o,U1);
redefine func F # x means
:Def6:
for n st n in dom x holds it.n = (F.((the_arity_of o)/.n)).(x.n);
compatibility by Lm1;
end;
theorem Th7:
for S,o for U1 being MSAlgebra over S st Args(o,U1) <> {} for x
be Element of Args(o,U1) holds x = ((id (the Sorts of U1))#x)
proof
let S,o;
let U1 be MSAlgebra over S;
set F = id (the Sorts of U1);
assume
A1: Args(o,U1) <> {};
then reconsider AA = Args(o,U1) as non empty set;
let x be Element of Args(o,U1);
reconsider Fx = F#x as Element of AA;
A2: Args(o,U1) = product((the Sorts of U1) * (the_arity_of o)) by PRALG_2:3;
then consider g being Function such that
A3: Fx = g and
dom g = dom ((the Sorts of U1) * (the_arity_of o)) and
for x being object st x in dom ((the Sorts of U1)*the_arity_of o) holds g.x
in ((the Sorts of U1)*the_arity_of o).x by CARD_3:def 5;
consider f being Function such that
A4: x = f and
dom f = dom ((the Sorts of U1) * (the_arity_of o)) and
for x being object st x in dom ((the Sorts of U1)*the_arity_of o) holds f.x
in ((the Sorts of U1)*the_arity_of o).x by A1,A2,CARD_3:def 5;
A5: dom f = dom (the_arity_of o) by A4,A3,Th6;
A6: for y be object st y in dom f holds f.y = g.y
proof
let y be object;
assume
A7: y in dom f;
then reconsider n = y as Nat by A5;
set p = ((the_arity_of o)/.n);
dom (the Sorts of U1) = (the carrier of S) by PARTFUN1:def 2;
then rng (the_arity_of o) c= dom (the Sorts of U1) by FINSEQ_1:def 4;
then
A8: dom ((the Sorts of U1)*(the_arity_of o)) = dom (the_arity_of o) by
RELAT_1:27;
then f.n in ((the Sorts of U1) * (the_arity_of o)).n by A1,A4,A5,A7,Th6;
then f.n in (the Sorts of U1).((the_arity_of o).n) by A5,A7,A8,FUNCT_1:12;
then
A9: f.n in (the Sorts of U1).p by A5,A7,PARTFUN1:def 6;
A10: F.p = id ((the Sorts of U1).p) by Def1;
g.n = (F.((the_arity_of o)/.n)).(f.n) by A4,A3,A7,Lm1;
hence thesis by A10,A9,FUNCT_1:18;
end;
dom g = dom (the_arity_of o) by A3,Th6;
hence thesis by A4,A3,A6,Th6,FUNCT_1:2;
end;
theorem Th8:
for U1,U2,U3 being non-empty MSAlgebra over S for H1 be
ManySortedFunction of U1,U2, H2 be ManySortedFunction of U2,U3, x be Element of
Args(o,U1) holds (H2**H1)#x = H2#(H1#x)
proof
let U1,U2,U3 be non-empty MSAlgebra over S;
let H1 be ManySortedFunction of U1,U2,H2 be ManySortedFunction of U2,U3;
let x be Element of Args(o,U1);
A1: dom x = dom (the_arity_of o) by Th6;
A2: dom (H1#x) = dom (the_arity_of o) by Th6;
A3: for y be object st y in dom (the_arity_of o)
holds ((H2**H1)#x).y = ((H2#(
H1#x))).y
proof
rng (the_arity_of o) c= (the carrier of S) by FINSEQ_1:def 4;
then rng (the_arity_of o) c= dom (the Sorts of U1) by PARTFUN1:def 2;
then
A4: dom ((the Sorts of U1)*(the_arity_of o)) = dom (the_arity_of o) by
RELAT_1:27;
let y be object;
assume
A5: y in dom (the_arity_of o);
then reconsider n = y as Nat;
set F = H2**H1, p = ((the_arity_of o)/.n);
A6: (F#x).n = (F.p).(x.n) by A1,A5,Def6;
p = (the_arity_of o).n by A5,PARTFUN1:def 6;
then
A7: ((the Sorts of U1) * (the_arity_of o)).n =(the Sorts of U1).p by A5,A4,
FUNCT_1:12;
A8: F.p = (H2.p)*(H1.p) by Th2;
A9: dom (H1.p) = (the Sorts of U1).p by FUNCT_2:def 1;
then dom ((H2.p)*(H1.p)) = dom (H1.p) by FUNCT_2:def 1;
hence (F#x).y = (H2.p).((H1.p).(x.n)) by A5,A6,A4,A9,A7,A8,Th6,FUNCT_1:12
.= (H2.p).((H1#x).n) by A1,A5,Def6
.= (H2#(H1#x)).y by A2,A5,Def6;
end;
dom ((H2**H1)#x) = dom (the_arity_of o) & dom (H2#(H1#x)) = dom (
the_arity_of o) by Th6;
hence thesis by A3,FUNCT_1:2;
end;
definition
let S;
let U1,U2 be MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
pred F is_homomorphism U1,U2 means
for o be OperSymbol of S st Args(o
,U1) <> {} for x be Element of Args(o,U1) holds (F.(the_result_sort_of o)).(Den
(o,U1).x) = Den(o,U2).(F#x);
end;
theorem Th9:
for U1 being MSAlgebra over S holds id (the Sorts of U1)
is_homomorphism U1,U1
proof
let U1 be MSAlgebra over S;
set F = id (the Sorts of U1);
let o be OperSymbol of S;
assume
A1: Args(o,U1) <> {};
let x be Element of Args(o,U1);
A2: F#x = x by A1,Th7;
set r = the_result_sort_of o;
A3: F.r = id ((the Sorts of U1).r) by Def1;
rng (the ResultSort of S) c= the carrier of S by RELAT_1:def 19;
then rng (the ResultSort of S) c= dom (the Sorts of U1) by PARTFUN1:def 2;
then
A4: Result(o,U1) = ((the Sorts of U1)*(the ResultSort of S)).o & dom ((the
Sorts of U1)*(the ResultSort of S)) = dom (the ResultSort of S) by
MSUALG_1:def 5,RELAT_1:27;
o in the carrier' of S;
then o in dom (the ResultSort of S) by FUNCT_2:def 1;
then
A5: Result(o,U1) = (the Sorts of U1).((the ResultSort of S).o) by A4,FUNCT_1:12
.= (the Sorts of U1).r by MSUALG_1:def 2;
per cases;
suppose
Result(o,U1) <> {};
then dom Den(o,U1) = Args(o,U1) by FUNCT_2:def 1;
then rng Den(o,U1) c= Result(o,U1) & Den(o,U1).x in rng Den(o,U1) by A1,
FUNCT_1:def 3,RELAT_1:def 19;
hence thesis by A2,A3,A5,FUNCT_1:18;
end;
suppose
A6: Result(o,U1) = {};
then dom Den(o,U1) = {};
then
A7: Den(o,U1).x = {} by FUNCT_1:def 2;
dom (F.r) = {} by A5,A6;
then (F.r).{} = {} by FUNCT_1:def 2;
hence thesis by A1,A7,Th7;
end;
end;
theorem Th10:
for U1,U2,U3 being non-empty MSAlgebra over S for H1 be
ManySortedFunction of U1,U2, H2 be ManySortedFunction of U2,U3 st H1
is_homomorphism U1,U2 & H2 is_homomorphism U2,U3 holds H2 ** H1 is_homomorphism
U1,U3
proof
let U1,U2,U3 be non-empty MSAlgebra over S;
let H1 be ManySortedFunction of U1,U2,H2 be ManySortedFunction of U2,U3;
assume that
A1: H1 is_homomorphism U1,U2 and
A2: H2 is_homomorphism U2,U3;
let o be OperSymbol of S such that
Args(o,U1) <> {};
let x be Element of Args(o,U1);
set F = H2**H1, r = the_result_sort_of o;
(H1.r).(Den(o,U1).x) = Den(o,U2).(H1#x) by A1;
then
A3: (H2.r).((H1.r).(Den(o,U1).x)) = Den(o,U3).(H2#(H1#x)) by A2;
A4: F.r = (H2.r)*(H1.r) & dom (F.r) = (the Sorts of U1).r by Th2,FUNCT_2:def 1;
rng (the ResultSort of S) c= the carrier of S by RELAT_1:def 19;
then rng (the ResultSort of S) c= dom (the Sorts of U1) by PARTFUN1:def 2;
then
A5: Result(o,U1) = ((the Sorts of U1)*(the ResultSort of S)).o & dom ((the
Sorts of U1)*(the ResultSort of S)) = dom (the ResultSort of S) by
MSUALG_1:def 5,RELAT_1:27;
o in the carrier' of S;
then o in dom (the ResultSort of S) by FUNCT_2:def 1;
then Result(o,U1) = (the Sorts of U1).((the ResultSort of S).o) by A5,
FUNCT_1:12
.= (the Sorts of U1).r by MSUALG_1:def 2;
then (F.r).(Den(o,U1).x) = Den(o,U3).(H2#(H1#x)) by A3,A4,FUNCT_1:12;
hence (F.r).(Den(o,U1).x) = Den(o,U3).(F#x) by Th8;
end;
definition
let S;
let U1,U2 be MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
pred F is_epimorphism U1,U2 means
F is_homomorphism U1,U2 & F is "onto";
end;
theorem Th11:
for U1,U2,U3 being non-empty MSAlgebra over S for F be
ManySortedFunction of U1,U2, G be ManySortedFunction of U2,U3 st F
is_epimorphism U1,U2 & G is_epimorphism U2,U3 holds G**F is_epimorphism U1,U3
proof
let U1,U2,U3 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2, G be ManySortedFunction of U2,U3;
assume that
A1: F is_epimorphism U1,U2 and
A2: G is_epimorphism U2,U3;
A3: G is "onto" by A2;
A4: F is "onto" by A1;
for i be set st i in (the carrier of S) holds rng((G**F).i) = (the Sorts
of U3).i
proof
let i be set;
assume
A5: i in the carrier of S;
then reconsider
f = F.i as Function of (the Sorts of U1).i,(the Sorts of U2).i
by PBOOLE:def 15;
reconsider g = G.i as Function of (the Sorts of U2).i,(the Sorts of U3).i
by A5,PBOOLE:def 15;
rng f = (the Sorts of U2).i by A4,A5;
then
A6: dom g = rng f by A5,FUNCT_2:def 1;
rng g = (the Sorts of U3).i by A3,A5;
then rng (g*f) = (the Sorts of U3).i by A6,RELAT_1:28;
hence thesis by A5,Th2;
end;
then
A7: G**F is "onto";
F is_homomorphism U1,U2 & G is_homomorphism U2,U3 by A1,A2;
then G**F is_homomorphism U1,U3 by Th10;
hence thesis by A7;
end;
definition
let S;
let U1,U2 be MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
pred F is_monomorphism U1,U2 means
F is_homomorphism U1,U2 & F is "1-1";
end;
theorem Th12:
for U1,U2,U3 being non-empty MSAlgebra over S for F be
ManySortedFunction of U1,U2, G be ManySortedFunction of U2,U3 st F
is_monomorphism U1,U2 & G is_monomorphism U2,U3 holds G**F is_monomorphism U1,
U3
proof
let U1,U2,U3 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2, G be ManySortedFunction of U2,U3;
assume that
A1: F is_monomorphism U1,U2 and
A2: G is_monomorphism U2,U3;
A3: G is "1-1" by A2;
A4: F is "1-1" by A1;
for i be set, h be Function st i in dom (G**F) & (G**F).i = h holds h is
one-to-one
proof
let i be set,h be Function;
assume that
A5: i in dom (G**F) and
A6: (G**F).i = h;
A7: i in the carrier of S by A5,PARTFUN1:def 2;
then reconsider
g = G.i as Function of (the Sorts of U2).i,(the Sorts of U3).i
by PBOOLE:def 15;
reconsider f = F.i as Function of (the Sorts of U1).i,(the Sorts of U2).i
by A7,PBOOLE:def 15;
i in dom G by A7,PARTFUN1:def 2;
then
A8: g is one-to-one by A3;
i in dom F by A7,PARTFUN1:def 2;
then f is one-to-one by A4;
then g*f is one-to-one by A8;
hence thesis by A6,A7,Th2;
end;
then
A9: G**F is "1-1";
F is_homomorphism U1,U2 & G is_homomorphism U2,U3 by A1,A2;
then G**F is_homomorphism U1,U3 by Th10;
hence thesis by A9;
end;
definition
let S;
let U1,U2 be MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
pred F is_isomorphism U1,U2 means
F is_epimorphism U1,U2 & F is_monomorphism U1,U2;
end;
theorem Th13:
for F be ManySortedFunction of U1,U2 holds F is_isomorphism U1,
U2 iff F is_homomorphism U1,U2 & F is "onto" & F is "1-1"
proof
let F be ManySortedFunction of U1,U2;
thus F is_isomorphism U1,U2 implies F is_homomorphism U1,U2 & F is "onto" &
F is "1-1"
proof
assume F is_isomorphism U1,U2;
then F is_epimorphism U1,U2 & F is_monomorphism U1,U2;
hence thesis;
end;
assume F is_homomorphism U1,U2 & F is "onto" & F is "1-1";
then F is_epimorphism U1,U2 & F is_monomorphism U1,U2;
hence thesis;
end;
Lm2: for U1,U2 being non-empty MSAlgebra over S for H be ManySortedFunction of
U1,U2 st H is_isomorphism U1,U2 holds H"" is_homomorphism U2,U1
proof
let U1,U2 be non-empty MSAlgebra over S;
let H be ManySortedFunction of U1,U2;
set F = H"";
assume
A1: H is_isomorphism U1,U2;
then
A2: H is "onto" by Th13;
A3: H is "1-1" by A1,Th13;
A4: H is_homomorphism U1,U2 by A1,Th13;
for o be OperSymbol of S st Args(o,U2) <> {} for x be Element of Args(o,
U2) holds (F.(the_result_sort_of o)).(Den(o,U2).x) = Den(o,U1).(F#x)
proof
let o be OperSymbol of S such that
Args(o,U2) <> {};
let x be Element of Args(o,U2);
set r = the_result_sort_of o;
deffunc G(object)=(F#x).$1;
consider f being Function such that
A5: dom f = dom (the_arity_of o) & for n be object st n in dom (
the_arity_of o) holds f.n = G(n) from FUNCT_1:sch 3;
A6: dom (F#x) = dom (the_arity_of o) by Th6;
then
A7: f = (F#x) by A5,FUNCT_1:2;
r in the carrier of S;
then r in dom H by PARTFUN1:def 2;
then
A8: H.r is one-to-one by A3;
dom (H.r) = (the Sorts of U1).r & F.r = (H.r)" by A2,A3,Def4,FUNCT_2:def 1;
then
A9: (F.r)*(H.r) = id ((the Sorts of U1).r) by A8,FUNCT_1:39;
A10: dom (the ResultSort of S) = the carrier' of S by FUNCT_2:def 1;
then
A11: dom ((the Sorts of U1)*(the ResultSort of S)) = dom (the ResultSort
of S) by PARTFUN1:def 2;
A12: Result(o,U1) = ((the Sorts of U1)*(the ResultSort of S)).o by
MSUALG_1:def 5
.= (the Sorts of U1).((the ResultSort of S).o) by A10,A11,FUNCT_1:12
.= (the Sorts of U1).r by MSUALG_1:def 2;
reconsider f as Element of Args(o,U1) by A5,A6,FUNCT_1:2;
A13: dom ((F.r)*(H.r)) = (the Sorts of U1).r by FUNCT_2:def 1;
(H.r).(Den(o,U1).f) = Den(o,U2).(H#(F#x)) by A4,A7
.= Den(o,U2).((H**F)#x) by Th8
.= Den(o,U2).((id (the Sorts of U2))#x) by A2,A3,Th5
.= Den(o,U2).x by Th7;
then
(F.r).(Den(o,U2).x) = ((F.r)*(H.r)).(Den(o,U1).(F#x)) by A7,A13,A12,
FUNCT_1:12
.= Den(o,U1).(F#x) by A12,A9;
hence thesis;
end;
hence thesis;
end;
theorem Th14:
for U1,U2 being non-empty MSAlgebra over S for H be
ManySortedFunction of U1,U2, H1 be ManySortedFunction of U2,U1 st H
is_isomorphism U1,U2 & H1 = H"" holds H1 is_isomorphism U2,U1
proof
let U1,U2 be non-empty MSAlgebra over S;
let H be ManySortedFunction of U1,U2,H1 be ManySortedFunction of U2,U1;
assume that
A1: H is_isomorphism U1,U2 and
A2: H1 = H"";
A3: H1 is_homomorphism U2,U1 by A1,A2,Lm2;
H is_monomorphism U1,U2 by A1;
then
A4: H is "1-1";
H is_epimorphism U1,U2 by A1;
then
A5: H is "onto";
for i be set, g be Function st i in dom H1 & g = H1.i holds g is one-to-one
proof
let i be set;
let g be Function;
assume that
A6: i in dom H1 and
A7: g = H1.i;
A8: i in the carrier of S by A6,PARTFUN1:def 2;
then reconsider
f = H.i as Function of (the Sorts of U1).i,(the Sorts of U2).i
by PBOOLE:def 15;
i in dom H by A8,PARTFUN1:def 2;
then f is one-to-one by A4;
then f" is one-to-one;
hence thesis by A2,A4,A5,A7,A8,Def4;
end;
then H1 is "1-1";
then
A9: H1 is_monomorphism U2,U1 by A3;
for i be set st i in (the carrier of S) holds rng(H1.i) = (the Sorts of U1).i
proof
let i be set;
assume
A10: i in (the carrier of S);
then reconsider
f = H.i as Function of (the Sorts of U1).i,(the Sorts of U2).i
by PBOOLE:def 15;
i in dom H by A10,PARTFUN1:def 2;
then f is one-to-one by A4;
then rng (f") = dom f by FUNCT_1:33;
then rng (f") = (the Sorts of U1).i by A10,FUNCT_2:def 1;
hence thesis by A2,A4,A5,A10,Def4;
end;
then H1 is "onto";
then H1 is_epimorphism U2,U1 by A3;
hence thesis by A9;
end;
theorem Th15:
for U1,U2,U3 being non-empty MSAlgebra over S for H be
ManySortedFunction of U1,U2, H1 be ManySortedFunction of U2,U3 st H
is_isomorphism U1,U2 & H1 is_isomorphism U2,U3 holds H1 ** H is_isomorphism U1,
U3
by Th11,Th12;
definition
let S;
let U1,U2 be MSAlgebra over S;
pred U1,U2 are_isomorphic means
ex F be ManySortedFunction of U1,U2 st F is_isomorphism U1,U2;
end;
theorem Th16:
for U1 being MSAlgebra over S holds id the Sorts of U1
is_isomorphism U1,U1 & U1,U1 are_isomorphic
proof
let U1 be MSAlgebra over S;
A1: id (the Sorts of U1) is_homomorphism U1,U1 by Th9;
for i be set,f be Function st i in dom id (the Sorts of U1) & (id (the
Sorts of U1)).i = f holds f is one-to-one
proof
let i be set,f be Function;
assume that
A2: i in dom id (the Sorts of U1) and
A3: (id (the Sorts of U1)).i = f;
i in the carrier of S by A2,PARTFUN1:def 2;
then f = id ((the Sorts of U1).i) by A3,Def1;
hence thesis;
end;
then id (the Sorts of U1) is "1-1";
then
A4: id (the Sorts of U1) is_monomorphism U1,U1 by A1;
for i be set st i in (the carrier of S) holds rng((id (the Sorts of U1))
.i) = (the Sorts of U1).i
proof
let i be set;
assume i in (the carrier of S);
then (id (the Sorts of U1)).i = id ((the Sorts of U1).i) by Def1;
hence thesis;
end;
then id (the Sorts of U1) is "onto";
then
A5: id (the Sorts of U1) is_epimorphism U1,U1 by A1;
hence id (the Sorts of U1) is_isomorphism U1,U1 by A4;
take id (the Sorts of U1);
thus thesis by A4,A5;
end;
definition
let S;
let U1, U2 be MSAlgebra over S;
redefine pred U1, U2 are_isomorphic;
reflexivity by Th16;
end;
theorem
for U1,U2 being non-empty MSAlgebra over S holds U1,U2 are_isomorphic
implies U2,U1 are_isomorphic
proof
let U1,U2 be non-empty MSAlgebra over S;
assume U1,U2 are_isomorphic;
then consider F be ManySortedFunction of U1,U2 such that
A1: F is_isomorphism U1,U2;
reconsider G = F"" as ManySortedFunction of U2,U1;
G is_isomorphism U2,U1 by A1,Th14;
hence thesis;
end;
theorem
for U1,U2,U3 being non-empty MSAlgebra over S holds U1,U2
are_isomorphic & U2,U3 are_isomorphic implies U1,U3 are_isomorphic
proof
let U1,U2,U3 be non-empty MSAlgebra over S;
assume that
A1: U1,U2 are_isomorphic and
A2: U2,U3 are_isomorphic;
consider F be ManySortedFunction of U1,U2 such that
A3: F is_isomorphism U1,U2 by A1;
consider G be ManySortedFunction of U2,U3 such that
A4: G is_isomorphism U2,U3 by A2;
reconsider H = G**F as ManySortedFunction of U1,U3;
H is_isomorphism U1,U3 by A3,A4,Th15;
hence thesis;
end;
definition
let S;
let U1,U2 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
assume
A1: F is_homomorphism U1,U2;
func Image F -> strict non-empty MSSubAlgebra of U2 means
:Def12:
the Sorts of it = F.:.:(the Sorts of U1);
existence
proof
set u2 = F.:.:(the Sorts of U1);
A2: now
let i be object;
reconsider f = F.i as Function;
assume
A3: i in the carrier of S;
then
A4: u2.i = f.:((the Sorts of U1).i) by PBOOLE:def 20;
reconsider f as Function of (the Sorts of U1).i,(the Sorts of U2).i by A3
,PBOOLE:def 15;
dom f = (the Sorts of U1).i by A3,FUNCT_2:def 1;
hence u2.i is non empty by A3,A4;
end;
now
let i be object;
reconsider f = F.i as Function;
assume
A5: i in the carrier of S;
then
A6: u2.i = f.:((the Sorts of U1).i) by PBOOLE:def 20;
reconsider f as Function of (the Sorts of U1).i,(the Sorts of U2).i by A5
,PBOOLE:def 15;
A7: rng f c= (the Sorts of U2).i by RELAT_1:def 19;
dom f = (the Sorts of U1).i by A5,FUNCT_2:def 1;
hence u2.i c= (the Sorts of U2).i by A6,A7,RELAT_1:113;
end;
then u2 c= the Sorts of U2 by PBOOLE:def 2;
then reconsider u2 as non-empty MSSubset of U2 by A2,PBOOLE:def 13,def 18;
set M = GenMSAlg(u2);
reconsider M9 = MSAlgebra (# u2, Opers(U2,u2) qua ManySortedFunction of u2
# * the Arity of S, u2 * the ResultSort of S #) as non-empty MSAlgebra over S
by MSUALG_1:def 3;
take M;
u2 is opers_closed
proof
let o be OperSymbol of S;
thus rng ((Den(o,U2))|((u2# * the Arity of S).o)) c= (u2 * the
ResultSort of S).o
proof
let x be object;
set D = Den(o,U2), X = (u2# * the Arity of S).o, ao = the_arity_of o,
ro = the_result_sort_of o, ut = u2 * ao, S1 = the Sorts of U1;
A8: rng ao c= the carrier of S by FINSEQ_1:def 4;
A9: dom (the Arity of S) = the carrier' of S by FUNCT_2:def 1;
then dom (u2# * (the Arity of S)) = dom (the Arity of S) by
PARTFUN1:def 2;
then
A10: X = u2#.((the Arity of S).o) by A9,FUNCT_1:12
.= u2#.(ao) by MSUALG_1:def 1
.= product(u2 * ao) by FINSEQ_2:def 5;
assume x in rng (D|X);
then consider a be object such that
A11: a in dom(D|X) and
A12: x = (D|X).a by FUNCT_1:def 3;
A13: x = D.a by A11,A12,FUNCT_1:47;
dom (D|X) c= dom D by RELAT_1:60;
then reconsider a as Element of Args(o,U2) by A11,FUNCT_2:def 1;
defpred P[object,object] means
for s be SortSymbol of S st s = ao.$1 holds
$2 in S1.s & (a).$1=(F.s).$2;
A14: dom (D|X) c= X by RELAT_1:58;
then
A15: dom a = dom ut by A11,A10,CARD_3:9;
A16: dom u2 = the carrier of S by PARTFUN1:def 2;
A17: for y be object st y in dom (a) ex i be object st P[y,i]
proof
let y be object;
assume
A18: y in dom (a);
then
A19: a.y in ut.y by A11,A14,A10,A15,CARD_3:9;
dom (u2 * ao) = dom ao by A16,A8,RELAT_1:27;
then ao.y in rng ao by A15,A18,FUNCT_1:def 3;
then reconsider s = ao.y as SortSymbol of S by A8;
A20: dom (F.s) = S1.s by FUNCT_2:def 1;
ut.y = u2.(ao.y) by A15,A18,FUNCT_1:12
.= (F.s).:(S1.s) by PBOOLE:def 20
.= rng (F.s) by A20,RELAT_1:113;
then consider i be object such that
A21: i in S1.s & (a).y = (F.s).i by A20,A19,FUNCT_1:def 3;
take i;
thus thesis by A21;
end;
consider f be Function such that
A22: dom f = dom a & for y be object st y in dom a holds P[y,f.y]
from CLASSES1:sch 1(A17);
dom S1 = the carrier of S by PARTFUN1:def 2;
then
A23: dom (S1 * ao) = dom ao by A8,RELAT_1:27;
A24: dom f = dom ao by A15,A16,A8,A22,RELAT_1:27;
A25: for y be object st y in dom(S1 * ao) holds f.y in (S1 * ao).y
proof
let y be object;
assume
A26: y in dom (S1 * ao);
then ao.y in rng ao by A23,FUNCT_1:def 3;
then reconsider s = ao.y as SortSymbol of S by A8;
f.y in S1.s by A22,A24,A23,A26;
hence thesis by A26,FUNCT_1:12;
end;
Args(o,U1) = product (S1 * ao) by PRALG_2:3;
then reconsider a1 = f as Element of Args(o,U1) by A24,A23,A25,CARD_3:9
;
A27: dom a1 = dom ao by Th6;
A28: now
let y be object;
assume
A29: y in dom ao;
then reconsider n = y as Nat;
ao.y in rng ao by A29,FUNCT_1:def 3;
then reconsider s = ao.y as SortSymbol of S by A8;
(F#a1).n = (F.(ao/.n)).(a1.n) by A27,A29,Def6
.= (F.s).(a1.n) by A29,PARTFUN1:def 6;
hence (F#a1).y = a.y by A22,A27,A29;
end;
dom (F#a1) = dom ao & dom a = dom ao by Th6;
then F#a1 = a by A28,FUNCT_1:2;
then
A30: (F.ro).(Den(o,U1).a1) = x by A1,A13;
reconsider g = F.ro as Function;
A31: dom (F.ro) = S1.ro by FUNCT_2:def 1;
A32: dom (the ResultSort of S) = the carrier' of S by FUNCT_2:def 1;
then
A33: dom (S1 * (the ResultSort of S)) = dom (the ResultSort of S) by
PARTFUN1:def 2;
Result(o,U1) = (S1 * (the ResultSort of S)).o by MSUALG_1:def 5
.= S1.((the ResultSort of S).o) by A32,A33,FUNCT_1:12
.= S1.ro by MSUALG_1:def 2;
then Den(o,U1).a1 in S1.ro;
then
A34: Den(o,U1).a1 in dom (F.ro) by FUNCT_2:def 1;
dom (u2 * the ResultSort of S) = dom (the ResultSort of S) by A32,
PARTFUN1:def 2;
then (u2 * the ResultSort of S).o = u2.((the ResultSort of S).o) by A32
,FUNCT_1:12
.= u2.ro by MSUALG_1:def 2
.= g.:(S1.ro) by PBOOLE:def 20
.= rng g by A31,RELAT_1:113;
hence thesis by A30,A34,FUNCT_1:def 3;
end;
end;
then for B be MSSubset of U2 st B = the Sorts of M9 holds B is
opers_closed & the Charact of M9 = Opers(U2,B);
then
A35: M9 is MSSubAlgebra of U2 by MSUALG_2:def 9;
u2 is MSSubset of M9 by PBOOLE:def 18;
then M is MSSubAlgebra of M9 by A35,MSUALG_2:def 17;
then the Sorts of M is MSSubset of M9 by MSUALG_2:def 9;
then
A36: the Sorts of M c= u2 by PBOOLE:def 18;
u2 is MSSubset of M by MSUALG_2:def 17;
then u2 c= the Sorts of M by PBOOLE:def 18;
hence thesis by A36,PBOOLE:146;
end;
uniqueness by MSUALG_2:9;
end;
theorem
for U1 being non-empty MSAlgebra over S, U2 being non-empty
MSAlgebra over S, F be ManySortedFunction of U1,U2 st F is_homomorphism U1,U2
holds F is_epimorphism U1,U2 iff Image F = the MSAlgebra of U2
proof
let U1 be non-empty MSAlgebra over S;
let U2 be non-empty MSAlgebra over S, F be ManySortedFunction of U1,
U2;
set FF = F.:.:(the Sorts of U1);
assume
A1: F is_homomorphism U1,U2;
thus F is_epimorphism U1,U2 implies Image F = the MSAlgebra of U2
proof
assume F is_epimorphism U1,U2;
then
A2: F is "onto";
now
let i be object;
assume
A3: i in the carrier of S;
then reconsider
f = F.i as Function of (the Sorts of U1).i,(the Sorts of U2).
i by PBOOLE:def 15;
A4: rng f = (the Sorts of U2).i by A2,A3;
reconsider f as Function;
FF.i = f.:((the Sorts of U1).i) & dom f = (the Sorts of U1).i by A3,
FUNCT_2:def 1,PBOOLE:def 20;
hence FF.i = (the Sorts of U2).i by A4,RELAT_1:113;
end;
then
A5: FF = the Sorts of U2 by PBOOLE:3;
the MSAlgebra of U2 is strict MSSubAlgebra of U2 by MSUALG_2:5;
hence thesis by A1,A5,Def12;
end;
assume Image F = the MSAlgebra of U2;
then
A6: FF = the Sorts of U2 by A1,Def12;
for i be set st i in the carrier of S holds rng(F.i) = (the Sorts of U2 ) . i
proof
let i be set;
assume i in the carrier of S;
then reconsider i as Element of S;
reconsider f = F.i as Function of (the Sorts of U1).i,(the Sorts of U2).i;
f.:((the Sorts of U1).i) = (the Sorts of U2).i & dom f = (the Sorts
of U1).i by A6,FUNCT_2:def 1,PBOOLE:def 20;
hence thesis by RELAT_1:113;
end;
then F is "onto";
hence thesis by A1;
end;
Lm3: for U1,U2 being non-empty MSAlgebra over S for F be ManySortedFunction of
U1,U2 st F is_homomorphism U1,U2 holds F is ManySortedFunction of U1,Image F
proof
let U1,U2 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
assume
A1: F is_homomorphism U1,U2;
for i be object st i in the carrier of S holds F.i is Function of (the
Sorts of U1).i,(the Sorts of Image F).i
proof
let i be object;
assume
A2: i in the carrier of S;
then reconsider
f = F.i as Function of (the Sorts of U1).i,(the Sorts of U2).i
by PBOOLE:def 15;
A3: dom f = (the Sorts of U1).i by A2,FUNCT_2:def 1;
the Sorts of Image F = F.:.:(the Sorts of U1) by A1,Def12;
then (the Sorts of Image F).i = f.:((the Sorts of U1).i) by A2,
PBOOLE:def 20
.= rng f by A3,RELAT_1:113;
hence thesis by A3,FUNCT_2:1;
end;
hence thesis by PBOOLE:def 15;
end;
theorem Th20:
for U1,U2 being non-empty MSAlgebra over S for F be
ManySortedFunction of U1,U2, G be ManySortedFunction of U1,Image F st F = G & F
is_homomorphism U1,U2 holds G is_epimorphism U1,Image F
proof
let U1,U2 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2, G be ManySortedFunction of U1,Image F;
assume that
A1: F = G and
A2: F is_homomorphism U1,U2;
for o be OperSymbol of S st Args(o,U1) <> {} for x be Element of Args(o,
U1) holds (G.(the_result_sort_of o)).(Den(o,U1).x) = Den(o,Image F).(G#x)
proof
set IF = Image F;
reconsider SIF = the Sorts of IF as non-empty MSSubset of U2 by
MSUALG_2:def 9;
reconsider G1 = G as ManySortedFunction of U1,U2 by A1;
let o be OperSymbol of S such that
Args(o,U1) <> {};
let x be Element of Args(o,U1);
set SIFo = SIF * (the_arity_of o), Uo = (the Sorts of U2) * (the_arity_of
o), ao = the_arity_of o;
A3: dom Den(o,U2) = Args(o,U2) by FUNCT_2:def 1;
A4: rng ao c= the carrier of S by FINSEQ_1:def 4;
then rng ao c= dom SIF by PARTFUN1:def 2;
then
A5: dom SIFo = dom ao by RELAT_1:27;
rng ao c= dom (the Sorts of U2) by A4,PARTFUN1:def 2;
then
A6: dom SIFo = dom Uo by A5,RELAT_1:27;
A7: for x be object st x in dom SIFo holds SIFo.x c= Uo.x
proof
let x be object;
assume
A8: x in dom SIFo;
then ao.x in rng ao by A5,FUNCT_1:def 3;
then reconsider k = ao.x as Element of S by A4;
set f = F.k;
A9: dom f = (the Sorts of U1).k by FUNCT_2:def 1;
A10: rng f c= (the Sorts of U2).k by RELAT_1:def 19;
SIF = F.:.:(the Sorts of U1) by A2,Def12;
then SIFo.x = (F.:.:(the Sorts of U1)).k by A8,FUNCT_1:12
.= f.:((the Sorts of U1).k) by PBOOLE:def 20
.= rng f by A9,RELAT_1:113;
hence thesis by A6,A8,A10,FUNCT_1:12;
end;
A11: dom x = dom (the_arity_of o) by Th6;
A12: now
let a be object;
assume
A13: a in dom (the_arity_of o);
then reconsider n = a as Nat;
(G#x).n = (G.((the_arity_of o)/.n)).(x.n) by A11,A13,Def6;
hence (G#x).a = (G1#x).a by A11,A13,Def6;
end;
dom (G#x) = dom (the_arity_of o) & dom (G1#x) = dom (the_arity_of o)
by Th6;
then G#x = G1#x by A12,FUNCT_1:2;
then
A14: (G.(the_result_sort_of o)).(Den(o,U1).x)= Den(o,U2).(G#x) by A1,A2;
SIF is opers_closed by MSUALG_2:def 9;
then
A15: SIF is_closed_on o;
Args(o,IF) = product(SIFo) & Args(o,U2) = product(Uo) by PRALG_2:3;
then Args(o,IF) c= Args(o,U2) by A6,A7,CARD_3:27;
then G#x in dom Den(o,U2) by A3;
then
A16: (SIF# * the Arity of S).o = Args(o,IF) & G#x in (dom Den(o,U2)) /\
Args(o,IF ) by MSUALG_1:def 4,XBOOLE_0:def 4;
the Charact of IF = Opers(U2,SIF) by MSUALG_2:def 9;
then Den(o,IF) = (Opers(U2,SIF)).o by MSUALG_1:def 6
.= o/.(SIF) by MSUALG_2:def 8
.= (Den(o,U2))|((SIF# * the Arity of S).o) by A15,MSUALG_2:def 7;
hence thesis by A14,A16,FUNCT_1:48;
end;
then
A17: G is_homomorphism U1,Image F;
for i be set st i in the carrier of S holds rng(G.i) = (the Sorts of
Image F).i
proof
let i be set;
assume i in the carrier of S;
then reconsider i as Element of S;
set g = G.i;
the Sorts of (Image F) = G.:.:(the Sorts of U1) by A1,A2,Def12;
then
A18: (the Sorts of Image F).i = g.:((the Sorts of U1).i) by PBOOLE:def 20;
dom g = (the Sorts of U1).i by FUNCT_2:def 1;
hence thesis by A18,RELAT_1:113;
end;
then G is "onto";
hence thesis by A17;
end;
theorem
for U1,U2 being non-empty MSAlgebra over S for F be ManySortedFunction
of U1,U2 st F is_homomorphism U1,U2 ex G be ManySortedFunction of U1,Image F st
F = G & G is_epimorphism U1,Image F
proof
let U1,U2 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
assume
A1: F is_homomorphism U1,U2;
then reconsider G = F as ManySortedFunction of U1,Image F by Lm3;
take G;
thus thesis by A1,Th20;
end;
Lm4: for U1,U2 being non-empty MSAlgebra over S for U3 be non-empty
MSSubAlgebra of U2, F be ManySortedFunction of U1,U2, G be ManySortedFunction
of U1,U3 st F = G & G is_homomorphism U1,U3 holds F is_homomorphism U1,U2
proof
let U1,U2 be non-empty MSAlgebra over S;
let U3 be non-empty MSSubAlgebra of U2, F be ManySortedFunction of U1,U2, G
be ManySortedFunction of U1,U3;
assume that
A1: F = G and
A2: G is_homomorphism U1,U3;
for o be OperSymbol of S st Args(o,U1) <> {} for x be Element of Args(o,
U1) holds (F.(the_result_sort_of o)).(Den(o,U1).x) = Den(o,U2).(F#x)
proof
reconsider S3 = the Sorts of U3 as non-empty MSSubset of U2 by
MSUALG_2:def 9;
let o be OperSymbol of S such that
Args(o,U1) <> {};
let x be Element of Args(o,U1);
for i be object st i in the carrier of S holds G.i is Function of (the
Sorts of U1).i, (the Sorts of U2).i
proof
reconsider S3 = the Sorts of U3 as non-empty MSSubset of U2 by
MSUALG_2:def 9;
let i be object;
assume
A3: i in the carrier of S;
then reconsider
g = G.i as Function of (the Sorts of U1).i,(the Sorts of U3).
i by PBOOLE:def 15;
the Sorts of U3 is MSSubset of U2 by MSUALG_2:def 9;
then the Sorts of U3 c= the Sorts of U2 by PBOOLE:def 18;
then S3.i c= (the Sorts of U2).i by A3,PBOOLE:def 2;
then g is Function of (the Sorts of U1).i,(the Sorts of U2).i by A3,
FUNCT_2:7;
hence thesis;
end;
then reconsider G1 = G as ManySortedFunction of U1,U2 by PBOOLE:def 15;
S3 is opers_closed by MSUALG_2:def 9;
then
A4: S3 is_closed_on o;
the Charact of U3 = Opers(U2,S3) by MSUALG_2:def 9;
then
A5: Den(o,U3) = (Opers(U2,S3)).o by MSUALG_1:def 6
.= o/.(S3) by MSUALG_2:def 8
.= (Den(o,U2))|((S3# * the Arity of S).o) by A4,MSUALG_2:def 7;
A6: dom x = dom (the_arity_of o) by Th6;
A7: now
let a be object;
assume
A8: a in dom (the_arity_of o);
then reconsider n = a as Nat;
(G#x).n = (G.((the_arity_of o)/.n)).(x.n) by A6,A8,Def6;
hence (G#x).a = (G1#x).a by A6,A8,Def6;
end;
dom (G#x) = dom (the_arity_of o) & dom (G1#x) = dom (the_arity_of o)
by Th6;
then
A9: G#x = G1#x by A7,FUNCT_1:2;
dom Den(o,U2) = Args(o,U2) by FUNCT_2:def 1;
then
A10: (S3# * the Arity of S).o = Args(o,U3) & F#x in (dom Den(o,U2)) /\
Args(o,U3) by A1,A9,MSUALG_1:def 4,XBOOLE_0:def 4;
(F.(the_result_sort_of o)).(Den(o,U1).x)= Den(o,U3).(F#x) by A1,A2,A9;
hence thesis by A5,A10,FUNCT_1:48;
end;
hence thesis;
end;
theorem Th22:
for U1 being non-empty MSAlgebra over S for U2 be non-empty
MSSubAlgebra of U1, G be ManySortedFunction of U2,U1 st G = id (the Sorts of U2
) holds G is_monomorphism U2,U1
proof
let U1 be non-empty MSAlgebra over S;
let U2 be non-empty MSSubAlgebra of U1, G be ManySortedFunction of U2,U1;
set F = id (the Sorts of U2);
assume
A1: G =id (the Sorts of U2);
for i be set st i in the carrier of S holds G.i is one-to-one
proof
let i be set;
assume
A2: i in the carrier of S;
then reconsider
f = F.i as Function of (the Sorts of U2).i,(the Sorts of U2 ).i
by PBOOLE:def 15;
f = id ((the Sorts of U2).i) by A2,Def1;
hence thesis by A1;
end;
then
A3: G is "1-1" by Th1;
G is_homomorphism U2,U1 by A1,Lm4,Th9;
hence thesis by A3;
end;
theorem
for U1,U2 being non-empty MSAlgebra over S for F be ManySortedFunction
of U1,U2 st F is_homomorphism U1,U2 ex F1 be ManySortedFunction of U1,Image F,
F2 be ManySortedFunction of Image F,U2 st F1 is_epimorphism U1,Image F & F2
is_monomorphism Image F,U2 & F = F2**F1
proof
let U1,U2 be non-empty MSAlgebra over S;
let F be ManySortedFunction of U1,U2;
assume
A1: F is_homomorphism U1,U2;
then reconsider F1 = F as ManySortedFunction of U1,Image F by Lm3;
for H be ManySortedFunction of Image F,Image F holds H is
ManySortedFunction of Image F,U2
proof
let H be ManySortedFunction of Image F,Image F;
for i be object st i in the carrier of S holds H.i is Function of (the
Sorts of Image F).i,(the Sorts of U2).i
proof
let i be object;
assume
A2: i in the carrier of S;
then reconsider
f = F.i as Function of (the Sorts of U1).i,(the Sorts of U2).
i by PBOOLE:def 15;
A3: dom f = (the Sorts of U1).i by A2,FUNCT_2:def 1;
reconsider h = H.i as Function of (the Sorts of Image F).i,(the Sorts of
Image F).i by A2,PBOOLE:def 15;
A4: rng f c= (the Sorts of U2).i by RELAT_1:def 19;
the Sorts of Image F = F.:.:(the Sorts of U1) by A1,Def12;
then (the Sorts of Image F).i = f.:((the Sorts of U1).i) by A2,
PBOOLE:def 20
.= rng f by A3,RELAT_1:113;
then
h is Function of (the Sorts of Image F).i,(the Sorts of U2).i by A4,
FUNCT_2:7;
hence thesis;
end;
hence thesis by PBOOLE:def 15;
end;
then reconsider
F2 = id (the Sorts of Image F) as ManySortedFunction of Image F,
U2;
take F1,F2;
thus F1 is_epimorphism U1,Image F by A1,Th20;
thus F2 is_monomorphism Image F,U2 by Th22;
thus thesis by Th4;
end;
theorem
for S for U1,U2 being MSAlgebra over S for o for F being
ManySortedFunction of U1,U2 for x being Element of Args(o,U1), f,u being
Function st x = f & x in Args(o,U1) & u in Args(o,U2) holds u = F#x iff for n
st n in dom f holds u.n = (F.((the_arity_of o)/.n)).(f.n) by Lm1;