@@ -4,14 +4,28 @@ open import Categories.Bicategory using (Bicategory)
44module Categories.Bicategory.Object.Product {o ℓ e t} (𝒞 : Bicategory o ℓ e t) where
55
66open import Level
7+ open import Data.Product using (_,_; uncurry; uncurry′)
78
8- open Bicategory 𝒞
9+ open import Categories. Bicategory.Extras 𝒞
910open 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)
1015open import Categories.Morphism using (_≅_)
1116open import Categories.Morphism.HeterogeneousEquality
1217open 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