aboutsummaryrefslogtreecommitdiff
path: root/Category/Instance/Rigs.agda
blob: 8642491209cb1a845e9b19e0caf6e16f7968a771 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
{-# OPTIONS --without-K --safe #-}

open import Level using (Level; suc; _⊔_)

module Category.Instance.Rigs {c  : Level} where

import Algebra.Morphism.Construct.Identity as Identity
import Algebra.Morphism.Construct.Composition as Compose

open import Algebra using (Semiring)
open import Algebra.Morphism.Bundles using (SemiringHomomorphism)
open import Categories.Category using (Category)
open import Categories.Category.Helper using (categoryHelper)
open import Relation.Binary.PropositionalEquality as  using (_≗_)

open Semiring using (rawSemiring; refl; trans)
open SemiringHomomorphism using (⟦_⟧)

id : (R : Semiring c )  SemiringHomomorphism (rawSemiring R) (rawSemiring R)
id R = record
    { isSemiringHomomorphism = Identity.isSemiringHomomorphism (rawSemiring R) (refl R)
    }

compose
    : (R S T : Semiring c )
     SemiringHomomorphism (rawSemiring S) (rawSemiring T)
     SemiringHomomorphism (rawSemiring R) (rawSemiring S)
     SemiringHomomorphism (rawSemiring R) (rawSemiring T)
compose R S T f g = record
    { isSemiringHomomorphism =
        Compose.isSemiringHomomorphism
            (trans T)
            g.isSemiringHomomorphism
            f.isSemiringHomomorphism
    }
  where
    module f = SemiringHomomorphism f
    module g = SemiringHomomorphism g

Rigs : Category (suc (c  )) (c  ) c
Rigs = categoryHelper record
    { Obj = Semiring c     ; _⇒_ = λ R S  SemiringHomomorphism (rawSemiring R) (rawSemiring S)
    ; _≈_ = λ f g   f    g     ; id = λ {R}  id R
    ; _∘_ = λ {R S T} f g  compose R S T f g
    ; assoc = λ _  ≡.refl
    ; identityˡ = λ _  ≡.refl
    ; identityʳ = λ _  ≡.refl
    ; equiv = record
        { refl = λ _  ≡.refl
        ; sym = λ f≈g x  ≡.sym (f≈g x)
        ; trans = λ f≈g g≈h x  ≡.trans (f≈g x) (g≈h x)
        }
    ; ∘-resp-≈ = λ {f = f} {h g i} eq₁ eq₂ x  ≡.trans (≡.cong  f  (eq₂ x)) (eq₁ ( i  x))
    }