Mercurial > hg > Members > kono > Proof > category
view src/Category/Constructions/Product.agda @ 1110:45de2b31bf02
add original library and fix for safe mode
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Sat, 07 Oct 2023 19:43:31 +0900 |
parents | |
children | 73c72679421c |
line wrap: on
line source
{-# OPTIONS --universe-polymorphism #-} module Category.Constructions.Product where open import Category open import Level open import Data.Product renaming (_×_ to _*_) open import Relation.Binary open import Relation.Binary.Core _×_ : ∀{c₁ c₁′ c₂ c₂′ ℓ ℓ′} → Category c₁ c₂ ℓ → Category c₁′ c₂′ ℓ′ → Category (c₁ ⊔ c₁′) (c₂ ⊔ c₂′) (ℓ ⊔ ℓ′) C₁ × C₂ = record { Obj = ObjProd ; Hom = _⟶_ ; Id = IdProd ; _o_ = _∘_ ; _≈_ = _≈_ ; isCategory = record { isEquivalence = record { refl = λ {φ} → ≈-refl {φ = φ} ; sym = λ {φ ψ} → ≈-symm {φ = φ} {ψ} ; trans = λ {φ ψ σ} → ≈-trans {φ = φ} {ψ} {σ} } ; identityL = identityL ; identityR = identityR ; o-resp-≈ = o-resp-≈ ; associative = associative } } where ObjProd : Set _ ObjProd = Obj C₁ * Obj C₂ _⟶_ : ObjProd → ObjProd → Set _ _⟶_ = λ x y → Hom C₁ (proj₁ x) (proj₁ y) * Hom C₂ (proj₂ x) (proj₂ y) IdProd : {A : ObjProd} → A ⟶ A IdProd {x} = (Id {C = C₁} (proj₁ x) , Id {C = C₂} (proj₂ x)) _∘_ : {A B C : Obj C₁} {A′ B′ C′ : Obj C₂} → (Hom C₁ B C * Hom C₂ B′ C′) → (Hom C₁ A B * Hom C₂ A′ B′) → (Hom C₁ A C * Hom C₂ A′ C′) g ∘ f = (C₁ [ proj₁ g o proj₁ f ] , C₂ [ proj₂ g o proj₂ f ] ) _≈_ : {A B : ObjProd} → Rel (A ⟶ B) _ φ ≈ ψ = C₁ [ proj₁ φ ≈ proj₁ ψ ] * C₂ [ proj₂ φ ≈ proj₂ ψ ] C₁-equiv : ∀{A B} → IsEquivalence (Category._≈_ C₁ {A = A} {B = B}) C₁-equiv = IsCategory.isEquivalence (Category.isCategory C₁) C₂-equiv : ∀{A B} → IsEquivalence (Category._≈_ C₂ {A = A} {B = B}) C₂-equiv = IsCategory.isEquivalence (Category.isCategory C₂) ≈-refl : {A B : ObjProd} {φ : A ⟶ B} → φ ≈ φ ≈-refl = (IsEquivalence.refl C₁-equiv , IsEquivalence.refl C₂-equiv) ≈-symm : {A B : ObjProd} {φ ψ : A ⟶ B} → φ ≈ ψ → ψ ≈ φ ≈-symm φ≈ψ = (IsEquivalence.sym C₁-equiv (proj₁ φ≈ψ), IsEquivalence.sym C₂-equiv (proj₂ φ≈ψ)) ≈-trans : {A B : ObjProd} {φ ψ σ : A ⟶ B} → φ ≈ ψ → ψ ≈ σ → φ ≈ σ ≈-trans φ≈ψ ψ≈σ = ( IsEquivalence.trans C₁-equiv (proj₁ φ≈ψ) (proj₁ ψ≈σ) , IsEquivalence.trans C₂-equiv (proj₂ φ≈ψ) (proj₂ ψ≈σ)) identityL : {A B : ObjProd} {φ : A ⟶ B} → (IdProd ∘ φ) ≈ φ identityL = (IsCategory.identityL (Category.isCategory C₁), IsCategory.identityL (Category.isCategory C₂)) identityR : {A B : ObjProd} {φ : A ⟶ B} → (φ ∘ IdProd) ≈ φ identityR = (IsCategory.identityR (Category.isCategory C₁), IsCategory.identityR (Category.isCategory C₂)) o-resp-≈ : {A B C : ObjProd} {f g : A ⟶ B} {h i : B ⟶ C} → f ≈ g → h ≈ i → (h ∘ f) ≈ (i ∘ g) o-resp-≈ f≈g h≈i = (IsCategory.o-resp-≈ (Category.isCategory C₁) (proj₁ f≈g) (proj₁ h≈i), IsCategory.o-resp-≈ (Category.isCategory C₂) (proj₂ f≈g) (proj₂ h≈i)) associative : {A B C D : ObjProd} {f : C ⟶ D} {g : B ⟶ C} {h : A ⟶ B} → (f ∘ (g ∘ h)) ≈ ((f ∘ g) ∘ h) associative = (IsCategory.associative (Category.isCategory C₁), IsCategory.associative (Category.isCategory C₂))