Skip to content

Commit deda1db

Browse files
Merge pull request #505 from djlowther/2-product-fix
Bicategory.Object.Product improvements
2 parents d656745 + 5bc227e commit deda1db

File tree

1 file changed

+80
-2
lines changed

1 file changed

+80
-2
lines changed

src/Categories/Bicategory/Object/Product.agda

Lines changed: 80 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,28 @@ open import Categories.Bicategory using (Bicategory)
44
module Categories.Bicategory.Object.Product {o ℓ e t} (𝒞 : Bicategory o ℓ e t) where
55

66
open import Level
7+
open import Data.Product using (_,_; uncurry; uncurry′)
78

8-
open Bicategory 𝒞
9+
open import Categories.Bicategory.Extras 𝒞
910
open import Categories.Category using (_[_,_])
11+
open import Categories.Category.Equivalence using (StrongEquivalence)
12+
open import Categories.Category.Product using (_※_; _※ⁿⁱ_; πˡ; πʳ) renaming (Product to CatProduct)
13+
open import Categories.Functor using (_∘F_) renaming (id to idF)
14+
open import Categories.Functor.Bifunctor using (Bifunctor)
1015
open import Categories.Morphism using (_≅_)
1116
open import Categories.Morphism.HeterogeneousEquality
1217
open import Categories.Morphism.Notation using (_[_≅_])
18+
open import Categories.NaturalTransformation.NaturalIsomorphism using (_≃_; sym)
19+
open import Categories.NaturalTransformation.NaturalIsomorphism.Properties using (pointwise-iso)
1320

14-
record Product (A B : Obj) : Set (o ⊔ ℓ ⊔ e ⊔ t) where
21+
import Categories.Morphism.Reasoning as MR
22+
23+
open hom.HomReasoning
24+
25+
private
26+
module MR′ {X Y} = MR (hom X Y)
27+
28+
record Product (A B : Obj) : Set (o ⊔ ℓ ⊔ e ⊔ t) where
1529
infix 10 ⟨_,_⟩₁ ⟨_,_⟩₂
1630
field
1731
A×B : Obj
@@ -20,6 +34,8 @@ record Product (A B : Obj) : Set (o ⊔ ℓ ⊔ e ⊔ t) where
2034
⟨_,_⟩₁ : {Γ} Γ ⇒₁ A Γ ⇒₁ B Γ ⇒₁ A×B
2135
⟨_,_⟩₂ : {Γ}{fa ga : Γ ⇒₁ A}{fb gb : Γ ⇒₁ B}
2236
fa ⇒₂ ga fb ⇒₂ gb ⟨ fa , fb ⟩₁ ⇒₂ ⟨ ga , gb ⟩₁
37+
⟨⟩-resp-≈ : {Γ}{fa ga : Γ ⇒₁ A}{fb gb : Γ ⇒₁ B}{αa βa : fa ⇒₂ ga}{αb βb : fb ⇒₂ gb}
38+
αa ≈ βa αb ≈ βb ⟨ αa , αb ⟩₂ ≈ ⟨ βa , βb ⟩₂
2339

2440
β₁a : {Γ} f g hom Γ A [ πa ∘₁ ⟨ f , g ⟩₁ ≅ f ]
2541
β₁b : {Γ} f g hom Γ B [ πb ∘₁ ⟨ f , g ⟩₁ ≅ g ]
@@ -31,3 +47,65 @@ record Product (A B : Obj) : Set (o ⊔ ℓ ⊔ e ⊔ t) where
3147
η₁ : {Γ} p hom Γ A×B [ p ≅ ⟨ πa ∘₁ p , πb ∘₁ p ⟩₁ ]
3248
η₂ : {Γ}{p p'}(ϕ : hom Γ A×B [ p , p' ])
3349
Along (η₁ _) , (η₁ _) [ ϕ ≈ ⟨ πa ▷ ϕ , πb ▷ ϕ ⟩₂ ]
50+
51+
private
52+
module β₁a {Γ} f g = _≅_ (β₁a {Γ} f g)
53+
module β₁b {Γ} f g = _≅_ (β₁b {Γ} f g)
54+
module η₁ {Γ} p = _≅_ (η₁ {Γ} p)
55+
56+
unique₂ : {Γ}{p p'}{ϕ ψ : hom Γ A×B [ p , p' ]} πa ▷ ϕ ≈ πa ▷ ψ πb ▷ ϕ ≈ πb ▷ ψ ϕ ≈ ψ
57+
unique₂ {ϕ = ϕ}{ψ} ϕa≈ψa ϕb≈ψb = begin
58+
ϕ ≈⟨ MR′.switch-fromtoˡ (η₁ _) (η₂ ϕ) ⟩
59+
η₁.to _ ∘ᵥ ⟨ πa ▷ ϕ , πb ▷ ϕ ⟩₂ ∘ᵥ η₁.from _ ≈⟨ refl⟩∘⟨ ⟨⟩-resp-≈ ϕa≈ψa ϕb≈ψb ⟩∘⟨refl ⟩
60+
η₁.to _ ∘ᵥ ⟨ πa ▷ ψ , πb ▷ ψ ⟩₂ ∘ᵥ η₁.from _ ≈⟨ ⟺ (MR′.switch-fromtoˡ (η₁ _) (η₂ ψ)) ⟩
61+
ψ ∎
62+
63+
⟨-,-⟩ : {Γ} Bifunctor (hom Γ A) (hom Γ B) (hom Γ A×B)
64+
⟨-,-⟩ = record
65+
{ F₀ = uncurry′ ⟨_,_⟩₁
66+
; F₁ = uncurry′ ⟨_,_⟩₂
67+
; identity = ⟨⟩-identity
68+
; homomorphism = ⟨⟩-homomorphism
69+
; F-resp-≈ = uncurry′ ⟨⟩-resp-≈
70+
}
71+
where
72+
⟨⟩-identity : {Γ}{f : Γ ⇒₁ A}{g : Γ ⇒₁ B} ⟨ id₂ {f = f} , id₂ {f = g} ⟩₂ ≈ id₂
73+
⟨⟩-identity = unique₂ (MR′.switch-fromtoˡ (β₁a _ _) (β₂a id₂ id₂) ○ hom.∘-resp-≈ʳ identity₂ˡ
74+
○ β₁a.isoˡ _ _ ○ ⟺ ⊚.identity)
75+
(MR′.switch-fromtoˡ (β₁b _ _) (β₂b id₂ id₂) ○ hom.∘-resp-≈ʳ identity₂ˡ
76+
○ β₁b.isoˡ _ _ ○ ⟺ ⊚.identity)
77+
⟨⟩-homomorphism : {Γ}{fa ga ha : Γ ⇒₁ A}{fb gb hb : Γ ⇒₁ B}
78+
{αa : fa ⇒₂ ga}{αb : fb ⇒₂ gb}{βa : ga ⇒₂ ha}{βb : gb ⇒₂ hb}
79+
⟨ βa ∘ᵥ αa , βb ∘ᵥ αb ⟩₂ ≈ ⟨ βa , βb ⟩₂ ∘ᵥ ⟨ αa , αb ⟩₂
80+
⟨⟩-homomorphism {αa = αa}{αb}{βa}{βb} = unique₂ (MR′.switch-fromtoˡ (β₁a _ _) (β₂a (βa ∘ᵥ αa) (βb ∘ᵥ αb))
81+
○ MR′.pushʳ (MR′.extendˡ (MR′.insertˡ (β₁a.isoʳ _ _)))
82+
○ ⟺ (MR′.switch-fromtoˡ (β₁a _ _) (β₂a βa βb)
83+
⟩∘⟨ MR′.switch-fromtoˡ (β₁a _ _) (β₂a αa αb))
84+
○ ∘ᵥ-distr-▷)
85+
(MR′.switch-fromtoˡ (β₁b _ _) (β₂b (βa ∘ᵥ αa) (βb ∘ᵥ αb))
86+
○ MR′.pushʳ (MR′.extendˡ (MR′.insertˡ (β₁b.isoʳ _ _)))
87+
○ ⟺ (MR′.switch-fromtoˡ (β₁b _ _) (β₂b βa βb)
88+
⟩∘⟨ MR′.switch-fromtoˡ (β₁b _ _) (β₂b αa αb))
89+
○ ∘ᵥ-distr-▷)
90+
91+
βa : {Γ} πa ⊚- ∘F ⟨-,-⟩ {Γ} ≃ πˡ
92+
βa = pointwise-iso (uncurry β₁a) (uncurry β₂a)
93+
94+
βb : {Γ} πb ⊚- ∘F ⟨-,-⟩ {Γ} ≃ πʳ
95+
βb = pointwise-iso (uncurry β₁b) (uncurry β₂b)
96+
97+
β : {Γ} (πa ⊚- ※ πb ⊚-) ∘F ⟨-,-⟩ {Γ} ≃ idF
98+
β = βa ※ⁿⁱ βb
99+
100+
η : {Γ} idF ≃ ⟨-,-⟩ {Γ} ∘F (πa ⊚- ※ πb ⊚-)
101+
η = pointwise-iso η₁ η₂
102+
103+
𝒞[Γ,A×B]≅𝒞[Γ,A]×𝒞[Γ,B] : {Γ} StrongEquivalence (hom Γ A×B) (CatProduct (hom Γ A) (hom Γ B))
104+
𝒞[Γ,A×B]≅𝒞[Γ,A]×𝒞[Γ,B] = record
105+
{ F = πa ⊚- ※ πb ⊚-
106+
; G = ⟨-,-⟩
107+
; weak-inverse = record
108+
{ F∘G≈id = β
109+
; G∘F≈id = sym η
110+
}
111+
}

0 commit comments

Comments
 (0)