Skip to content

Commit 98e5dbb

Browse files
Merge pull request #384 from agda/sergey-goncharov-patch-1
Update Extensive.agda
2 parents d5e0057 + bf179e8 commit 98e5dbb

File tree

1 file changed

+46
-14
lines changed

1 file changed

+46
-14
lines changed

src/Categories/Category/Extensive.agda

Lines changed: 46 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,19 @@ module Categories.Category.Extensive where
55
-- https://ncatlab.org/nlab/show/extensive+category
66

77
open import Level
8+
open import Function using (_$_)
89

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)
1315
open import Categories.Morphism
16+
import Categories.Morphism.Reasoning as MR
1417

1518
record Extensive {o ℓ e : Level} (𝒞 : Category o ℓ e) : Set (suc (o ⊔ ℓ ⊔ e)) where
1619
open Category 𝒞
17-
open Pullback
20+
open Pullback using (p₁)
1821

1922
field
2023
cocartesian : Cocartesian 𝒞
@@ -32,13 +35,42 @@ record Extensive {o ℓ e : Level} (𝒞 : Category o ℓ e) : Set (suc (o ⊔
3235

3336
disjoint : {A B : Obj} IsPullback 𝒞 ¡ ¡ (i₁ {A = A}{B = B}) i₂
3437

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 ∎)
4476

0 commit comments

Comments
 (0)