| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Proarrow.Category.Instance.Discrete
Description
The discrete category on an Indexed kind k (): the numbered inhabitants
of DISCRETE kk are the objects and the only arrows are identities (Refl). The numbering makes the
category decidable, and a Finite kind gives an enumerable one, so that reachability along
a graph on a bare set of points can be computed. Its mirror image, the codiscrete category
CODISCRETE k, has exactly one arrow between any two objects. All (co)limits that exist are
trivially computed.
Synopsis
- data DISCRETE k = D k
- data Discrete (a :: DISCRETE k) (b :: DISCRETE k) where
- withEq :: forall {k} (a :: DISCRETE k) (b :: DISCRETE k) r. Indexed k => Discrete a b -> (a ~~ b => r) -> r
- type Delta v (c :: BOOL) = If c (Unit :: v) (InitialObject :: v)
- deltaAct :: forall {k} {v} (x :: k) (y :: k) (w :: v) (w' :: v). (Quantale v, KnownIndex x, KnownIndex y, Ob w, Ob w') => (x ~ y => w :~: w') -> (Delta v (Equal x y) ** w) ~> w'
- data CODISCRETE k = CD k
- data Codiscrete (a :: CODISCRETE k) (b :: CODISCRETE k) where
- Arr :: forall {k} (a :: CODISCRETE k) (b :: CODISCRETE k). (Ob a, Ob b) => Codiscrete a b
- anyArr :: forall {k} (a :: CODISCRETE k) (b :: CODISCRETE k). (Indexed k, Ob a, Ob b) => Codiscrete a b
Documentation
data DISCRETE k Source Github #
Constructors
| D k |
Instances
data Discrete (a :: DISCRETE k) (b :: DISCRETE k) where Source Github #
Instances
withEq :: forall {k} (a :: DISCRETE k) (b :: DISCRETE k) r. Indexed k => Discrete a b -> (a ~~ b => r) -> r Source Github #
type Delta v (c :: BOOL) = If c (Unit :: v) (InitialObject :: v) Source Github #
The hom-object of the discrete category in a quantale: the unit on the diagonal, the bottom off
it. Points are at distance 0 from themselves and infinitely far from each other: the discrete
category is a (discrete) Lawvere metric space, the base for shortest paths on a bare set of points.
deltaAct :: forall {k} {v} (x :: k) (y :: k) (w :: v) (w' :: v). (Quantale v, KnownIndex x, KnownIndex y, Ob w, Ob w') => (x ~ y => w :~: w') -> (Delta v (Equal x y) ** w) ~> w' Source Github #
data CODISCRETE k Source Github #
Constructors
| CD k |
Instances
data Codiscrete (a :: CODISCRETE k) (b :: CODISCRETE k) where Source Github #
Constructors
| Arr :: forall {k} (a :: CODISCRETE k) (b :: CODISCRETE k). (Ob a, Ob b) => Codiscrete a b |
Instances
| Indexed k => DaggerProfunctor (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete Methods dagger :: forall (a :: CODISCRETE k) (b :: CODISCRETE k). Codiscrete a b -> Codiscrete b a Source Github # | |
| Indexed k => Promonad (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete Methods id :: forall (a :: CODISCRETE k). Ob a => Codiscrete a a Source Github # (.) :: forall (b :: CODISCRETE k) (c :: CODISCRETE k) (a :: CODISCRETE k). Codiscrete b c -> Codiscrete a b -> Codiscrete a c Source Github # | |
| Indexed k => DecidableProfunctor (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete Methods decide :: forall (a :: CODISCRETE k) (b :: CODISCRETE k). (Ob a, Ob b) => Decision (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) a b (Holds (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) a b) Source Github # toHolds :: forall (a :: CODISCRETE k) (b :: CODISCRETE k) r. Codiscrete a b -> ((Holds (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) a b ~ 'TRU, Ob a, Ob b) => r) -> r Source Github # | |
| Indexed k => ThinProfunctor (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete Methods arr :: forall (a :: CODISCRETE k) (b :: CODISCRETE k). (Ob a, Ob b, HasArrow (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) a b) => Codiscrete a b Source Github # withArr :: forall (a :: CODISCRETE k) (b :: CODISCRETE k) r. Codiscrete a b -> ((HasArrow (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) a b, Ob a, Ob b) => r) -> r Source Github # | |
| Indexed k => Profunctor (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete Methods dimap :: forall (c :: CODISCRETE k) (a :: CODISCRETE k) (b :: CODISCRETE k) (d :: CODISCRETE k). (c ~> a) -> (b ~> d) -> Codiscrete a b -> Codiscrete c d Source Github # lmap :: forall (c :: CODISCRETE k) (a :: CODISCRETE k) (b :: CODISCRETE k). (c ~> a) -> Codiscrete a b -> Codiscrete c b Source Github # rmap :: forall (b :: CODISCRETE k) (d :: CODISCRETE k) (a :: CODISCRETE k). (b ~> d) -> Codiscrete a b -> Codiscrete a d Source Github # (\\) :: forall (a :: CODISCRETE k) (b :: CODISCRETE k) r. ((Ob a, Ob b) => r) -> Codiscrete a b -> r Source Github # | |
| type HasArrow (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) (a :: CODISCRETE k) (b :: CODISCRETE k) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete type HasArrow (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) (a :: CODISCRETE k) (b :: CODISCRETE k) = Holds (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) a b ~ 'TRU | |
| type Holds (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) (a :: CODISCRETE k) (b :: CODISCRETE k) Source Github # | |
Defined in Proarrow.Category.Instance.Discrete type Holds (Codiscrete :: CODISCRETE k -> CODISCRETE k -> Type) (a :: CODISCRETE k) (b :: CODISCRETE k) = 'TRU | |
anyArr :: forall {k} (a :: CODISCRETE k) (b :: CODISCRETE k). (Indexed k, Ob a, Ob b) => Codiscrete a b Source Github #
Witnesses that really is codiscrete: this only typechecks if CODISCRETE kCodiscrete is a
CodiscreteProfunctor, so the definition is the check.