view monoidal.agda @ 697:c68ba494abfd

fix
author Shinji KONO <kono@ie.u-ryukyu.ac.jp>
date Tue, 21 Nov 2017 00:11:10 +0900
parents 10ccac3bc285
children d648ebb8ac29
line wrap: on
line source

open import Level
open import Level
open import Level
open import Category
module monoidal where

open import Data.Product renaming (_×_ to _*_)
open import Category.Constructions.Product
open import HomReasoning
open import cat-utility
open import Relation.Binary.Core
open import Relation.Binary

open Functor

record _≅_ {ℓ : Level } ( C B : Set ℓ ) : Set  (suc ℓ )  where
   field
         ≅→ : C → B
         ≅← : B → C
         ≅Id→  :  {x : C} →  ≅← ( ≅→ x  ) ≡  x
         ≅Id←  :  {x : B} →  ≅→ ( ≅← x  ) ≡  x

infix  4 _≅_

record IsMonoidal  {c₁ c₂ ℓ : Level} (C : Category c₁ c₂ ℓ) (I : Obj C) ( BI : Functor ( C × C ) C )
        : Set ( suc  (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁)) where
  infixr 9 _⊗_
  _⊗_ : ( x y : Obj C ) → Obj C
  _⊗_ x y = FObj BI ( x , y )
  field
      mα : {a b c : Obj C} →  ( a ⊗ b) ⊗ c  ≡  a ⊗ ( b ⊗ c )
      mλa : (a : Obj C) → I ⊗ a  ≡ a 
      mσa : (a : Obj C) → a ⊗ I  ≡ a 

--      -- non strict version includes 6 naturalities
--      mα→ : {a b c : Obj C} → Hom C ( ( a ⊗ b) ⊗ c)  ( a ⊗ ( b ⊗ c ) )
--      mα← : {a b c : Obj C} → Hom C ( a ⊗ ( b ⊗ c )) ( ( a ⊗ b) ⊗ c)
--      mα-iso→ : {a b c : Obj C} →  C [ C [ mα←  o  mα→ ] ≈ id1 C (( a ⊗  b)  ⊗ c )  ] 
--      mα-iso← : {a b c : Obj C} →  C [ C [ mα→  o  mα← ] ≈ id1 C (  a ⊗ (b   ⊗ c )) ] 
--      mα→nat1 : {a a' b c : Obj C} →  ( f : Hom C a a' ) →
--         C [ C [ FMap BI ( f , id1 C (FObj BI ( b , c )  ))  o mα→ {a} ]  ≈
--            C [   mα→ {a'}  o FMap BI ( FMap BI (f , id1 C b ) , id1 C c )    ] ]

record Monoidal  {c₁ c₂ ℓ : Level} (C : Category c₁ c₂ ℓ) 
        : Set ( suc  (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁)) where
  field
      m-i : Obj C
      m-bi : Functor ( C × C ) C 
      isMonoidal : IsMonoidal C m-i m-bi


open import Category.Cat

record IsMonoidalFunctor {c₁ c₂ ℓ : Level} {C D : Category c₁ c₂ ℓ}  ( M : Monoidal C ) ( N : Monoidal D )
        : Set ( suc  (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁)) where
  field
     a : {!!}

record MonoidalFunctor {c₁ c₂ ℓ : Level} {C D : Category c₁ c₂ ℓ}  ( M : Monoidal C ) ( N : Monoidal D )
        : Set ( suc  (c₁ ⊔ c₂ ⊔ ℓ ⊔ c₁)) where
  _⊗_ : (x y : Obj C ) → Obj C
  _⊗_ x y =  (IsMonoidal._⊗_ (Monoidal.isMonoidal M) ) x y
  _●_ : (x y : Obj D ) → Obj D
  _●_ x y =  (IsMonoidal._⊗_ (Monoidal.isMonoidal N) ) x y
  field
      MF : Functor C D
  F● :  Functor ( C × C ) D
  F●  =  record {
       FObj = λ x  → (FObj MF (proj₁ x) ) ●  (FObj MF (proj₂ x) )
     ; FMap = λ {x : Obj ( C × C ) } {y} f → FMap (Monoidal.m-bi N) (  FMap MF  (proj₁  f ) , FMap MF (proj₂ f)  )
     ; isFunctor = record {
     }
    }
  F⊗ : Functor ( C × C ) D
  F⊗  =  record {
       FObj = λ x → FObj MF ( proj₁ x ⊗ proj₂ x )
     ; FMap = λ {a} {b} f →  FMap MF ( FMap (Monoidal.m-bi M) (  proj₁ f , proj₂ f) )
     ; isFunctor = record {
     }
    }
  field
      φab :  NTrans  ( C × C ) D  F● F⊗ 
      φ   : Hom D (Monoidal.m-i N)  (FObj MF (Monoidal.m-i M) )
      isMonodailFunctor : IsMonoidalFunctor  M N