| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Proarrow.Adjunction
Contents
Synopsis
- class (Representable p, Corepresentable p) => Adjunction (p :: j +-> k)
- leftAdjunct :: forall {j} {k} (p :: j +-> k) (a :: k) (b :: j). (Adjunction p, Ob a) => ((p %% a) ~> b) -> a ~> (p % b)
- rightAdjunct :: forall {k1} {k2} (p :: k1 +-> k2) (a :: k2) (b :: k1). (Adjunction p, Ob b) => (a ~> (p % b)) -> (p %% a) ~> b
- adjuncted :: forall {k1} {k2} (p :: k1 +-> k2) (a :: k1) (b :: k2) (a' :: k1) (b' :: k2). (Adjunction p, Ob a, Ob b') => Iso (b ~> (p % a)) (b' ~> (p % a')) ((p %% b) ~> a) ((p %% b') ~> a')
- type AdjMonad (p :: k +-> i) = p :.: CorepStar p
- unitRep :: forall {k} {j} (p :: k +-> j) (a :: j). (Adjunction p, Ob a) => a ~> (AdjMonad p % a)
- bindRep :: forall {k} {j} (p :: k +-> j) (a :: j) (b :: j). (Adjunction p, Ob b) => (a ~> (AdjMonad p % b)) -> (AdjMonad p % a) ~> (AdjMonad p % b)
- type AdjComonad (p :: i +-> j) = RepCostar p :.: p
- counitRep :: forall {k} {j} (p :: k +-> j) (a :: k). (Adjunction p, Ob a) => (AdjComonad p %% a) ~> a
- extendRep :: forall {j1} {j2} (p :: j1 +-> j2) (a :: j1) (b :: j1). (Adjunction p, Ob a) => ((AdjComonad p %% a) ~> b) -> (AdjComonad p %% a) ~> (AdjComonad p %% b)
- class ((p % a) ~ (p %% a), (p % (p %% a)) ~ (p % (p % a)), (p %% (p % a)) ~ (p % (p % a))) => SelfAdjointPoint (p :: j +-> j) (a :: j)
- class (forall (a :: k). Ob a => SelfAdjointPoint p a, Adjunction p) => SelfAdjoint (p :: k +-> k)
- class SelfAdjoint p => Involution (p :: j +-> j) where
- class ((p %% a) ~ (RepCostar p % a), (p % (p %% a)) ~ (p % (RepCostar p % a))) => AmbidextrousEqRep (p :: k +-> j) (a :: j)
- class ((p % a) ~ (CorepStar p %% a), (p %% (p % a)) ~ (p %% (CorepStar p %% a))) => AmbidextrousEqCorep (p :: k +-> j) (a :: k)
- class (Adjunction p, Representable (RepCostar p), Corepresentable (CorepStar p), forall (a :: j). Ob a => AmbidextrousEqRep p a, forall (a :: k). Ob a => AmbidextrousEqCorep p a) => Ambidextrous (p :: k +-> j)
- class Ambidextrous p => AdjointEquivalence (p :: j +-> k) where
- class (Profunctor p, Profunctor q) => Proadjunction (p :: j +-> k) (q :: k +-> j) where
- data LimitAdj (j :: a +-> b) (c :: COREPK b k) (r :: REPK a k) where
- LimitAdj :: forall {k} {b} {a} (c1 :: k +-> b) (r1 :: a +-> k) (j :: a +-> b). (Corepresentable c1, Representable r1) => (j :~> (c1 :.: r1)) -> LimitAdj j ('SUB ('OP c1) :: SUBCAT (OpCorepresentable :: OPPOSITE (k +-> b) -> Constraint)) ('SUB r1 :: SUBCAT (Representable :: (a +-> k) -> Constraint))
- rightAdjointPreservesLimits :: forall {k} {k'} {i} {a} (j :: i +-> a) (p :: k +-> k') (d :: i +-> k). (Adjunction p, Representable d, HasLimits j k, HasLimits j k') => Limit j (p :.: d) :~> (p :.: Limit j d)
- rightAdjointPreservesLimitsInv :: forall {k} {k'} {i} {a} (p :: k +-> k') (d :: i +-> k) (j :: i +-> a). (Representable p, Representable d, HasLimits j k, HasLimits j k') => (p :.: Limit j d) :~> Limit j (p :.: d)
- leftAdjointPreservesColimits :: forall {k} {k'} {i} {a} (p :: k' +-> k) (d :: k +-> i) (j :: a +-> i). (Adjunction p, Corepresentable d, HasColimits j k, HasColimits j k') => Colimit j (d :.: p) :~> (Colimit j d :.: p)
- leftAdjointPreservesColimitsInv :: forall {k} {k'} {i} {a} (p :: k' +-> k) (d :: k +-> i) (j :: a +-> i). (Corepresentable p, Corepresentable d, HasColimits j k, HasColimits j k') => (Colimit j d :.: p) :~> Colimit j (d :.: p)
- newtype Adj (p :: k -> k1 -> Type) (a :: k) (b :: k1) = Adj (p a b)
- haskAdjIsCurryAdj :: Adjunction p => Iso ((p %% ()) -> a -> b) ((p %% ()) -> a' -> b') (p a b) (p a' b')
Documentation
class (Representable p, Corepresentable p) => Adjunction (p :: j +-> k) Source Github #
Adjunctions as heteromorphisms.
Instances
| (Representable p, Corepresentable p) => Adjunction (p :: j +-> k) Source Github # | |
Defined in Proarrow.Adjunction | |
leftAdjunct :: forall {j} {k} (p :: j +-> k) (a :: k) (b :: j). (Adjunction p, Ob a) => ((p %% a) ~> b) -> a ~> (p % b) Source Github #
rightAdjunct :: forall {k1} {k2} (p :: k1 +-> k2) (a :: k2) (b :: k1). (Adjunction p, Ob b) => (a ~> (p % b)) -> (p %% a) ~> b Source Github #
adjuncted :: forall {k1} {k2} (p :: k1 +-> k2) (a :: k1) (b :: k2) (a' :: k1) (b' :: k2). (Adjunction p, Ob a, Ob b') => Iso (b ~> (p % a)) (b' ~> (p % a')) ((p %% b) ~> a) ((p %% b') ~> a') Source Github #
The isomorphism between leftAdjunct and rightAdjunct.
type AdjMonad (p :: k +-> i) = p :.: CorepStar p Source Github #
The monad induced by an adjunction as a representable promonad.
unitRep :: forall {k} {j} (p :: k +-> j) (a :: j). (Adjunction p, Ob a) => a ~> (AdjMonad p % a) Source Github #
bindRep :: forall {k} {j} (p :: k +-> j) (a :: j) (b :: j). (Adjunction p, Ob b) => (a ~> (AdjMonad p % b)) -> (AdjMonad p % a) ~> (AdjMonad p % b) Source Github #
type AdjComonad (p :: i +-> j) = RepCostar p :.: p Source Github #
The comonad induced by an adjunction as a corepresentable promonad.
counitRep :: forall {k} {j} (p :: k +-> j) (a :: k). (Adjunction p, Ob a) => (AdjComonad p %% a) ~> a Source Github #
extendRep :: forall {j1} {j2} (p :: j1 +-> j2) (a :: j1) (b :: j1). (Adjunction p, Ob a) => ((AdjComonad p %% a) ~> b) -> (AdjComonad p %% a) ~> (AdjComonad p %% b) Source Github #
class ((p % a) ~ (p %% a), (p % (p %% a)) ~ (p % (p % a)), (p %% (p % a)) ~ (p % (p % a))) => SelfAdjointPoint (p :: j +-> j) (a :: j) Source Github #
class (forall (a :: k). Ob a => SelfAdjointPoint p a, Adjunction p) => SelfAdjoint (p :: k +-> k) Source Github #
Self-adjoint functors
Instances
| (forall (a :: k). Ob a => SelfAdjointPoint p a, Adjunction p) => SelfAdjoint (p :: k +-> k) Source Github # | |
Defined in Proarrow.Adjunction | |
class SelfAdjoint p => Involution (p :: j +-> j) where Source Github #
Involution functors are self-adjoint functors where the unit and counit form an isomorphism.
Minimal complete definition
Nothing
Methods
involuted :: forall (a :: j) (a' :: j). (Ob a, Ob a') => Iso a a' (p % (p % a)) (p % (p % a')) Source Github #
Instances
| CategoryOf k => Involution (Id :: k -> k -> Type) Source Github # | |
| RealFloat a => Involution (Rep (Conjugate :: MatK (Complex a) +-> MatK (Complex a)) :: MatK (Complex a) -> MatK (Complex a) -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Mat Methods involuted :: forall (a0 :: MatK (Complex a)) (a' :: MatK (Complex a)). (Ob a0, Ob a') => Iso a0 a' (Rep (Conjugate :: MatK (Complex a) +-> MatK (Complex a)) % (Rep (Conjugate :: MatK (Complex a) +-> MatK (Complex a)) % a0)) (Rep (Conjugate :: MatK (Complex a) +-> MatK (Complex a)) % (Rep (Conjugate :: MatK (Complex a) +-> MatK (Complex a)) % a')) Source Github # | |
class ((p %% a) ~ (RepCostar p % a), (p % (p %% a)) ~ (p % (RepCostar p % a))) => AmbidextrousEqRep (p :: k +-> j) (a :: j) Source Github #
class ((p % a) ~ (CorepStar p %% a), (p %% (p % a)) ~ (p %% (CorepStar p %% a))) => AmbidextrousEqCorep (p :: k +-> j) (a :: k) Source Github #
class (Adjunction p, Representable (RepCostar p), Corepresentable (CorepStar p), forall (a :: j). Ob a => AmbidextrousEqRep p a, forall (a :: k). Ob a => AmbidextrousEqCorep p a) => Ambidextrous (p :: k +-> j) Source Github #
Instances
| (Adjunction p, Representable (RepCostar p), Corepresentable (CorepStar p), forall (a :: j). Ob a => AmbidextrousEqRep p a, forall (a :: k). Ob a => AmbidextrousEqCorep p a) => Ambidextrous (p :: k +-> j) Source Github # | |
Defined in Proarrow.Adjunction | |
class Ambidextrous p => AdjointEquivalence (p :: j +-> k) where Source Github #
Minimal complete definition
Nothing
class (Profunctor p, Profunctor q) => Proadjunction (p :: j +-> k) (q :: k +-> j) where Source Github #
Adjunctions between two profunctors.
Instances
data LimitAdj (j :: a +-> b) (c :: COREPK b k) (r :: REPK a k) where Source Github #
Constructors
| LimitAdj :: forall {k} {b} {a} (c1 :: k +-> b) (r1 :: a +-> k) (j :: a +-> b). (Corepresentable c1, Representable r1) => (j :~> (c1 :.: r1)) -> LimitAdj j ('SUB ('OP c1) :: SUBCAT (OpCorepresentable :: OPPOSITE (k +-> b) -> Constraint)) ('SUB r1 :: SUBCAT (Representable :: (a +-> k) -> Constraint)) |
Instances
| Profunctor j => Profunctor (LimitAdj j :: COREPK b k -> REPK a k -> Type) Source Github # | |
Defined in Proarrow.Adjunction Methods dimap :: forall (c :: COREPK b k) (a0 :: COREPK b k) (b0 :: REPK a k) (d :: REPK a k). (c ~> a0) -> (b0 ~> d) -> LimitAdj j a0 b0 -> LimitAdj j c d Source Github # lmap :: forall (c :: COREPK b k) (a0 :: COREPK b k) (b0 :: REPK a k). (c ~> a0) -> LimitAdj j a0 b0 -> LimitAdj j c b0 Source Github # rmap :: forall (b0 :: REPK a k) (d :: REPK a k) (a0 :: COREPK b k). (b0 ~> d) -> LimitAdj j a0 b0 -> LimitAdj j a0 d Source Github # (\\) :: forall (a0 :: COREPK b k) (b0 :: REPK a k) r. ((Ob a0, Ob b0) => r) -> LimitAdj j a0 b0 -> r Source Github # | |
| HasColimits j k => Corepresentable (LimitAdj j :: COREPK b k -> REPK a k -> Type) Source Github # | |
Defined in Proarrow.Adjunction Methods coindex :: forall (a0 :: COREPK b k) (b0 :: REPK a k). LimitAdj j a0 b0 -> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) %% a0) ~> b0 Source Github # cotabulate :: forall (a0 :: COREPK b k) (b0 :: REPK a k). Ob a0 => (((LimitAdj j :: COREPK b k -> REPK a k -> Type) %% a0) ~> b0) -> LimitAdj j a0 b0 Source Github # corepMap :: forall (a0 :: COREPK b k) (b0 :: COREPK b k). (a0 ~> b0) -> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) %% a0) ~> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) %% b0) Source Github # trivialCorep :: forall (a0 :: COREPK b k). Ob a0 => LimitAdj j a0 ((LimitAdj j :: COREPK b k -> REPK a k -> Type) %% a0) Source Github # | |
| HasLimits j k => Representable (LimitAdj j :: COREPK b k -> REPK a k -> Type) Source Github # |
|
Defined in Proarrow.Adjunction Methods index :: forall (a0 :: COREPK b k) (b0 :: REPK a k). LimitAdj j a0 b0 -> a0 ~> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) % b0) Source Github # tabulate :: forall (b0 :: REPK a k) (a0 :: COREPK b k). Ob b0 => (a0 ~> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) % b0)) -> LimitAdj j a0 b0 Source Github # repMap :: forall (a0 :: REPK a k) (b0 :: REPK a k). (a0 ~> b0) -> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) % a0) ~> ((LimitAdj j :: COREPK b k -> REPK a k -> Type) % b0) Source Github # trivialRep :: forall (a0 :: REPK a k). Ob a0 => LimitAdj j ((LimitAdj j :: COREPK b k -> REPK a k -> Type) % a0) a0 Source Github # | |
| type (LimitAdj j :: COREPK b k -> REPK a k -> Type) %% (c :: COREPK b k) Source Github # | |
| type (LimitAdj j :: COREPK b k -> REPK a k -> Type) % (r :: REPK a k) Source Github # | |
rightAdjointPreservesLimits :: forall {k} {k'} {i} {a} (j :: i +-> a) (p :: k +-> k') (d :: i +-> k). (Adjunction p, Representable d, HasLimits j k, HasLimits j k') => Limit j (p :.: d) :~> (p :.: Limit j d) Source Github #
rightAdjointPreservesLimitsInv :: forall {k} {k'} {i} {a} (p :: k +-> k') (d :: i +-> k) (j :: i +-> a). (Representable p, Representable d, HasLimits j k, HasLimits j k') => (p :.: Limit j d) :~> Limit j (p :.: d) Source Github #
leftAdjointPreservesColimits :: forall {k} {k'} {i} {a} (p :: k' +-> k) (d :: k +-> i) (j :: a +-> i). (Adjunction p, Corepresentable d, HasColimits j k, HasColimits j k') => Colimit j (d :.: p) :~> (Colimit j d :.: p) Source Github #
leftAdjointPreservesColimitsInv :: forall {k} {k'} {i} {a} (p :: k' +-> k) (d :: k +-> i) (j :: a +-> i). (Corepresentable p, Corepresentable d, HasColimits j k, HasColimits j k') => (Colimit j d :.: p) :~> Colimit j (d :.: p) Source Github #
newtype Adj (p :: k -> k1 -> Type) (a :: k) (b :: k1) Source Github #
Preservation of limits and colimits makes the adjunction heteromorphism a distributive profunctor.
Constructors
| Adj (p a b) |
Instances
| (Cartesian j, Cartesian k, Adjunction p) => MonoidalProfunctor (Adj p :: k -> j -> Type) Source Github # | |
| Profunctor p => Profunctor (Adj p :: k -> j -> Type) Source Github # | |
Defined in Proarrow.Adjunction Methods dimap :: forall (c :: k) (a :: k) (b :: j) (d :: j). (c ~> a) -> (b ~> d) -> Adj p a b -> Adj p c d Source Github # lmap :: forall (c :: k) (a :: k) (b :: j). (c ~> a) -> Adj p a b -> Adj p c b Source Github # rmap :: forall (b :: j) (d :: j) (a :: k). (b ~> d) -> Adj p a b -> Adj p a d Source Github # (\\) :: forall (a :: k) (b :: j) r. ((Ob a, Ob b) => r) -> Adj p a b -> r Source Github # | |
| Corepresentable p => Corepresentable (Adj p :: k -> j -> Type) Source Github # | |
Defined in Proarrow.Adjunction Methods coindex :: forall (a :: k) (b :: j). Adj p a b -> (Adj p %% a) ~> b Source Github # cotabulate :: forall (a :: k) (b :: j). Ob a => ((Adj p %% a) ~> b) -> Adj p a b Source Github # corepMap :: forall (a :: k) (b :: k). (a ~> b) -> (Adj p %% a) ~> (Adj p %% b) Source Github # trivialCorep :: forall (a :: k). Ob a => Adj p a (Adj p %% a) Source Github # | |
| Representable p => Representable (Adj p :: k -> j -> Type) Source Github # | |
Defined in Proarrow.Adjunction Methods index :: forall (a :: k) (b :: j). Adj p a b -> a ~> (Adj p % b) Source Github # tabulate :: forall (b :: j) (a :: k). Ob b => (a ~> (Adj p % b)) -> Adj p a b Source Github # repMap :: forall (a :: j) (b :: j). (a ~> b) -> (Adj p % a) ~> (Adj p % b) Source Github # trivialRep :: forall (a :: j). Ob a => Adj p (Adj p % a) a Source Github # | |
| Adjunction p => Promonad (Adj p :: Type -> Type -> Type) Source Github # | |
| (Cocartesian j, Cocartesian k, Adjunction p) => MonoidalProfunctor (Coprod (Adj p) :: COPROD k -> COPROD j -> Type) Source Github # | |
| type (Adj p :: k -> j -> Type) %% (a :: k) Source Github # | |
Defined in Proarrow.Adjunction | |
| type (Adj p :: k -> j -> Type) % (a :: j) Source Github # | |
Defined in Proarrow.Adjunction | |
haskAdjIsCurryAdj :: Adjunction p => Iso ((p %% ()) -> a -> b) ((p %% ()) -> a' -> b') (p a b) (p a' b') Source Github #
Every adjunction between Hask endofunctors is equivalent to the curry-uncurry adjunction.
Orphan instances
| Corepresentable (Star ((->) a) :: Type -> Type -> Type) Source Github # | The left adjoint of |
Methods coindex :: Star ((->) a) a0 b -> (Star ((->) a) %% a0) ~> b Source Github # cotabulate :: Ob a0 => ((Star ((->) a) %% a0) ~> b) -> Star ((->) a) a0 b Source Github # corepMap :: (a0 ~> b) -> (Star ((->) a) %% a0) ~> (Star ((->) a) %% b) Source Github # trivialCorep :: Ob a0 => Star ((->) a) a0 (Star ((->) a) %% a0) Source Github # | |
| Representable (Costar ((,) a) :: Type -> Type -> Type) Source Github # | The right adjoint of |
Methods index :: Costar ((,) a) a0 b -> a0 ~> (Costar ((,) a) % b) Source Github # tabulate :: Ob b => (a0 ~> (Costar ((,) a) % b)) -> Costar ((,) a) a0 b Source Github # repMap :: (a0 ~> b) -> (Costar ((,) a) % a0) ~> (Costar ((,) a) % b) Source Github # trivialRep :: Ob a0 => Costar ((,) a) (Costar ((,) a) % a0) a0 Source Github # | |
| Proadjunction p q => Promonad (q :.: p :: k -> k -> Type) Source Github # | |
| Proadjunction p q => Procomonad (p :.: q :: i -> i -> Type) Source Github # | |