2018-01-24 15:38:28 +00:00
|
|
|
|
{-# OPTIONS --allow-unsolved-metas --cubical #-}
|
2018-01-15 15:13:23 +00:00
|
|
|
|
|
|
|
|
|
module Cat.Category.Properties where
|
|
|
|
|
|
2018-01-21 14:01:01 +00:00
|
|
|
|
open import Agda.Primitive
|
|
|
|
|
open import Data.Product
|
2018-01-30 10:19:48 +00:00
|
|
|
|
open import Cubical
|
2018-01-21 14:01:01 +00:00
|
|
|
|
|
2018-01-15 15:13:23 +00:00
|
|
|
|
open import Cat.Category
|
2018-02-05 13:59:53 +00:00
|
|
|
|
open import Cat.Category.Functor
|
2018-01-15 15:13:23 +00:00
|
|
|
|
open import Cat.Categories.Sets
|
2018-01-30 21:41:18 +00:00
|
|
|
|
open import Cat.Equality
|
|
|
|
|
open Equality.Data.Product
|
2018-01-15 15:13:23 +00:00
|
|
|
|
|
2018-02-05 11:21:39 +00:00
|
|
|
|
module _ {ℓ ℓ' : Level} {ℂ : Category ℓ ℓ'} { A B : Category.Object ℂ } {X : Category.Object ℂ} (f : Category.Arrow ℂ A B) where
|
2018-01-21 14:01:01 +00:00
|
|
|
|
open Category ℂ
|
|
|
|
|
|
2018-02-02 14:33:54 +00:00
|
|
|
|
iso-is-epi : Isomorphism f → Epimorphism {X = X} f
|
2018-01-30 18:19:16 +00:00
|
|
|
|
iso-is-epi (f- , left-inv , right-inv) g₀ g₁ eq = begin
|
2018-01-21 14:01:01 +00:00
|
|
|
|
g₀ ≡⟨ sym (proj₁ ident) ⟩
|
2018-01-30 18:19:16 +00:00
|
|
|
|
g₀ ∘ 𝟙 ≡⟨ cong (_∘_ g₀) (sym right-inv) ⟩
|
|
|
|
|
g₀ ∘ (f ∘ f-) ≡⟨ assoc ⟩
|
|
|
|
|
(g₀ ∘ f) ∘ f- ≡⟨ cong (λ φ → φ ∘ f-) eq ⟩
|
|
|
|
|
(g₁ ∘ f) ∘ f- ≡⟨ sym assoc ⟩
|
|
|
|
|
g₁ ∘ (f ∘ f-) ≡⟨ cong (_∘_ g₁) right-inv ⟩
|
|
|
|
|
g₁ ∘ 𝟙 ≡⟨ proj₁ ident ⟩
|
2018-01-21 14:01:01 +00:00
|
|
|
|
g₁ ∎
|
|
|
|
|
|
2018-02-02 14:33:54 +00:00
|
|
|
|
iso-is-mono : Isomorphism f → Monomorphism {X = X} f
|
2018-01-21 14:01:01 +00:00
|
|
|
|
iso-is-mono (f- , (left-inv , right-inv)) g₀ g₁ eq =
|
|
|
|
|
begin
|
|
|
|
|
g₀ ≡⟨ sym (proj₂ ident) ⟩
|
2018-01-30 18:19:16 +00:00
|
|
|
|
𝟙 ∘ g₀ ≡⟨ cong (λ φ → φ ∘ g₀) (sym left-inv) ⟩
|
|
|
|
|
(f- ∘ f) ∘ g₀ ≡⟨ sym assoc ⟩
|
|
|
|
|
f- ∘ (f ∘ g₀) ≡⟨ cong (_∘_ f-) eq ⟩
|
|
|
|
|
f- ∘ (f ∘ g₁) ≡⟨ assoc ⟩
|
|
|
|
|
(f- ∘ f) ∘ g₁ ≡⟨ cong (λ φ → φ ∘ g₁) left-inv ⟩
|
|
|
|
|
𝟙 ∘ g₁ ≡⟨ proj₂ ident ⟩
|
2018-01-21 14:01:01 +00:00
|
|
|
|
g₁ ∎
|
|
|
|
|
|
2018-02-02 14:33:54 +00:00
|
|
|
|
iso-is-epi-mono : Isomorphism f → Epimorphism {X = X} f × Monomorphism {X = X} f
|
2018-01-21 14:01:01 +00:00
|
|
|
|
iso-is-epi-mono iso = iso-is-epi iso , iso-is-mono iso
|
|
|
|
|
|
2018-02-23 09:53:11 +00:00
|
|
|
|
-- TODO: We want to avoid defining the yoneda embedding going through the
|
|
|
|
|
-- category of categories (since it doesn't exist).
|
|
|
|
|
open import Cat.Categories.Cat using (RawCat)
|
|
|
|
|
|
|
|
|
|
module _ {ℓ : Level} {ℂ : Category ℓ ℓ} (unprovable : IsCategory (RawCat ℓ ℓ)) where
|
|
|
|
|
open import Cat.Categories.Fun
|
|
|
|
|
open import Cat.Categories.Sets
|
|
|
|
|
module Cat = Cat.Categories.Cat
|
|
|
|
|
open import Cat.Category.Exponential
|
|
|
|
|
open Functor
|
|
|
|
|
𝓢 = Sets ℓ
|
|
|
|
|
private
|
|
|
|
|
Catℓ : Category _ _
|
|
|
|
|
Catℓ = record { raw = RawCat ℓ ℓ ; isCategory = unprovable}
|
|
|
|
|
prshf = presheaf {ℂ = ℂ}
|
|
|
|
|
module ℂ = Category ℂ
|
|
|
|
|
|
|
|
|
|
_⇑_ : (A B : Category.Object Catℓ) → Category.Object Catℓ
|
|
|
|
|
A ⇑ B = (exponent A B) .obj
|
|
|
|
|
where
|
|
|
|
|
open HasExponentials (Cat.hasExponentials ℓ unprovable)
|
|
|
|
|
|
|
|
|
|
module _ {A B : ℂ.Object} (f : ℂ [ A , B ]) where
|
|
|
|
|
:func→: : NaturalTransformation (prshf A) (prshf B)
|
|
|
|
|
:func→: = (λ C x → ℂ [ f ∘ x ]) , λ f₁ → funExt λ _ → ℂ.assoc
|
|
|
|
|
|
|
|
|
|
module _ {c : Category.Object ℂ} where
|
|
|
|
|
eqTrans : (λ _ → Transformation (prshf c) (prshf c))
|
|
|
|
|
[ (λ _ x → ℂ [ ℂ.𝟙 ∘ x ]) ≡ identityTrans (prshf c) ]
|
|
|
|
|
eqTrans = funExt λ x → funExt λ x → ℂ.ident .proj₂
|
|
|
|
|
|
2018-02-23 10:23:21 +00:00
|
|
|
|
open import Cubical.NType.Properties
|
|
|
|
|
open import Cat.Categories.Fun
|
|
|
|
|
:ident: : :func→: (ℂ.𝟙 {c}) ≡ Category.𝟙 Fun {A = prshf c}
|
|
|
|
|
:ident: = lemSig (naturalIsProp {F = prshf c} {prshf c}) _ _ eq
|
|
|
|
|
where
|
|
|
|
|
eq : (λ C x → ℂ [ ℂ.𝟙 ∘ x ]) ≡ identityTrans (prshf c)
|
|
|
|
|
eq = funExt λ A → funExt λ B → proj₂ ℂ.ident
|
2018-02-23 09:53:11 +00:00
|
|
|
|
|
|
|
|
|
yoneda : Functor ℂ (Fun {ℂ = Opposite ℂ} {𝔻 = 𝓢})
|
|
|
|
|
yoneda = record
|
|
|
|
|
{ raw = record
|
|
|
|
|
{ func* = prshf
|
|
|
|
|
; func→ = :func→:
|
|
|
|
|
}
|
|
|
|
|
; isFunctor = record
|
|
|
|
|
{ ident = :ident:
|
|
|
|
|
; distrib = {!!}
|
|
|
|
|
}
|
|
|
|
|
}
|