aboutsummaryrefslogtreecommitdiff
path: root/NaturalTransformation/Instance/CircuitSemantics.agda
blob: ea21ac416da3fc2c9551e69d2408ce29e13b98b0 (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
{-# OPTIONS --without-K --safe #-}

module NaturalTransformation.Instance.CircuitSemantics where

open import Level using (0ℓ; suc)
open import Category.Instance.Setoids.SymmetricMonoidal {suc 0} {suc 0} using (Setoids-×)

import Functor.Forgetful.Instance.CMonoid Setoids-×.symmetric as CMonoid
import Functor.Forgetful.Instance.Monoid Setoids-×.monoidal as Monoid

open import Adjoint.Instance.Multiset {suc 0} using (Multiset⊣; Forget)
open import Categories.Adjoint using (Adjoint)
open import Categories.Category.Instance.Nat using (Nat-Cocartesian)
open import Categories.Functor using () renaming (_∘F_ to _∙_; id to Id)
open import Categories.Functor.Monoidal.Symmetric using () renaming (module Lax to Lax₁)
open import Categories.NaturalTransformation using (NaturalTransformation; _∘ˡ_; _∘ʳ_; _∘ᵥ_; id∘F⇒F)
open import Categories.NaturalTransformation.Monoidal.Symmetric using () renaming (module Lax to Lax₂)
open import Categories.NaturalTransformation.NaturalIsomorphism using (NaturalIsomorphism)
open import Categories.NaturalTransformation.NaturalIsomorphism using (associator)
open import Category.Monoidal.Instance.Nat using (Nat,+,0)
open import Data.Circuit.Gate using (Gates)
open import Functor.Free.Instance.CMonoid using (Free)
open import Functor.Instance.CMonoidalize Nat-Cocartesian Setoids-× using (CMonoidalize)
open import Functor.Instance.Nat.Circ {suc 0} using (Circ; Edges≃Circ)
open import Functor.Instance.Nat.Edge {suc 0} Gates using (Edge)
open import Functor.Instance.Nat.System using (module NatCMon)
open import NaturalTransformation.Instance.GateSemantics using (semantics)

open Lax₁ using (SymmetricMonoidalFunctor)
open Lax₂ using (SymmetricMonoidalNaturalTransformation)
open NatCMon using (Sys)
open Adjoint Multiset⊣ using (counit)

module assoc = NaturalIsomorphism (associator Sys Forget Free)
module Edges≃Circ = NaturalIsomorphism Edges≃Circ

circuitSemantics : NaturalTransformation Circ Sys
circuitSemantics = id∘F⇒F ∘ᵥ (counit ∘ʳ Sys) ∘ᵥ assoc.F⇐G ∘ᵥ (Free ∘ˡ semantics) ∘ᵥ Edges≃Circ.F⇐G

Circ-SMF : SymmetricMonoidalFunctor Nat,+,0 Setoids-×
Circ-SMF = CMonoidalize.₀ Circ

Sys-SMF : SymmetricMonoidalFunctor Nat,+,0 Setoids-×
Sys-SMF = CMonoidalize.₀ Sys

semantics-SM : SymmetricMonoidalNaturalTransformation Circ-SMF Sys-SMF
semantics-SM = CMonoidalize.₁ circuitSemantics