{-# LANGUAGE CPP #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE ScopedTypeVariables #-}
module Circuit.Poly.Int
(
IN,
IntMorph (..),
id,
comp,
dual,
intTensor,
cap,
cup,
unitL,
unitL',
unitR,
unitR',
tensorAssoc,
tensorAssoc',
assocInv,
intBraid,
causal,
)
where
import Circuit.Category ((.))
import Circuit.Category qualified as Cat (Category (..))
import Circuit.Channel (Channel (..), Traced (..))
import Circuit.Poly (Mono, Morphism (Compose), applyLens, lens)
import Circuit.Syntax (Syntax (..), eval, (:+:) (..))
import Circuit.Tensor qualified as M (Action (..), Tensor (..))
import Circuit.Trace (SigYank (..), Trace, base, yank)
import Data.Kind (Type)
import Prelude hiding (id, (.))
data IN (ap :: Type) (am :: Type)
newtype IntMorph (t :: Type -> Type -> Type) arr (ap :: Type) (am :: Type) (bp :: Type) (bm :: Type) = IntMorph
{
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
IntMorph t arr ap am bp bm -> arr (t ap bm) (t am bp)
runIntMorph :: arr (t ap bm) (t am bp)
}
id :: (M.Action t arr) => IntMorph t arr ap am ap am
id :: forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am.
Action t arr =>
IntMorph t arr ap am ap am
id = arr (t ap am) (t am ap) -> IntMorph t arr ap am ap am
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph arr (t ap am) (t am ap)
forall a b. arr (t a b) (t b a)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
M.braid
dual :: (M.Action t arr) => IntMorph t arr ap am bp bm -> IntMorph t arr bm bp am ap
dual :: forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
Action t arr =>
IntMorph t arr ap am bp bm -> IntMorph t arr bm bp am ap
dual (IntMorph arr (t ap bm) (t am bp)
f) = arr (t bm ap) (t bp am) -> IntMorph t arr bm bp am ap
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (arr (t am bp) (t bp am)
forall a b. arr (t a b) (t b a)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
M.braid arr (t am bp) (t bp am)
-> arr (t ap bm) (t am bp) -> arr (t ap bm) (t bp am)
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap bm) (t am bp)
f arr (t ap bm) (t bp am)
-> arr (t bm ap) (t ap bm) -> arr (t bm ap) (t bp am)
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t bm ap) (t ap bm)
forall a b. arr (t a b) (t b a)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
M.braid)
comp ::
forall t arr ap am bp bm cp cm.
(M.Action t arr, Traced t arr) =>
IntMorph t arr bp bm cp cm ->
IntMorph t arr ap am bp bm ->
IntMorph t arr ap am cp cm
comp :: forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm cp cm.
(Action t arr, Traced t arr) =>
IntMorph t arr bp bm cp cm
-> IntMorph t arr ap am bp bm -> IntMorph t arr ap am cp cm
comp (IntMorph arr (t bp cm) (t bm cp)
g) (IntMorph arr (t ap bm) (t am bp)
f) = arr (t ap cm) (t am cp) -> IntMorph t arr ap am cp cm
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (arr (t (t bm bp) (t ap cm)) (t (t bm bp) (t am cp))
-> arr (t ap cm) (t am cp)
forall a b c. arr (t a b) (t a c) -> arr b c
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Traced t arr =>
arr (t a b) (t a c) -> arr b c
trace (arr (t (t bm cp) (t am bp)) (t (t bm bp) (t am cp))
middleOut arr (t (t bm cp) (t am bp)) (t (t bm bp) (t am cp))
-> arr (t (t bp cm) (t ap bm)) (t (t bm cp) (t am bp))
-> arr (t (t bp cm) (t ap bm)) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. (arr (t bp cm) (t bm cp)
g arr (t bp cm) (t bm cp)
-> arr (t ap bm) (t am bp)
-> arr (t (t bp cm) (t ap bm)) (t (t bm cp) (t am bp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` arr (t ap bm) (t am bp)
f) arr (t (t bp cm) (t ap bm)) (t (t bm bp) (t am cp))
-> arr (t (t bm bp) (t ap cm)) (t (t bp cm) (t ap bm))
-> arr (t (t bm bp) (t ap cm)) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t bm bp) (t ap cm)) (t (t bp cm) (t ap bm))
middleIn))
where
id_ap :: arr a a
id_ap = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
id_am :: arr a a
id_am = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
id_bm :: arr a a
id_bm = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
middleIn :: arr (t (t bm bp) (t ap cm)) (t (t bp cm) (t ap bm))
middleIn = arr (t (t ap bm) (t bp cm)) (t (t bp cm) (t ap bm))
step6 arr (t (t ap bm) (t bp cm)) (t (t bp cm) (t ap bm))
-> arr (t ap (t bm (t bp cm))) (t (t ap bm) (t bp cm))
-> arr (t ap (t bm (t bp cm))) (t (t bp cm) (t ap bm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap (t bm (t bp cm))) (t (t ap bm) (t bp cm))
step5 arr (t ap (t bm (t bp cm))) (t (t bp cm) (t ap bm))
-> arr (t ap (t (t bm bp) cm)) (t ap (t bm (t bp cm)))
-> arr (t ap (t (t bm bp) cm)) (t (t bp cm) (t ap bm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap (t (t bm bp) cm)) (t ap (t bm (t bp cm)))
step4 arr (t ap (t (t bm bp) cm)) (t (t bp cm) (t ap bm))
-> arr (t ap (t cm (t bm bp))) (t ap (t (t bm bp) cm))
-> arr (t ap (t cm (t bm bp))) (t (t bp cm) (t ap bm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap (t cm (t bm bp))) (t ap (t (t bm bp) cm))
step3 arr (t ap (t cm (t bm bp))) (t (t bp cm) (t ap bm))
-> arr (t (t ap cm) (t bm bp)) (t ap (t cm (t bm bp)))
-> arr (t (t ap cm) (t bm bp)) (t (t bp cm) (t ap bm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t ap cm) (t bm bp)) (t ap (t cm (t bm bp)))
step2 arr (t (t ap cm) (t bm bp)) (t (t bp cm) (t ap bm))
-> arr (t (t bm bp) (t ap cm)) (t (t ap cm) (t bm bp))
-> arr (t (t bm bp) (t ap cm)) (t (t bp cm) (t ap bm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t bm bp) (t ap cm)) (t (t ap cm) (t bm bp))
step1
where
step1 :: arr (t (t bm bp) (t ap cm)) (t (t ap cm) (t bm bp))
step1 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @(t bm bp) @(t ap cm)
step2 :: arr (t (t ap cm) (t bm bp)) (t ap (t cm (t bm bp)))
step2 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @ap @cm @(t bm bp)
step3 :: arr (t ap (t cm (t bm bp))) (t ap (t (t bm bp) cm))
step3 = arr ap ap
forall a. arr a a
id_ap arr ap ap
-> arr (t cm (t bm bp)) (t (t bm bp) cm)
-> arr (t ap (t cm (t bm bp))) (t ap (t (t bm bp) cm))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @cm @(t bm bp)
step4 :: arr (t ap (t (t bm bp) cm)) (t ap (t bm (t bp cm)))
step4 = arr ap ap
forall a. arr a a
id_ap arr ap ap
-> arr (t (t bm bp) cm) (t bm (t bp cm))
-> arr (t ap (t (t bm bp) cm)) (t ap (t bm (t bp cm)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @bm @bp @cm
step5 :: arr (t ap (t bm (t bp cm))) (t (t ap bm) (t bp cm))
step5 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
assoc' @t @arr @ap @bm @(t bp cm)
step6 :: arr (t (t ap bm) (t bp cm)) (t (t bp cm) (t ap bm))
step6 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @(t ap bm) @(t bp cm)
middleOut :: arr (t (t bm cp) (t am bp)) (t (t bm bp) (t am cp))
middleOut = arr (t (t am cp) (t bm bp)) (t (t bm bp) (t am cp))
step7 arr (t (t am cp) (t bm bp)) (t (t bm bp) (t am cp))
-> arr (t bm (t (t am cp) bp)) (t (t am cp) (t bm bp))
-> arr (t bm (t (t am cp) bp)) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t bm (t (t am cp) bp)) (t (t am cp) (t bm bp))
step6 arr (t bm (t (t am cp) bp)) (t (t bm bp) (t am cp))
-> arr (t bm (t am (t cp bp))) (t bm (t (t am cp) bp))
-> arr (t bm (t am (t cp bp))) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t bm (t am (t cp bp))) (t bm (t (t am cp) bp))
step5 arr (t bm (t am (t cp bp))) (t (t bm bp) (t am cp))
-> arr (t bm (t am (t bp cp))) (t bm (t am (t cp bp)))
-> arr (t bm (t am (t bp cp))) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t bm (t am (t bp cp))) (t bm (t am (t cp bp)))
step4 arr (t bm (t am (t bp cp))) (t (t bm bp) (t am cp))
-> arr (t bm (t (t am bp) cp)) (t bm (t am (t bp cp)))
-> arr (t bm (t (t am bp) cp)) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t bm (t (t am bp) cp)) (t bm (t am (t bp cp)))
step3 arr (t bm (t (t am bp) cp)) (t (t bm bp) (t am cp))
-> arr (t bm (t cp (t am bp))) (t bm (t (t am bp) cp))
-> arr (t bm (t cp (t am bp))) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t bm (t cp (t am bp))) (t bm (t (t am bp) cp))
step2 arr (t bm (t cp (t am bp))) (t (t bm bp) (t am cp))
-> arr (t (t bm cp) (t am bp)) (t bm (t cp (t am bp)))
-> arr (t (t bm cp) (t am bp)) (t (t bm bp) (t am cp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t bm cp) (t am bp)) (t bm (t cp (t am bp)))
step1
where
step1 :: arr (t (t bm cp) (t am bp)) (t bm (t cp (t am bp)))
step1 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @bm @cp @(t am bp)
step2 :: arr (t bm (t cp (t am bp))) (t bm (t (t am bp) cp))
step2 = arr bm bm
forall a. arr a a
id_bm arr bm bm
-> arr (t cp (t am bp)) (t (t am bp) cp)
-> arr (t bm (t cp (t am bp))) (t bm (t (t am bp) cp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @cp @(t am bp)
step3 :: arr (t bm (t (t am bp) cp)) (t bm (t am (t bp cp)))
step3 = arr bm bm
forall a. arr a a
id_bm arr bm bm
-> arr (t (t am bp) cp) (t am (t bp cp))
-> arr (t bm (t (t am bp) cp)) (t bm (t am (t bp cp)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @am @bp @cp
step4 :: arr (t bm (t am (t bp cp))) (t bm (t am (t cp bp)))
step4 = arr bm bm
forall a. arr a a
id_bm arr bm bm
-> arr (t am (t bp cp)) (t am (t cp bp))
-> arr (t bm (t am (t bp cp))) (t bm (t am (t cp bp)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` (arr am am
forall a. arr a a
id_am arr am am
-> arr (t bp cp) (t cp bp) -> arr (t am (t bp cp)) (t am (t cp bp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @bp @cp)
step5 :: arr (t bm (t am (t cp bp))) (t bm (t (t am cp) bp))
step5 = arr bm bm
forall a. arr a a
id_bm arr bm bm
-> arr (t am (t cp bp)) (t (t am cp) bp)
-> arr (t bm (t am (t cp bp))) (t bm (t (t am cp) bp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
assoc' @t @arr @am @cp @bp
step6 :: arr (t bm (t (t am cp) bp)) (t (t am cp) (t bm bp))
step6 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t a (t b c)) (t b (t a c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t a (t b c)) (t b (t a c))
slide @t @arr @bm @(t am cp) @bp
step7 :: arr (t (t am cp) (t bm bp)) (t (t bm bp) (t am cp))
step7 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @(t am cp) @(t bm bp)
intTensor ::
forall t arr ap am bp bm cp cm dp dm.
(M.Action t arr, Channel t arr) =>
IntMorph t arr ap am bp bm ->
IntMorph t arr cp cm dp dm ->
IntMorph t arr (t ap cp) (t am cm) (t bp dp) (t bm dm)
intTensor :: forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm cp cm dp
dm.
(Action t arr, Channel t arr) =>
IntMorph t arr ap am bp bm
-> IntMorph t arr cp cm dp dm
-> IntMorph t arr (t ap cp) (t am cm) (t bp dp) (t bm dm)
intTensor (IntMorph arr (t ap bm) (t am bp)
f) (IntMorph arr (t cp dm) (t cm dp)
g) = arr (t (t ap cp) (t bm dm)) (t (t am cm) (t bp dp))
-> IntMorph t arr (t ap cp) (t am cm) (t bp dp) (t bm dm)
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (arr (t (t am bp) (t cm dp)) (t (t am cm) (t bp dp))
permOut arr (t (t am bp) (t cm dp)) (t (t am cm) (t bp dp))
-> arr (t (t ap bm) (t cp dm)) (t (t am bp) (t cm dp))
-> arr (t (t ap bm) (t cp dm)) (t (t am cm) (t bp dp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. (arr (t ap bm) (t am bp)
f arr (t ap bm) (t am bp)
-> arr (t cp dm) (t cm dp)
-> arr (t (t ap bm) (t cp dm)) (t (t am bp) (t cm dp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` arr (t cp dm) (t cm dp)
g) arr (t (t ap bm) (t cp dm)) (t (t am cm) (t bp dp))
-> arr (t (t ap cp) (t bm dm)) (t (t ap bm) (t cp dm))
-> arr (t (t ap cp) (t bm dm)) (t (t am cm) (t bp dp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t ap cp) (t bm dm)) (t (t ap bm) (t cp dm))
permIn)
where
id_ap :: arr a a
id_ap = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
id_bm :: arr a a
id_bm = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
permIn :: arr (t (t ap cp) (t bm dm)) (t (t ap bm) (t cp dm))
permIn = arr (t ap (t bm (t cp dm))) (t (t ap bm) (t cp dm))
step5 arr (t ap (t bm (t cp dm))) (t (t ap bm) (t cp dm))
-> arr (t ap (t bm (t dm cp))) (t ap (t bm (t cp dm)))
-> arr (t ap (t bm (t dm cp))) (t (t ap bm) (t cp dm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap (t bm (t dm cp))) (t ap (t bm (t cp dm)))
step4 arr (t ap (t bm (t dm cp))) (t (t ap bm) (t cp dm))
-> arr (t ap (t (t bm dm) cp)) (t ap (t bm (t dm cp)))
-> arr (t ap (t (t bm dm) cp)) (t (t ap bm) (t cp dm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap (t (t bm dm) cp)) (t ap (t bm (t dm cp)))
step3 arr (t ap (t (t bm dm) cp)) (t (t ap bm) (t cp dm))
-> arr (t ap (t cp (t bm dm))) (t ap (t (t bm dm) cp))
-> arr (t ap (t cp (t bm dm))) (t (t ap bm) (t cp dm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t ap (t cp (t bm dm))) (t ap (t (t bm dm) cp))
step2 arr (t ap (t cp (t bm dm))) (t (t ap bm) (t cp dm))
-> arr (t (t ap cp) (t bm dm)) (t ap (t cp (t bm dm)))
-> arr (t (t ap cp) (t bm dm)) (t (t ap bm) (t cp dm))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t ap cp) (t bm dm)) (t ap (t cp (t bm dm)))
step1
where
step1 :: arr (t (t ap cp) (t bm dm)) (t ap (t cp (t bm dm)))
step1 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @ap @cp @(t bm dm)
step2 :: arr (t ap (t cp (t bm dm))) (t ap (t (t bm dm) cp))
step2 = arr ap ap
forall a. arr a a
id_ap arr ap ap
-> arr (t cp (t bm dm)) (t (t bm dm) cp)
-> arr (t ap (t cp (t bm dm))) (t ap (t (t bm dm) cp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @cp @(t bm dm)
step3 :: arr (t ap (t (t bm dm) cp)) (t ap (t bm (t dm cp)))
step3 = arr ap ap
forall a. arr a a
id_ap arr ap ap
-> arr (t (t bm dm) cp) (t bm (t dm cp))
-> arr (t ap (t (t bm dm) cp)) (t ap (t bm (t dm cp)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @bm @dm @cp
step4 :: arr (t ap (t bm (t dm cp))) (t ap (t bm (t cp dm)))
step4 = arr ap ap
forall a. arr a a
id_ap arr ap ap
-> arr (t bm (t dm cp)) (t bm (t cp dm))
-> arr (t ap (t bm (t dm cp))) (t ap (t bm (t cp dm)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` (arr bm bm
forall a. arr a a
id_bm arr bm bm
-> arr (t dm cp) (t cp dm) -> arr (t bm (t dm cp)) (t bm (t cp dm))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @dm @cp)
step5 :: arr (t ap (t bm (t cp dm))) (t (t ap bm) (t cp dm))
step5 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
assoc' @t @arr @ap @bm @(t cp dm)
permOut :: arr (t (t am bp) (t cm dp)) (t (t am cm) (t bp dp))
permOut = arr (t am (t cm (t bp dp))) (t (t am cm) (t bp dp))
step5 arr (t am (t cm (t bp dp))) (t (t am cm) (t bp dp))
-> arr (t am (t cm (t dp bp))) (t am (t cm (t bp dp)))
-> arr (t am (t cm (t dp bp))) (t (t am cm) (t bp dp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t am (t cm (t dp bp))) (t am (t cm (t bp dp)))
step4 arr (t am (t cm (t dp bp))) (t (t am cm) (t bp dp))
-> arr (t am (t (t cm dp) bp)) (t am (t cm (t dp bp)))
-> arr (t am (t (t cm dp) bp)) (t (t am cm) (t bp dp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t am (t (t cm dp) bp)) (t am (t cm (t dp bp)))
step3 arr (t am (t (t cm dp) bp)) (t (t am cm) (t bp dp))
-> arr (t am (t bp (t cm dp))) (t am (t (t cm dp) bp))
-> arr (t am (t bp (t cm dp))) (t (t am cm) (t bp dp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t am (t bp (t cm dp))) (t am (t (t cm dp) bp))
step2 arr (t am (t bp (t cm dp))) (t (t am cm) (t bp dp))
-> arr (t (t am bp) (t cm dp)) (t am (t bp (t cm dp)))
-> arr (t (t am bp) (t cm dp)) (t (t am cm) (t bp dp))
forall b c a. arr b c -> arr a b -> arr a c
forall k (arr :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category arr =>
arr b c -> arr a b -> arr a c
. arr (t (t am bp) (t cm dp)) (t am (t bp (t cm dp)))
step1
where
step1 :: arr (t (t am bp) (t cm dp)) (t am (t bp (t cm dp)))
step1 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @am @bp @(t cm dp)
step2 :: arr (t am (t bp (t cm dp))) (t am (t (t cm dp) bp))
step2 = arr am am
forall a. arr a a
id_am arr am am
-> arr (t bp (t cm dp)) (t (t cm dp) bp)
-> arr (t am (t bp (t cm dp))) (t am (t (t cm dp) bp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @bp @(t cm dp)
step3 :: arr (t am (t (t cm dp) bp)) (t am (t cm (t dp bp)))
step3 = arr am am
forall a. arr a a
id_am arr am am
-> arr (t (t cm dp) bp) (t cm (t dp bp))
-> arr (t am (t (t cm dp) bp)) (t am (t cm (t dp bp)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t (t a b) c) (t a (t b c))
assoc @t @arr @cm @dp @bp
step4 :: arr (t am (t cm (t dp bp))) (t am (t cm (t bp dp)))
step4 = arr am am
forall a. arr a a
id_am arr am am
-> arr (t cm (t dp bp)) (t cm (t bp dp))
-> arr (t am (t cm (t dp bp))) (t am (t cm (t bp dp)))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` (arr cm cm
forall a. arr a a
id_cm arr cm cm
-> arr (t dp bp) (t bp dp) -> arr (t cm (t dp bp)) (t cm (t bp dp))
forall a b c d. arr a b -> arr c d -> arr (t a c) (t b d)
forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k) (d :: k).
Tensor t arr =>
arr a b -> arr c d -> arr (t a c) (t b d)
`M.tensor` forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k).
Action t arr =>
arr (t a b) (t b a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b.
Action t arr =>
arr (t a b) (t b a)
M.braid @t @arr @dp @bp)
step5 :: arr (t am (t cm (t bp dp))) (t (t am cm) (t bp dp))
step5 = forall {k} (t :: k -> k -> k) (arr :: k -> k -> *) (a :: k)
(b :: k) (c :: k).
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
forall (t :: * -> * -> *) (arr :: * -> * -> *) a b c.
Channel t arr =>
arr (t a (t b c)) (t (t a b) c)
assoc' @t @arr @am @cm @(t bp dp)
id_am :: arr a a
id_am = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
id_cm :: arr a a
id_cm = arr a a
forall a. arr a a
forall k (arr :: k -> k -> *) (a :: k). Category arr => arr a a
Cat.id
cap :: IntMorph (,) (->) () () (a, b) (b, a)
cap :: forall a b. IntMorph (,) (->) () () (a, b) (b, a)
cap = (((), (b, a)) -> ((), (a, b)))
-> IntMorph (,) (->) () () (a, b) (b, a)
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph ((((), (b, a)) -> ((), (a, b)))
-> IntMorph (,) (->) () () (a, b) (b, a))
-> (((), (b, a)) -> ((), (a, b)))
-> IntMorph (,) (->) () () (a, b) (b, a)
forall a b. (a -> b) -> a -> b
$ \ ~((), (b
b, a
a)) -> ((), (a
a, b
b))
cup :: IntMorph (,) (->) (b, a) (a, b) () ()
cup :: forall b a. IntMorph (,) (->) (b, a) (a, b) () ()
cup = (((b, a), ()) -> ((a, b), ()))
-> IntMorph (,) (->) (b, a) (a, b) () ()
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph ((((b, a), ()) -> ((a, b), ()))
-> IntMorph (,) (->) (b, a) (a, b) () ())
-> (((b, a), ()) -> ((a, b), ()))
-> IntMorph (,) (->) (b, a) (a, b) () ()
forall a b. (a -> b) -> a -> b
$ \ ~((b
b, a
a), ()) -> ((a
a, b
b), ())
unitL :: IntMorph (,) (->) ((), a) ((), b) a b
unitL :: forall a b. IntMorph (,) (->) ((), a) ((), b) a b
unitL = ((((), a), b) -> (((), b), a))
-> IntMorph (,) (->) ((), a) ((), b) a b
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (((((), a), b) -> (((), b), a))
-> IntMorph (,) (->) ((), a) ((), b) a b)
-> ((((), a), b) -> (((), b), a))
-> IntMorph (,) (->) ((), a) ((), b) a b
forall a b. (a -> b) -> a -> b
$ \ ~(((), a
a), b
b) -> (((), b
b), a
a)
unitR' :: IntMorph (,) (->) a b (a, ()) (b, ())
unitR' :: forall a b. IntMorph (,) (->) a b (a, ()) (b, ())
unitR' = ((a, (b, ())) -> (b, (a, ())))
-> IntMorph (,) (->) a b (a, ()) (b, ())
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (((a, (b, ())) -> (b, (a, ())))
-> IntMorph (,) (->) a b (a, ()) (b, ()))
-> ((a, (b, ())) -> (b, (a, ())))
-> IntMorph (,) (->) a b (a, ()) (b, ())
forall a b. (a -> b) -> a -> b
$ \ ~(a
a, (b
b, ())) -> (b
b, (a
a, ()))
unitL' :: IntMorph (,) (->) a b ((), a) ((), b)
unitL' :: forall a b. IntMorph (,) (->) a b ((), a) ((), b)
unitL' = ((a, ((), b)) -> (b, ((), a)))
-> IntMorph (,) (->) a b ((), a) ((), b)
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (((a, ((), b)) -> (b, ((), a)))
-> IntMorph (,) (->) a b ((), a) ((), b))
-> ((a, ((), b)) -> (b, ((), a)))
-> IntMorph (,) (->) a b ((), a) ((), b)
forall a b. (a -> b) -> a -> b
$ \ ~(a
a, ((), b
b)) -> (b
b, ((), a
a))
unitR :: IntMorph (,) (->) (a, ()) (b, ()) a b
unitR :: forall a b. IntMorph (,) (->) (a, ()) (b, ()) a b
unitR = (((a, ()), b) -> ((b, ()), a))
-> IntMorph (,) (->) (a, ()) (b, ()) a b
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph ((((a, ()), b) -> ((b, ()), a))
-> IntMorph (,) (->) (a, ()) (b, ()) a b)
-> (((a, ()), b) -> ((b, ()), a))
-> IntMorph (,) (->) (a, ()) (b, ()) a b
forall a b. (a -> b) -> a -> b
$ \ ~((a
a, ()), b
b) -> ((b
b, ()), a
a)
assocInv ::
IntMorph
(,)
(->)
(a, (b, a))
(b, (a, b))
((a, b), a)
((b, a), b)
assocInv :: forall a b.
IntMorph (,) (->) (a, (b, a)) (b, (a, b)) ((a, b), a) ((b, a), b)
assocInv = (((a, (b, a)), ((b, a), b)) -> ((b, (a, b)), ((a, b), a)))
-> IntMorph
(,) (->) (a, (b, a)) (b, (a, b)) ((a, b), a) ((b, a), b)
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph ((((a, (b, a)), ((b, a), b)) -> ((b, (a, b)), ((a, b), a)))
-> IntMorph
(,) (->) (a, (b, a)) (b, (a, b)) ((a, b), a) ((b, a), b))
-> (((a, (b, a)), ((b, a), b)) -> ((b, (a, b)), ((a, b), a)))
-> IntMorph
(,) (->) (a, (b, a)) (b, (a, b)) ((a, b), a) ((b, a), b)
forall a b. (a -> b) -> a -> b
$ \ ~((a
x, (b
y, a
x')), ((b
y', a
x''), b
y'')) -> ((b
y', (a
x'', b
y'')), ((a
x, b
y), a
x'))
tensorAssoc ::
IntMorph
(,)
(->)
(a, (b, c))
(da, (db, dc))
((a, b), c)
((da, db), dc)
tensorAssoc :: forall a b c da db dc.
IntMorph
(,) (->) (a, (b, c)) (da, (db, dc)) ((a, b), c) ((da, db), dc)
tensorAssoc = (((a, (b, c)), ((da, db), dc)) -> ((da, (db, dc)), ((a, b), c)))
-> IntMorph
(,) (->) (a, (b, c)) (da, (db, dc)) ((a, b), c) ((da, db), dc)
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph ((((a, (b, c)), ((da, db), dc)) -> ((da, (db, dc)), ((a, b), c)))
-> IntMorph
(,) (->) (a, (b, c)) (da, (db, dc)) ((a, b), c) ((da, db), dc))
-> (((a, (b, c)), ((da, db), dc)) -> ((da, (db, dc)), ((a, b), c)))
-> IntMorph
(,) (->) (a, (b, c)) (da, (db, dc)) ((a, b), c) ((da, db), dc)
forall a b. (a -> b) -> a -> b
$ \ ~((a
x, (b
y, c
z)), ((da
dx, db
dy), dc
dz)) -> ((da
dx, (db
dy, dc
dz)), ((a
x, b
y), c
z))
tensorAssoc' ::
IntMorph
(,)
(->)
((a, b), c)
((da, db), dc)
(a, (b, c))
(da, (db, dc))
tensorAssoc' :: forall a b c da db dc.
IntMorph
(,) (->) ((a, b), c) ((da, db), dc) (a, (b, c)) (da, (db, dc))
tensorAssoc' = ((((a, b), c), (da, (db, dc))) -> (((da, db), dc), (a, (b, c))))
-> IntMorph
(,) (->) ((a, b), c) ((da, db), dc) (a, (b, c)) (da, (db, dc))
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (((((a, b), c), (da, (db, dc))) -> (((da, db), dc), (a, (b, c))))
-> IntMorph
(,) (->) ((a, b), c) ((da, db), dc) (a, (b, c)) (da, (db, dc)))
-> ((((a, b), c), (da, (db, dc))) -> (((da, db), dc), (a, (b, c))))
-> IntMorph
(,) (->) ((a, b), c) ((da, db), dc) (a, (b, c)) (da, (db, dc))
forall a b. (a -> b) -> a -> b
$ \ ~(((a
x, b
y), c
z), (da
dx, (db
dy, dc
dz))) -> (((da
dx, db
dy), dc
dz), (a
x, (b
y, c
z)))
intBraid ::
IntMorph
(,)
(->)
(a, b)
(da, db)
(b, a)
(db, da)
intBraid :: forall a b da db. IntMorph (,) (->) (a, b) (da, db) (b, a) (db, da)
intBraid = (((a, b), (db, da)) -> ((da, db), (b, a)))
-> IntMorph (,) (->) (a, b) (da, db) (b, a) (db, da)
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph ((((a, b), (db, da)) -> ((da, db), (b, a)))
-> IntMorph (,) (->) (a, b) (da, db) (b, a) (db, da))
-> (((a, b), (db, da)) -> ((da, db), (b, a)))
-> IntMorph (,) (->) (a, b) (da, db) (b, a) (db, da)
forall a b. (a -> b) -> a -> b
$ \ ~((a
x, b
y), (db
dy, da
dx)) -> ((da
dx, db
dy), (b
y, a
x))
causal :: Morphism (Mono da a) (Mono db b) -> IntMorph (,) (->) a da b db
causal :: forall da a db b.
Morphism (Mono da a) (Mono db b) -> IntMorph (,) (->) a da b db
causal Morphism (Mono da a) (Mono db b)
m = ((a, db) -> (da, b)) -> IntMorph (,) (->) a da b db
forall (t :: * -> * -> *) (arr :: * -> * -> *) ap am bp bm.
arr (t ap bm) (t am bp) -> IntMorph t arr ap am bp bm
IntMorph (\(a
a, db
db) -> let (b
b, db -> da
put) = Morphism (Mono da a) (Mono db b) -> a -> (b, db -> da)
forall da a db b.
Morphism (Mono da a) (Mono db b) -> a -> (b, db -> da)
applyLens Morphism (Mono da a) (Mono db b)
m a
a in (db -> da
put db
db, b
b))