proarrow
Safe HaskellNone
LanguageGHC2024

Proarrow.Category.Monoidal.Hypergraph

Description

Hypergraph categories: compact closed categories where every object carries a Frobenius structure (a compatible Monoid and Comonoid), giving n-to-m spiders, cups and caps. This is the setting for string diagrams with arbitrary fan-in/fan-out such as Proarrow.Category.Instance.ZX.

Synopsis

Documentation

class (CommutativeMonoid a, CocommutativeComonoid a) => Frobenius (a :: k) Source Github #

A special commutative Frobenius algebra: a commutative monoid and cocommutative comonoid satisfying speciality (mappend . comult = id) and the Frobenius law. A Hypergraph category supplies this structure at every object, and with it the spider from n-fold a to m-fold a is the unique connected map (commutativity/cocommutativity make fanIn/fanOut independent of wiring order). The bare notion of a Frobenius monoid needs neither (co)commutativity, but the library only ever uses the special commutative one.

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

Ob as => Frobenius ('D as :: DOT) Source Github #

The points are spiders: on each wire, merging and copying are the special commutative Frobenius structure.

Instance details

Defined in Proarrow.Tools.Diagrams.Dot

Ob as => Frobenius ('S as :: SVG) Source Github # 
Instance details

Defined in Proarrow.Tools.Diagrams.Svg

(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

(CommutativeMonoid a, CocommutativeComonoid a) => Frobenius (a :: FREE cs p) Source Github #

In the free category the supply generators (see Supplies Monoid/Supplies Comonoid in Proarrow.Monoid) are compatible by fiat, so monoid + comonoid is already Frobenius. With both supplies in cs, Supplies Frobenius and Hypergraph are derived, with no structure of their own. Superclasses are taken directly as the context to keep dictionary construction acyclic. Bundling them into an All-style constraint here builds a dictionary that references itself through the quantified Supplies constraint, looping at runtime.

Instance details

Defined in Proarrow.Category.Monoidal.Hypergraph

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 Frobenius k, 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

Hypergraph DOT Source Github #

The points make every object a special commutative Frobenius object, so a diagram's wires can be bent: each object is its own dual, with cups and caps drawn as a copy or merge point next to a unit or counit point.

Instance details

Defined in Proarrow.Tools.Diagrams.Dot

Hypergraph SVG Source Github # 
Instance details

Defined in Proarrow.Tools.Diagrams.Svg

(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

(Supplies Frobenius (FREE cs p), CompactClosed (FREE cs p)) => Hypergraph (FREE cs p) Source Github # 
Instance details

Defined in Proarrow.Category.Monoidal.Hypergraph

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 #

type FrobeniusStructures = '[Monoidal, SymMonoidal, Supplies Monoid, Supplies Comonoid] Source Github #

The structures the laws of a category supplying special commutative Frobenius algebras are stated for: the monoids and comonoids, together.

Orphan instances

Laws FrobeniusStructures Source Github #

The supplied monoids and comonoids are special and satisfy the Frobenius law. Their monoid and comonoid laws, and their commutativity, are separate instances, in Proarrow.Monoid.

Instance details