123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 |
- module Functor where
- import Logic.Identity as Id
- import Category
- import Logic.ChainReasoning
- open Category
- open Poly-Cat
- private
- module Fun where
- data Functor (ℂ ⅅ : Cat) : Set1 where
- functor : (F : Obj ℂ -> Obj ⅅ)
- (map : {A B : Obj ℂ} -> A ─→ B -> F A ─→ F B)
- (mapId : {A : Obj ℂ} -> map (id {A = A}) == id)
- (mapCompose : {A B C : Obj ℂ}{f : B ─→ C}{g : A ─→ B} ->
- map (f ∘ g) == map f ∘ map g
- ) -> Functor ℂ ⅅ
- open Fun public
- module Projections where
- Map : {ℂ ⅅ : Cat} -> Functor ℂ ⅅ -> Obj ℂ -> Obj ⅅ
- Map (functor F _ _ _) = F
- map : {ℂ ⅅ : Cat}(F : Functor ℂ ⅅ)
- {A B : Obj ℂ} -> A ─→ B -> Map F A ─→ Map F B
- map (functor _ m _ _) = m
- mapId : {ℂ ⅅ : Cat}(F : Functor ℂ ⅅ)
- {A : Obj ℂ} -> map F id == id {A = Map F A}
- mapId (functor _ _ i _) = i
- mapCompose : {ℂ ⅅ : Cat}(F : Functor ℂ ⅅ)
- {A B C : Obj ℂ}{f : B ─→ C}{g : A ─→ B} ->
- map F (f ∘ g) == map F f ∘ map F g
- mapCompose (functor _ _ _ c) = c
- module Functor {ℂ ⅅ : Cat}(F : Functor ℂ ⅅ) where
- module P = Projections
- Map : Obj ℂ -> Obj ⅅ
- Map = P.Map F
- map : {A B : Obj ℂ} -> A ─→ B -> Map A ─→ Map B
- map = P.map F
- mapId : {A : Obj ℂ} -> map id == id {A = Map A}
- mapId = P.mapId F
- mapCompose : {A B C : Obj ℂ}{f : B ─→ C}{g : A ─→ B} ->
- map (f ∘ g) == map f ∘ map g
- mapCompose = P.mapCompose F
- module Functors where
- Id : {ℂ : Cat} -> Functor ℂ ℂ
- Id = functor (\A -> A) (\f -> f) (\{A} -> refl) (\{A}{B}{C}{f}{g} -> refl)
- _○_ : {ℂ ℚ ℝ : Cat} -> Functor ℚ ℝ -> Functor ℂ ℚ -> Functor ℂ ℝ
- _○_ {ℂ}{ℚ}{ℝ} F G = functor FG m mid mcomp
- where
- module F = Functor F
- module G = Functor G
- FG : Obj ℂ -> Obj ℝ
- FG A = F.Map (G.Map A)
- m : {A B : Obj ℂ} -> A ─→ B -> FG A ─→ FG B
- m f = F.map (G.map f)
- mid : {A : Obj ℂ} -> m (id {A = A}) == id
- mid = chain> F.map (G.map id)
- === F.map id by ? -- cong F.map G.mapId
- === id by F.mapId
- where
- open module Chain = Logic.ChainReasoning.Mono.Homogenous _==_
- (\f -> refl)
- (\f g h -> trans)
- mcomp : {A B C : Obj ℂ}{f : B ─→ C}{g : A ─→ B} ->
- m (f ∘ g) == m f ∘ m g
- mcomp {f = f}{g = g} =
- chain> F.map (G.map (f ∘ g))
- === F.map (G.map f ∘ G.map g)
- by ? -- cong F.map G.mapCompose
- === F.map (G.map f) ∘ F.map (G.map g)
- by F.mapCompose
- where
- open module Chain = Logic.ChainReasoning.Mono.Homogenous _==_
- (\f -> refl)
- (\f g h -> trans)
|