Metamath Proof Explorer


Theorem cmddu

Description: The duality of limits and colimits: colimits of a diagram are limits of an opposite diagram in opposite categories. (Contributed by Zhi Wang, 20-Nov-2025)

Ref Expression
Hypotheses lmddu.o O = oppCat C
lmddu.p P = oppCat D
lmddu.g No typesetting found for |- G = ( oppFunc ` F ) with typecode |-
lmddu.c φ C V
lmddu.d φ D W
Assertion cmddu Could not format assertion : No typesetting found for |- ( ph -> ( ( C Colimit D ) ` F ) = ( ( O Limit P ) ` G ) ) with typecode |-

Proof

Step Hyp Ref Expression
1 lmddu.o O = oppCat C
2 lmddu.p P = oppCat D
3 lmddu.g Could not format G = ( oppFunc ` F ) : No typesetting found for |- G = ( oppFunc ` F ) with typecode |-
4 lmddu.c φ C V
5 lmddu.d φ D W
6 relup Could not format Rel ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) : No typesetting found for |- Rel ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) with typecode |-
7 relup Could not format Rel ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) : No typesetting found for |- Rel ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) with typecode |-
8 simpr Could not format ( ( ph /\ x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) -> x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) : No typesetting found for |- ( ( ph /\ x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) -> x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) with typecode |-
9 8 up1st2nd Could not format ( ( ph /\ x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) -> x ( <. ( 1st ` ( C DiagFunc D ) ) , ( 2nd ` ( C DiagFunc D ) ) >. ( C UP ( D FuncCat C ) ) F ) m ) : No typesetting found for |- ( ( ph /\ x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) -> x ( <. ( 1st ` ( C DiagFunc D ) ) , ( 2nd ` ( C DiagFunc D ) ) >. ( C UP ( D FuncCat C ) ) F ) m ) with typecode |-
10 eqid D FuncCat C = D FuncCat C
11 10 fucbas D Func C = Base D FuncCat C
12 9 11 uprcl3 Could not format ( ( ph /\ x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) -> F e. ( D Func C ) ) : No typesetting found for |- ( ( ph /\ x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m ) -> F e. ( D Func C ) ) with typecode |-
13 5 adantr Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> D e. W ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> D e. W ) with typecode |-
14 4 adantr Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> C e. V ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> C e. V ) with typecode |-
15 eqid oppCat P = oppCat P
16 eqid oppCat O = oppCat O
17 2 fvexi P V
18 17 a1i Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> P e. _V ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> P e. _V ) with typecode |-
19 1 fvexi O V
20 19 a1i Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> O e. _V ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> O e. _V ) with typecode |-
21 simpr Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) with typecode |-
22 21 up1st2nd Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> x ( <. ( 1st ` ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ) , ( 2nd ` ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ) >. ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> x ( <. ( 1st ` ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ) , ( 2nd ` ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ) >. ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) with typecode |-
23 eqid oppCat P FuncCat oppCat O = oppCat P FuncCat oppCat O
24 23 fucbas oppCat P Func oppCat O = Base oppCat P FuncCat oppCat O
25 22 24 uprcl3 Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> ( oppFunc ` G ) e. ( ( oppCat ` P ) Func ( oppCat ` O ) ) ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> ( oppFunc ` G ) e. ( ( oppCat ` P ) Func ( oppCat ` O ) ) ) with typecode |-
26 15 16 18 20 25 funcoppc5 Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> G e. ( P Func O ) ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> G e. ( P Func O ) ) with typecode |-
27 3 26 eqeltrrid Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> ( oppFunc ` F ) e. ( P Func O ) ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> ( oppFunc ` F ) e. ( P Func O ) ) with typecode |-
28 2 1 13 14 27 funcoppc5 Could not format ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> F e. ( D Func C ) ) : No typesetting found for |- ( ( ph /\ x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) -> F e. ( D Func C ) ) with typecode |-
29 1 2oppchomf Hom 𝑓 C = Hom 𝑓 oppCat O
30 29 a1i F D Func C Hom 𝑓 C = Hom 𝑓 oppCat O
31 1 2oppccomf comp 𝑓 C = comp 𝑓 oppCat O
32 31 a1i F D Func C comp 𝑓 C = comp 𝑓 oppCat O
33 2 2oppchomf Hom 𝑓 D = Hom 𝑓 oppCat P
34 33 a1i F D Func C Hom 𝑓 D = Hom 𝑓 oppCat P
35 2 2oppccomf comp 𝑓 D = comp 𝑓 oppCat P
36 35 a1i F D Func C comp 𝑓 D = comp 𝑓 oppCat P
37 funcrcl F D Func C D Cat C Cat
38 37 simpld F D Func C D Cat
39 2 oppccat D Cat P Cat
40 15 oppccat P Cat oppCat P Cat
41 38 39 40 3syl F D Func C oppCat P Cat
42 37 simprd F D Func C C Cat
43 1 oppccat C Cat O Cat
44 16 oppccat O Cat oppCat O Cat
45 42 43 44 3syl F D Func C oppCat O Cat
46 34 36 30 32 38 41 42 45 fucpropd F D Func C D FuncCat C = oppCat P FuncCat oppCat O
47 46 fveq2d F D Func C Hom 𝑓 D FuncCat C = Hom 𝑓 oppCat P FuncCat oppCat O
48 46 fveq2d F D Func C comp 𝑓 D FuncCat C = comp 𝑓 oppCat P FuncCat oppCat O
49 10 38 42 fuccat F D Func C D FuncCat C Cat
50 46 49 eqeltrrd F D Func C oppCat P FuncCat oppCat O Cat
51 30 32 47 48 42 45 49 50 uppropd Could not format ( F e. ( D Func C ) -> ( C UP ( D FuncCat C ) ) = ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ) : No typesetting found for |- ( F e. ( D Func C ) -> ( C UP ( D FuncCat C ) ) = ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ) with typecode |-
52 30 32 34 36 42 45 38 41 diagpropd F D Func C C Δ func D = oppCat O Δ func oppCat P
53 id F D Func C F D Func C
54 2 1 53 oppfoppc2 Could not format ( F e. ( D Func C ) -> ( oppFunc ` F ) e. ( P Func O ) ) : No typesetting found for |- ( F e. ( D Func C ) -> ( oppFunc ` F ) e. ( P Func O ) ) with typecode |-
55 3 54 eqeltrid F D Func C G P Func O
56 relfunc Rel P Func O
57 55 56 3 2oppf Could not format ( F e. ( D Func C ) -> ( oppFunc ` G ) = F ) : No typesetting found for |- ( F e. ( D Func C ) -> ( oppFunc ` G ) = F ) with typecode |-
58 57 eqcomd Could not format ( F e. ( D Func C ) -> F = ( oppFunc ` G ) ) : No typesetting found for |- ( F e. ( D Func C ) -> F = ( oppFunc ` G ) ) with typecode |-
59 51 52 58 oveq123d Could not format ( F e. ( D Func C ) -> ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) = ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) ) : No typesetting found for |- ( F e. ( D Func C ) -> ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) = ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) ) with typecode |-
60 59 breqd Could not format ( F e. ( D Func C ) -> ( x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m <-> x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) ) : No typesetting found for |- ( F e. ( D Func C ) -> ( x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m <-> x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) ) with typecode |-
61 12 28 60 pm5.21nd Could not format ( ph -> ( x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m <-> x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) ) : No typesetting found for |- ( ph -> ( x ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) m <-> x ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) m ) ) with typecode |-
62 6 7 61 eqbrrdiv Could not format ( ph -> ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) = ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) ) : No typesetting found for |- ( ph -> ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) = ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) ) with typecode |-
63 cmdfval2 Could not format ( ( C Colimit D ) ` F ) = ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) : No typesetting found for |- ( ( C Colimit D ) ` F ) = ( ( C DiagFunc D ) ( C UP ( D FuncCat C ) ) F ) with typecode |-
64 cmdfval2 Could not format ( ( ( oppCat ` O ) Colimit ( oppCat ` P ) ) ` ( oppFunc ` G ) ) = ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) : No typesetting found for |- ( ( ( oppCat ` O ) Colimit ( oppCat ` P ) ) ` ( oppFunc ` G ) ) = ( ( ( oppCat ` O ) DiagFunc ( oppCat ` P ) ) ( ( oppCat ` O ) UP ( ( oppCat ` P ) FuncCat ( oppCat ` O ) ) ) ( oppFunc ` G ) ) with typecode |-
65 62 63 64 3eqtr4g Could not format ( ph -> ( ( C Colimit D ) ` F ) = ( ( ( oppCat ` O ) Colimit ( oppCat ` P ) ) ` ( oppFunc ` G ) ) ) : No typesetting found for |- ( ph -> ( ( C Colimit D ) ` F ) = ( ( ( oppCat ` O ) Colimit ( oppCat ` P ) ) ` ( oppFunc ` G ) ) ) with typecode |-
66 eqid Could not format ( oppFunc ` G ) = ( oppFunc ` G ) : No typesetting found for |- ( oppFunc ` G ) = ( oppFunc ` G ) with typecode |-
67 19 a1i φ O V
68 17 a1i φ P V
69 16 15 66 67 68 lmddu Could not format ( ph -> ( ( O Limit P ) ` G ) = ( ( ( oppCat ` O ) Colimit ( oppCat ` P ) ) ` ( oppFunc ` G ) ) ) : No typesetting found for |- ( ph -> ( ( O Limit P ) ` G ) = ( ( ( oppCat ` O ) Colimit ( oppCat ` P ) ) ` ( oppFunc ` G ) ) ) with typecode |-
70 65 69 eqtr4d Could not format ( ph -> ( ( C Colimit D ) ` F ) = ( ( O Limit P ) ` G ) ) : No typesetting found for |- ( ph -> ( ( C Colimit D ) ` F ) = ( ( O Limit P ) ` G ) ) with typecode |-