:: Functors for Alternative Categories
:: by Andrzej Trybulec
::
:: Received April 24, 1996
:: Copyright (c) 1996-2021 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 XBOOLE_0, FUNCT_1, SUBSET_1, MCART_1, ZFMISC_1, TARSKI, PBOOLE,
RELAT_1, FUNCT_2, FUNCOP_1, MEMBER_1, STRUCT_0, ALTCAT_1, RELAT_2,
MSUALG_6, CAT_1, ALTCAT_2, FUNCT_3, MSUALG_3, ENS_1, WELLORD1, FUNCTOR0;
notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, SUBSET_1, RELAT_1, MCART_1,
FUNCT_1, PBOOLE, RELSET_1, PARTFUN1, FUNCT_2, BINOP_1, FUNCOP_1, FUNCT_3,
FUNCT_4, STRUCT_0, MSUALG_3, ALTCAT_1, ALTCAT_2;
constructors FUNCT_3, MSUALG_3, ALTCAT_2, RELSET_1, XTUPLE_0;
registrations SUBSET_1, RELAT_1, FUNCT_1, FUNCT_2, FUNCOP_1, PBOOLE, STRUCT_0,
ALTCAT_1, ALTCAT_2, RELSET_1, FUNCT_3, XTUPLE_0, FUNCT_4;
requirements SUBSET, BOOLE;
definitions TARSKI, MSUALG_3, FUNCT_1, FUNCT_2, XBOOLE_0, PBOOLE;
equalities XBOOLE_0, BINOP_1;
expansions MSUALG_3, FUNCT_1, FUNCT_2, XBOOLE_0;
theorems ALTCAT_2, FUNCT_4, FUNCOP_1, ZFMISC_1, ALTCAT_1, FUNCT_2, FUNCT_1,
PBOOLE, FUNCT_3, RELAT_1, MCART_1, DOMAIN_1, MSUALG_3, RELSET_1,
XBOOLE_0, XBOOLE_1, PARTFUN1, XTUPLE_0;
schemes ALTCAT_2;
begin :: Preliminaries
scheme ValOnPair {X()-> non empty set,f()-> Function,
x1,x2()-> Element of X(), F(object,object)-> set, P[object,object]}:
f().(x1(),x2()) = F(x1(),x2())
provided
A1: f() = { [[o,o9],F(o,o9)]
where o is Element of X(), o9 is Element of X(): P[o,o9] } and
A2: P[x1(),x2()]
proof
defpred R[set] means P[ $1`1,$1`2];
deffunc G(set) = F($1`1,$1`2);
A3: f() = { [o,G(o)] where o is Element of [:X(),X():]: R[o] }
proof
thus
f() c= {[o,F(o`1,o`2)] where o is Element of [:X(),X():]: P[o`1,o`2]}
proof
let y be object;
assume y in f();
then consider o1,o2 being Element of X() such that
A4: y = [[o1,o2],F(o1,o2)] and
A5: P[o1,o2] by A1;
reconsider p =[o1,o2] as Element of [:X(),X():] by ZFMISC_1:87;
A6: p`1 = o1;
p`2 = o2;
hence thesis by A4,A5,A6;
end;
let y be object;
assume y in {[o,F(o`1,o`2)] where o is Element of [:X(),X():]: P[o`1,o`2]};
then consider o being Element of [:X(),X():] such that
A7: y = [o,F(o`1,o`2)] and
A8: P[o`1,o`2];
reconsider o1 = o`1, o2 = o`2 as Element of X() by MCART_1:10;
o = [o1,o2] by MCART_1:21;
hence thesis by A1,A7,A8;
end;
reconsider x = [x1(),x2()] as Element of [:X(),X():] by ZFMISC_1:87;
A9: R[ x] by A2;
thus f().(x1(),x2()) = f().x .= G(x) from ALTCAT_2:sch 3(A3,A9)
.= F(x1(),x2());
end;
theorem Th1:
for A being set holds {} is Function of A,{} by FUNCT_2:130;
theorem Th2:
for I being set for M being ManySortedSet of I holds M*id I = M
proof
let I be set;
let M be ManySortedSet of I;
I = dom M by PARTFUN1:def 2;
hence thesis by RELAT_1:52;
end;
registration
let f be empty Function;
cluster ~f -> empty;
coherence;
let g be Function;
cluster [:f,g:] -> empty;
coherence
proof dom f = {};
then dom[:f,g:] = [:{},dom g:] by FUNCT_3:def 8;
hence thesis;
end;
cluster [:g,f:] -> empty;
coherence
proof dom f = {};
then dom[:g,f:] = [:dom g,{}:] by FUNCT_3:def 8;
hence thesis;
end;
end;
theorem Th3:
for A being set, f being Function holds f.:id A = (~f).:id A
proof
let A be set, f be Function;
thus f.:id A c= (~f).:id A
proof
let y be object;
assume y in f.:id A;
then consider x being object such that
A1: x in dom f and
A2: x in id A and
A3: y = f.x by FUNCT_1:def 6;
consider x1,x2 being object such that
A4: x = [x1,x2] by A2,RELAT_1:def 1;
A5: x1 = x2 by A2,A4,RELAT_1:def 10;
then
A6: x in dom~f by A1,A4,FUNCT_4:42;
then f.(x1,x2) = (~f).(x1,x2) by A4,A5,FUNCT_4:43;
hence thesis by A2,A3,A4,A6,FUNCT_1:def 6;
end;
let y be object;
assume y in (~f).:id A;
then consider x being object such that
A7: x in dom~f and
A8: x in id A and
A9: y = (~f).x by FUNCT_1:def 6;
consider x1,x2 being object such that
A10: x = [x1,x2] by A8,RELAT_1:def 1;
A11: x1 = x2 by A8,A10,RELAT_1:def 10;
then
A12: x in dom f by A7,A10,FUNCT_4:42;
then ~f.(x1,x2) = f.(x1,x2) by A10,A11,FUNCT_4:def 2;
hence thesis by A8,A9,A10,A12,FUNCT_1:def 6;
end;
theorem Th4:
for X,Y being set, f being Function of X,Y holds
f is onto iff [:f,f:] is onto
proof
let X,Y be set, f be Function of X,Y;
rng[:f,f:] = [:rng f, rng f:] by FUNCT_3:67;
then rng f = Y iff rng[:f,f:] = [:Y,Y:] by ZFMISC_1:92;
hence thesis;
end;
registration
let f be Function-yielding Function;
cluster ~f -> Function-yielding;
coherence;
end;
theorem Th5:
for A,B being set, a being object holds ~([:A,B:] --> a) = [:B,A:] --> a
proof
let A,B be set, a be object;
A1: now
let x be object;
hereby
assume x in dom([:B,A:] --> a);
then consider z,y being object such that
A2: z in B and
A3: y in A and
A4: x = [z,y] by ZFMISC_1:def 2;
take y,z;
thus x = [z,y] by A4;
[y,z] in [:A,B:] by A2,A3,ZFMISC_1:87;
hence [y,z] in dom([:A,B:] --> a);
end;
given y,z being object such that
A5: x = [z,y] and
A6: [y,z] in dom([:A,B:] --> a);
A7: y in A by A6,ZFMISC_1:87;
z in B by A6,ZFMISC_1:87;
then x in [:B,A:] by A5,A7,ZFMISC_1:87;
hence x in dom([:B,A:] --> a);
end;
now
let y,z be object;
assume
A8: [y,z] in dom([:A,B:] --> a);
then
A9: y in A by ZFMISC_1:87;
z in B by A8,ZFMISC_1:87;
hence ([:B,A:] --> a).(z,y) = a by A9,FUNCOP_1:7,ZFMISC_1:87
.= ([:A,B:] --> a).(y,z) by A8,FUNCOP_1:7;
end;
hence thesis by A1,FUNCT_4:def 2;
end;
theorem Th6:
for f,g being Function st f is one-to-one & g is one-to-one holds
[:f,g:]" = [:f",g":]
proof
let f,g be Function;
assume that
A1: f is one-to-one and
A2: g is one-to-one;
A3: [:f,g:] is one-to-one by A1,A2;
A4: dom(f") = rng f by A1,FUNCT_1:33;
A5: dom(g") = rng g by A2,FUNCT_1:33;
A6: dom([:f,g:]") = rng[:f,g:] by A3,FUNCT_1:33
.= [:dom(f"), dom(g"):] by A4,A5,FUNCT_3:67;
for x,y being object st x in dom(f") & y in dom(g")
holds [:f,g:]".(x,y) = [f".x,g".y]
proof
let x,y be object such that
A7: x in dom(f") and
A8: y in dom(g");
A9: dom[:f,g:] = [:dom f, dom g:] by FUNCT_3:def 8;
A10: f".x in rng(f") by A7,FUNCT_1:def 3;
A11: g".y in rng(g") by A8,FUNCT_1:def 3;
A12: f".x in dom f by A1,A10,FUNCT_1:33;
g".y in dom g by A2,A11,FUNCT_1:33;
then
A13: [f".x,g".y] in dom[:f,g:] by A9,A12,ZFMISC_1:87;
A14: f.(f".x) = (f*f").x by A7,FUNCT_1:13
.= ((f")"*f").x by A1,FUNCT_1:43
.= (id dom(f")).x by A1,FUNCT_1:39
.= x by A7,FUNCT_1:18;
g.(g".y) = (g*g").y by A8,FUNCT_1:13
.= ((g")"*g").y by A2,FUNCT_1:43
.= (id dom(g")).y by A2,FUNCT_1:39
.= y by A8,FUNCT_1:18;
then [:f,g:].(f".x,g".y) = [x,y] by A9,A13,A14,FUNCT_3:65;
hence thesis by A1,A2,A13,FUNCT_1:32;
end;
hence thesis by A6,FUNCT_3:def 8;
end;
theorem Th7:
for f being Function st [:f,f:] is one-to-one holds f is one-to-one
proof
let f be Function such that
A1: [:f,f:] is one-to-one;
let x1,x2 be object such that
A2: x1 in dom f and
A3: x2 in dom f and
A4: f.x1 = f.x2;
A5: dom[:f,f:] = [:dom f,dom f:] by FUNCT_3:def 8;
then
A6: [x1,x1] in dom[:f,f:] by A2,ZFMISC_1:87;
A7: [x2,x2] in dom[:f,f:] by A3,A5,ZFMISC_1:87;
[:f,f:].(x1,x1) = [f.x2,f.x2] by A4,A5,A6,FUNCT_3:65
.= [:f,f:].(x2,x2) by A5,A7,FUNCT_3:65;
then [x1,x1] = [x2,x2] by A1,A6,A7;
hence thesis by XTUPLE_0:1;
end;
theorem Th8:
for f being Function st f is one-to-one holds ~f is one-to-one
proof
let f be Function such that
A1: f is one-to-one;
let x1,x2 be object;
consider X,Y being set such that
A2: dom~f c= [:X,Y:] by FUNCT_4:44;
assume
A3: x1 in dom~f;
then consider x11,x12 being object such that x11 in X and x12 in Y and
A4: x1 = [x11,x12] by A2,ZFMISC_1:84;
assume
A5: x2 in dom~f;
then consider x21,x22 being object such that x21 in X and x22 in Y and
A6: x2 = [x21,x22] by A2,ZFMISC_1:84;
assume
A7: (~f).x1 = (~f).x2;
A8: [x12,x11] in dom f by A3,A4,FUNCT_4:42;
A9: [x22,x21] in dom f by A5,A6,FUNCT_4:42;
f.(x12,x11) = ~f.(x11,x12) by A3,A4,FUNCT_4:43
.= (~f).(x21,x22) by A4,A6,A7
.= f.(x22,x21) by A5,A6,FUNCT_4:43;
then
A10: [x12,x11] = [x22,x21] by A1,A8,A9;
then x12 = x22 by XTUPLE_0:1;
hence thesis by A4,A6,A10,XTUPLE_0:1;
end;
theorem Th9:
for f,g being Function st ~[:f,g:] is one-to-one holds [:g,f:] is one-to-one
proof
let f,g be Function such that
A1: ~[:f,g:] is one-to-one;
let x1,x2 be object;
A2: dom[:g,f:] = [:dom g, dom f:] by FUNCT_3:def 8;
A3: dom[:f,g:] = [:dom f, dom g:] by FUNCT_3:def 8;
assume x1 in dom[:g,f:];
then consider x11,x12 being object such that
A4: x11 in dom g and
A5: x12 in dom f and
A6: x1 = [x11,x12] by A2,ZFMISC_1:84;
assume x2 in dom[:g,f:];
then consider x21,x22 being object such that
A7: x21 in dom g and
A8: x22 in dom f and
A9: x2 = [x21,x22] by A2,ZFMISC_1:84;
x1 in dom[:g,f:] by A2,A4,A5,A6,ZFMISC_1:87;
then
A10: x1 in dom~[:f,g:] by A2,A3,FUNCT_4:46;
x2 in dom[:g,f:] by A2,A7,A8,A9,ZFMISC_1:87;
then
A11: x2 in dom~[:f,g:] by A2,A3,FUNCT_4:46;
assume
A12: [:g,f:].x1 = [:g,f:].x2;
A13: [:g,f:].(x11,x12) = [g.x11,f.x12] by A4,A5,FUNCT_3:def 8;
A14: [:g,f:].(x21,x22) = [g.x21,f.x22] by A7,A8,FUNCT_3:def 8;
then
A15: f.x22 = f.x12 by A6,A9,A12,A13,XTUPLE_0:1;
A16: g.x11 = g.x21 by A6,A9,A12,A13,A14,XTUPLE_0:1;
(~[:f,g:]).[x11,x12] = (~[:f,g:]).(x11,x12)
.= [:f,g:].(x12,x11) by A6,A10,FUNCT_4:43
.= [f.x22,g.x21] by A4,A5,A15,A16,FUNCT_3:def 8
.= [:f,g:].(x22,x21) by A7,A8,FUNCT_3:def 8
.= (~[:f,g:]).(x21,x22) by A9,A11,FUNCT_4:43
.= (~[:f,g:]).[x21,x22];
hence thesis by A1,A6,A9,A10,A11;
end;
theorem Th10:
for f,g being Function st f is one-to-one & g is one-to-one holds
~[:f,g:]" = ~([:g,f:]")
proof
let f,g be Function such that
A1: f is one-to-one and
A2: g is one-to-one;
A3: [:g,f:]" = [:g",f":] by A1,A2,Th6;
then
A4: dom([:g,f:]") = [:dom(g"), dom(f"):] by FUNCT_3:def 8;
A5: dom[:f,g:] = [:dom f, dom g:] by FUNCT_3:def 8;
A6: dom[:g,f:] = [:dom g, dom f:] by FUNCT_3:def 8;
A7: [:g,f:] is one-to-one by A1,A2;
A8: ~[:f,g:] is one-to-one by Th8,A1,A2;
A9: [:f,g:]" = [:f",g":] by A1,A2,Th6;
A10: dom~([:g,f:]") = [:dom(f"), dom(g"):] by A4,FUNCT_4:46
.= dom [:f", g":] by FUNCT_3:def 8
.= rng[:f,g:] by A1,A2,A9,FUNCT_1:32
.= rng~[:f,g:] by A5,FUNCT_4:47;
now
let y,x be object;
hereby
assume that
A11: y in rng~[:f,g:] and
A12: x = (~([:g,f:]")).y;
y in rng[:f,g:] by A5,A11,FUNCT_4:47;
then y in [:rng f,rng g:] by FUNCT_3:67;
then consider y1,y2 being object such that
A13: y1 in rng f and
A14: y2 in rng g and
A15: y = [y1,y2] by ZFMISC_1:84;
set x1 = f".y1, x2 = g".y2;
A16: y2 in dom(g") by A2,A14,FUNCT_1:32;
A17: y1 in dom(f") by A1,A13,FUNCT_1:32;
then [y2,y1] in dom([:g,f:]") by A4,A16,ZFMISC_1:87;
then
A18: (~([:g,f:]")).(y1,y2) = [:g",f":].(y2,y1) by A3,FUNCT_4:def 2
.= [x2,x1] by A16,A17,FUNCT_3:def 8;
A19: y1 in dom(f") by A1,A13,FUNCT_1:32;
A20: y2 in dom(g") by A2,A14,FUNCT_1:32;
A21: x1 in rng(f") by A19,FUNCT_1:def 3;
A22: x2 in rng(g") by A20,FUNCT_1:def 3;
A23: x1 in dom f by A1,A21,FUNCT_1:33;
A24: x2 in dom g by A2,A22,FUNCT_1:33;
then
A25: [x2,x1] in dom[:g,f:] by A6,A23,ZFMISC_1:87;
then
A26: [x2,x1] in dom~[:f,g:] by A5,A6,FUNCT_4:46;
thus
x in dom~[:f,g:] by A5,A6,A12,A15,A18,A25,FUNCT_4:46;
A27: f.x1 = y1 by A1,A13,FUNCT_1:32;
A28: g.x2 = y2 by A2,A14,FUNCT_1:32;
thus (~[:f,g:]).x = ~[:f,g:].(x2,x1) by A12,A15,A18
.= [:f,g:].(x1,x2) by A26,FUNCT_4:43
.= y by A15,A23,A24,A27,A28,FUNCT_3:def 8;
end;
assume that
A29: x in dom~[:f,g:] and
A30: (~[:f,g:]).x = y;
thus y in rng~[:f,g:] by A29,A30,FUNCT_1:def 3;
x in dom[:g,f:] by A5,A6,A29,FUNCT_4:46;
then consider x1,x2 being object such that
A31: x1 in dom g and
A32: x2 in dom f and
A33: x = [x1,x2] by A6,ZFMISC_1:84;
A34: (~[:f,g:]).(x1,x2) = [:f,g:].(x2,x1) by A29,A33,FUNCT_4:43
.= [f.x2,g.x1] by A31,A32,FUNCT_3:def 8;
A35: g.x1 in rng g by A31,FUNCT_1:def 3;
f.x2 in rng f by A32,FUNCT_1:def 3;
then [g.x1,f.x2] in [:rng g, rng f:] by A35,ZFMISC_1:87;
then [g.x1,f.x2] in rng[:g,f:] by FUNCT_3:67;
then
A36: [g.x1,f.x2] in dom([:g,f:]") by A7,FUNCT_1:33;
[x1,x2] in dom[:g,f:] by A6,A31,A32,ZFMISC_1:87;
hence x = ([:g,f:]").([:g,f:].(x1,x2)) by A1,A2,A33,FUNCT_1:34
.= ([:g,f:]").(g.x1,f.x2) by A31,A32,FUNCT_3:def 8
.= (~([:g,f:]")).(f.x2,g.x1) by A36,FUNCT_4:def 2
.= (~([:g,f:]")).y by A30,A33,A34;
end;
hence thesis by A8,A10,FUNCT_1:32;
end;
theorem Th11:
for A,B be set, f being Function of A,B st f is onto
holds id B c= [:f,f:].:id A
proof
let A,B be set, f be Function of A,B;
assume f is onto;
then
A1: rng f = B;
let xx be object;
assume
A2: xx in id B;
then consider x,x9 being object such that
A3: xx = [x,x9] by RELAT_1:def 1;
A4: x = x9 by A2,A3,RELAT_1:def 10;
A5: x in B by A2,A3,RELAT_1:def 10;
then consider y being object such that
A6: y in A and
A7: f.y = x by A1,FUNCT_2:11;
A8: dom f = A by A5,FUNCT_2:def 1;
A9: [y,y] in id A by A6,RELAT_1:def 10;
[:f,f:].(y,y) = xx by A3,A4,A6,A7,A8,FUNCT_3:def 8;
hence thesis by A2,A9,FUNCT_2:35;
end;
theorem Th12:
for F,G being Function-yielding Function, f be Function
holds (G**F)*f = (G*f)**(F*f)
proof
let F,G be Function-yielding Function, f be Function;
A1: dom((G**F)*f) = f"dom(G**F) by RELAT_1:147
.= f"(dom G /\ dom F) by PBOOLE:def 19
.= (f"dom F) /\ (f"dom G) by FUNCT_1:68
.= (f"dom F) /\ dom(G*f) by RELAT_1:147
.= dom(F*f) /\ dom(G*f) by RELAT_1:147;
now
let i be object;
assume
A2: i in dom((G**F)*f);
then
A3: i in dom f by FUNCT_1:11;
A4: f.i in dom(G**F) by A2,FUNCT_1:11;
thus ((G**F)*f).i = (G**F).(f.i) by A2,FUNCT_1:12
.= (G.(f.i))*(F.(f.i)) by A4,PBOOLE:def 19
.= ((G*f).i)*(F.(f.i)) by A3,FUNCT_1:13
.= ((G*f).i)*((F*f).i) by A3,FUNCT_1:13;
end;
hence thesis by A1,PBOOLE:def 19;
end;
theorem Th13:
for A,B,C being set, f being Function of [:A,B:],C st ~f is onto
holds f is onto
proof
let A,B,C be set, f be Function of [:A,B:],C;
A1: rng~f c= rng f by FUNCT_4:41;
assume ~f is onto;
then rng~f = C;
hence rng f = C by A1;
end;
theorem Th14:
for A be set, B being non empty set, f being Function of A,B
holds [:f,f:].:id A c= id B
proof
let A be set, B be non empty set, f be Function of A,B;
let x be object;
assume x in [:f,f:].:id A;
then consider yy being object such that
A1: yy in [:A,A:] and
A2: yy in id A and
A3: [:f,f:].yy = x by FUNCT_2:64;
consider y,y9 being object such that
A4: y in A and y9 in A and
A5: yy = [y,y9] by A1,ZFMISC_1:84;
A6: y = y9 by A2,A5,RELAT_1:def 10;
reconsider y as Element of A by A4;
A7: f.y in B by A4,FUNCT_2:5;
A8: y in dom f by A4,FUNCT_2:def 1;
x = [:f,f:].(y,y9) by A3,A5
.= [f.y,f.y] by A6,A8,FUNCT_3:def 8;
hence thesis by A7,RELAT_1:def 10;
end;
begin :: Functions bewteen Cartesian products
definition
let A,B be set;
mode bifunction of A,B is Function of [:A,A:],[:B,B:];
end;
definition
let A,B be set, f be bifunction of A,B;
attr f is Covariant means
:Def1:
ex g being Function of A,B st f = [:g,g:];
attr f is Contravariant means
:Def2:
ex g being Function of A,B st f = ~[:g,g:];
end;
theorem Th15:
for A be set, B be non empty set,
b being Element of B, f being bifunction of A,B st f = [:A,A:] --> [b,b]
holds f is Covariant Contravariant
proof
let A be set, B be non empty set,
b be Element of B, f be bifunction of A,B such that
A1: f = [:A,A:] --> [b,b];
reconsider g = A --> b as Function of A,B;
thus f is Covariant
proof
take g;
thus thesis by A1,ALTCAT_2:1;
end;
take g;
[:A,A:] --> [b,b] = ~([:A,A:] --> [b,b]) by Th5;
hence thesis by A1,ALTCAT_2:1;
end;
registration
let A,B be set;
cluster Covariant Contravariant for bifunction of A,B;
existence
proof
per cases;
suppose
A1: B = {};
then [:B,B:] = {} by ZFMISC_1:90;
then reconsider f = {} as bifunction of A,B by Th1;
take f;
reconsider g = {} as Function of A,B by A1,Th1;
reconsider h = g as empty Function;
thus f is Covariant
proof
take g;
thus f = [:h,h:] .= [:g,g:];
end;
take g;
thus f = ~[:h,h:] .= ~[:g,g:];
end;
suppose
A2: B <> {};
set b = the Element of B;
set f = [:A,A:] --> [b,b];
[b,b] in [:B,B:] by A2,ZFMISC_1:87;
then reconsider f as bifunction of A,B by FUNCOP_1:45;
take f;
thus thesis by A2,Th15;
end;
end;
end;
theorem
for A,B being non empty set
for f being Covariant Contravariant bifunction of A,B
ex b being Element of B st f = [:A,A:] --> [b,b]
proof
let A,B be non empty set;
let f be Covariant Contravariant bifunction of A,B;
consider g1 being Function of A,B such that
A1: f = [:g1,g1:] by Def1;
consider g2 being Function of A,B such that
A2: f = ~[:g2,g2:] by Def2;
set a = the Element of A;
take b = g1.a;
A3: dom f = [:A,A:] by FUNCT_2:def 1;
now
let z be object;
assume z in dom f;
then consider a1,a2 being Element of A such that
A4: z = [a1,a2] by DOMAIN_1:1;
A5: dom g2 = A by FUNCT_2:def 1;
A6: dom g1 = A by FUNCT_2:def 1;
A7: dom[:g2,g2:] = [:dom g2, dom g2:] by FUNCT_3:def 8;
then
A8: [a1,a] in dom[:g2,g2:] by A5,ZFMISC_1:87;
A9: dom g2 = A by FUNCT_2:def 1;
[b,g1.a1] = f.(a,a1) by A1,A6,FUNCT_3:def 8
.= [:g2,g2:].(a1,a) by A2,A8,FUNCT_4:def 2
.= [g2.a1,g2.a] by A9,FUNCT_3:def 8;
then
A10: g2.a1 = b by XTUPLE_0:1;
A11: [a2,a] in dom[:g2,g2:] by A5,A7,ZFMISC_1:87;
[b,g1.a2] = f.(a,a2) by A1,A6,FUNCT_3:def 8
.= [:g2,g2:].(a2,a) by A2,A11,FUNCT_4:def 2
.= [g2.a2,g2.a] by A9,FUNCT_3:def 8;
then
A12: g2.a2 = b by XTUPLE_0:1;
A13: [a2,a1] in dom[:g2,g2:] by A5,A7,ZFMISC_1:87;
thus f.z = [:g1,g1:].(a1,a2) by A1,A4
.= [:g2,g2:].(a2,a1) by A1,A2,A13,FUNCT_4:def 2
.= [b,b] by A9,A10,A12,FUNCT_3:def 8;
end;
hence thesis by A3,FUNCOP_1:11;
end;
begin :: Unary transformatiom
definition
let I1,I2 be set, f be Function of I1,I2;
let A be ManySortedSet of I1, B be ManySortedSet of I2;
mode MSUnTrans of f,A,B -> ManySortedSet of I1 means
:Def3:
ex I29 being non empty set, B9 being ManySortedSet of I29,
f9 being Function of I1,I29 st f = f9 & B = B9 &
it is ManySortedFunction of A,B9*f9 if I2 <> {} otherwise it = EmptyMS I1;
existence
proof
hereby
assume I2 <> {};
then reconsider I29 = I2 as non empty set;
reconsider f9 = f as Function of I1,I29;
reconsider B9 = B as ManySortedSet of I29;
set IT = the ManySortedFunction of A,B9*f9;
reconsider IT9 = IT as ManySortedSet of I1;
take IT9,I29;
reconsider f9 = f as Function of I1,I29;
reconsider B9 = B as ManySortedSet of I29;
take B9,f9;
thus f = f9 & B = B9;
thus IT9 is ManySortedFunction of A,B9*f9;
end;
thus thesis;
end;
consistency;
end;
definition
let I1 be set, I2 be non empty set, f be Function of I1,I2;
let A be ManySortedSet of I1, B be ManySortedSet of I2;
redefine mode MSUnTrans of f,A,B means
:Def4:
it is ManySortedFunction of A,B*f;
compatibility
proof
let M be ManySortedSet of I1;
hereby
assume M is MSUnTrans of f,A,B;
then ex I29 being non empty set, B9 being ManySortedSet of I29,
f9 being Function of I1,I29 st f = f9 & B = B9 &
M is ManySortedFunction of A,B9*f9 by Def3;
hence M is ManySortedFunction of A,B*f;
end;
thus thesis by Def3;
end;
end;
registration
let I1,I2 be set;
let f be Function of I1,I2;
let A be ManySortedSet of I1, B be ManySortedSet of I2;
cluster -> Function-yielding for MSUnTrans of f,A,B;
coherence
proof
let M be MSUnTrans of f,A,B;
per cases;
suppose I2 <> {};
then ex I29 being non empty set, B9 being ManySortedSet of I29,
f9 being Function of I1,I29 st f = f9 & B = B9 &
M is ManySortedFunction of A,B9*f9 by Def3;
hence thesis;
end;
suppose I2 = {};
then M = EmptyMS I1 by Def3;
hence thesis;
end;
end;
end;
theorem Th17:
for I1 being set, I2,I3 being non empty set,
f being Function of I1,I2, g being Function of I2,I3,
B being ManySortedSet of I2, C being ManySortedSet of I3,
G being MSUnTrans of g,B,C holds G*f is MSUnTrans of g*f,B*f,C
proof
let I1 be set, I2,I3 be non empty set,
f be Function of I1,I2, g be Function of I2,I3,
B be ManySortedSet of I2, C be ManySortedSet of I3, G be MSUnTrans of g,B,C;
A1: C*(g*f) = C*g*f by RELAT_1:36;
G is ManySortedFunction of B,C*g by Def4;
hence G*f is ManySortedFunction of B*f,C*(g*f) by A1,ALTCAT_2:5;
end;
definition
let I1 be set, I2 be non empty set, f be Function of I1,I2,
A be ManySortedSet of [:I1,I1:], B be ManySortedSet of [:I2,I2:],
F be MSUnTrans of [:f,f:],A,B;
redefine func ~F -> MSUnTrans of [:f,f:],~A,~B;
coherence
proof
reconsider G = F as ManySortedFunction of A,B*[:f,f:] by Def4;
~G is ManySortedFunction of ~A,~B*[:f,f:] by ALTCAT_2:3;
hence ~F is MSUnTrans of [:f,f:],~A,~B by Def4;
end;
end;
theorem Th18:
for I1,I2 being non empty set,
A being ManySortedSet of I1, B being ManySortedSet of I2,
o being Element of I2 st B.o <> {}
for m being Element of B.o, f being Function of I1,I2 st f = I1 --> o holds
the set of all [o9,A.o9 --> m] where o9 is Element of I1
is MSUnTrans of f,A,B
proof
let I1,I2 be non empty set,
A be ManySortedSet of I1, B be ManySortedSet of I2,
o be Element of I2 such that
A1: B.o <> {};
let m be Element of B.o, f be Function of I1,I2 such that
A2: f = I1 --> o;
defpred P[set] means not contradiction;
deffunc F(set) = A.$1 --> m;
reconsider Xm = { [o9,F(o9)] where o9 is Element of I1:
P[o9] } as Function from ALTCAT_2:sch 1;
A3: Xm = { [o9,F(o9)] where o9 is Element of I1: P[o9] };
dom Xm = { o9 where o9 is Element of I1: P[o9] } from ALTCAT_2:sch 2(
A3)
.= I1 by DOMAIN_1:18;
then reconsider Xm as ManySortedSet of I1 by PARTFUN1:def 2,RELAT_1:def 18;
deffunc F(set) = A.$1 --> m;
A4: Xm = { [o9,F(o9)] where o9 is Element of I1: P[o9] };
now
let i be object;
assume
A5: i in I1;
then reconsider o9 = i as Element of I1;
A6: P[o9];
A7: i in dom f by A2,A5;
f.i = o by A2,A5,FUNCOP_1:7;
then m in B.(f.i) by A1;
then
A8: m in (B*f).i by A7,FUNCT_1:13;
Xm.o9 = F(o9) from ALTCAT_2:sch 3(A4,A6);
hence Xm.i is Function of A.i, (B*f).i by A8,FUNCOP_1:45;
end;
then Xm is ManySortedFunction of A,B*f by PBOOLE:def 15;
hence thesis by Def4;
end;
theorem Th19:
for I1 being set, I2,I3 being non empty set,
f being Function of I1,I2, g being Function of I2,I3,
A being ManySortedSet of I1, B being ManySortedSet of I2,
C being ManySortedSet of I3, F being MSUnTrans of f,A,B,
G being MSUnTrans of g*f,B*f,C
st for ii being set st ii in I1 & (B*f).ii = {}
holds A.ii = {} or (C*(g*f)).ii = {}
holds G**(F qua Function-yielding Function) is MSUnTrans of g*f,A,C
proof
let I1 be set, I2,I3 be non empty set,
f be Function of I1,I2, g be Function of I2,I3,
A be ManySortedSet of I1, B be ManySortedSet of I2,
C be ManySortedSet of I3, F be MSUnTrans of f,A,B,
G be MSUnTrans of g*f,B*f,C such that
A1: for ii being set st ii in I1 & (B*f).ii = {}
holds A.ii = {} or (C*(g*f)).ii = {};
reconsider G as ManySortedFunction of B*f,C*(g*f) by Def4;
reconsider F as ManySortedFunction of A,B*f by Def4;
A2: dom G = I1 by PARTFUN1:def 2;
A3: dom F = I1 by PARTFUN1:def 2;
A4: dom(G**F) = dom G /\ dom F by PBOOLE:def 19
.= I1 by A2,A3;
reconsider GF = G**F as ManySortedSet of I1;
GF is ManySortedFunction of A,C*(g*f)
proof
let ii be object;
assume
A5: ii in I1;
then reconsider Fi = F.ii as Function of A.ii, (B*f).ii by PBOOLE:def 15;
reconsider Gi = G.ii as Function of (B*f).ii, (C*(g*f)).ii
by A5,PBOOLE:def 15;
(B*f).ii = {} implies A.ii = {} or (C*(g*f)).ii = {} by A1,A5;
then Gi*Fi is Function of A.ii, (C*(g*f)).ii by FUNCT_2:13;
hence thesis by A4,A5,PBOOLE:def 19;
end;
hence thesis by Def4;
end;
begin :: Functors
definition
let C1,C2 be 1-sorted;
struct BimapStr over C1,C2
(#ObjectMap -> bifunction of the carrier of C1, the carrier of C2 #);
end;
definition
let C1,C2 be non empty AltGraph;
let F be BimapStr over C1,C2;
let o be Object of C1;
func F.o -> Object of C2 equals
((the ObjectMap of F).(o,o))`1;
coherence by MCART_1:10;
end;
definition
let A,B be 1-sorted, F be BimapStr over A,B;
attr F is one-to-one means
the ObjectMap of F is one-to-one;
attr F is onto means
the ObjectMap of F is onto;
attr F is reflexive means
(the ObjectMap of F).:id the carrier of A c= id the carrier of B;
attr F is coreflexive means
id the carrier of B c= (the ObjectMap of F).:id the carrier of A;
end;
definition
let A,B be non empty AltGraph, F be BimapStr over A,B;
redefine attr F is reflexive means
:Def10:
for o being Object of A holds (the ObjectMap of F).(o,o) = [F.o,F.o];
compatibility
proof
hereby
assume F is reflexive;
then
A1: (
the ObjectMap of F).:id the carrier of A c= id the carrier of B;
let o be Object of A;
[o,o] in id the carrier of A by RELAT_1:def 10;
then
A2: (the ObjectMap of F).(o,o) in
(the ObjectMap of F).:id the carrier of A by FUNCT_2:35;
consider p,p9 being object such that
A3: (the ObjectMap of F).(o,o) = [p,p9] by RELAT_1:def 1;
thus (the ObjectMap of F).(o,o) = [F.o,F.o] by A1,A2,A3,RELAT_1:def 10;
end;
assume
A4: for o being Object of A holds (the ObjectMap of F).(o,o) = [F.o,F.o];
let x be object;
assume x in (the ObjectMap of F).:id the carrier of A;
then consider y being object such that
A5: y in [:the carrier of A,the carrier of A:] and
A6: y in id the carrier of A and
A7: x = (the ObjectMap of F).y by FUNCT_2:64;
consider o,o9 being Element of A such that
A8: y = [o,o9] by A5,DOMAIN_1:1;
reconsider o as Object of A;
o = o9 by A6,A8,RELAT_1:def 10;
then x = [F.o,F.o] by A4,A7,A8;
hence thesis by RELAT_1:def 10;
end;
end;
theorem Th20:
for A,B being reflexive non empty AltGraph,
F being BimapStr over A,B st F is coreflexive for o being Object of B
ex o9 being Object of A st F.o9 = o
proof
let A,B be reflexive non empty AltGraph, F be BimapStr over A,B;
assume F is coreflexive;
then
A1: id the carrier of B c= (the ObjectMap of F).:id the carrier of A;
let o be Object of B;
reconsider oo = [o,o] as
Element of [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
[o,o] in id the carrier of B by RELAT_1:def 10;
then consider pp being Element of [:the carrier of A,the carrier of A:]
such that
A2: pp in id the carrier of A and
A3: (the ObjectMap of F).pp = oo by A1,FUNCT_2:65;
consider p,p9 being object such that
A4: pp = [p,p9] by RELAT_1:def 1;
A5: p = p9 by A2,A4,RELAT_1:def 10;
reconsider p as Object of A by A2,A4,RELAT_1:def 10;
take p;
thus thesis by A3,A4,A5;
end;
definition
let C1, C2 be non empty AltGraph;
let F be BimapStr over C1,C2;
attr F is feasible means
:Def11:
for o1,o2 being Object of C1 st <^o1,o2^> <> {} holds
(the Arrows of C2).((the ObjectMap of F).(o1,o2)) <> {};
end;
definition
let C1,C2 be AltGraph;
struct(BimapStr over C1,C2) FunctorStr over C1,C2
(#ObjectMap -> bifunction of the carrier of C1,the carrier of C2,
MorphMap ->
MSUnTrans of the ObjectMap, the Arrows of C1, the Arrows of C2 #);
end;
definition
let C1,C2 be 1-sorted;
let IT be BimapStr over C1,C2;
attr IT is Covariant means
:Def12:
the ObjectMap of IT is Covariant;
attr IT is Contravariant means
:Def13:
the ObjectMap of IT is Contravariant;
end;
registration
let C1,C2 be AltGraph;
cluster Covariant for FunctorStr over C1,C2;
existence
proof
set f = the Covariant bifunction of the carrier of C1, the carrier of C2;
set M = the MSUnTrans of f, the Arrows of C1, the Arrows of C2;
take F = FunctorStr(#f,M#);
thus the ObjectMap of F is Covariant;
end;
cluster Contravariant for FunctorStr over C1,C2;
existence
proof
set f = the Contravariant bifunction of the carrier of C1, the carrier of C2;
set M = the MSUnTrans of f, the Arrows of C1, the Arrows of C2;
take F = FunctorStr(#f,M#);
thus the ObjectMap of F is Contravariant;
end;
end;
definition
let C1,C2 be AltGraph;
let F be FunctorStr over C1,C2;
let o1,o2 be Object of C1;
func Morph-Map(F,o1,o2) -> set equals
(the MorphMap of F).(o1,o2);
correctness;
end;
registration
let C1,C2 be AltGraph;
let F be FunctorStr over C1,C2;
let o1,o2 be Object of C1;
cluster Morph-Map(F,o1,o2) -> Relation-like Function-like;
coherence;
end;
definition
let C1,C2 be non empty AltGraph;
let F be Covariant FunctorStr over C1,C2;
let o1,o2 be Object of C1;
redefine func Morph-Map(F,o1,o2) -> Function of <^o1,o2^>, <^F.o1,F.o2^>;
coherence
proof
consider I29 being non empty set, B9 being ManySortedSet of I29,
f9 being Function of [:the carrier of C1,the carrier of C1:],I29 such that
A1: the ObjectMap of F = f9 and
A2: the Arrows of C2 = B9 and
A3: the MorphMap of F is ManySortedFunction of the Arrows of C1,B9*f9 by Def3;
A4: (the Arrows of C1).[o1,o2] = (the Arrows of C1).(o1,o2)
.= <^o1,o2^> by ALTCAT_1:def 1;
A5: [o1,o2] in [:the carrier of C1, the carrier of C1:] by ZFMISC_1:87;
the ObjectMap of F is Covariant by Def12;
then consider g being Function of the carrier of C1, the carrier of C2
such that
A6: the ObjectMap of F = [:g,g:];
A7: F.o1 = [g.o1,g.o1]`1 by A6,FUNCT_3:75
.= g.o1;
A8: F.o2 = [g.o2,g.o2]`1 by A6,FUNCT_3:75
.= g.o2;
dom f9 = [:the carrier of C1, the carrier of C1:] by FUNCT_2:def 1;
then (B9*f9).[o1,o2] = B9.(f9.(o1,o2)) by A5,FUNCT_1:13
.= (the Arrows of C2).(F.o1,F.o2) by A1,A2,A6,A7,A8,FUNCT_3:75
.= <^F.o1,F.o2^> by ALTCAT_1:def 1;
hence thesis by A3,A4,A5,PBOOLE:def 15;
end;
end;
definition
let C1,C2 be non empty AltGraph;
let F be Covariant FunctorStr over C1,C2;
let o1,o2 be Object of C1 such that
A1: <^o1,o2^> <> {} and
A2: <^F.o1,F.o2^> <> {};
let m be Morphism of o1,o2;
func F.m -> Morphism of F.o1, F.o2 equals
:Def15:
Morph-Map(F,o1,o2).m;
coherence
proof
reconsider A = <^o1,o2^>, B = <^F.o1,F.o2^> as non empty set by A1,A2;
reconsider M = Morph-Map(F,o1,o2) as Function of A,B;
reconsider m as Element of A;
M.m is Element of B;
hence thesis;
end;
end;
definition
let C1,C2 be non empty AltGraph;
let F be Contravariant FunctorStr over C1,C2;
let o1,o2 be Object of C1;
redefine func Morph-Map(F,o1,o2) -> Function of <^o1,o2^>, <^F.o2,F.o1^>;
coherence
proof
consider I29 being non empty set, B9 being ManySortedSet of I29,
f9 being Function of [:the carrier of C1,the carrier of C1:],I29 such that
A1: the ObjectMap of F = f9 and
A2: the Arrows of C2 = B9 and
A3: the MorphMap of F is ManySortedFunction of the Arrows of C1,B9*f9 by Def3;
A4: (the Arrows of C1).[o1,o2] = (the Arrows of C1).(o1,o2)
.= <^o1,o2^> by ALTCAT_1:def 1;
A5: [o1,o2] in [:the carrier of C1, the carrier of C1:] by ZFMISC_1:87;
the ObjectMap of F is Contravariant by Def13;
then consider g being Function of the carrier of C1, the carrier of C2
such that
A6: the ObjectMap of F = ~[:g,g:];
A7: dom f9 = [:the carrier of C1, the carrier of C1:] by FUNCT_2:def 1;
then [o1,o1] in dom~[:g,g:] by A1,A6,ZFMISC_1:87;
then [o1,o1] in dom[:g,g:] by FUNCT_4:42;
then
A8: F.o1 = ([:g,g:].(o1,o1))`1 by A6,FUNCT_4:def 2
.= [g.o1,g.o1]`1 by FUNCT_3:75
.= g.o1;
[o2,o2] in dom~[:g,g:] by A1,A6,A7,ZFMISC_1:87;
then [o2,o2] in dom[:g,g:] by FUNCT_4:42;
then
A9: F.o2 = ([:g,g:].(o2,o2))`1 by A6,FUNCT_4:def 2
.= [g.o2,g.o2]`1 by FUNCT_3:75
.= g.o2;
[o1,o2] in dom~[:g,g:] by A1,A6,A7,ZFMISC_1:87;
then
A10: [o2,o1] in dom[:g,g:] by FUNCT_4:42;
(B9*f9).[o1,o2] = B9.(f9.(o1,o2)) by A5,A7,FUNCT_1:13
.= B9.([:g,g:].(o2,o1)) by A1,A6,A10,FUNCT_4:def 2
.= (the Arrows of C2).(F.o2,F.o1) by A2,A8,A9,FUNCT_3:75
.= <^F.o2,F.o1^> by ALTCAT_1:def 1;
hence thesis by A3,A4,A5,PBOOLE:def 15;
end;
end;
definition
let C1,C2 be non empty AltGraph;
let F be Contravariant FunctorStr over C1,C2;
let o1,o2 be Object of C1 such that
A1: <^o1,o2^> <> {} and
A2: <^F.o2,F.o1^> <> {};
let m be Morphism of o1,o2;
func F.m -> Morphism of F.o2, F.o1 equals
:Def16:
Morph-Map(F,o1,o2).m;
coherence
proof
reconsider A = <^o1,o2^>, B = <^F.o2,F.o1^> as non empty set by A1,A2;
reconsider M = Morph-Map(F,o1,o2) as Function of A,B;
reconsider m as Element of A;
M.m is Element of B;
hence thesis;
end;
end;
definition
let C1,C2 be non empty AltGraph;
let o be Object of C2 such that
A1: <^o,o^> <> {};
let m be Morphism of o,o;
func C1 --> m -> strict FunctorStr over C1,C2 means
:Def17:
the ObjectMap of it = [:the carrier of C1,the carrier of C1:] --> [o,o] &
the MorphMap of it =
the set of all
[[o1,o2],<^o1,o2^> --> m] where o1 is Object of C1, o2 is Object of C1;
existence
proof
set I1 = [:the carrier of C1,the carrier of C1:],
I2 = [:the carrier of C2,the carrier of C2:],
A = the Arrows of C1, B = the Arrows of C2;
reconsider oo = [o,o] as Element of I2 by ZFMISC_1:87;
B.oo = B.(o,o) .= <^o,o^> by ALTCAT_1:def 1;
then reconsider m as Element of B.oo;
reconsider f = I1 --> oo as Function of I1, I2;
reconsider f as bifunction of the carrier of C1,the carrier of C2;
set M = the set of all [[o1,o2],<^o1,o2^> --> m]
where o1 is Object of C1, o2 is Object of C1;
A2: M = the set of all [o9,A.o9 --> m] where o9 is Element of I1
proof
thus M c=
the set of all [o9,A.o9 --> m] where o9 is Element of I1
proof
let x be object;
assume x in M;
then consider o3,o4 being Object of C1 such that
A3: x = [[o3,o4],<^o3,o4^> --> m];
reconsider oo = [o3,o4] as Element of I1 by ZFMISC_1:87;
x = [oo,A.(o3,o4) --> m] by A3,ALTCAT_1:def 1
.= [oo,A.oo --> m];
hence thesis;
end;
let x be object;
assume x in the set of all [o9,A.o9 --> m] where o9 is Element of I1;
then consider o9 being Element of I1 such that
A4: x = [o9,A.o9 --> m];
reconsider o1 = o9`1, o2 = o9`2 as Element of C1 by MCART_1:10;
reconsider o1, o2 as Object of C1;
o9 = [o1,o2] by MCART_1:21;
then x = [[o1,o2],A.(o1,o2) --> m] by A4
.= [[o1,o2],<^o1,o2^> --> m] by ALTCAT_1:def 1;
hence thesis;
end;
B.(o,o) <> {} by A1,ALTCAT_1:def 1;
then reconsider M as MSUnTrans of f, A, B by A2,Th18;
take FunctorStr(#f,M#);
thus thesis;
end;
uniqueness;
end;
theorem Th21:
for C1,C2 being non empty AltGraph, o2 being Object of C2 st <^o2,o2^> <> {}
for m be Morphism of o2,o2, o1 being Object of C1 holds (C1 --> m).o1 = o2
proof
let C1,C2 be non empty AltGraph, o2 be Object of C2 such that
A1: <^o2,o2^> <> {};
let m be Morphism of o2,o2, o1 be Object of C1;
A2: [o1,o1] in [:the carrier of C1,the carrier of C1:] by ZFMISC_1:87;
thus (C1 --> m).o1 =
(([:the carrier of C1,the carrier of C1:] --> [o2,o2]).(o1,o1))`1
by A1,Def17
.= [o2,o2]`1 by A2,FUNCOP_1:7
.= o2;
end;
registration
let C1 be non empty AltGraph, C2 be non empty reflexive AltGraph;
let o be Object of C2, m be Morphism of o,o;
cluster C1 --> m -> Covariant Contravariant feasible;
coherence
proof
<^o,o^> <> {} by ALTCAT_2:def 7;
then
A1: the ObjectMap of C1 --> m
= [:the carrier of C1,the carrier of C1:] --> [o,o] by Def17;
hence the ObjectMap of C1 --> m is Covariant Contravariant by Th15;
let o1,o2 be Object of C1 such that <^o1,o2^> <> {};
[o1,o2] in [:the carrier of C1,the carrier of C1:] by ZFMISC_1:87;
then (the Arrows of C2).((the ObjectMap of C1 --> m).(o1,o2))
= (the Arrows of C2).(o,o) by A1,FUNCOP_1:7;
hence thesis by ALTCAT_2:def 6;
end;
end;
registration
let C1 be non empty AltGraph, C2 be non empty reflexive AltGraph;
cluster feasible Covariant Contravariant for FunctorStr over C1,C2;
existence
proof set o = the Object of C2;
set m = the Morphism of o,o;
take C1 --> m;
thus thesis;
end;
end;
theorem Th22:
for C1, C2 being non empty AltGraph,
F being Covariant FunctorStr over C1,C2, o1,o2 being Object of C1
holds (the ObjectMap of F).(o1,o2) = [F.o1,F.o2]
proof
let C1, C2 be non empty AltGraph, F be Covariant FunctorStr over C1,C2,
o1,o2 be Object of C1;
the ObjectMap of F is Covariant by Def12;
then consider f being Function of the carrier of C1, the carrier of C2 such
that
A1: the ObjectMap of F = [:f,f:];
A2: F.o1 = ([f.o1,f.o1])`1 by A1,FUNCT_3:75
.= f.o1;
F.o2 = ([f.o2,f.o2])`1 by A1,FUNCT_3:75
.= f.o2;
hence thesis by A1,A2,FUNCT_3:75;
end;
definition
let C1, C2 be non empty AltGraph;
let F be Covariant FunctorStr over C1,C2;
redefine attr F is feasible means
:Def18:
for o1,o2 being Object of C1 st <^o1,o2^> <> {} holds <^F.o1,F.o2^> <> {};
compatibility
proof
hereby
assume
A1: F is feasible;
let o1,o2 be Object of C1;
assume
A2: <^o1,o2^> <> {};
<^F.o1,F.o2^> = (the Arrows of C2).(F.o1,F.o2) by ALTCAT_1:def 1
.= (the Arrows of C2).((the ObjectMap of F).(o1,o2)) by Th22;
hence <^F.o1,F.o2^> <> {} by A1,A2;
end;
assume
A3: for
o1,o2 being Object of C1 st <^o1,o2^> <> {} holds <^F.o1,F.o2^> <> {};
let o1,o2 be Object of C1;
assume
A4: <^o1,o2^> <> {};
<^F.o1,F.o2^> = (the Arrows of C2).(F.o1,F.o2) by ALTCAT_1:def 1
.= (the Arrows of C2).((the ObjectMap of F).(o1,o2)) by Th22;
hence thesis by A3,A4;
end;
end;
theorem Th23:
for C1, C2 being non empty AltGraph,
F being Contravariant FunctorStr over C1,C2, o1,o2 being Object of C1
holds (the ObjectMap of F).(o1,o2) = [F.o2,F.o1]
proof
let C1, C2 be non empty AltGraph, F be Contravariant FunctorStr over C1,C2,
o1,o2 be Object of C1;
the ObjectMap of F is Contravariant by Def13;
then consider f being Function of the carrier of C1, the carrier of C2 such
that
A1: the ObjectMap of F = ~[:f,f:];
A2: dom[:f,f:] = [:the carrier of C1, the carrier of C1:] by FUNCT_2:def 1;
then [o1,o1] in dom[:f,f:] by ZFMISC_1:87;
then
A3: F.o1 = ([:f,f:].(o1,o1))`1 by A1,FUNCT_4:def 2
.= ([f.o1,f.o1])`1 by FUNCT_3:75
.= f.o1;
[o2,o2] in dom[:f,f:] by A2,ZFMISC_1:87;
then
A4: F.o2 = ([:f,f:].(o2,o2))`1 by A1,FUNCT_4:def 2
.= ([f.o2,f.o2])`1 by FUNCT_3:75
.= f.o2;
[o2,o1] in dom[:f,f:] by A2,ZFMISC_1:87;
hence (the ObjectMap of F).(o1,o2) = [:f,f:].(o2,o1) by A1,FUNCT_4:def 2
.= [F.o2,F.o1] by A3,A4,FUNCT_3:75;
end;
definition
let C1, C2 be non empty AltGraph;
let F be Contravariant FunctorStr over C1,C2;
redefine attr F is feasible means
:Def19:
for o1,o2 being Object of C1 st <^o1,o2^> <> {} holds <^F.o2,F.o1^> <> {};
compatibility
proof
hereby
assume
A1: F is feasible;
let o1,o2 be Object of C1;
assume
A2: <^o1,o2^> <> {};
<^F.o2,F.o1^> = (the Arrows of C2).(F.o2,F.o1) by ALTCAT_1:def 1
.= (the Arrows of C2).((the ObjectMap of F).(o1,o2)) by Th23;
hence <^F.o2,F.o1^> <> {} by A1,A2;
end;
assume
A3: for
o1,o2 being Object of C1 st <^o1,o2^> <> {} holds <^F.o2,F.o1^> <> {};
let o1,o2 be Object of C1;
assume
A4: <^o1,o2^> <> {};
<^F.o2,F.o1^> = (the Arrows of C2).(F.o2,F.o1) by ALTCAT_1:def 1
.= (the Arrows of C2).((the ObjectMap of F).(o1,o2)) by Th23;
hence thesis by A3,A4;
end;
end;
registration
let C1,C2 be AltGraph;
let F be FunctorStr over C1,C2;
cluster the MorphMap of F -> Function-yielding;
coherence;
end;
registration
cluster non empty reflexive for AltCatStr;
existence
proof set C = the category;
take C;
thus thesis;
end;
end;
:: Wlasnosci funktorow, Semadeni-Wiweger str. 32
definition
let C1,C2 be with_units non empty AltCatStr;
let F be FunctorStr over C1,C2;
attr F is id-preserving means
:Def20:
for o being Object of C1 holds Morph-Map(F,o,o).idm o = idm F.o;
end;
theorem Th24:
for C1,C2 being non empty AltGraph, o2 being Object of C2 st <^o2,o2^> <> {}
for m be Morphism of o2,o2, o,o9 being Object of C1, f being Morphism of o,o9
st <^o,o9^> <> {} holds Morph-Map(C1 --> m,o,o9).f = m
proof
let C1,C2 be non empty AltGraph, o2 be Object of C2 such that
A1: <^o2,o2^> <> {};
let m be Morphism of o2,o2, o,o9 be Object of C1, f be Morphism of o,o9
such that
A2: <^o,o9^> <> {};
set X =
the set of all
[[o1,o19],<^o1,o19^> --> m] where o1 is Object of C1, o19 is Object of C1;
set Y = the set of all [[o1,o19],(the Arrows of C1).(o1,o19) --> m]
where o1 is Element of C1, o19 is Element of C1;
A3: X c= Y
proof
let e be object;
assume e in X;
then consider o1,o19 being Object of C1 such that
A4: e = [[o1,o19],<^o1,o19^> --> m];
e = [[o1,o19],(the Arrows of C1).(o1,o19) --> m] by A4,ALTCAT_1:def 1;
hence thesis;
end;
A5: Y c= X
proof
let e be object;
assume e in Y;
then consider o1,o19 being Element of C1 such that
A6: e = [[o1,o19],(the Arrows of C1).(o1,o19) --> m];
reconsider o1,o19 as Object of C1;
e = [[o1,o19],<^o1,o19^> --> m] by A6,ALTCAT_1:def 1;
hence thesis;
end;
defpred P[set,set] means not contradiction;
deffunc F(Element of C1,Element of C1) = (the Arrows of C1).($1,$2) --> m;
the MorphMap of C1 --> m = X by A1,Def17;
then
A7: the MorphMap of C1 --> m = { [[o1,o19],F(o1,o19)]
where o1 is Element of C1, o19 is Element of C1: P[o1,o19] }
by A3,A5;
A8: P[o,o9];
Morph-Map(C1 --> m,o,o9) = (the MorphMap of C1 --> m).(o,o9)
.= F(o,o9) from ValOnPair(A7,A8);
hence Morph-Map(C1 --> m,o,o9).f = (<^o,o9^> --> m).f by ALTCAT_1:def 1
.= m by A2,FUNCOP_1:7;
end;
registration
cluster with_units -> reflexive for non empty AltCatStr;
coherence;
end;
registration
let C1,C2 be with_units non empty AltCatStr;
let o2 be Object of C2;
cluster C1 --> idm o2 -> id-preserving;
coherence
proof
let o1 be Object of C1;
A1: <^o2,o2^> <> {} by ALTCAT_2:def 7;
<^o1,o1^> <> {} by ALTCAT_2:def 7;
hence Morph-Map(C1 --> idm o2,o1,o1).idm o1 = idm o2 by A1,Th24
.= idm(C1 --> idm o2).o1 by A1,Th21;
end;
end;
registration
let C1 be non empty AltGraph;
let C2 be non empty reflexive AltGraph;
let o2 be Object of C2;
let m be Morphism of o2,o2;
cluster C1 --> m -> reflexive;
coherence
proof
let o be Object of C1;
A1: [o,o] in [:the carrier of C1,the carrier of C1:] by ZFMISC_1:87;
<^o2,o2^> <> {} by ALTCAT_2:def 7;
then
A2: (the ObjectMap of C1 --> m).(o,o)
= ([:the carrier of C1,the carrier of C1:] --> [o2,o2]).[o,o] by Def17
.= [o2,o2] by A1,FUNCOP_1:7;
thus thesis by A2;
end;
end;
registration
let C1 be non empty AltGraph;
let C2 be non empty reflexive AltGraph;
cluster feasible reflexive for FunctorStr over C1,C2;
existence
proof set o2 = the Object of C2,m = the Morphism of o2,o2;
take C1 --> m;
thus thesis;
end;
end;
registration
let C1,C2 be with_units non empty AltCatStr;
cluster id-preserving feasible reflexive strict for FunctorStr over C1,C2;
existence
proof set o2 = the Object of C2;
take C1 --> idm o2;
thus thesis;
end;
end;
definition
let C1,C2 be non empty AltCatStr;
let F be FunctorStr over C1,C2;
attr F is comp-preserving means
for o1,o2,o3 being Object of C1 st <^o1,o2^> <> {} & <^o2,o3^> <> {}
for f being Morphism of o1,o2, g being Morphism of o2,o3
ex f9 being Morphism of F.o1,F.o2, g9 being Morphism of F.o2,F.o3 st
f9 = Morph-Map(F,o1,o2).f & g9 = Morph-Map(F,o2,o3).g &
Morph-Map(F,o1,o3).(g*f) = g9*f9;
end;
definition
let C1,C2 be non empty AltCatStr;
let F be FunctorStr over C1,C2;
attr F is comp-reversing means
for o1,o2,o3 being Object of C1 st <^o1,o2^> <> {} & <^o2,o3^> <> {}
for f being Morphism of o1,o2, g being Morphism of o2,o3
ex f9 being Morphism of F.o2,F.o1, g9 being Morphism of F.o3,F.o2 st
f9 = Morph-Map(F,o1,o2).f & g9 = Morph-Map(F,o2,o3).g &
Morph-Map(F,o1,o3).(g*f) = f9*g9;
end;
definition
let C1 be non empty transitive AltCatStr;
let C2 be non empty reflexive AltCatStr;
let F be Covariant feasible FunctorStr over C1,C2;
redefine attr F is comp-preserving means
for o1,o2,o3 being Object of C1 st <^o1,o2^> <> {} & <^o2,o3^> <> {}
for f being Morphism of o1,o2, g being Morphism of o2,o3
holds F.(g*f) = (F.g)*(F.f);
compatibility
proof
hereby
assume
A1: F is comp-preserving;
let o1,o2,o3 be Object of C1 such that
A2: <^o1,o2^> <> {} and
A3: <^o2,o3^> <> {};
let f be Morphism of o1,o2, g be Morphism of o2,o3;
consider f9 being Morphism of F.o1,F.o2, g9 being Morphism of F.o2,F.o3
such that
A4: f9 = Morph-Map(F,o1,o2).f and
A5: g9 = Morph-Map(F,o2,o3).g and
A6: Morph-Map(F,o1,o3).(g*f) = g9*f9 by A1,A2,A3;
A7: <^F.o1,F.o2^> <> {} by A2,Def18;
A8: <^F.o2,F.o3^> <> {} by A3,Def18;
A9: f9 = F.f by A2,A4,A7,Def15;
A10: g9 = F.g by A3,A5,A8,Def15;
A11: <^o1,o3^> <> {} by A2,A3,ALTCAT_1:def 2;
then <^F.o1,F.o3^> <> {} by Def18;
hence F.(g*f) = (F.g)*(F.f) by A6,A9,A10,A11,Def15;
end;
assume
A12: for o1,o2,o3 being Object of C1 st <^o1,o2^> <> {} & <^o2,o3^> <> {}
for f being Morphism of o1,o2, g being Morphism of o2,o3
holds F.(g*f) = (F.g)*(F.f);
let o1,o2,o3 be Object of C1 such that
A13: <^o1,o2^> <> {} and
A14: <^o2,o3^> <> {};
let f be Morphism of o1,o2, g be Morphism of o2,o3;
A15: <^F.o1,F.o2^> <> {} by A13,Def18;
then reconsider f9 = Morph-Map(F,o1,o2).f as Morphism of F.o1,F.o2
by A13,FUNCT_2:5;
A16: <^F.o2,F.o3^> <> {} by A14,Def18;
then reconsider g9 = Morph-Map(F,o2,o3).g as Morphism of F.o2,F.o3
by A14,FUNCT_2:5;
take f9, g9;
thus f9 = Morph-Map(F,o1,o2).f & g9 = Morph-Map(F,o2,o3).g;
A17: f9 = F.f by A13,A15,Def15;
A18: g9 = F.g by A14,A16,Def15;
A19: <^o1,o3^> <> {} by A13,A14,ALTCAT_1:def 2;
then <^F.o1,F.o3^> <> {} by Def18;
hence Morph-Map(F,o1,o3).(g*f) = F.(g*f) by A19,Def15
.= g9*f9 by A12,A13,A14,A17,A18;
end;
end;
definition
let C1 be non empty transitive AltCatStr;
let C2 be non empty reflexive AltCatStr;
let F be Contravariant feasible FunctorStr over C1,C2;
redefine attr F is comp-reversing means
for o1,o2,o3 being Object of C1 st <^o1,o2^> <> {} & <^o2,o3^> <> {}
for f being Morphism of o1,o2, g being Morphism of o2,o3
holds F.(g*f) = (F.f)*(F.g);
compatibility
proof
hereby
assume
A1: F is comp-reversing;
let o1,o2,o3 be Object of C1 such that
A2: <^o1,o2^> <> {} and
A3: <^o2,o3^> <> {};
let f be Morphism of o1,o2, g be Morphism of o2,o3;
consider f9 being Morphism of F.o2,F.o1, g9 being Morphism of F.o3,F.o2
such that
A4: f9 = Morph-Map(F,o1,o2).f and
A5: g9 = Morph-Map(F,o2,o3).g and
A6: Morph-Map(F,o1,o3).(g*f) = f9*g9 by A1,A2,A3;
A7: <^F.o2,F.o1^> <> {} by A2,Def19;
A8: <^F.o3,F.o2^> <> {} by A3,Def19;
A9: f9 = F.f by A2,A4,A7,Def16;
A10: g9 = F.g by A3,A5,A8,Def16;
A11: <^o1,o3^> <> {} by A2,A3,ALTCAT_1:def 2;
then <^F.o3,F.o1^> <> {} by Def19;
hence F.(g*f) = (F.f)*(F.g) by A6,A9,A10,A11,Def16;
end;
assume
A12: for o1,o2,o3 being Object of C1 st <^o1,o2^> <> {} & <^o2,o3^> <> {}
for f being Morphism of o1,o2, g being Morphism of o2,o3
holds F.(g*f) = (F.f)*(F.g);
let o1,o2,o3 be Object of C1 such that
A13: <^o1,o2^> <> {} and
A14: <^o2,o3^> <> {};
let f be Morphism of o1,o2, g be Morphism of o2,o3;
A15: <^F.o2,F.o1^> <> {} by A13,Def19;
then reconsider f9 = Morph-Map(F,o1,o2).f as Morphism of F.o2,F.o1
by A13,FUNCT_2:5;
A16: <^F.o3,F.o2^> <> {} by A14,Def19;
then reconsider g9 = Morph-Map(F,o2,o3).g as Morphism of F.o3,F.o2
by A14,FUNCT_2:5;
take f9, g9;
thus f9 = Morph-Map(F,o1,o2).f & g9 = Morph-Map(F,o2,o3).g;
A17: f9 = F.f by A13,A15,Def16;
A18: g9 = F.g by A14,A16,Def16;
A19: <^o1,o3^> <> {} by A13,A14,ALTCAT_1:def 2;
then <^F.o3,F.o1^> <> {} by Def19;
hence Morph-Map(F,o1,o3).(g*f) = F.(g*f) by A19,Def16
.= f9*g9 by A12,A13,A14,A17,A18;
end;
end;
theorem Th25:
for C1 being non empty AltGraph, C2 being non empty reflexive AltGraph,
o2 being Object of C2, m be Morphism of o2,o2,
F being Covariant feasible FunctorStr over C1,C2 st F = C1 --> m
for o,o9 being Object of C1, f being Morphism of o,o9 st <^o,o9^> <> {}
holds F.f = m
proof
let C1 be non empty AltGraph, C2 be non empty reflexive AltGraph,
o2 be Object of C2;
A1: <^o2,o2^> <> {} by ALTCAT_2:def 7;
let m be Morphism of o2,o2,
F be Covariant feasible FunctorStr over C1,C2 such that
A2: F = C1 --> m;
let o,o9 be Object of C1, f be Morphism of o,o9;
assume
A3: <^o,o9^> <> {};
then <^F.o,F.o9^> <> {} by Def18;
hence F.f = Morph-Map(F,o,o9).f by A3,Def15
.= m by A1,A2,A3,Th24;
end;
theorem Th26:
for C1 being non empty AltGraph, C2 being non empty reflexive AltGraph,
o2 being Object of C2, m be Morphism of o2,o2,
o,o9 being Object of C1, f being Morphism of o,o9 st <^o,o9^> <> {}
holds (C1 --> m).f = m
proof
let C1 be non empty AltGraph, C2 be non empty reflexive AltGraph,
o2 be Object of C2;
A1: <^o2,o2^> <> {} by ALTCAT_2:def 7;
let m be Morphism of o2,o2;
set F = C1 --> m;
let o,o9 be Object of C1, f be Morphism of o,o9;
assume
A2: <^o,o9^> <> {};
then <^F.o9,F.o^> <> {} by Def19;
hence F.f = Morph-Map(F,o,o9).f by A2,Def16
.= m by A1,A2,Th24;
end;
registration
let C1 be non empty transitive AltCatStr,
C2 be with_units non empty AltCatStr;
let o be Object of C2;
cluster C1 --> idm o -> comp-preserving comp-reversing;
coherence
proof
set F = C1 --> idm o;
reconsider G = F as Covariant feasible FunctorStr over C1,C2;
A1: <^o,o^> <> {} by ALTCAT_2:def 7;
G is comp-preserving
proof
let o1,o2,o3 be Object of C1;
assume that
A2: <^o1,o2^> <> {} and
A3: <^o2,o3^> <> {};
A4: <^o1,o3^> <> {} by A2,A3,ALTCAT_1:def 2;
let f be Morphism of o1,o2, g be Morphism of o2,o3;
A5: G.g = idm o by A3,Th25;
A6: G.f = idm o by A2,Th25;
A7: G.o1 = o by A1,Th21;
A8: G.o2 = o by A1,Th21;
A9: G.o3 = o by A1,Th21;
thus G.(g*f) = idm o by A4,Th25
.= (G.g)*(G.f) by A1,A5,A6,A7,A8,A9,ALTCAT_1:20;
end;
hence F is comp-preserving;
let o1,o2,o3 be Object of C1;
assume that
A10: <^o1,o2^> <> {} and
A11: <^o2,o3^> <> {};
A12: <^o1,o3^> <> {} by A10,A11,ALTCAT_1:def 2;
let f be Morphism of o1,o2, g be Morphism of o2,o3;
A13: F.g = idm o by A11,Th26;
A14: F.f = idm o by A10,Th26;
A15: F.o1 = o by A1,Th21;
A16: F.o2 = o by A1,Th21;
A17: F.o3 = o by A1,Th21;
thus F.(g*f) = idm o by A12,Th26
.= (F.f)*(F.g) by A1,A13,A14,A15,A16,A17,ALTCAT_1:20;
end;
end;
definition
let C1 be transitive with_units non empty AltCatStr,
C2 be with_units non empty AltCatStr;
mode Functor of C1,C2 -> FunctorStr over C1,C2 means
:Def25:
it is feasible id-preserving &
(it is Covariant comp-preserving or it is Contravariant comp-reversing);
existence
proof set o = the Object of C2;
take C1 --> idm o;
thus thesis;
end;
end;
definition
let C1 be transitive with_units non empty AltCatStr,
C2 be with_units non empty AltCatStr, F be Functor of C1,C2;
attr F is covariant means
:Def26:
F is Covariant comp-preserving;
attr F is contravariant means
:Def27:
F is Contravariant comp-reversing;
end;
definition
let A be AltCatStr, B be SubCatStr of A;
func incl B -> strict FunctorStr over B,A means
:Def28:
the ObjectMap of it = id [:the carrier of B, the carrier of B:] &
the MorphMap of it = id the Arrows of B;
existence
proof
the carrier of B c= the carrier of A by ALTCAT_2:def 11;
then reconsider CC = [:the carrier of B, the carrier of B:]
as Subset of [:the carrier of A, the carrier of A:] by ZFMISC_1:96;
set OM = id [:the carrier of B, the carrier of B:];
OM = incl CC;
then reconsider OM as bifunction of the carrier of B, the carrier of A;
set MM = id the Arrows of B;
MM is MSUnTrans of OM, the Arrows of B, the Arrows of A
proof
per cases;
case [:the carrier of A,the carrier of A:] <> {};
then reconsider I29 = [:the carrier of A,the carrier of A:]
as non empty set;
reconsider B9 = the Arrows of A as ManySortedSet of I29;
reconsider f9 = OM as
Function of [:the carrier of B,the carrier of B:],I29;
take I29, B9, f9;
thus OM = f9 & the Arrows of A = B9;
thus MM is ManySortedFunction of the Arrows of B,B9*f9
proof
let i be object;
assume
A1: i in [:the carrier of B,the carrier of B:];
then
A2: MM
.i is Function of (the Arrows of B).i, (the Arrows of B).i
by PBOOLE:def 15;
A3: the Arrows of B cc= the Arrows of A by ALTCAT_2:def 11;
(B9*f9).i = B9.(f9.i) by A1,FUNCT_2:15
.= (the Arrows of A).i by A1,FUNCT_1:18;
then (the Arrows of B).i c= (B9*f9).i by A1,A3,ALTCAT_2:def 2;
hence thesis by A2,FUNCT_2:7;
end;
end;
case [:the carrier of A,the carrier of A:] = {};
then CC = {};
hence thesis;
end;
end;
then reconsider MM as MSUnTrans of OM, the Arrows of B, the Arrows of A;
take FunctorStr(#OM,MM#);
thus thesis;
end;
correctness;
end;
definition
let A be AltGraph;
func id A -> strict FunctorStr over A,A means
:Def29:
the ObjectMap of it = id [:the carrier of A, the carrier of A:] &
the MorphMap of it = id the Arrows of A;
existence
proof
reconsider OM = id [:the carrier of A, the carrier of A:]
as bifunction of the carrier of A, the carrier of A;
set MM = id the Arrows of A;
MM is MSUnTrans of OM, the Arrows of A, the Arrows of A
proof
per cases;
case [:the carrier of A,the carrier of A:] <> {};
then reconsider I29 = [:the carrier of A,the carrier of A:]
as non empty set;
reconsider A9 = the Arrows of A as ManySortedSet of I29;
reconsider f9 = OM as
Function of [:the carrier of A,the carrier of A:],I29;
take I29, A9, f9;
thus OM = f9 & the Arrows of A = A9;
thus MM is ManySortedFunction of the Arrows of A,A9*f9
proof
let i be object;
assume
A1: i in [:the carrier of A,the carrier of A:];
then (A9*f9).i = A9.(f9.i) by FUNCT_2:15
.= (the Arrows of A).i by A1,FUNCT_1:18;
hence thesis by A1,PBOOLE:def 15;
end;
end;
case
[:the carrier of A,the carrier of A:] = {};
hence thesis;
end;
end;
then reconsider MM as MSUnTrans of OM, the Arrows of A, the Arrows of A;
take FunctorStr(#OM,MM#);
thus thesis;
end;
correctness;
end;
registration
let A be AltCatStr, B be SubCatStr of A;
cluster incl B -> Covariant;
coherence
proof
reconsider b = the carrier of B as Subset of A by ALTCAT_2:def 11;
incl b = id b;
then reconsider f = id the carrier of B as
Function of the carrier of B, the carrier of A;
take f;
thus
the ObjectMap of incl B = id[:the carrier of B,the carrier of B:] by Def28
.= [:f,f:] by FUNCT_3:69;
end;
end;
theorem Th27:
for A being non empty AltCatStr, B being non empty SubCatStr of A,
o being Object of B holds (incl B).o = o
proof
let A be non empty AltCatStr, B be non empty SubCatStr of A,
o be Object of B;
A1: [o,o] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
thus
(incl B).o = ((id[:the carrier of B,the carrier of B:]).[o,o])`1 by Def28
.= [o,o]`1 by A1,FUNCT_1:18
.= o;
end;
theorem Th28:
for A being non empty AltCatStr, B being non empty SubCatStr of A,
o1,o2 being Object of B holds <^o1,o2^> c= <^(incl B).o1,(incl B).o2^>
proof
let A be non empty AltCatStr, B be non empty SubCatStr of A,
o1,o2 be Object of B;
A1: [o1,o2] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
A2: <^o1,o2^> = (the Arrows of B).(o1,o2) by ALTCAT_1:def 1
.= (the Arrows of B).[o1,o2];
A3: (incl B).o1 = o1 by Th27;
(incl B).o2 = o2 by Th27;
then
A4: <^(incl B).o1,(incl B).o2^> = (the Arrows of A).(o1,o2) by A3,
ALTCAT_1:def 1
.= (the Arrows of A).[o1,o2];
the Arrows of B cc= the Arrows of A by ALTCAT_2:def 11;
hence thesis by A1,A2,A4,ALTCAT_2:def 2;
end;
registration
let A be non empty AltCatStr, B be non empty SubCatStr of A;
cluster incl B -> feasible;
coherence
by Th28,XBOOLE_1:3;
end;
definition
let A,B be AltGraph, F be FunctorStr over A,B;
attr F is faithful means
the MorphMap of F is "1-1";
end;
definition
let A,B be AltGraph, F be FunctorStr over A,B;
attr F is full means
ex B9 being ManySortedSet of [:the carrier of A, the carrier of A:],
f being ManySortedFunction of (the Arrows of A),B9 st
B9 = (the Arrows of B)*the ObjectMap of F & f = the MorphMap of F
& f is "onto";
end;
definition
let A be AltGraph, B be non empty AltGraph, F be FunctorStr over A,B;
redefine attr F is full means
ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st f = the MorphMap of F & f is "onto";
compatibility;
end;
definition
let A,B be AltGraph, F be FunctorStr over A,B;
attr F is injective means
F is one-to-one faithful;
attr F is surjective means
F is full onto;
end;
definition
let A,B be AltGraph, F be FunctorStr over A,B;
attr F is bijective means
F is injective surjective;
end;
registration
let A,B be transitive with_units non empty AltCatStr;
cluster strict covariant contravariant feasible for Functor of A,B;
existence
proof set o = the Object of B;
reconsider F = A --> idm o as Functor of A,B by Def25;
take F;
thus thesis;
end;
end;
theorem Th29:
for A being non empty AltGraph, o being Object of A holds (id A).o = o
proof
let A be non empty AltGraph, o be Object of A;
A1: [o,o] in [:the carrier of A,the carrier of A:] by ZFMISC_1:87;
thus (id A).o = ((id[:the carrier of A,the carrier of A:]).[o,o])`1 by Def29
.= ([o,o])`1 by A1,FUNCT_1:18
.= o;
end;
theorem Th30:
for A being non empty AltGraph, o1,o2 being Object of A st <^o1,o2^> <> {}
for m being Morphism of o1,o2 holds Morph-Map(id A,o1,o2).m = m
proof
let A be non empty AltGraph, o1,o2 be Object of A such that
<^o1,o2^> <> {};
let m be Morphism of o1,o2;
A1: [o1,o2] in [:the carrier of A, the carrier of A:] by ZFMISC_1:87;
Morph-Map(id A,o1,o2) = (id the Arrows of A).[o1,o2] by Def29;
hence Morph-Map(id A,o1,o2).m
= (id((the Arrows of A).(o1,o2))).m by A1,MSUALG_3:def 1
.= (id<^o1,o2^>).m by ALTCAT_1:def 1
.= m;
end;
registration
let A be non empty AltGraph;
cluster id A -> feasible Covariant;
coherence
proof
thus id A is feasible
proof
let o1,o2 be Object of A;
A1: [o1,o2] in [:the carrier of A, the carrier of A:] by ZFMISC_1:87;
(the ObjectMap of id A).(o1,o2)
= (id[:the carrier of A, the carrier of A:]).[o1,o2] by Def29
.= [o1,o2] by A1,FUNCT_1:18;
then (the Arrows of A).((the ObjectMap of id A).(o1,o2))
= (the Arrows of A).(o1,o2)
.= <^o1,o2^> by ALTCAT_1:def 1;
hence thesis;
end;
thus id A is Covariant
proof
take I = id the carrier of A;
thus
the ObjectMap of id A = id[:the carrier of A,the carrier of A:] by Def29
.= [:I,I:] by FUNCT_3:69;
end;
end;
end;
registration
let A be non empty AltGraph;
cluster Covariant feasible for FunctorStr over A,A;
existence
proof
take id A;
thus thesis;
end;
end;
theorem Th31:
for A being non empty AltGraph, o1,o2 being Object of A st <^o1,o2^> <> {}
for F being Covariant feasible FunctorStr over A,A st F = id A
for m being Morphism of o1,o2 holds F.m = m
proof
let A be non empty AltGraph, o1,o2 be Object of A such that
A1: <^o1,o2^> <> {};
let F be Covariant feasible FunctorStr over A,A such that
A2: F = id A;
let m be Morphism of o1,o2;
<^F.o1,F.o2^> <> {} by A1,Def18;
hence F.m = Morph-Map(F,o1,o2).m by A1,Def15
.= m by A1,A2,Th30;
end;
registration
let A be transitive with_units non empty AltCatStr;
cluster id A -> id-preserving comp-preserving;
coherence
proof
thus id A is id-preserving
proof
let o be Object of A;
<^o,o^> <> {} by ALTCAT_2:def 7;
hence Morph-Map(id A,o,o).idm o = idm o by Th30
.= idm (id A).o by Th29;
end;
set F = id A;
F is comp-preserving
proof
let o1,o2,o3 be Object of A such that
A1: <^o1,o2^> <> {} and
A2: <^o2,o3^> <> {};
let f be Morphism of o1,o2, g be Morphism of o2,o3;
A3: <^o1,o3^> <> {} by A1,A2,ALTCAT_1:def 2;
A4: F.o1 = o1 by Th29;
A5: F.o2 = o2 by Th29;
A6: F.o3 = o3 by Th29;
A7: F.g = g by A2,Th31;
F.f = f by A1,Th31;
hence thesis by A3,A4,A5,A6,A7,Th31;
end;
hence thesis;
end;
end;
definition
let A be transitive with_units non empty AltCatStr;
redefine func id A -> strict covariant Functor of A,A;
coherence by Def25,Def26;
end;
registration
let A be AltGraph;
cluster id A -> bijective;
coherence
proof
set CC=[:the carrier of A,the carrier of A:];
A1: the ObjectMap of id A = id CC by Def29;
hence id A is one-to-one;
thus id A is faithful
proof
per cases;
suppose
A2: the carrier of A <> {};
let i be set, f be Function such that
A3: i in dom(the MorphMap of id A) and
A4: (the MorphMap of id A).i = f;
consider o1,o2 being Element of A such that
A5: i = [o1,o2] by A2,A3,DOMAIN_1:1;
reconsider o1,o2 as Object of A;
A6: [o1,o2] in [:the carrier of A, the carrier of A:] by A2,ZFMISC_1:87;
f = (id the Arrows of A).(o1,o2) by A4,A5,Def29
.= id((the Arrows of A).[o1,o2]) by A6,MSUALG_3:def 1;
hence thesis;
end;
suppose
A7: the carrier of A = {};
let i be set, f be Function such that
A8: i in dom(the MorphMap of id A) and
(the MorphMap of id A).i = f;
dom(the MorphMap of id A)
= [:the carrier of A, the carrier of A:] by PARTFUN1:def 2
.= {} by A7,ZFMISC_1:90;
hence thesis by A8;
end;
end;
thus id A is full proof per cases;
suppose A is non empty;
then reconsider A as non empty AltGraph;
id A is full
proof
reconsider f = the MorphMap of id A as
ManySortedFunction of (the Arrows of A),
(the Arrows of A)*the ObjectMap of id A by Def4;
take f;
thus f = the MorphMap of id A;
let i be set;
assume
A9: i in [:the carrier of A,the carrier of A:];
then consider o1,o2 being Element of A such that
A10: i = [o1,o2] by DOMAIN_1:1;
reconsider o1,o2 as Object of A;
A11: [o1,o2] in [:the carrier of A, the carrier of A:] by ZFMISC_1:87;
A12: dom(the ObjectMap of id A) = CC by A1;
f.i = (id the Arrows of A).(o1,o2) by A10,Def29
.= id((the Arrows of A).[o1,o2]) by A11,MSUALG_3:def 1;
hence rng(f.i) = (the Arrows of A).[o1,o2]
.= (the Arrows of A).((the ObjectMap of id A).i) by A1,A9,A10,FUNCT_1:18
.= ((the Arrows of A)*the ObjectMap of id A).i by A9,A12,FUNCT_1:13;
end;
hence thesis;
end;
suppose A is empty;
then
A13: the carrier of A = {};
the ObjectMap of id A = id [:the carrier of A, the carrier of A:] by Def29;
then reconsider B = (the Arrows of A)*the ObjectMap of id A as
ManySortedSet of [:the carrier of A, the carrier of A:] by Th2;
reconsider f = the MorphMap of id A as
ManySortedSet of [:the carrier of A, the carrier of A:];
f is ManySortedFunction of (the Arrows of A),B
proof
let i be object;
thus thesis by A13,ZFMISC_1:90;
end;
then reconsider f as ManySortedFunction of (the Arrows of A),B;
take B,f;
thus
B = (the Arrows of A)*the ObjectMap of id A & f = the MorphMap of id A;
let i be set;
thus thesis by A13,ZFMISC_1:90;
end;
end;
the ObjectMap of id A is onto by A1;
hence id A is onto;
end;
end;
begin :: The composition of functors
definition
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph;
let F be feasible FunctorStr over C1,C2, G be FunctorStr over C2,C3;
func G*F -> strict FunctorStr over C1,C3 means
:Def36:
the ObjectMap of it = (the ObjectMap of G)*the ObjectMap of F &
the MorphMap of it =
((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F;
existence
proof
reconsider O = (the ObjectMap of G)*the ObjectMap of F
as bifunction of the carrier of C1, the carrier of C3;
set I1 = [:the carrier of C1,the carrier of C1:];
reconsider H = (the MorphMap of G)*the ObjectMap of F
as MSUnTrans of O,(the Arrows of C2)*the ObjectMap of F,the Arrows of C3
by Th17;
for ii being set st ii in I1 &
((the Arrows of C2)*the ObjectMap of F).ii = {}
holds (the Arrows of C1).ii = {} or ((the Arrows of C3)*O).ii = {}
proof
let ii be set such that
A1: ii in I1 and
A2: ((the Arrows of C2)*the ObjectMap of F).ii = {};
A3: dom the ObjectMap of F = I1 by FUNCT_2:def 1;
reconsider o1 = ii`1, o2 = ii`2 as Object of C1 by A1,MCART_1:10;
ii = [o1,o2] by A1,MCART_1:21;
then
A4: (the Arrows of C2).((the ObjectMap of F).(o1,o2))
= {} by A1,A2,A3,FUNCT_1:13;
(the Arrows of C1).ii = (the Arrows of C1).(o1,o2) by A1,MCART_1:21
.= <^o1,o2^> by ALTCAT_1:def 1
.= {} by A4,Def11;
hence thesis;
end;
then reconsider M = H**the MorphMap of F
as MSUnTrans of O, the Arrows of C1, the Arrows of C3 by Th19;
take FunctorStr(#O,M#);
thus thesis;
end;
correctness;
end;
registration
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph;
let F be Covariant feasible FunctorStr over C1,C2,
G be Covariant FunctorStr over C2,C3;
cluster G*F -> Covariant;
correctness
proof
the ObjectMap of F is Covariant by Def12;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A1: the ObjectMap of F = [:f,f:];
the ObjectMap of G is Covariant by Def12;
then consider g being Function of the carrier of C2, the carrier of C3
such that
A2: the ObjectMap of G = [:g,g:];
take g*f;
thus
the ObjectMap of G*F = (the ObjectMap of G)*the ObjectMap of F by Def36
.= [:g*f,g*f:] by A1,A2,FUNCT_3:71;
end;
end;
registration
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph;
let F be Contravariant feasible FunctorStr over C1,C2,
G be Covariant FunctorStr over C2,C3;
cluster G*F -> Contravariant;
correctness
proof
the ObjectMap of F is Contravariant by Def13;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A1: the ObjectMap of F = ~[:f,f:];
the ObjectMap of G is Covariant by Def12;
then consider g being Function of the carrier of C2, the carrier of C3
such that
A2: the ObjectMap of G = [:g,g:];
take g*f;
thus
the ObjectMap of G*F = (the ObjectMap of G)*the ObjectMap of F by Def36
.= ~([:g,g:]*[:f,f:]) by A1,A2,ALTCAT_2:2
.= ~[:g*f,g*f:] by FUNCT_3:71;
end;
end;
registration
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph;
let F be Covariant feasible FunctorStr over C1,C2,
G be Contravariant FunctorStr over C2,C3;
cluster G*F -> Contravariant;
correctness
proof
the ObjectMap of F is Covariant by Def12;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A1: the ObjectMap of F = [:f,f:];
the ObjectMap of G is Contravariant by Def13;
then consider g being Function of the carrier of C2, the carrier of C3
such that
A2: the ObjectMap of G = ~[:g,g:];
take g*f;
thus
the ObjectMap of G*F = (the ObjectMap of G)*the ObjectMap of F by Def36
.= ~([:g,g:]*[:f,f:]) by A1,A2,ALTCAT_2:3
.= ~[:g*f,g*f:] by FUNCT_3:71;
end;
end;
registration
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph;
let F be Contravariant feasible FunctorStr over C1,C2,
G be Contravariant FunctorStr over C2,C3;
cluster G*F -> Covariant;
correctness
proof
the ObjectMap of F is Contravariant by Def13;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A1: the ObjectMap of F = ~[:f,f:];
the ObjectMap of G is Contravariant by Def13;
then consider g being Function of the carrier of C2, the carrier of C3
such that
A2: the ObjectMap of G = ~[:g,g:];
take g*f;
thus
the ObjectMap of G*F = (the ObjectMap of G)*the ObjectMap of F by Def36
.= ~(~[:g,g:]*[:f,f:]) by A1,A2,ALTCAT_2:2
.= ~~([:g,g:]*[:f,f:]) by ALTCAT_2:3
.= [:g,g:]*[:f,f:] by FUNCT_4:53
.= [:g*f,g*f:] by FUNCT_3:71;
end;
end;
registration
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph;
let F be feasible FunctorStr over C1,C2,
G be feasible FunctorStr over C2,C3;
cluster G*F -> feasible;
coherence
proof
let o1,o2 be Object of C1 such that
A1: <^o1,o2^> <> {};
reconsider p1 = ((the ObjectMap of F).(o1,o2))`1,
p2 = ((the ObjectMap of F).(o1,o2))`2 as Element of C2 by MCART_1:10;
reconsider p1,p2 as Object of C2;
[o1,o2] in [:the carrier of C1,the carrier of C1:] by ZFMISC_1:87;
then
A2: [o1,o2] in dom the ObjectMap of F by FUNCT_2:def 1;
A3: ((the ObjectMap of F).(o1,o2)) = [p1,p2] by MCART_1:21;
A4: ((the ObjectMap of(G*F)).(o1,o2))
= ((the ObjectMap of G)*the ObjectMap of F).[o1,o2] by Def36
.= (the ObjectMap of G).(p1,p2) by A2,A3,FUNCT_1:13;
<^p1,p2^> = (the Arrows of C2).(p1,p2) by ALTCAT_1:def 1
.= (the Arrows of C2).((the ObjectMap of F).(o1,o2)) by MCART_1:21;
then <^p1,p2^> <> {} by A1,Def11;
hence thesis by A4,Def11;
end;
end;
theorem
for C1 being non empty AltGraph, C2,C3,C4 being non empty reflexive AltGraph,
F being feasible FunctorStr over C1,C2,
G being feasible FunctorStr over C2,C3, H being FunctorStr over C3,C4
holds H*G*F = H*(G*F)
proof
let C1 be non empty AltGraph, C2,C3,C4 be non empty reflexive AltGraph,
F be feasible FunctorStr over C1,C2,
G be feasible FunctorStr over C2,C3, H be FunctorStr over C3,C4;
A1: the ObjectMap of H*G*F = (the ObjectMap of H*G)*the ObjectMap of F by Def36
.= (the ObjectMap of H)*(the ObjectMap of G)*the ObjectMap of F by Def36
.= (the ObjectMap of H)*((the ObjectMap of G)*the ObjectMap of F)
by RELAT_1:36
.= (the ObjectMap of H)*the ObjectMap of(G*F) by Def36
.= the ObjectMap of H*(G*F) by Def36;
the MorphMap of H*G*F
= ((the MorphMap of H*G)*the ObjectMap of F)**the MorphMap of F by Def36
.= ((the MorphMap of H)*(the ObjectMap of G)**the MorphMap of G)
*(the ObjectMap of F)**the MorphMap of F by Def36
.= (the MorphMap of H)*(the ObjectMap of G)*(the ObjectMap of F)
**((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F by Th12
.= (the MorphMap of H)*((the ObjectMap of G)*the ObjectMap of F)
**((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F by RELAT_1:36
.= ((the MorphMap of H)*the ObjectMap of G*F)**
((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F by Def36
.= ((the MorphMap of H)*the ObjectMap of G*F)**
(((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F) by PBOOLE:140
.= ((the MorphMap of H)*the ObjectMap of G*F)**the MorphMap of G*F by Def36
.= the MorphMap of H*(G*F) by Def36;
hence thesis by A1;
end;
theorem Th33:
for C1 being non empty AltCatStr, C2,C3 being non empty reflexive AltCatStr,
F be feasible reflexive FunctorStr over C1,C2, G be FunctorStr over C2,C3,
o be Object of C1 holds (G*F).o = G.(F.o)
proof
let C1 be non empty AltCatStr, C2,C3 be non empty reflexive AltCatStr,
F be feasible reflexive FunctorStr over C1,C2, G be FunctorStr over C2,C3,
o be Object of C1;
dom the ObjectMap of F = [:the carrier of C1,the carrier of C1:]
by FUNCT_2:def 1;
then
A1: [o,o] in dom the ObjectMap of F by ZFMISC_1:87;
thus (G*F).o = (((the ObjectMap of G)*the ObjectMap of F).(o,o))`1 by Def36
.= ((the ObjectMap of G).((the ObjectMap of F).[o,o]))`1 by A1,FUNCT_1:13
.= G.(F.o) by Def10;
end;
theorem Th34:
for C1 being non empty AltGraph, C2,C3 being non empty reflexive AltGraph,
F be feasible reflexive FunctorStr over C1,C2, G be FunctorStr over C2,C3,
o be Object of C1
holds Morph-Map(G*F,o,o) = Morph-Map(G,F.o,F.o)*Morph-Map(F,o,o)
proof
let C1 be non empty AltGraph, C2,C3 be non empty reflexive AltGraph,
F be feasible reflexive FunctorStr over C1,C2,
G be FunctorStr over C2,C3, o be Object of C1;
A1: dom(the MorphMap of G) = [:the carrier of C2,the carrier of C2:]
by PARTFUN1:def 2;
rng(the ObjectMap of F) c= [:the carrier of C2,the carrier of C2:];
then dom((the MorphMap of G)*the ObjectMap of F)
= dom(the ObjectMap of F) by A1,RELAT_1:27
.= [:the carrier of C1,the carrier of C1:] by FUNCT_2:def 1;
then
A2: [o,o] in dom((the MorphMap of G)*the ObjectMap of F) by ZFMISC_1:87;
dom(the MorphMap of F) = [:the carrier of C1,the carrier of C1:]
by PARTFUN1:def 2;
then [o,o] in dom(the MorphMap of F) by ZFMISC_1:87;
then [o,o] in dom((the MorphMap of G)*the ObjectMap of F)
/\ dom(the MorphMap of F) by A2,XBOOLE_0:def 4;
then
A3: [o,o] in dom(((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F)
by PBOOLE:def 19;
A4: ((the MorphMap of G)*the ObjectMap of F).[o,o]
= (the MorphMap of G).((the ObjectMap of F).(o,o)) by A2,FUNCT_1:12
.= Morph-Map(G,F.o,F.o) by Def10;
thus Morph-Map(G*F,o,o)
= (((the MorphMap of G)*the ObjectMap of F)**the MorphMap of F).(o,o)
by Def36
.= Morph-Map(G,F.o,F.o)*Morph-Map(F,o,o) by A3,A4,PBOOLE:def 19;
end;
registration
let C1,C2,C3 be with_units non empty AltCatStr;
let F be id-preserving feasible reflexive FunctorStr over C1,C2;
let G be id-preserving FunctorStr over C2,C3;
cluster G*F -> id-preserving;
coherence
proof
let o be Object of C1;
A1: [o,o] in [:the carrier of C1,the carrier of C1:] by ZFMISC_1:87;
then [o,o] in dom the ObjectMap of F by FUNCT_2:def 1;
then ((the Arrows of C2)*the ObjectMap of F).[o,o]
= (the Arrows of C2).((the ObjectMap of F).(o,o)) by FUNCT_1:13
.= (the Arrows of C2).(F.o,F.o) by Def10
.= <^F.o,F.o^> by ALTCAT_1:def 1;
then
A2: ((the Arrows of C2)*the ObjectMap of F).[o,o] <> {} by ALTCAT_2:def 7;
the MorphMap of F is ManySortedFunction of the Arrows of C1,
(the Arrows of C2)*the ObjectMap of F by Def4;
then Morph-Map(F,o,o) is Function of (the Arrows of C1).[o,o],
((the Arrows of C2)*the ObjectMap of F).[o,o] by A1,PBOOLE:def 15;
then
A3: dom Morph-Map(F,o,o) = (the Arrows of C1).(o,o) by A2,FUNCT_2:def 1
.= <^o,o^> by ALTCAT_1:def 1;
thus Morph-Map(G*F,o,o).idm o
= (Morph-Map(G,F.o,F.o)*Morph-Map(F,o,o)).idm o by Th34
.= Morph-Map(G,F.o,F.o).(Morph-Map(F,o,o).idm o) by A3,ALTCAT_1:19
,FUNCT_1:13
.= Morph-Map(G,F.o,F.o).idm F.o by Def20
.= idm G.(F.o) by Def20
.= idm (G*F).o by Th33;
end;
end;
definition
let A,C be non empty reflexive AltCatStr;
let B be non empty SubCatStr of A;
let F be FunctorStr over A,C;
func F|B -> FunctorStr over B,C equals
F*incl B;
correctness;
end;
begin :: The inverse functor
definition
let A,B be non empty AltGraph, F be FunctorStr over A,B;
assume
A1: F is bijective;
func F" -> strict FunctorStr over B,A means
:Def38:
the ObjectMap of it = (the ObjectMap of F)" &
ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & the MorphMap of it = f""*(the ObjectMap of F)";
existence
proof
set OF = the ObjectMap of F;
F is injective by A1;
then F is one-to-one;
then
A2: OF is one-to-one;
F is surjective by A1;
then F is onto;
then OF is onto;
then
A3: rng OF = [:the carrier of B,the carrier of B:];
then reconsider OM = (the ObjectMap of F)" as
bifunction of the carrier of B, the carrier of A by A2,FUNCT_2:25;
reconsider f = the MorphMap of F as
ManySortedFunction of (the Arrows of A), (the Arrows of B)*OF by Def4;
(the Arrows of B)*OF*OM = (the Arrows of B)*(OF*OM) by RELAT_1:36
.= (the Arrows of B)*id[:the carrier of B,the carrier of B:]
by A2,A3,FUNCT_2:29
.= the Arrows of B by Th2;
then f""*OM is ManySortedFunction of the Arrows of B, (the Arrows of A)*OM
by ALTCAT_2:5;
then reconsider MM = f""*OM
as MSUnTrans of OM, the Arrows of B, the Arrows of A by Def4;
take G = FunctorStr(#OM,MM#);
thus the ObjectMap of G = OF";
take f;
thus thesis;
end;
uniqueness;
end;
theorem Th35:
for A,B being transitive with_units non empty AltCatStr,
F being feasible FunctorStr over A,B st F is bijective
holds F" is bijective feasible
proof
let A,B be transitive with_units non empty AltCatStr;
let F be feasible FunctorStr over A,B such that
A1: F is bijective;
set G = F";
A2: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
A3: F is injective by A1;
then F is one-to-one;
then
A4: the ObjectMap of F is one-to-one;
hence the ObjectMap of G is one-to-one by A2;
F is faithful by A3;
then
A5: the MorphMap of F is "1-1";
A6: F is surjective by A1;
then F is onto;
then
A7: the ObjectMap of F is onto;
consider h being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F such that
A8: h = the MorphMap of F and
A9: the MorphMap of G = h""*(the ObjectMap of F)" by A1,Def38;
F is full by A6;
then
A10: ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & f is "onto";
set AA = [:the carrier of A,the carrier of A:],
BB = [:the carrier of B,the carrier of B:];
A11: rng the ObjectMap of F = BB by A7;
reconsider f = the MorphMap of G as ManySortedFunction of
(the Arrows of B),(the Arrows of A)*the ObjectMap of G by Def4;
f is "1-1"
proof
let i be set, g be Function such that
A12: i in dom f and
A13: f.i = g;
i in BB by A12;
then
A14: i in dom((the ObjectMap of F)") by A4,A11,FUNCT_1:33;
then (the ObjectMap of F)".i in rng((the ObjectMap of F)") by FUNCT_1:def 3
;
then
A15: (the ObjectMap of F)".i in dom the ObjectMap of F by A4,FUNCT_1:33;
then (the ObjectMap of F)".i in AA;
then (the ObjectMap of F)".i in dom h by PARTFUN1:def 2;
then
A16: h.((the ObjectMap of F)".i) is one-to-one by A5,A8;
g = h"".((the ObjectMap of F)".i) by A9,A13,A14,FUNCT_1:13
.= (h.((the ObjectMap of F)".i))" by A5,A8,A10,A15,MSUALG_3:def 4;
hence thesis by A16;
end;
hence the MorphMap of G is "1-1";
thus G is full
proof
take f;
thus f = the MorphMap of G;
let i be set;
assume
A17: i in BB;
then
A18: i in dom the ObjectMap of G by FUNCT_2:def 1;
A19: i in dom((the ObjectMap of F)") by A4,A11,A17,FUNCT_1:33;
then (the ObjectMap of F)".i in rng((the ObjectMap of F)") by FUNCT_1:def 3
;
then
A20: (the ObjectMap of F)".i in dom the ObjectMap of F by A4,FUNCT_1:33;
then (the ObjectMap of F)".i in AA;
then ((the ObjectMap of G).i) in dom h by A2,PARTFUN1:def 2;
then
A21: h.((the ObjectMap of G).i) is one-to-one by A5,A8;
set j = (the ObjectMap of G).i;
A22: h.j is Function of (the Arrows of A).j,
((the Arrows of B)*the ObjectMap of F).j by A2,A20,PBOOLE:def 15;
consider o1,o2 being Element of A such that
A23: j = [o1,o2] by A2,A20,DOMAIN_1:1;
reconsider o1,o2 as Object of A;
A24: now
assume (the Arrows of A).j <> {};
then (the Arrows of A).(o1,o2) <> {} by A23;
then <^o1,o2^> <> {} by ALTCAT_1:def 1;
then (the Arrows of B).((the ObjectMap of F).(o1,o2)) <> {} by Def11;
hence ((the Arrows of B)*the ObjectMap of F).j <> {} by A2,A20,A23,
FUNCT_1:13;
end;
f.i = h"".((the ObjectMap of F)".i) by A9,A19,FUNCT_1:13
.= (h.((the ObjectMap of F)".i))" by A5,A8,A10,A20,MSUALG_3:def 4;
hence rng(f.i) = dom(h.((the ObjectMap of G).i)) by A2,A21,FUNCT_1:33
.= (the Arrows of A).((the ObjectMap of G).i) by A22,A24,FUNCT_2:def 1
.= ((the Arrows of A)*the ObjectMap of G).i by A18,FUNCT_1:13;
end;
thus rng the ObjectMap of G = dom the ObjectMap of F by A2,A4,FUNCT_1:33
.= AA by FUNCT_2:def 1;
let o1,o2 be Object of B;
assume <^o1,o2^> <> {};
then
A25: (the Arrows of B).(o1,o2) <> {} by ALTCAT_1:def 1;
A26: [o1,o2] in BB by ZFMISC_1:87;
then consider p1,p2 being Element of A such that
A27: (the ObjectMap of G).[o1,o2] = [p1,p2] by DOMAIN_1:1,FUNCT_2:5;
reconsider p1,p2 as Object of A;
[o1,o2] in dom the ObjectMap of G by A26,FUNCT_2:def 1;
then
A28: (the ObjectMap of F).(p1,p2)
= ((the ObjectMap of F)*(the ObjectMap of G)).[o1,o2] by A27,FUNCT_1:13
.= (id BB).[o1,o2] by A2,A4,A11,FUNCT_1:39
.= [o1,o2] by A26,FUNCT_1:18;
assume
A29: (the Arrows of A).((the ObjectMap of G).(o1,o2)) = {};
A30: [p1,p2] in AA by ZFMISC_1:87;
then
A31: [p1,p2] in dom the ObjectMap of F by FUNCT_2:def 1;
h.[p1,p2] is Function of (the Arrows of A).[p1,p2],
((the Arrows of B)*the ObjectMap of F).[p1,p2] by A30,PBOOLE:def 15;
then {} = rng(h.[p1,p2]) by A27,A29
.= ((the Arrows of B)*the ObjectMap of F).[p1,p2] by A8,A10,A30
.= (the Arrows of B).[o1,o2] by A28,A31,FUNCT_1:13;
hence contradiction by A25;
end;
theorem Th36:
for A,B being transitive with_units non empty AltCatStr,
F being feasible reflexive FunctorStr over A,B st F is bijective coreflexive
holds F" is reflexive
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible reflexive FunctorStr over A,B such that
A1: F is bijective and
A2: F is coreflexive;
set G = F";
A3: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
let o be Object of B;
A4: dom the ObjectMap of F = [:the carrier of A,the carrier of A:]
by FUNCT_2:def 1;
consider p being Object of A such that
A5: o = F.p by A2,Th20;
F is injective by A1;
then F is one-to-one;
then
A6: the ObjectMap of F is one-to-one;
A7: [p,p] in dom the ObjectMap of F by A4,ZFMISC_1:87;
A8: G.(F.p) = (G*F).p by Th33
.= (((the ObjectMap of G)*the ObjectMap of F).(p,p))`1 by Def36
.= ((id dom the ObjectMap of F).[p,p])`1 by A3,A6,FUNCT_1:39
.= [p,p]`1 by A7,FUNCT_1:18
.= p;
thus (the ObjectMap of G).(o,o)
= (the ObjectMap of G).((the ObjectMap of F).(p,p)) by A5,Def10
.= ((the ObjectMap of G)*(the ObjectMap of F)).[p,p] by A7,FUNCT_1:13
.= (id dom the ObjectMap of F).[p,p] by A3,A6,FUNCT_1:39
.= [G.o,G.o] by A5,A7,A8,FUNCT_1:18;
end;
theorem Th37:
for A,B being transitive with_units non empty AltCatStr,
F being feasible reflexive id-preserving FunctorStr over A,B
st F is bijective coreflexive holds F" is id-preserving
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible reflexive id-preserving FunctorStr over A,B such that
A1: F is bijective coreflexive;
set G = F";
reconsider H = G as feasible reflexive FunctorStr over B,A by A1,Th35,Th36;
A2: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
consider f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F such that
A3: f = the MorphMap of F and
A4: the MorphMap of G = f""*(the ObjectMap of F)" by A1,Def38;
let o be Object of B;
A5: F is injective by A1;
then F is one-to-one;
then
A6: the ObjectMap of F is one-to-one;
F is faithful by A5;
then
A7: the MorphMap of F is "1-1";
F is surjective by A1;
then F is full;
then
A8: ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & f is "onto";
A9: [G.o,G.o] in [:the carrier of A,the carrier of A:] by ZFMISC_1:87;
A10: [o,o] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A11: [o,o] in dom the ObjectMap of G by FUNCT_2:def 1;
A12: (the ObjectMap of F*H).(o,o)
= ((the ObjectMap of F)*the ObjectMap of H).[o,o] by Def36
.= ((the ObjectMap of F)*(the ObjectMap of F)").[o,o] by A1,Def38
.= (id rng the ObjectMap of F).[o,o] by A6,FUNCT_1:39
.= (id dom(the ObjectMap of G)).[o,o] by A2,A6,FUNCT_1:33
.= (id[:the carrier of B,the carrier of B:]).[o,o] by FUNCT_2:def 1
.= [o,o] by A10,FUNCT_1:18;
A13: F.(G.o) = (F*H).o by Th33
.= o by A12;
dom the MorphMap of F = [:the carrier of A,the carrier of A:]
by PARTFUN1:def 2;
then [G.o,G.o] in dom the MorphMap of F by ZFMISC_1:87;
then
A14: Morph-Map(F,G.o,G.o) is one-to-one by A7;
[G.o,G.o] in dom the ObjectMap of F by A9,FUNCT_2:def 1;
then ((the Arrows of B)*the ObjectMap of F).[G.o,G.o]
= (the Arrows of B).((the ObjectMap of F).(G.o,G.o)) by FUNCT_1:13
.= (the Arrows of B).(F.(G.o),F.(G.o)) by Def10;
then
A15: ((the Arrows of B)*the ObjectMap of F).[G.o,G.o] <> {} by ALTCAT_2:def 6;
Morph-Map(F,G.o,G.o) is Function of (the Arrows of A).[G.o,G.o],
((the Arrows of B)*the ObjectMap of F).[G.o,G.o] by A3,A9,PBOOLE:def 15;
then
A16: dom Morph-Map(F,G.o,G.o)
= (the Arrows of A).(G.o,G.o) by A15,FUNCT_2:def 1
.= <^G.o,G.o^> by ALTCAT_1:def 1;
((the Arrows of A)*the ObjectMap of G).[o,o]
= (the Arrows of A).((the ObjectMap of H).(o,o)) by A11,FUNCT_1:13
.= (the Arrows of A).(G.o,G.o) by Def10;
then
A17: ((the Arrows of A)*the ObjectMap of G).[o,o] <> {} by ALTCAT_2:def 6;
the MorphMap of G is ManySortedFunction of
the Arrows of B,(the Arrows of A)*the ObjectMap of G by Def4;
then Morph-Map(G,o,o) is Function of (the Arrows of B).[o,o],
((the Arrows of A)*the ObjectMap of G).[o,o] by A10,PBOOLE:def 15;
then
A18: dom Morph-Map(G,o,o) = (the Arrows of B).(o,o) by A17,FUNCT_2:def 1
.= <^o,o^> by ALTCAT_1:def 1;
then
A19: idm o in dom Morph-Map(G,o,o) by ALTCAT_1:19;
A20: Morph-Map(G,o,o)
= f"".((the ObjectMap of G).(o,o)) by A2,A4,A11,FUNCT_1:13
.= f"".[H.o,H.o] by Def10
.= Morph-Map(F,G.o,G.o)" by A3,A7,A8,A9,MSUALG_3:def 4;
Morph-Map(G,o,o).idm o in rng Morph-Map(G,o,o) by A19,FUNCT_1:def 3;
then
A21: Morph-Map(G,o,o).idm o in dom Morph-Map(F,G.o,G.o) by A14,A20,FUNCT_1:33;
Morph-Map(F,G.o,G.o).(Morph-Map(G,o,o).idm o)
= (Morph-Map(F,G.o,G.o)*Morph-Map(G,o,o)).idm o by A18,ALTCAT_1:19,FUNCT_1:13
.= (id rng Morph-Map(F,G.o,G.o)).idm o by A14,A20,FUNCT_1:39
.= (id dom Morph-Map(G,o,o)).idm o by A14,A20,FUNCT_1:33
.= idm F.(G.o) by A13,A18
.= Morph-Map(F,G.o,G.o).idm G.o by Def20;
hence thesis by A14,A16,A21;
end;
theorem Th38:
for A,B being transitive with_units non empty AltCatStr,
F being feasible FunctorStr over A,B st F is bijective Covariant
holds F" is Covariant
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible FunctorStr over A,B;
assume
A1: F is bijective Covariant;
then F is injective;
then F is one-to-one;
then
A2: the ObjectMap of F is one-to-one;
F is surjective by A1;
then F is onto;
then
A3: the ObjectMap of F is onto;
the ObjectMap of F is Covariant by A1;
then consider f being Function of the carrier of A, the carrier of B
such that
A4: the ObjectMap of F = [:f,f:];
A5: f is one-to-one by A2,A4,Th7;
then
A6: dom(f") = rng f by FUNCT_1:33;
A7: rng(f") = dom f by A5,FUNCT_1:33;
A8: rng[:f,f:] = [:the carrier of B,the carrier of B:] by A3,A4;
rng[:f,f:] = [:rng f,rng f:] by FUNCT_3:67;
then rng f = the carrier of B by A8,ZFMISC_1:92;
then reconsider g = f" as Function of the carrier of B, the carrier of A
by A6,A7,FUNCT_2:def 1,RELSET_1:4;
take g;
[:f,f:]" = [:g,g:] by A5,Th6;
hence thesis by A1,A4,Def38;
end;
theorem Th39:
for A,B being transitive with_units non empty AltCatStr,
F being feasible FunctorStr over A,B st F is bijective Contravariant
holds F" is Contravariant
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible FunctorStr over A,B;
assume
A1: F is bijective Contravariant;
then F is injective;
then F is one-to-one;
then
A2: the ObjectMap of F is one-to-one;
F is surjective by A1;
then F is onto;
then
A3: the ObjectMap of F is onto;
the ObjectMap of F is Contravariant by A1;
then consider f being Function of the carrier of A, the carrier of B
such that
A4: the ObjectMap of F = ~[:f,f:];
[:f,f:] is one-to-one by A2,A4,Th9;
then
A5: f is one-to-one by Th7;
then
A6: dom(f") = rng f by FUNCT_1:33;
A7: rng(f") = dom f by A5,FUNCT_1:33;
[:f,f:] is onto by A3,A4,Th13;
then
A8: rng[:f,f:] = [:the carrier of B,the carrier of B:];
rng[:f,f:] = [:rng f,rng f:] by FUNCT_3:67;
then rng f = the carrier of B by A8,ZFMISC_1:92;
then reconsider g = f" as Function of the carrier of B, the carrier of A
by A6,A7,FUNCT_2:def 1,RELSET_1:4;
take g;
A9: [:f,f:]" = [:g,g:] by A5,Th6;
thus the ObjectMap of F" = (the ObjectMap of F)" by A1,Def38
.= ~[:g,g:] by A4,A5,A9,Th10;
end;
theorem Th40:
for A,B being transitive with_units non empty AltCatStr,
F being feasible reflexive FunctorStr over A,B
st F is bijective coreflexive Covariant
for o1,o2 being Object of B, m being Morphism of o1,o2 st <^o1,o2^> <> {}
holds Morph-Map(F,F".o1,F".o2).(Morph-Map(F",o1,o2).m) = m
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible reflexive FunctorStr over A,B such that
A1: F is bijective coreflexive Covariant;
set G = F";
A2: G is Covariant by A1,Th38;
reconsider H = G as feasible reflexive FunctorStr over B,A by A1,Th35,Th36;
A3: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
consider f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F such that
A4: f = the MorphMap of F and
A5: the MorphMap of G = f""*(the ObjectMap of F)" by A1,Def38;
F is injective by A1;
then F is faithful;
then
A6: the MorphMap of F is "1-1";
F is surjective by A1;
then F is full;
then
A7: ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & f is "onto";
let o1,o2 be Object of B, m be Morphism of o1,o2 such that
A8: <^o1,o2^> <> {};
A9: [G.o1,G.o2] in [:the carrier of A,the carrier of A:] by ZFMISC_1:87;
A10: [o1,o2] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A11: [o1,o2] in dom the ObjectMap of G by FUNCT_2:def 1;
dom the MorphMap of F = [:the carrier of A,the carrier of A:]
by PARTFUN1:def 2;
then [G.o1,G.o2] in dom the MorphMap of F by ZFMISC_1:87;
then
A12: Morph-Map(F,G.o1,G.o2) is one-to-one by A6;
((the Arrows of A)*the ObjectMap of G).[o1,o2]
= (the Arrows of A).((the ObjectMap of H).(o1,o2)) by A11,FUNCT_1:13
.= (the Arrows of A).(H.o1,H.o2) by A2,Th22
.= <^H.o1,H.o2^> by ALTCAT_1:def 1;
then
A13: ((the Arrows of A)*the ObjectMap of G).[o1,o2] <> {} by A2,A8,Def18;
the MorphMap of G is ManySortedFunction of
the Arrows of B,(the Arrows of A)*the ObjectMap of G by Def4;
then Morph-Map(G,o1,o2) is Function of (the Arrows of B).[o1,o2],
((the Arrows of A)*the ObjectMap of G).[o1,o2] by A10,PBOOLE:def 15;
then
A14: dom Morph-Map(G,o1,o2) = (the Arrows of B).(o1,o2) by A13,FUNCT_2:def 1
.= <^o1,o2^> by ALTCAT_1:def 1;
A15: Morph-Map(G,o1,o2)
= f"".((the ObjectMap of G).(o1,o2)) by A3,A5,A11,FUNCT_1:13
.= f"".[H.o1,H.o2] by A2,Th22
.= Morph-Map(F,G.o1,G.o2)" by A4,A6,A7,A9,MSUALG_3:def 4;
thus Morph-Map(F,G.o1,G.o2).(Morph-Map(G,o1,o2).m)
= (Morph-Map(F,G.o1,G.o2)*Morph-Map(G,o1,o2)).m by A8,A14,FUNCT_1:13
.= (id rng Morph-Map(F,G.o1,G.o2)).m by A12,A15,FUNCT_1:39
.= (id dom Morph-Map(G,o1,o2)).m by A12,A15,FUNCT_1:33
.= m by A14;
end;
theorem Th41:
for A,B being transitive with_units non empty AltCatStr,
F being feasible reflexive FunctorStr over A,B
st F is bijective coreflexive Contravariant
for o1,o2 being Object of B, m being Morphism of o1,o2 st <^o1,o2^> <> {}
holds Morph-Map(F,F".o2,F".o1).(Morph-Map(F",o1,o2).m) = m
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible reflexive FunctorStr over A,B such that
A1: F is bijective coreflexive Contravariant;
set G = F";
A2: G is Contravariant by A1,Th39;
reconsider H = G as feasible reflexive FunctorStr over B,A by A1,Th35,Th36;
A3: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
consider f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F such that
A4: f = the MorphMap of F and
A5: the MorphMap of G = f""*(the ObjectMap of F)" by A1,Def38;
F is injective by A1;
then F is faithful;
then
A6: the MorphMap of F is "1-1";
F is surjective by A1;
then F is full;
then
A7: ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & f is "onto";
let o1,o2 be Object of B, m be Morphism of o1,o2 such that
A8: <^o1,o2^> <> {};
A9: [G.o2,G.o1] in [:the carrier of A,the carrier of A:] by ZFMISC_1:87;
A10: [o1,o2] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A11: [o1,o2] in dom the ObjectMap of G by FUNCT_2:def 1;
dom the MorphMap of F = [:the carrier of A,the carrier of A:]
by PARTFUN1:def 2;
then [G.o2,G.o1] in dom the MorphMap of F by ZFMISC_1:87;
then
A12: Morph-Map(F,G.o2,G.o1) is one-to-one by A6;
((the Arrows of A)*the ObjectMap of G).[o1,o2]
= (the Arrows of A).((the ObjectMap of H).(o1,o2)) by A11,FUNCT_1:13
.= (the Arrows of A).(H.o2,H.o1) by A2,Th23
.= <^H.o2,H.o1^> by ALTCAT_1:def 1;
then
A13: ((the Arrows of A)*the ObjectMap of G).[o1,o2] <> {} by A2,A8,Def19;
the MorphMap of G is ManySortedFunction of
the Arrows of B,(the Arrows of A)*the ObjectMap of G by Def4;
then Morph-Map(G,o1,o2) is Function of (the Arrows of B).[o1,o2],
((the Arrows of A)*the ObjectMap of G).[o1,o2] by A10,PBOOLE:def 15;
then
A14: dom Morph-Map(G,o1,o2) = (the Arrows of B).(o1,o2) by A13,FUNCT_2:def 1
.= <^o1,o2^> by ALTCAT_1:def 1;
A15: Morph-Map(G,o1,o2)
= f"".((the ObjectMap of G).(o1,o2)) by A3,A5,A11,FUNCT_1:13
.= f"".[H.o2,H.o1] by A2,Th23
.= Morph-Map(F,G.o2,G.o1)" by A4,A6,A7,A9,MSUALG_3:def 4;
thus Morph-Map(F,F".o2,F".o1).(Morph-Map(F",o1,o2).m)
= (Morph-Map(F,G.o2,G.o1)*Morph-Map(G,o1,o2)).m by A8,A14,FUNCT_1:13
.= (id rng Morph-Map(F,G.o2,G.o1)).m by A12,A15,FUNCT_1:39
.= (id dom Morph-Map(G,o1,o2)).m by A12,A15,FUNCT_1:33
.= m by A14;
end;
theorem Th42:
for A,B being transitive with_units non empty AltCatStr,
F being feasible reflexive FunctorStr over A,B st
F is bijective comp-preserving Covariant coreflexive
holds F" is comp-preserving
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible reflexive FunctorStr over A,B such that
A1: F is bijective comp-preserving Covariant coreflexive;
set G = F";
A2: G is Covariant by A1,Th38;
reconsider H = G as feasible reflexive FunctorStr over B,A by A1,Th35,Th36;
A3: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
consider ff being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F such that
A4: ff = the MorphMap of F and
A5: the MorphMap of G = ff""*(the ObjectMap of F)" by A1,Def38;
A6: F is injective by A1;
then F is one-to-one;
then
A7: the ObjectMap of F is one-to-one;
F is faithful by A6;
then
A8: the MorphMap of F is "1-1";
F is surjective by A1;
then F is full;
then
A9: ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & f is "onto";
let o1,o2,o3 be Object of B;
assume
A10: <^o1,o2^> <> {};
then
A11: <^H.o1,H.o2^> <> {} by A2,Def18;
assume
A12: <^o2,o3^> <> {};
then
A13: <^H.o2,H.o3^> <> {} by A2,Def18;
A14: <^o1,o3^> <> {} by A10,A12,ALTCAT_1:def 2;
then
A15: <^H.o1,H.o3^> <> {} by A2,Def18;
then
A16: <^F.(G.o1),F.(G.o3)^> <> {} by A1,Def18;
let f be Morphism of o1,o2, g be Morphism of o2,o3;
reconsider K = G as Covariant FunctorStr over B,A by A1,Th38;
K.f = Morph-Map(K,o1,o2).f by A10,A11,Def15;
then reconsider f9 = Morph-Map(K,o1,o2).f as Morphism of G.o1,G.o2;
K.g = Morph-Map(K,o2,o3).g by A12,A13,Def15;
then reconsider g9 = Morph-Map(K,o2,o3).g as Morphism of G.o2,G.o3;
take f9,g9;
thus f9 = Morph-Map(G,o1,o2).f;
thus g9 = Morph-Map(G,o2,o3).g;
consider f99 being Morphism of F.(G.o1),F.(G.o2),
g99 being Morphism of F.(G.o2),F.(G.o3) such that
A17: f99 = Morph-Map(F,G.o1,G.o2).f9 and
A18: g99 = Morph-Map(F,G.o2,G.o3).g9 and
A19: Morph-Map(F,G.o1,G.o3).(g9*f9) = g99*f99 by A1,A11,A13;
A20: g = g99 by A1,A12,A18,Th40;
A21: f = f99 by A1,A10,A17,Th40;
A22: [G.o1,G.o3] in [:the carrier of A,the carrier of A:] by ZFMISC_1:87;
A23: [o1,o3] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A24: [o1,o3] in dom the ObjectMap of G by FUNCT_2:def 1;
dom the MorphMap of F = [:the carrier of A,the carrier of A:]
by PARTFUN1:def 2;
then [G.o1,G.o3] in dom the MorphMap of F by ZFMISC_1:87;
then
A25: Morph-Map(F,G.o1,G.o3) is one-to-one by A8;
[G.o1,G.o3] in dom the ObjectMap of F by A22,FUNCT_2:def 1;
then
A26: ((the Arrows of B)*the ObjectMap of F).[G.o1,G.o3]
= (the Arrows of B).((the ObjectMap of F).(G.o1,G.o3)) by FUNCT_1:13
.= (the Arrows of B).(F.(G.o1),F.(G.o3)) by A1,Th22
.= <^F.(G.o1),F.(G.o3)^> by ALTCAT_1:def 1;
Morph-Map(F,G.o1,G.o3) is Function of (the Arrows of A).[G.o1,G.o3],
((the Arrows of B)*the ObjectMap of F).[G.o1,G.o3] by A4,A22,PBOOLE:def 15;
then
A27: dom Morph-Map(F,G.o1,G.o3)
= (the Arrows of A).(G.o1,G.o3) by A16,A26,FUNCT_2:def 1
.= <^G.o1,G.o3^> by ALTCAT_1:def 1;
A28: ((the Arrows of A)*the ObjectMap of G).[o1,o3]
= (the Arrows of A).((the ObjectMap of H).(o1,o3)) by A24,FUNCT_1:13
.= (the Arrows of A).(G.o1,G.o3) by A2,Th22
.= <^G.o1,G.o3^> by ALTCAT_1:def 1;
the MorphMap of G is ManySortedFunction of
the Arrows of B,(the Arrows of A)*the ObjectMap of G by Def4;
then Morph-Map(G,o1,o3) is Function of (the Arrows of B).[o1,o3],
((the Arrows of A)*the ObjectMap of G).[o1,o3] by A23,PBOOLE:def 15;
then
A29: dom Morph-Map(G,o1,o3)
= (the Arrows of B).(o1,o3) by A15,A28,FUNCT_2:def 1
.= <^o1,o3^> by ALTCAT_1:def 1;
A30: Morph-Map(G,o1,o3)
= ff"".((the ObjectMap of G).(o1,o3)) by A3,A5,A24,FUNCT_1:13
.= ff"".[H.o1,H.o3] by A2,Th22
.= Morph-Map(F,G.o1,G.o3)" by A4,A8,A9,A22,MSUALG_3:def 4;
A31: the ObjectMap of F*H = (the ObjectMap of F)*the ObjectMap of H by Def36
.= (the ObjectMap of F)*(the ObjectMap of F)" by A1,Def38
.= id rng the ObjectMap of F by A7,FUNCT_1:39
.= id dom the ObjectMap of G by A3,A7,FUNCT_1:33
.= id[:the carrier of B,the carrier of B:] by FUNCT_2:def 1;
[o1,o1] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A32: (the ObjectMap of F*H).(o1,o1) = [o1,o1] by A31,FUNCT_1:18;
A33: F.(G.o1) = (F*H).o1 by Th33
.= o1 by A32;
[o2,o2] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A34: (the ObjectMap of F*H).(o2,o2) = [o2,o2] by A31,FUNCT_1:18;
A35: F.(G.o2) = (F*H).o2 by Th33
.= o2 by A34;
[o3,o3] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A36: (the ObjectMap of F*H).(o3,o3) = [o3,o3] by A31,FUNCT_1:18;
A37: F.(G.o3) = (F*H).o3 by Th33
.= o3 by A36;
Morph-Map(G,o1,o3).(g*f) in rng Morph-Map(G,o1,o3) by A14,A29,FUNCT_1:def 3;
then
A38: Morph-Map(G,o1,o3).(g*f) in dom Morph-Map(F,G.o1,G.o3) by A25,A30,
FUNCT_1:33;
Morph-Map(F,G.o1,G.o3).(Morph-Map(G,o1,o3).(g*f))
= Morph-Map(F,G.o1,G.o3).(g9*f9) by A1,A14,A19,A20,A21,A33,A35,A37,Th40;
hence thesis by A25,A27,A38;
end;
theorem Th43:
for A,B being transitive with_units non empty AltCatStr,
F being feasible reflexive FunctorStr over A,B st
F is bijective comp-reversing Contravariant coreflexive
holds F" is comp-reversing
proof
let A,B be transitive with_units non empty AltCatStr,
F be feasible reflexive FunctorStr over A,B such that
A1: F is bijective comp-reversing Contravariant coreflexive;
set G = F";
A2: G is Contravariant by A1,Th39;
reconsider H = G as feasible reflexive FunctorStr over B,A by A1,Th35,Th36;
A3: the ObjectMap of G = (the ObjectMap of F)" by A1,Def38;
consider ff being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F such that
A4: ff = the MorphMap of F and
A5: the MorphMap of G = ff""*(the ObjectMap of F)" by A1,Def38;
A6: F is injective by A1;
then F is one-to-one;
then
A7: the ObjectMap of F is one-to-one;
F is faithful by A6;
then
A8: the MorphMap of F is "1-1";
F is surjective by A1;
then F is full;
then
A9: ex f being ManySortedFunction of (the Arrows of A),
(the Arrows of B)*the ObjectMap of F st
f = the MorphMap of F & f is "onto";
let o1,o2,o3 be Object of B;
assume
A10: <^o1,o2^> <> {};
then
A11: <^H.o2,H.o1^> <> {} by A2,Def19;
assume
A12: <^o2,o3^> <> {};
then
A13: <^H.o3,H.o2^> <> {} by A2,Def19;
A14: <^o1,o3^> <> {} by A10,A12,ALTCAT_1:def 2;
then
A15: <^H.o3,H.o1^> <> {} by A2,Def19;
then
A16: <^F.(G.o1),F.(G.o3)^> <> {} by A1,Def19;
let f be Morphism of o1,o2, g be Morphism of o2,o3;
reconsider K = G as Contravariant FunctorStr over B,A by A1,Th39;
K.f = Morph-Map(K,o1,o2).f by A10,A11,Def16;
then reconsider f9 = Morph-Map(K,o1,o2).f as Morphism of G.o2,G.o1;
K.g = Morph-Map(K,o2,o3).g by A12,A13,Def16;
then reconsider g9 = Morph-Map(K,o2,o3).g as Morphism of G.o3,G.o2;
take f9,g9;
thus f9 = Morph-Map(G,o1,o2).f;
thus g9 = Morph-Map(G,o2,o3).g;
consider g99 being Morphism of F.(G.o2),F.(G.o3),
f99 being Morphism of F.(G.o1),F.(G.o2) such that
A17: g99 = Morph-Map(F,G.o3,G.o2).g9 and
A18: f99 = Morph-Map(F,G.o2,G.o1).f9 and
A19: Morph-Map(F,G.o3,G.o1).(f9*g9) = g99*f99 by A1,A11,A13;
A20: g = g99 by A1,A12,A17,Th41;
A21: f = f99 by A1,A10,A18,Th41;
A22: [G.o3,G.o1] in [:the carrier of A,the carrier of A:] by ZFMISC_1:87;
A23: [o1,o3] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A24: [o1,o3] in dom the ObjectMap of G by FUNCT_2:def 1;
dom the MorphMap of F = [:the carrier of A,the carrier of A:]
by PARTFUN1:def 2;
then [G.o3,G.o1] in dom the MorphMap of F by ZFMISC_1:87;
then
A25: Morph-Map(F,G.o3,G.o1) is one-to-one by A8;
[G.o3,G.o1] in dom the ObjectMap of F by A22,FUNCT_2:def 1;
then
A26: ((the Arrows of B)*the ObjectMap of F).[G.o3,G.o1]
= (the Arrows of B).((the ObjectMap of F).(G.o3,G.o1)) by FUNCT_1:13
.= (the Arrows of B).(F.(G.o1),F.(G.o3)) by A1,Th23
.= <^F.(G.o1),F.(G.o3)^> by ALTCAT_1:def 1;
Morph-Map(F,G.o3,G.o1) is Function of (the Arrows of A).[G.o3,G.o1],
((the Arrows of B)*the ObjectMap of F).[G.o3,G.o1] by A4,A22,PBOOLE:def 15;
then
A27: dom Morph-Map(F,G.o3,G.o1)
= (the Arrows of A).(G.o3,G.o1) by A16,A26,FUNCT_2:def 1
.= <^G.o3,G.o1^> by ALTCAT_1:def 1;
A28: ((the Arrows of A)*the ObjectMap of G).[o1,o3]
= (the Arrows of A).((the ObjectMap of H).(o1,o3)) by A24,FUNCT_1:13
.= (the Arrows of A).(G.o3,G.o1) by A2,Th23
.= <^G.o3,G.o1^> by ALTCAT_1:def 1;
the MorphMap of G is ManySortedFunction of
the Arrows of B,(the Arrows of A)*the ObjectMap of G by Def4;
then Morph-Map(G,o1,o3) is Function of (the Arrows of B).[o1,o3],
((the Arrows of A)*the ObjectMap of G).[o1,o3] by A23,PBOOLE:def 15;
then
A29: dom Morph-Map(G,o1,o3)
= (the Arrows of B).(o1,o3) by A15,A28,FUNCT_2:def 1
.= <^o1,o3^> by ALTCAT_1:def 1;
A30: Morph-Map(G,o1,o3)
= ff"".((the ObjectMap of G).(o1,o3)) by A3,A5,A24,FUNCT_1:13
.= ff"".[H.o3,H.o1] by A2,Th23
.= Morph-Map(F,G.o3,G.o1)" by A4,A8,A9,A22,MSUALG_3:def 4;
A31: the ObjectMap of F*H = (the ObjectMap of F)*the ObjectMap of H by Def36
.= (the ObjectMap of F)*(the ObjectMap of F)" by A1,Def38
.= id rng the ObjectMap of F by A7,FUNCT_1:39
.= id dom the ObjectMap of G by A3,A7,FUNCT_1:33
.= id[:the carrier of B,the carrier of B:] by FUNCT_2:def 1;
[o1,o1] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A32: (the ObjectMap of F*H).(o1,o1) = [o1,o1] by A31,FUNCT_1:18;
A33: F.(G.o1) = (F*H).o1 by Th33
.= o1 by A32;
[o2,o2] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A34: (the ObjectMap of F*H).(o2,o2) = [o2,o2] by A31,FUNCT_1:18;
A35: F.(G.o2) = (F*H).o2 by Th33
.= o2 by A34;
[o3,o3] in [:the carrier of B,the carrier of B:] by ZFMISC_1:87;
then
A36: (the ObjectMap of F*H).(o3,o3) = [o3,o3] by A31,FUNCT_1:18;
A37: F.(G.o3) = (F*H).o3 by Th33
.= o3 by A36;
Morph-Map(G,o1,o3).(g*f) in rng Morph-Map(G,o1,o3) by A14,A29,FUNCT_1:def 3;
then
A38: Morph-Map(G,o1,o3).(g*f) in dom Morph-Map(F,G.o3,G.o1) by A25,A30,
FUNCT_1:33;
Morph-Map(F,G.o3,G.o1).(Morph-Map(G,o1,o3).(g*f))
= Morph-Map(F,G.o3,G.o1).(f9*g9) by A1,A14,A19,A20,A21,A33,A35,A37,Th41;
hence thesis by A25,A27,A38;
end;
registration
let C1 be 1-sorted, C2 be non empty 1-sorted;
cluster Covariant -> reflexive for BimapStr over C1,C2;
coherence
proof
let M be BimapStr over C1,C2;
assume M is Covariant;
then the ObjectMap of M is Covariant;
then ex f being Function of the carrier of C1, the carrier of C2
st the ObjectMap of M = [:f,f:];
hence
(the ObjectMap of M).:id the carrier of C1 c= id the carrier of C2 by Th14;
end;
end;
registration
let C1 be 1-sorted, C2 be non empty 1-sorted;
cluster Contravariant -> reflexive for BimapStr over C1,C2;
coherence
proof
let M be BimapStr over C1,C2;
assume M is Contravariant;
then the ObjectMap of M is Contravariant;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A1: the ObjectMap of M = ~[:f,f:];
(~[:f,f:]).:id the carrier of C1 = [:f,f:].:id the carrier of C1 by Th3;
hence
(the ObjectMap of M).:id the carrier of C1 c= id the carrier of C2
by A1,Th14;
end;
end;
theorem Th44:
for C1,C2 being 1-sorted, M being BimapStr over C1,C2
st M is Covariant onto holds M is coreflexive
proof
let C1,C2 be 1-sorted;
let M be BimapStr over C1,C2;
assume
A1: M is Covariant onto;
then the ObjectMap of M is Covariant;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A2: the ObjectMap of M = [:f,f:];
the ObjectMap of M is onto by A1;
then f is onto by A2,Th4;
hence
id the carrier of C2 c= (the ObjectMap of M).:id the carrier of C1
by A2,Th11;
end;
theorem Th45:
for C1,C2 being 1-sorted, M being BimapStr over C1,C2
st M is Contravariant onto holds M is coreflexive
proof
let C1,C2 be 1-sorted;
let M be BimapStr over C1,C2;
assume
A1: M is Contravariant onto;
then the ObjectMap of M is Contravariant;
then consider f being Function of the carrier of C1, the carrier of C2
such that
A2: the ObjectMap of M = ~[:f,f:];
the ObjectMap of M is onto by A1;
then [:f,f:] is onto by A2,Th13;
then
A3: f is onto by Th4;
(the ObjectMap of M).:id the carrier of C1
= [:f,f:].:id the carrier of C1 by A2,Th3;
hence
id the carrier of C2 c= (the ObjectMap of M).:id the carrier of C1
by A3,Th11;
end;
registration
let C1 be transitive with_units non empty AltCatStr,
C2 be with_units non empty AltCatStr;
cluster covariant -> reflexive for Functor of C1,C2;
coherence;
end;
registration
let C1 be transitive with_units non empty AltCatStr,
C2 be with_units non empty AltCatStr;
cluster contravariant -> reflexive for Functor of C1,C2;
coherence;
end;
theorem Th46:
for C1 being transitive with_units non empty AltCatStr,
C2 being with_units non empty AltCatStr,
F being Functor of C1,C2 st F is covariant onto holds F is coreflexive
by Th44;
theorem Th47:
for C1 being transitive with_units non empty AltCatStr,
C2 being with_units non empty AltCatStr,
F being Functor of C1,C2 st F is contravariant onto holds F is coreflexive
by Th45;
theorem Th48:
for A,B being transitive with_units non empty AltCatStr,
F being covariant Functor of A,B st F is bijective
ex G being Functor of B,A st G = F" & G is bijective covariant
proof
let A,B be transitive with_units non empty AltCatStr,
F be covariant Functor of A,B;
assume
A1: F is bijective;
then F is injective;
then F is one-to-one;
then
A2: the ObjectMap of F is one-to-one;
A3: F is feasible by Def25;
then
A4: F" is bijective feasible by A1,Th35;
A5: F is id-preserving by Def25;
A6: F is comp-preserving by Def26;
F is surjective by A1;
then
A7: F is onto;
then
A8: the ObjectMap of F is onto;
A9: F is Covariant by Def26;
A10: F is coreflexive by A7,Th46;
A11: F" is Covariant proof F is Covariant by Def26;
then the ObjectMap of F is Covariant;
then consider f being Function of the carrier of A, the carrier of B
such that
A12: the ObjectMap of F = [:f,f:];
A13: f is one-to-one by A2,A12,Th7;
then
A14: dom(f") = rng f by FUNCT_1:33;
A15: rng(f") = dom f by A13,FUNCT_1:33;
A16: rng[:f,f:] = [:the carrier of B,the carrier of B:]
by A8,A12;
rng[:f,f:] = [:rng f,rng f:] by FUNCT_3:67;
then rng f = the carrier of B by A16,ZFMISC_1:92;
then reconsider g = f" as Function of the carrier of B, the carrier of A
by A14,A15,FUNCT_2:def 1,RELSET_1:4;
take g;
[:f,f:]" = [:g,g:] by A13,Th6;
hence thesis by A1,A12,Def38;
end;
A17: F" is id-preserving by A1,A3,A5,A10,Th37;
F" is comp-preserving by A1,A3,A6,A9,A10,Th42;
then reconsider G = F" as Functor of B,A by A4,A11,A17,Def25;
take G;
thus G = F";
thus G is bijective by A1,A3,Th35;
thus G is Covariant by A11;
thus thesis by A1,A3,A6,A9,A10,Th42;
end;
theorem Th49:
for A,B being transitive with_units non empty AltCatStr,
F being contravariant Functor of A,B st F is bijective
ex G being Functor of B,A st G = F" & G is bijective contravariant
proof
let A,B be transitive with_units non empty AltCatStr,
F be contravariant Functor of A,B;
assume
A1: F is bijective;
then F is injective;
then F is one-to-one;
then
A2: the ObjectMap of F is one-to-one;
A3: F is feasible by Def25;
then
A4: F" is bijective feasible by A1,Th35;
A5: F is id-preserving by Def25;
A6: F is comp-reversing by Def27;
F is surjective by A1;
then
A7: F is onto;
then
A8: the ObjectMap of F is onto;
A9: F is Contravariant by Def27;
A10: F is coreflexive by A7,Th47;
A11: F" is Contravariant proof F is Contravariant by Def27;
then the ObjectMap of F is Contravariant;
then consider f being Function of the carrier of A, the carrier of B
such that
A12: the ObjectMap of F = ~[:f,f:];
[:f,f:] is one-to-one by A2,A12,Th9;
then
A13: f is one-to-one by Th7;
then
A14: dom(f") = rng f by FUNCT_1:33;
A15: rng(f") = dom f by A13,FUNCT_1:33;
[:f,f:] is onto by A8,A12,Th13;
then
A16: rng[:f,f:] = [:the carrier of B,the carrier of B:];
rng[:f,f:] = [:rng f,rng f:] by FUNCT_3:67;
then rng f = the carrier of B by A16,ZFMISC_1:92;
then reconsider g = f" as Function of the carrier of B, the carrier of A
by A14,A15,FUNCT_2:def 1,RELSET_1:4;
take g;
A17: [:f,f:]" = [:g,g:] by A13,Th6;
thus the ObjectMap of F" = (the ObjectMap of F)" by A1,Def38
.= ~[:g,g:] by A12,A13,A17,Th10;
end;
A18: F" is id-preserving by A1,A3,A5,A10,Th37;
F" is comp-reversing by A1,A3,A6,A9,A10,Th43;
then reconsider G = F" as Functor of B,A by A4,A11,A18,Def25;
take G;
thus G = F";
thus G is bijective by A1,A3,Th35;
thus G is Contravariant by A11;
thus thesis by A1,A3,A6,A9,A10,Th43;
end;
definition
let A,B be transitive with_units non empty AltCatStr;
pred A,B are_isomorphic means
ex F being Functor of A,B st F is bijective covariant;
reflexivity
proof
let A be transitive with_units non empty AltCatStr;
take id A;
thus thesis;
end;
symmetry
proof
let A,B be transitive with_units non empty AltCatStr;
given F being Functor of A,B such that
A1: F is bijective covariant;
consider G being Functor of B,A such that G = F" and
A2: G is bijective covariant by A1,Th48;
take G;
thus thesis by A2;
end;
pred A,B are_anti-isomorphic means
ex F being Functor of A,B st F is bijective contravariant;
symmetry
proof
let A,B be transitive with_units non empty AltCatStr;
given F being Functor of A,B such that
A3: F is bijective contravariant;
consider G being Functor of B,A such that G = F" and
A4: G is bijective contravariant by A3,Th49;
take G;
thus thesis by A4;
end;
end;