| Safe Haskell | None |
|---|---|
| Language | GHC2024 |
Proarrow.Category.Instance.FinSet
Description
Synopsis
- data FINSET = FS Nat
- data FinSet (a :: FINSET) (b :: FINSET) where
- mult :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Fin n -> Fin m -> Fin (Mult n m)
- unmult :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Fin (Mult n m) -> (Fin n, Fin m)
- type family Exp (a :: Nat) (b :: Nat) :: Nat where ...
- exp :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Vec n (Fin m) -> Fin (Exp m n)
- unExp :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Fin (Exp m n) -> Vec n (Fin m)
- findIso :: forall (n :: Nat). SNatI n => [(Fin n, Fin n)] -> Maybe (Iso' ('FS n) ('FS n))
- findBijection :: forall (n :: Nat). SNatI n => [(Fin n, Fin n)] -> Maybe (Vec n (Fin n))
- findIndex :: forall a (n :: Nat). (a -> Bool) -> Vec n a -> Fin n
Documentation
Instances
| Monoidal FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Associated Types
Methods withOb2 :: forall (a :: FINSET) (b :: FINSET) r. (Ob a, Ob b) => (Ob (a ** b) => r) -> r Source Github # leftUnitor :: forall (a :: FINSET). Ob a => ((Unit :: FINSET) ** a) ~> a Source Github # leftUnitorInv :: forall (a :: FINSET). Ob a => a ~> ((Unit :: FINSET) ** a) Source Github # rightUnitor :: forall (a :: FINSET). Ob a => (a ** (Unit :: FINSET)) ~> a Source Github # rightUnitorInv :: forall (a :: FINSET). Ob a => a ~> (a ** (Unit :: FINSET)) Source Github # associator :: forall (a :: FINSET) (b :: FINSET) (c :: FINSET). (Ob a, Ob b, Ob c) => ((a ** b) ** c) ~> (a ** (b ** c)) Source Github # associatorInv :: forall (a :: FINSET) (b :: FINSET) (c :: FINSET). (Ob a, Ob b, Ob c) => (a ** (b ** c)) ~> ((a ** b) ** c) Source Github # | |||||||||
| SymMonoidal FINSET Source Github # | |||||||||
| Closed FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Methods withObExp :: forall (a :: FINSET) (b :: FINSET) r. (Ob a, Ob b) => (Ob (a ~~> b) => r) -> r Source Github # curry :: forall (a :: FINSET) (b :: FINSET) (c :: FINSET). (Ob a, Ob b) => ((a ** b) ~> c) -> a ~> (b ~~> c) Source Github # apply :: forall (a :: FINSET) (b :: FINSET). (Ob a, Ob b) => ((a ~~> b) ** a) ~> b Source Github # (^^^) :: forall (a :: FINSET) (b :: FINSET) (x :: FINSET) (y :: FINSET). (b ~> y) -> (x ~> a) -> (a ~~> b) ~> (x ~~> y) Source Github # | |||||||||
| CopyDiscard FINSET Source Github # | |||||||||
| Distributive FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Methods distL :: forall (a :: FINSET) (b :: FINSET) (c :: FINSET). (Ob a, Ob b, Ob c) => (a ** (b || c)) ~> ((a ** b) || (a ** c)) Source Github # distR :: forall (a :: FINSET) (b :: FINSET) (c :: FINSET). (Ob a, Ob b, Ob c) => ((a || b) ** c) ~> ((a ** c) || (b ** c)) Source Github # absorbL :: forall (a :: FINSET). Ob a => (a ** (InitialObject :: FINSET)) ~> (InitialObject :: FINSET) Source Github # absorbR :: forall (a :: FINSET). Ob a => ((InitialObject :: FINSET) ** a) ~> (InitialObject :: FINSET) Source Github # | |||||||||
| ElementaryTopos FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| HasEpiMonoFactorization FINSET Source Github # | |||||||||
| HasSubobjectClassifier FINSET Source Github # |
| ||||||||
Defined in Proarrow.Category.Instance.FinSet Associated Types
| |||||||||
| HasBinaryCoproducts FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Methods withObCoprod :: forall (a :: FINSET) (b :: FINSET) r. (Ob a, Ob b) => (Ob (a || b) => r) -> r Source Github # lft :: forall (a :: FINSET) (b :: FINSET). (Ob a, Ob b) => a ~> (a || b) Source Github # rgt :: forall (a :: FINSET) (b :: FINSET). (Ob a, Ob b) => b ~> (a || b) Source Github # (|||) :: forall (x :: FINSET) (a :: FINSET) (y :: FINSET). (x ~> a) -> (y ~> a) -> (x || y) ~> a Source Github # (+++) :: forall (a :: FINSET) (b :: FINSET) (x :: FINSET) (y :: FINSET). (a ~> x) -> (b ~> y) -> (a || b) ~> (x || y) Source Github # | |||||||||
| HasCoequalizers FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| HasInitialObject FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Associated Types
| |||||||||
| HasPushouts FINSET Source Github # |
| ||||||||
Defined in Proarrow.Category.Instance.FinSet Methods pushout :: forall (o :: FINSET) (a :: FINSET) (b :: FINSET) r. (o ~> a) -> (o ~> b) -> (forall (p :: FINSET). (a ~> p) -> (b ~> p) -> r) -> r Source Github # factorPushout :: forall (a :: FINSET) (b :: FINSET) (p :: FINSET) (q :: FINSET). (a ~> p) -> (b ~> p) -> (a ~> q) -> (b ~> q) -> p ~> q Source Github # | |||||||||
| CategoryOf FINSET Source Github # | The skeleton of the category of finite sets: objects are natural numbers and an arrow
| ||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| HasBinaryProducts FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Methods withObProd :: forall (a :: FINSET) (b :: FINSET) r. (Ob a, Ob b) => (Ob (a && b) => r) -> r Source Github # fst :: forall (a :: FINSET) (b :: FINSET). (Ob a, Ob b) => (a && b) ~> a Source Github # snd :: forall (a :: FINSET) (b :: FINSET). (Ob a, Ob b) => (a && b) ~> b Source Github # (&&&) :: forall (a :: FINSET) (x :: FINSET) (y :: FINSET). (a ~> x) -> (a ~> y) -> a ~> (x && y) Source Github # (***) :: forall (a :: FINSET) (b :: FINSET) (x :: FINSET) (y :: FINSET). (a ~> x) -> (b ~> y) -> (a && b) ~> (x && y) Source Github # | |||||||||
| HasEqualizers FINSET Source Github # |
| ||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| HasPullbacks FINSET Source Github # |
| ||||||||
Defined in Proarrow.Category.Instance.FinSet Methods pullback :: forall (o :: FINSET) (a :: FINSET) (b :: FINSET) r. (a ~> o) -> (b ~> o) -> (forall (p :: FINSET). (p ~> a) -> (p ~> b) -> r) -> r Source Github # factorPullback :: forall (a :: FINSET) (b :: FINSET) (p :: FINSET) (q :: FINSET). (p ~> a) -> (p ~> b) -> (q ~> a) -> (q ~> b) -> q ~> p Source Github # | |||||||||
| HasTerminalObject FINSET Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Associated Types
| |||||||||
| Promonad FinSet Source Github # | |||||||||
| InternalIn BOOL FINSET Source Github # |
| ||||||||
Defined in Proarrow.Category.Internal Associated Types
Methods source :: (C1 BOOL :: FINSET) ~> (C0 BOOL :: FINSET) Source Github # target :: (C1 BOOL :: FINSET) ~> (C0 BOOL :: FINSET) Source Github # identity :: (C0 BOOL :: FINSET) ~> (C1 BOOL :: FINSET) Source Github # compose :: Cosink '[C1 BOOL :: FINSET, C1 BOOL :: FINSET, C1 BOOL :: FINSET] Source Github # | |||||||||
| MonoidalProfunctor FinSet Source Github # | |||||||||
| Profunctor FinSet Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet Methods dimap :: forall (c :: FINSET) (a :: FINSET) (b :: FINSET) (d :: FINSET). (c ~> a) -> (b ~> d) -> FinSet a b -> FinSet c d Source Github # lmap :: forall (c :: FINSET) (a :: FINSET) (b :: FINSET). (c ~> a) -> FinSet a b -> FinSet c b Source Github # rmap :: forall (b :: FINSET) (d :: FINSET) (a :: FINSET). (b ~> d) -> FinSet a b -> FinSet a d Source Github # (\\) :: forall (a :: FINSET) (b :: FINSET) r. ((Ob a, Ob b) => r) -> FinSet a b -> r Source Github # | |||||||||
| FunctorForRep Fun Source Github # | |||||||||
| MonoidalProfunctor (Rep Fun) Source Github # | |||||||||
| SNatI a => CocommutativeComonoid ('FS a :: FINSET) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| SNatI a => Comonoid ('FS a :: FINSET) Source Github # |
| ||||||||
| Monoid ('FS Nat1) Source Github # | |||||||||
| MonoidalProfunctor (Coprod (Rep Fun)) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinRel Methods one :: Coprod (Rep Fun) (Unit :: COPROD FINREL) (Unit :: COPROD FINSET) Source Github # (**) :: forall (x1 :: COPROD FINREL) (x2 :: COPROD FINSET) (y1 :: COPROD FINREL) (y2 :: COPROD FINSET). Coprod (Rep Fun) x1 x2 -> Coprod (Rep Fun) y1 y2 -> Coprod (Rep Fun) (x1 ** y1) (x2 ** y2) Source Github # | |||||||||
| type Unit Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| type Omega Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| type InitialObject Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| type (~>) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| type TerminalObject Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| type Ob (a :: FINSET) Source Github # | |||||||||
| type C0 BOOL Source Github # | |||||||||
Defined in Proarrow.Category.Internal | |||||||||
| type C1 BOOL Source Github # | |||||||||
Defined in Proarrow.Category.Internal | |||||||||
| type (a :: FINSET) ** (b :: FINSET) Source Github # | |||||||||
Defined in Proarrow.Category.Instance.FinSet | |||||||||
| type Fun @ ('FS a :: FINSET) Source Github # | |||||||||
| type ('FS a :: FINSET) ~~> ('FS b :: FINSET) Source Github # | |||||||||
| type ('FS a :: FINSET) || ('FS b :: FINSET) Source Github # | |||||||||
| type ('FS a :: FINSET) && ('FS b :: FINSET) Source Github # | |||||||||
data FinSet (a :: FINSET) (b :: FINSET) where Source Github #
Constructors
| FinSet | |
Instances
| Promonad FinSet Source Github # | |
| MonoidalProfunctor FinSet Source Github # | |
| Profunctor FinSet Source Github # | |
Defined in Proarrow.Category.Instance.FinSet Methods dimap :: forall (c :: FINSET) (a :: FINSET) (b :: FINSET) (d :: FINSET). (c ~> a) -> (b ~> d) -> FinSet a b -> FinSet c d Source Github # lmap :: forall (c :: FINSET) (a :: FINSET) (b :: FINSET). (c ~> a) -> FinSet a b -> FinSet c b Source Github # rmap :: forall (b :: FINSET) (d :: FINSET) (a :: FINSET). (b ~> d) -> FinSet a b -> FinSet a d Source Github # (\\) :: forall (a :: FINSET) (b :: FINSET) r. ((Ob a, Ob b) => r) -> FinSet a b -> r Source Github # | |
| Show (FinSet a b) Source Github # | |
| Eq (FinSet a b) Source Github # | |
mult :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Fin n -> Fin m -> Fin (Mult n m) Source Github #
>>>import Data.Type.Nat>>>import Data.Fin>>>mult @Nat5 @Nat4 fin4 fin2 -- 4*4+218>>>mult @Nat4 @Nat5 fin2 fin4 -- 5*2+414
unmult :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Fin (Mult n m) -> (Fin n, Fin m) Source Github #
exp :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Vec n (Fin m) -> Fin (Exp m n) Source Github #
>>>import Data.Type.Nat>>>import Data.Fin>>>exp @_ @Nat2 (fin1 ::: fin0 ::: fin1 ::: fin1 ::: VNil)11
unExp :: forall (n :: Nat) (m :: Nat). (SNatI n, SNatI m) => Fin (Exp m n) -> Vec n (Fin m) Source Github #
>>>import Data.Type.Nat>>>import Data.Fin>>>unExp @Nat3 @Nat2 fin61 ::: 1 ::: 0 ::: VNil
findIso :: forall (n :: Nat). SNatI n => [(Fin n, Fin n)] -> Maybe (Iso' ('FS n) ('FS n)) Source Github #
Finds an isomorphism between 'FS n' and itself that's consistent with the given (source, target) pairs, if one exists.
findBijection :: forall (n :: Nat). SNatI n => [(Fin n, Fin n)] -> Maybe (Vec n (Fin n)) Source Github #
Extends the given (source, target) pairs to a full bijection on Fin n, if they're consistent
with being a partial injection (checked in both directions as they're added, so two different
sources claiming the same target is rejected just as readily as one source getting conflicting
targets). Unconstrained sources are matched up with whatever targets are left over, in order.