@@ -5,16 +5,19 @@ module Categories.Category.Extensive where
5
5
-- https://ncatlab.org/nlab/show/extensive+category
6
6
7
7
open import Level
8
+ open import Function using (_$_)
8
9
9
- open import Categories.Category.Core
10
- open import Categories.Diagram.Pullback
11
- open import Categories.Category.Cocartesian
12
- open import Categories.Object.Coproduct
10
+ open import Categories.Category.Core using (Category)
11
+ open import Categories.Diagram.Pullback using (Pullback; IsPullback; up-to-iso)
12
+ open import Categories.Diagram.Pullback.Properties using (module IsoPb )
13
+ open import Categories.Category.Cocartesian using (Cocartesian)
14
+ open import Categories.Object.Coproduct using (IsCoproduct)
13
15
open import Categories.Morphism
16
+ import Categories.Morphism.Reasoning as MR
14
17
15
18
record Extensive {o ℓ e : Level} (𝒞 : Category o ℓ e) : Set (suc (o ⊔ ℓ ⊔ e)) where
16
19
open Category 𝒞
17
- open Pullback
20
+ open Pullback using (p₁)
18
21
19
22
field
20
23
cocartesian : Cocartesian 𝒞
@@ -32,13 +35,42 @@ record Extensive {o ℓ e : Level} (𝒞 : Category o ℓ e) : Set (suc (o ⊔
32
35
33
36
disjoint : ∀ {A B : Obj} → IsPullback 𝒞 ¡ ¡ (i₁ {A = A}{B = B}) i₂
34
37
35
-
36
-
37
-
38
-
39
-
40
-
41
-
42
-
43
-
38
+ -- a version with non-canonical pullbacks
39
+ module _ {A B C : Obj} {f : A ⇒ B + C} (pb₁ : Pullback 𝒞 f i₁) (pb₂ : Pullback 𝒞 f i₂) where
40
+ private
41
+ open IsCoproduct (pullback-of-cp-is-cp f)
42
+ open HomReasoning ; open MR 𝒞
43
+
44
+ open IsoPb 𝒞 (pullback₁ f) pb₁ renaming (P₀⇒P₁ to pb₁-to-can; p₁-≈ to p₁-≈₁)
45
+ open IsoPb 𝒞 (pullback₂ f) pb₂ renaming (P₀⇒P₁ to pb₂-to-can; p₁-≈ to p₁-≈₂)
46
+
47
+ can-to-pb₁ = _≅_.from $ up-to-iso 𝒞 pb₁ (pullback₁ f)
48
+ can-to-pb₂ = _≅_.from $ up-to-iso 𝒞 pb₂ (pullback₂ f)
49
+
50
+ pullback-of-cp-is-cp' : IsCoproduct 𝒞 (p₁ pb₁) (p₁ pb₂)
51
+
52
+ IsCoproduct.[_,_] pullback-of-cp-is-cp' g h = [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ]
53
+ IsCoproduct.inject₁ pullback-of-cp-is-cp' {_}{g}{h} = begin
54
+ [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ] ∘ p₁ pb₁ ≈˘⟨ refl⟩∘⟨ cancelʳ (Iso.isoˡ $ _≅_.iso $ up-to-iso 𝒞 pb₁ (pullback₁ f)) ⟩
55
+ [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ] ∘ (p₁ pb₁ ∘ pb₁-to-can) ∘ can-to-pb₁ ≈⟨ refl⟩∘⟨ p₁-≈₁ ⟩∘⟨refl ⟩
56
+ [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ] ∘ p₁ (pullback₁ f) ∘ can-to-pb₁ ≈⟨ pullˡ inject₁ ⟩
57
+ (g ∘ pb₁-to-can) ∘ can-to-pb₁ ≈⟨ cancelʳ (Iso.isoˡ $ _≅_.iso $ up-to-iso 𝒞 pb₁ (pullback₁ f)) ⟩
58
+ g ∎
59
+
60
+ IsCoproduct.inject₂ pullback-of-cp-is-cp' {_}{g}{h} = begin
61
+ [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ] ∘ p₁ pb₂ ≈˘⟨ refl⟩∘⟨ cancelʳ (Iso.isoˡ $ _≅_.iso $ up-to-iso 𝒞 pb₂ (pullback₂ f)) ⟩
62
+ [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ] ∘ (p₁ pb₂ ∘ pb₂-to-can) ∘ can-to-pb₂ ≈⟨ refl⟩∘⟨ p₁-≈₂ ⟩∘⟨refl ⟩
63
+ [ g ∘ pb₁-to-can , h ∘ pb₂-to-can ] ∘ p₁ (pullback₂ f) ∘ can-to-pb₂ ≈⟨ pullˡ inject₂ ⟩
64
+ (h ∘ pb₂-to-can) ∘ can-to-pb₂ ≈⟨ cancelʳ (Iso.isoˡ $ _≅_.iso $ up-to-iso 𝒞 pb₂ (pullback₂ f)) ⟩
65
+ h ∎
66
+
67
+ IsCoproduct.unique pullback-of-cp-is-cp' {_}{u}{g}{h} u∘p₁pb₁≈g u∘p₁pb₂≈h = unique
68
+ (begin
69
+ u ∘ p₁ (pullback₁ f) ≈˘⟨ pullʳ p₁-≈₁ ⟩
70
+ (u ∘ p₁ pb₁) ∘ pb₁-to-can ≈⟨ u∘p₁pb₁≈g ⟩∘⟨refl ⟩
71
+ g ∘ pb₁-to-can ∎)
72
+ (begin
73
+ u ∘ p₁ (pullback₂ f) ≈˘⟨ pullʳ p₁-≈₂ ⟩
74
+ (u ∘ p₁ pb₂) ∘ pb₂-to-can ≈⟨ u∘p₁pb₂≈h ⟩∘⟨refl ⟩
75
+ h ∘ pb₂-to-can ∎)
44
76
0 commit comments