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 |-