:: Miscellaneous Facts about Functors
:: by Grzegorz Bancerek
::
:: Received July 31, 2001
:: Copyright (c) 2001-2018 Association of Mizar Users
:: (Stowarzyszenie Uzytkownikow Mizara, Bialystok, Poland).
:: This code can be distributed under the GNU General Public Licence
:: version 3.0 or later, or the Creative Commons Attribution-ShareAlike
:: License version 3.0 or later, subject to the binding interpretation
:: detailed in file COPYING.interpretation.
:: See COPYING.GPL and COPYING.CC-BY-SA for the full text of these
:: licenses, or see http://www.gnu.org/licenses/gpl.html and
:: http://creativecommons.org/licenses/by-sa/3.0/.
environ
vocabularies RELAT_2, ALTCAT_1, XBOOLE_0, MSUALG_6, FUNCTOR0, FUNCT_2,
FUNCT_1, RELAT_1, CAT_1, ENS_1, PARTFUN1, ZFMISC_1, STRUCT_0, YELLOW18,
SETFAM_1, PBOOLE, ALTCAT_2, TARSKI, SUBSET_1, REALSET1, FUNCOP_1,
FUNCT_3, MCART_1, MSUALG_3, WELLORD1, ARYTM_0, YELLOW20, SETLIM_2;
notations TARSKI, XBOOLE_0, ZFMISC_1, XTUPLE_0, RELAT_1, RELSET_1, FUNCT_1,
FUNCT_2, MCART_1, BINOP_1, REALSET1, MULTOP_1, PBOOLE, STRUCT_0, FUNCT_4,
PARTFUN1, FUNCOP_1, MSUALG_3, FUNCT_3, ALTCAT_1, ALTCAT_2, FUNCTOR0,
FUNCTOR3, YELLOW18;
constructors REALSET1, MSUALG_3, FUNCTOR3, YELLOW18, RELSET_1, XTUPLE_0;
registrations SUBSET_1, RELAT_1, FUNCT_1, FUNCOP_1, PBOOLE, STRUCT_0,
ALTCAT_2, FUNCTOR0, FUNCTOR2, ALTCAT_4, YELLOW18, RELSET_1, XTUPLE_0;
requirements SUBSET, BOOLE;
begin :: Reverse functors
reserve x,y for set;
theorem :: YELLOW20:1
for A,B being transitive with_units non empty AltCatStr for F
being feasible reflexive FunctorStr over A,B st F is coreflexive bijective for
a being Object of A, b being Object of B holds F.a = b iff F".b = a;
theorem :: YELLOW20:2
for A,B being transitive with_units non empty AltCatStr for F
being Covariant feasible FunctorStr over A,B for G being Covariant feasible
FunctorStr over B,A st F is bijective & G = F" for a1,a2 being Object of A st
<^a1,a2^> <> {} for f being Morphism of a1,a2, g being Morphism of F.a1, F.a2
holds F.f = g iff G.g = f;
theorem :: YELLOW20:3
for A,B being transitive with_units non empty AltCatStr for F
being Contravariant feasible FunctorStr over A,B for G being Contravariant
feasible FunctorStr over B,A st F is bijective & G = F" for a1,a2 being Object
of A st <^a1,a2^> <> {} for f being Morphism of a1,a2, g being Morphism of F.a2
, F.a1 holds F.f = g iff G.g = f;
theorem :: YELLOW20:4
for A,B being category, F being Functor of A,B st F is bijective
for G being Functor of B,A st F*G = id B holds the FunctorStr of G = F";
theorem :: YELLOW20:5
for A,B being category, F being Functor of A,B st F is bijective
for G being Functor of B,A st G*F = id A holds the FunctorStr of G = F";
theorem :: YELLOW20:6
for A,B being category, F being covariant Functor of A,B st F is
bijective for G being covariant Functor of B,A st (for b being Object of B
holds F.(G.b) = b) & (for a,b being Object of B st <^a,b^> <> {} for f being
Morphism of a,b holds F.(G.f) = f) holds the FunctorStr of G = F";
theorem :: YELLOW20:7
for A,B being category, F being contravariant Functor of A,B st F is
bijective for G being contravariant Functor of B,A st (for b being Object of B
holds F.(G.b) = b) & (for a,b being Object of B st <^a,b^> <> {} for f being
Morphism of a,b holds F.(G.f) = f) holds the FunctorStr of G = F";
theorem :: YELLOW20:8
for A,B being category, F being covariant Functor of A,B st F is
bijective for G being covariant Functor of B,A st (for a being Object of A
holds G.(F.a) = a) & (for a,b being Object of A st <^a,b^> <> {} for f being
Morphism of a,b holds G.(F.f) = f) holds the FunctorStr of G = F";
theorem :: YELLOW20:9
for A,B being category, F being contravariant Functor of A,B st F is
bijective for G being contravariant Functor of B,A st (for a being Object of A
holds G.(F.a) = a) & (for a,b being Object of A st <^a,b^> <> {} for f being
Morphism of a,b holds G.(F.f) = f) holds the FunctorStr of G = F";
begin :: Intersection of categories
definition
let A, B be AltCatStr;
pred A, B have_the_same_composition means
:: YELLOW20:def 1
for a1, a2, a3 being object
holds (the Comp of A).[a1,a2,a3] tolerates (the Comp of B).[a1,a2,a3];
symmetry;
end;
theorem :: YELLOW20:10
for A, B being AltCatStr holds A,B have_the_same_composition iff
for a1,a2,a3,x being object
st x in dom ((the Comp of A).[a1,a2,a3]) & x in dom ((
the Comp of B).[a1,a2,a3]) holds ((the Comp of A).[a1,a2,a3]).x = ((the Comp of
B).[a1,a2,a3]).x;
theorem :: YELLOW20:11
for A, B being transitive non empty AltCatStr holds A,B
have_the_same_composition iff for a1,a2,a3 being Object of A st <^a1,a2^> <> {}
& <^a2,a3^> <> {} for b1,b2,b3 being Object of B st <^b1,b2^> <> {} & <^b2,b3^>
<> {} & b1 = a1 & b2 = a2 & b3 = a3 for f1 being Morphism of a1,a2, g1 being
Morphism of b1,b2 st g1 = f1 for f2 being Morphism of a2,a3, g2 being Morphism
of b2,b3 st g2 = f2 holds f2 * f1 = g2 * g1;
theorem :: YELLOW20:12
for A, B being para-functional semi-functional category holds A, B
have_the_same_composition;
definition
let f, g be Function;
func Intersect(f, g) -> Function means
:: YELLOW20:def 2
dom it = (dom f) /\ (dom g) &
for x being object st x in (dom f) /\ (dom g) holds it.x = (f.x) /\ (g.x);
commutativity;
end;
theorem :: YELLOW20:13
for I being set, A,B being ManySortedSet of I
holds Intersect(A, B) = A (/\) B;
theorem :: YELLOW20:14
for I,J being set for A being ManySortedSet of I, B being
ManySortedSet of J holds Intersect(A, B) is ManySortedSet of I /\ J;
theorem :: YELLOW20:15
for I,J being set for A being ManySortedSet of I, B being
Function for C being ManySortedSet of J st C = Intersect(A, B) holds C cc= A;
theorem :: YELLOW20:16
for I1,I2 being set for A1,B1 being ManySortedSet of I1 for A2,
B2 being ManySortedSet of I2 for A,B being ManySortedSet of I1 /\ I2 st A =
Intersect(A1, A2) & B = Intersect(B1, B2) for F being ManySortedFunction of A1,
B1 for G being ManySortedFunction of A2,B2 st for x being set st x in dom F & x
in dom G holds F.x tolerates G.x holds Intersect(F, G) is ManySortedFunction of
A, B;
theorem :: YELLOW20:17
for I,J being set for F being ManySortedSet of [:I,I:] for G
being ManySortedSet of [:J,J:] ex H being ManySortedSet of [:I/\J,I/\J:] st H =
Intersect(F, G) & Intersect({|F|}, {|G|}) = {|H|};
theorem :: YELLOW20:18
for I,J being set for F1,F2 being ManySortedSet of [:I,I:] for
G1,G2 being ManySortedSet of [:J,J:] ex H1,H2 being ManySortedSet of [:I/\J,I/\
J:] st H1 = Intersect(F1, G1) & H2 = Intersect(F2, G2) & Intersect({|F1,F2|},
{|G1,G2|}) = {|H1, H2|};
definition
let A, B be AltCatStr such that
A, B have_the_same_composition;
func Intersect(A, B) -> strict AltCatStr means
:: YELLOW20:def 3
the carrier of it = (
the carrier of A) /\ (the carrier of B) & the Arrows of it = Intersect(the
Arrows of A, the Arrows of B) & the Comp of it = Intersect(the Comp of A, the
Comp of B);
end;
theorem :: YELLOW20:19
for A, B being AltCatStr st A, B have_the_same_composition holds
Intersect(A, B) = Intersect(B, A);
theorem :: YELLOW20:20
for A, B being AltCatStr st A, B have_the_same_composition holds
Intersect(A, B) is SubCatStr of A;
theorem :: YELLOW20:21
for A, B being AltCatStr st A, B have_the_same_composition for
a1,a2 being Object of A, b1,b2 being Object of B for o1, o2 being Object of
Intersect(A, B) st o1 = a1 & o1 = b1 & o2 = a2 & o2 = b2 holds <^o1,o2^> = <^a1
,a2^> /\ <^b1,b2^>;
theorem :: YELLOW20:22
for A, B being transitive AltCatStr st A, B
have_the_same_composition holds Intersect(A, B) is transitive;
theorem :: YELLOW20:23
for A, B being AltCatStr st A, B have_the_same_composition for
a1,a2 being Object of A, b1,b2 being Object of B for o1,o2 being Object of
Intersect(A, B) st o1 = a1 & o1 = b1 & o2 = a2 & o2 = b2 & <^a1,a2^> <> {} & <^
b1,b2^> <> {} for f being Morphism of a1,a2, g being Morphism of b1,b2 st f = g
holds f in <^o1,o2^>;
theorem :: YELLOW20:24
for A, B being with_units non empty AltCatStr st A, B
have_the_same_composition for a being Object of A, b being Object of B for o
being Object of Intersect(A, B) st o = a & o = b & idm a = idm b holds idm a in
<^o,o^>;
theorem :: YELLOW20:25
for A, B being category st A, B have_the_same_composition & Intersect(
A,B) is non empty & for a being Object of A, b being Object of B st a = b holds
idm a = idm b holds Intersect(A, B) is subcategory of A;
begin :: Subcategories
scheme :: YELLOW20:sch 1
SubcategoryUniq { A() -> category, B1, B2() -> non empty subcategory of A(),
P[set], Q[set,set,set]}: the AltCatStr of B1() = the AltCatStr of B2()
provided
for a being Object of A() holds a is Object of B1() iff P[a] and
for a,b being Object of A(), a9,b9 being Object of B1() st a9 = a &
b9 = b & <^a,b^> <> {} for f being Morphism of a,b holds f in <^a9,b9^> iff Q[a
,b,f] and
for a being Object of A() holds a is Object of B2() iff P[a] and
for a,b being Object of A(), a9,b9 being Object of B2() st a9 = a &
b9 = b & <^a,b^> <> {} for f being Morphism of a,b holds f in <^a9,b9^> iff Q[a
,b,f];
theorem :: YELLOW20:26
for A being non empty AltCatStr, B being non empty SubCatStr of
A holds B is full iff for a1,a2 being Object of A, b1,b2 being Object of B st
b1 = a1 & b2 = a2 holds <^b1,b2^> = <^a1,a2^>;
scheme :: YELLOW20:sch 2
FullSubcategoryEx { A() -> category, P[set]}: ex B being strict full non
empty subcategory of A() st for a being Object of A() holds a is Object of B
iff P[a]
provided
ex a being Object of A() st P[a];
scheme :: YELLOW20:sch 3
FullSubcategoryUniq { A() -> category, B1, B2() -> full non empty
subcategory of A(), P[set]}: the AltCatStr of B1() = the AltCatStr of B2()
provided
for a being Object of A() holds a is Object of B1() iff P[a] and
for a being Object of A() holds a is Object of B2() iff P[a];
begin :: Inclusion functors and functor restrictions
registration
let f be Function-yielding Function;
let x,y be set;
cluster f.(x,y) -> Relation-like Function-like;
end;
theorem :: YELLOW20:27
for A being category, C being non empty subcategory of A for a,b
being Object of C st <^a,b^> <> {} for f being Morphism of a,b holds (incl C).f
= f;
registration
let A be category;
let C be non empty subcategory of A;
cluster incl C -> id-preserving comp-preserving;
end;
registration
let A be category;
let C be non empty subcategory of A;
cluster incl C -> Covariant;
end;
definition
let A be category;
let C be non empty subcategory of A;
redefine func incl C -> strict covariant Functor of C,A;
end;
definition
let A,B be category;
let C be non empty subcategory of A;
let F be covariant Functor of A,B;
redefine func F|C -> strict covariant Functor of C,B;
end;
definition
let A,B be category;
let C be non empty subcategory of A;
let F be contravariant Functor of A,B;
redefine func F|C -> strict contravariant Functor of C,B;
end;
theorem :: YELLOW20:28
for A,B being category, C being non empty subcategory of A for F
being FunctorStr over A,B for a being Object of A, c being Object of C st c = a
holds (F|C).c = F.a;
theorem :: YELLOW20:29
for A,B being category, C being non empty subcategory of A for F
being covariant Functor of A,B for a,b being Object of A, c,d being Object of C
st c = a & d = b & <^c,d^> <> {} for f being Morphism of a,b for g being
Morphism of c,d st g = f holds (F|C).g = F.f;
theorem :: YELLOW20:30
for A,B being category, C being non empty subcategory of A for F
being contravariant Functor of A,B for a,b being Object of A, c,d being Object
of C st c = a & d = b & <^c,d^> <> {} for f being Morphism of a,b for g being
Morphism of c,d st g = f holds (F|C).g = F.f;
theorem :: YELLOW20:31
for A,B being non empty AltGraph for F being BimapStr over A,B
st F is Covariant one-to-one for a,b being Object of A st F.a = F.b holds a = b
;
theorem :: YELLOW20:32
for A,B being non empty reflexive AltGraph for F being feasible
Covariant FunctorStr over A,B st F is faithful for a,b being Object of A st <^a
,b^> <> {} for f,g being Morphism of a,b st F.f = F.g holds f = g;
theorem :: YELLOW20:33
for A,B being non empty AltGraph for F being Covariant
FunctorStr over A,B st F is surjective for a,b being Object of B st <^a,b^> <>
{} for f being Morphism of a,b ex c,d being Object of A, g being Morphism of c,
d st a = F.c & b = F.d & <^c,d^> <> {} & f = F.g;
theorem :: YELLOW20:34
for A,B being non empty AltGraph for F being BimapStr over A,B
st F is Contravariant one-to-one for a,b being Object of A st F.a = F.b holds a
= b;
theorem :: YELLOW20:35
for A,B being non empty reflexive AltGraph for F being feasible
Contravariant FunctorStr over A,B st F is faithful for a,b being Object of A st
<^a,b^> <> {} for f,g being Morphism of a,b st F.f = F.g holds f = g;
theorem :: YELLOW20:36
for A,B being non empty AltGraph for F being Contravariant
FunctorStr over A,B st F is surjective for a,b being Object of B st <^a,b^> <>
{} for f being Morphism of a,b ex c,d being Object of A, g being Morphism of c,
d st b = F.c & a = F.d & <^c,d^> <> {} & f = F.g;
begin :: Isomorphisms under arbitrary functor
definition
let A,B be category;
let F be FunctorStr over A,B;
let A9, B9 be category;
pred A9,B9 are_isomorphic_under F means
:: YELLOW20:def 4
A9 is subcategory of A & B9 is
subcategory of B & ex G being covariant Functor of A9,B9 st G is bijective & (
for a9 being Object of A9, a being Object of A st a9 = a holds G.a9 = F.a) &
for b9,c9 being Object of A9, b,c being Object of A st <^b9,c9^> <> {} & b9 = b
& c9 = c for f9 being Morphism of b9,c9, f being Morphism of b,c st f9 = f
holds G.f9 = Morph-Map(F,b,c).f;
pred A9,B9 are_anti-isomorphic_under F means
:: YELLOW20:def 5
A9 is subcategory of A & B9 is
subcategory of B & ex G being contravariant Functor of A9,B9 st G is bijective
& (for a9 being Object of A9, a being Object of A st a9 = a holds G.a9 = F.a) &
for b9,c9 being Object of A9, b,c being Object of A st <^b9,c9^> <> {} & b9 = b
& c9 = c for f9 being Morphism of b9,c9, f being Morphism of b,c st f9 = f
holds G.f9 = Morph-Map(F,b,c).f;
end;
theorem :: YELLOW20:37
for A,B, A1, B1 being category, F being FunctorStr over A,B st A1, B1
are_isomorphic_under F holds A1, B1 are_isomorphic;
theorem :: YELLOW20:38
for A,B, A1, B1 being category, F being FunctorStr over A,B st A1, B1
are_anti-isomorphic_under F holds A1, B1 are_anti-isomorphic;
theorem :: YELLOW20:39
for A,B being category, F being covariant Functor of A,B st A, B
are_isomorphic_under F holds F is bijective;
theorem :: YELLOW20:40
for A,B being category, F being contravariant Functor of A,B st A, B
are_anti-isomorphic_under F holds F is bijective;
theorem :: YELLOW20:41
for A,B being category, F being covariant Functor of A,B st F is
bijective holds A, B are_isomorphic_under F;
theorem :: YELLOW20:42
for A,B being category, F being contravariant Functor of A,B st F is
bijective holds A, B are_anti-isomorphic_under F;
theorem :: YELLOW20:43
for A being category, B being non empty subcategory of A holds B,B
are_isomorphic_under id A;
theorem :: YELLOW20:44
for f, g being Function st f c= g holds ~f c= ~g;
theorem :: YELLOW20:45
for f, g being Function st dom f is Relation & ~f c= ~g holds f c= g;
theorem :: YELLOW20:46
for I, J being set for A being ManySortedSet of [:I,I:], B being
ManySortedSet of [:J,J:] st A cc= B holds ~A cc= ~B;
theorem :: YELLOW20:47
for A being transitive non empty AltCatStr for B being
transitive non empty SubCatStr of A holds B opp is SubCatStr of A opp;
theorem :: YELLOW20:48
for A being category, B being non empty subcategory of A holds B
opp is subcategory of A opp;
theorem :: YELLOW20:49
for A being category, B being non empty subcategory of A holds B,B opp
are_anti-isomorphic_under dualizing-func(A, A opp);
theorem :: YELLOW20:50
for A1,A2 being category, F being covariant Functor of A1,A2 st F is
bijective for B1 being non empty subcategory of A1 for B2 being non empty
subcategory of A2 st B1,B2 are_isomorphic_under F holds B2,B1
are_isomorphic_under F";
theorem :: YELLOW20:51
for A1,A2 being category, F being contravariant Functor of A1,A2 st F
is bijective for B1 being non empty subcategory of A1 for B2 being non empty
subcategory of A2 st B1,B2 are_anti-isomorphic_under F holds B2,B1
are_anti-isomorphic_under F";
theorem :: YELLOW20:52
for A1,A2,A3 being category for F being covariant Functor of A1,A2 for
G being covariant Functor of A2,A3 for B1 being non empty subcategory of A1 for
B2 being non empty subcategory of A2 for B3 being non empty subcategory of A3
st B1,B2 are_isomorphic_under F & B2,B3 are_isomorphic_under G holds B1,B3
are_isomorphic_under G*F;
theorem :: YELLOW20:53
for A1,A2,A3 being category for F being contravariant Functor of A1,A2
for G being covariant Functor of A2,A3 for B1 being non empty subcategory of A1
for B2 being non empty subcategory of A2 for B3 being non empty subcategory of
A3 st B1,B2 are_anti-isomorphic_under F & B2,B3 are_isomorphic_under G holds B1
,B3 are_anti-isomorphic_under G*F;
theorem :: YELLOW20:54
for A1,A2,A3 being category for F being covariant Functor of A1,A2 for
G being contravariant Functor of A2,A3 for B1 being non empty subcategory of A1
for B2 being non empty subcategory of A2 for B3 being non empty subcategory of
A3 st B1,B2 are_isomorphic_under F & B2,B3 are_anti-isomorphic_under G holds B1
,B3 are_anti-isomorphic_under G*F;
theorem :: YELLOW20:55
for A1,A2,A3 being category for F being contravariant Functor of A1,A2
for G being contravariant Functor of A2,A3 for B1 being non empty subcategory
of A1 for B2 being non empty subcategory of A2 for B3 being non empty
subcategory of A3 st B1,B2 are_anti-isomorphic_under F & B2,B3
are_anti-isomorphic_under G holds B1,B3 are_isomorphic_under G*F;
theorem :: YELLOW20:56
for A1, A2 be non empty category, F be covariant Functor of A1, A2,
B1 be non empty subcategory of A1, B2 be non empty subcategory of A2 st
F is bijective &
(for a being Object of A1 holds a is Object of B1 iff F.a is Object of B2) &
(for a,b being Object of A1 st <^a,b^> <> {} for a1,b1 being Object
of B1 st a1 = a & b1 = b for a2,b2 being Object of B2 st a2 = F.a & b2 =
F.b for f being Morphism of a,b holds f in <^a1,b1^> iff F.f in <^a2,b2^>)
holds B1, B2 are_isomorphic_under F;
theorem :: YELLOW20:57
for A1, A2 be non empty category, F be contravariant Functor of A1,A2,
B1 be non empty subcategory of A1, B2 be non empty subcategory of A2 st
F is bijective &
(for a being Object of A1 holds a is Object of B1 iff
F.a is Object of B2) &
(for a,b being Object of A1 st <^a,b^> <> {} for a1,b1 being Object
of B1 st a1 = a & b1 = b for a2,b2 being Object of B2 st a2 = F.a &
b2 = F.b
for f being Morphism of a,b holds f in <^a1,b1^> iff F.f in <^b2,a2^>)
holds B1, B2 are_anti-isomorphic_under F;