proarrow
Safe HaskellNone
LanguageGHC2024

Proarrow.Category.Monoidal.Hypergraph

Synopsis

Documentation

type family NFold (n :: Nat) (x :: k) :: k where ... Source Github #

Equations

NFold 'Z (x :: k) = Unit :: k 
NFold ('S n) (x :: k) = x ** NFold n x 

type family NFoldS (n :: Nat) (x :: k) :: [k] where ... Source Github #

Equations

NFoldS 'Z (x :: k) = '[] :: [k] 
NFoldS ('S n) (x :: k) = x ': NFoldS n x 

withObNFold :: forall {k} (n :: Nat) (a :: k) r. (SNatI n, Ob a, Monoidal k) => (Ob (NFold n a) => r) -> r Source Github #

fanIn :: forall {k} (n :: Nat) (a :: k). (SNatI n, Monoid a) => NFold n a ~> a Source Github #

fanInS :: forall {k} (n :: Nat) (a :: k). (SNatI n, Monoid a) => NFoldS n a ~> '[a] Source Github #

fanOut :: forall {k} (n :: Nat) (a :: k). (SNatI n, Comonoid a) => a ~> NFold n a Source Github #

fanOutS :: forall {k} (n :: Nat) (a :: k). (SNatI n, Comonoid a) => '[a] ~> NFoldS n a Source Github #

class (Monoid a, Comonoid a) => Frobenius (a :: k) Source Github #

We have a special frobenius algebra for an object if it is a monoid and a comonoid in a nice compatible way. Then there's a unique way to go from n-fold a to m-fold a.

Instances

Instances details
KnownNat a => Frobenius (a :: Nat) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.ZX

SNatI a => Frobenius ('FR a :: FINREL) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.FinRel

(HasPushouts k, HasCoproducts k, Ob a) => Frobenius ('CS a :: COSPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Cospan

(Num a, IsNat n) => Frobenius ('M n :: MatK a) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Mat

(HasPullbacks k, HasProducts k, Ob a) => Frobenius ('SP a :: SPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Span

spider :: forall {k} (n :: Nat) (m :: Nat) (a :: k). (Frobenius a, SNatI n, SNatI m) => NFold n a ~> NFold m a Source Github #

spiderS :: forall {k} (n :: Nat) (m :: Nat) (a :: k). (Frobenius a, SNatI n, SNatI m) => NFoldS n a ~> NFoldS m a Source Github #

cup :: forall {k} (a :: k). Frobenius a => (Unit :: k) ~> (a ** a) Source Github #

cupS :: forall {a1} (a2 :: a1). Frobenius a2 => ('[] :: [a1]) ~> '[a2, a2] Source Github #

cap :: forall {k} (a :: k). Frobenius a => (a ** a) ~> (Unit :: k) Source Github #

capS :: forall {k} (a :: k). Frobenius a => '[a, a] ~> ('[] :: [k]) Source Github #

class (Supplies k (Frobenius :: k -> Constraint), CompactClosed k) => Hypergraph k Source Github #

A hypergraph category has a special frobenius algebra for every object, and the frobenius algebra of any tensor product X ⊗ Y is induced in the canonical way from those of X and Y.

Instances

Instances details
Hypergraph Nat Source Github # 
Instance details

Defined in Proarrow.Category.Instance.ZX

Hypergraph FINREL Source Github # 
Instance details

Defined in Proarrow.Category.Instance.FinRel

(HasPushouts k, HasCoproducts k) => Hypergraph (COSPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Cospan

Num a => Hypergraph (MatK a) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Mat

(HasPullbacks k, HasProducts k) => Hypergraph (SPAN k) Source Github # 
Instance details

Defined in Proarrow.Category.Instance.Span

dualHG :: forall {k} (a :: k) (b :: k). Hypergraph k => (a ~> b) -> b ~> a Source Github #

A hypergraph category is self-dual compact closed.

linDistHG :: forall {k} (a :: k) (b :: k) (c :: k). (Hypergraph k, Ob a, Ob b) => ((a ** b) ~> c) -> a ~> (b ** c) Source Github #

linDistInvHG :: forall {k} (a :: k) (b :: k) (c :: k). (Hypergraph k, Ob b, Ob c) => (a ~> (b ** c)) -> (a ** b) ~> c Source Github #

traceHG :: forall {k} (u :: k) (x :: k) (y :: k). (Hypergraph k, Ob x, Ob y, Ob u) => ((u ** x) ~> (u ** y)) -> x ~> y Source Github #

A hypergraph category has a trace.

type ExpHG (a :: k) (b :: k) = a ** b Source Github #

A hypergraph category is monoidal closed.

curryHG :: forall {k} (a :: k) (b :: k) (c :: k). (Hypergraph k, Ob a, Ob b) => ((a ** b) ~> c) -> a ~> ExpHG b c Source Github #

applyHG :: forall {k} (b :: k) (c :: k). (Hypergraph k, Ob b, Ob c) => (ExpHG b c ** b) ~> c Source Github #