| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.Type.Ordinal
Contents
Description
Set-theoretic ordinals for general peano arithmetic models
- data Ordinal n where
- pattern OZ :: forall nat n. IsPeano nat => (~) Bool ((:<) nat (Zero nat) n) True => Ordinal nat n
- pattern OS :: forall nat t. (PeanoOrder nat, SingI nat t) => IsPeano nat => Ordinal nat t -> Ordinal nat (Succ nat t)
- class (PeanoOrder nat, Monomorphicable (Sing :: nat -> *), Integral (MonomorphicRep (Sing :: nat -> *)), Show (MonomorphicRep (Sing :: nat -> *))) => HasOrdinal nat
- sNatToOrd' :: (PeanoOrder nat, (m :< n) ~ True) => Sing (n :: nat) -> Sing m -> Ordinal n
- sNatToOrd :: (PeanoOrder nat, SingI (n :: nat), (m :< n) ~ True) => Sing m -> Ordinal n
- ordToInt :: (HasOrdinal nat, int ~ MonomorphicRep (Sing :: nat -> *)) => Ordinal (n :: nat) -> int
- ordToSing :: PeanoOrder nat => Ordinal (n :: nat) -> SomeSing nat
- ordToSing' :: forall n. (PeanoOrder nat, SingI n) => Ordinal n -> CastedOrdinal n
- data CastedOrdinal n where
- CastedOrdinal :: (m :< n) ~ True => Sing m -> CastedOrdinal n
- unsafeFromInt :: forall n. (HasOrdinal nat, SingI (n :: nat)) => MonomorphicRep (Sing :: nat -> *) -> Ordinal n
- inclusion :: (n :<= m) ~ True => Ordinal n -> Ordinal m
- inclusion' :: (n :< m) ~ True => Sing m -> Ordinal n -> Ordinal m
- (@+) :: forall n m. (PeanoOrder nat, SingI (n :: nat), SingI m) => Ordinal n -> Ordinal m -> Ordinal (n :+ m)
- enumOrdinal :: (PeanoOrder nat, SingI n) => Sing (n :: nat) -> [Ordinal n]
- absurdOrd :: PeanoOrder nat => Ordinal (Zero nat) -> a
- vacuousOrd :: (PeanoOrder nat, Functor f) => f (Ordinal (Zero nat)) -> f a
- vacuousOrdM :: (PeanoOrder nat, Monad m) => m (Ordinal (Zero nat)) -> m a
- od :: QuasiQuoter
Data-types
Set-theoretic (finite) ordinals:
n = {0, 1, ..., n-1}So, Ordinal n has exactly n inhabitants. So especially Ordinal 'Z is isomorphic to Void.
Since 0.5.0.0
Instances
| (SingI Nat m, SingI Nat n, (~) Nat n ((+) m 1)) => Bounded (Ordinal Nat n) Source # | |
| SingI Nat n => Bounded (Ordinal Nat (S n)) Source # | |
| (HasOrdinal nat1, SingI nat1 n) => Enum (Ordinal nat1 n) Source # | |
| HasOrdinal nat1 => Eq (Ordinal nat1 n) Source # | |
| (HasOrdinal nat1, SingI nat1 n) => Num (Ordinal nat1 n) Source # | |
| HasOrdinal nat1 => Ord (Ordinal nat1 n) Source # | |
| (SingI nat1 n, HasOrdinal nat1) => Show (Ordinal nat1 n) Source # | |
pattern OZ :: forall nat n. IsPeano nat => (~) Bool ((:<) nat (Zero nat) n) True => Ordinal nat n Source #
Pattern synonym representing the 0-th ordinal.
pattern OS :: forall nat t. (PeanoOrder nat, SingI nat t) => IsPeano nat => Ordinal nat t -> Ordinal nat (Succ nat t) Source #
Pattern synonym represents (n+1)-th ordinal.OS n
class (PeanoOrder nat, Monomorphicable (Sing :: nat -> *), Integral (MonomorphicRep (Sing :: nat -> *)), Show (MonomorphicRep (Sing :: nat -> *))) => HasOrdinal nat Source #
Class synonym for Peano numerals with ordinals.
Since 0.5.0.0
Instances
| (PeanoOrder nat1, Monomorphicable nat1 (Sing nat1), Integral (MonomorphicRep nat1 (Sing nat1)), Show (MonomorphicRep nat1 (Sing nat1))) => HasOrdinal nat1 Source # | |
Conversion from cardinals to ordinals.
sNatToOrd' :: (PeanoOrder nat, (m :< n) ~ True) => Sing (n :: nat) -> Sing m -> Ordinal n Source #
sNatToOrd' n m injects m as Ordinal n.
Since 0.5.0.0
sNatToOrd :: (PeanoOrder nat, SingI (n :: nat), (m :< n) ~ True) => Sing m -> Ordinal n Source #
sNatToOrd' with n inferred.
ordToInt :: (HasOrdinal nat, int ~ MonomorphicRep (Sing :: nat -> *)) => Ordinal (n :: nat) -> int Source #
Convert ordinal into Int.
ordToSing :: PeanoOrder nat => Ordinal (n :: nat) -> SomeSing nat Source #
Convert Ordinal n into monomorphic Sing
Since 0.5.0.0
ordToSing' :: forall n. (PeanoOrder nat, SingI n) => Ordinal n -> CastedOrdinal n Source #
Convert Ordinal n into Sing m with the proof of 'S m :<= n.
data CastedOrdinal n where Source #
Constructors
| CastedOrdinal :: (m :< n) ~ True => Sing m -> CastedOrdinal n |
unsafeFromInt :: forall n. (HasOrdinal nat, SingI (n :: nat)) => MonomorphicRep (Sing :: nat -> *) -> Ordinal n Source #
inclusion :: (n :<= m) ~ True => Ordinal n -> Ordinal m Source #
Inclusion function for ordinals with codomain inferred.
inclusion' :: (n :< m) ~ True => Sing m -> Ordinal n -> Ordinal m Source #
Inclusion function for ordinals.
Ordinal arithmetics
(@+) :: forall n m. (PeanoOrder nat, SingI (n :: nat), SingI m) => Ordinal n -> Ordinal m -> Ordinal (n :+ m) Source #
Ordinal addition.
enumOrdinal :: (PeanoOrder nat, SingI n) => Sing (n :: nat) -> [Ordinal n] Source #
Elimination rules for Ordinal Z.
Ordinal ZabsurdOrd :: PeanoOrder nat => Ordinal (Zero nat) -> a Source #
Since Ordinal 'Z is logically not inhabited, we can coerce it to any value.
Since 0.2.3.0
vacuousOrd :: (PeanoOrder nat, Functor f) => f (Ordinal (Zero nat)) -> f a Source #
vacuousOrdM :: (PeanoOrder nat, Monad m) => m (Ordinal (Zero nat)) -> m a Source #
absurdOrd for the value in Monad.
This function will become uneccesary once Applicative (and hence Functor)
become the superclass of Monad.
Since 0.2.3.0
Quasi Quoter
od :: QuasiQuoter Source #
Quasiquoter for ordinals