Safe Haskell | None |
---|---|
Language | Haskell2010 |
Type level peano natural number, some arithmetic functions and their singletons.
Synopsis
- module Data.Singletons
- data Nat
- data SSym0 (l :: TyFun Nat Nat)
- type SSym1 (t :: Nat) = S t
- type ZSym0 = Z
- type SNat = (Sing :: Nat -> Type)
- data family Sing (a :: k) :: *
- min :: Ord a => a -> a -> a
- type family Min (arg :: a) (arg1 :: a) :: a
- sMin :: SOrd a => Sing t1 -> Sing t2 -> Sing (Apply (Apply (MinSym0 :: TyFun a (TyFun a a -> Type) -> *) t1) t2)
- max :: Ord a => a -> a -> a
- type family Max (arg :: a) (arg1 :: a) :: a
- sMax :: SOrd a => Sing t1 -> Sing t2 -> Sing (Apply (Apply (MaxSym0 :: TyFun a (TyFun a a -> Type) -> *) t1) t2)
- data MinSym0 (l :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type)) :: forall a6989586621679299162. TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *
- data MinSym1 (l :: a6989586621679299162) (l1 :: TyFun a6989586621679299162 a6989586621679299162) :: forall a6989586621679299162. a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> *
- type MinSym2 (t :: a6989586621679299162) (t1 :: a6989586621679299162) = Min t t1
- data MaxSym0 (l :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type)) :: forall a6989586621679299162. TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *
- data MaxSym1 (l :: a6989586621679299162) (l1 :: TyFun a6989586621679299162 a6989586621679299162) :: forall a6989586621679299162. a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> *
- type MaxSym2 (t :: a6989586621679299162) (t1 :: a6989586621679299162) = Max t t1
- type family (arg :: a) + (arg1 :: a) :: a
- data (+@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *
- data (l :: a6989586621679412326) +@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *
- type (+@#@$$$) (t :: a6989586621679412326) (t1 :: a6989586621679412326) = t + t1
- (%+) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((+@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2)
- type family (arg :: a) * (arg1 :: a) :: a
- data (*@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *
- data (l :: a6989586621679412326) *@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *
- type (*@#@$$$) (t :: a6989586621679412326) (t1 :: a6989586621679412326) = t * t1
- (%*) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((*@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2)
- type family (arg :: a) - (arg1 :: a) :: a
- type family (a :: Nat) ** (a :: Nat) :: Nat where ...
- (%**) :: forall (t :: Nat) (t :: Nat). Sing t -> Sing t -> Sing (Apply (Apply (**@#@$) t) t :: Nat)
- data (-@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *
- data (l :: a6989586621679412326) -@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *
- type (-@#@$$$) (t :: a6989586621679412326) (t1 :: a6989586621679412326) = t - t1
- (%-) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((-@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2)
- data Leq (n :: Nat) (m :: Nat) where
- type family (arg :: a) <= (arg1 :: a) :: Bool
- type LeqInstance n m = IsTrue (n <= m)
- boolToPropLeq :: (n <= m) ~ True => SNat n -> SNat m -> Leq n m
- boolToClassLeq :: (n <= m) ~ True => SNat n -> SNat m -> LeqInstance n m
- propToClassLeq :: Leq n m -> LeqInstance n m
- propToBoolLeq :: forall n m. Leq n m -> LeqTrueInstance n m
- natToInt :: Integral n => Nat -> n
- intToNat :: (Integral a, Ord a) => a -> Nat
- sNatToInt :: Num n => SNat x -> n
- nat :: QuasiQuoter
- snat :: QuasiQuoter
- class (SDecide nat, SNum nat, SEnum nat, SingKind nat, SingKind nat) => IsPeano nat where
- plusCong :: (n :~: m) -> (n' :~: m') -> (n + n') :~: (m + m')
- plusCongR :: Sing k -> (n :~: m) -> (k + n) :~: (k + m)
- plusCongL :: (n :~: m) -> Sing k -> (n + k) :~: (m + k)
- snEqZAbsurd :: SingI n => (S n :~: Z) -> a
- plusInjectiveL :: SNat n -> SNat m -> SNat l -> ((n + m) :~: (n + l)) -> m :~: l
- plusInjectiveR :: SNat n -> SNat m -> SNat l -> ((n + l) :~: (m + l)) -> n :~: m
- multCongL :: (n :~: m) -> Sing k -> (n * k) :~: (m * k)
- multCongR :: Sing k -> (n :~: m) -> (k * n) :~: (k * m)
- multCong :: (n :~: m) -> (l :~: k) -> (n * l) :~: (m * k)
- plusMinusEqL :: SNat n -> SNat m -> ((n + m) - m) :~: n
- plusNeutralR :: SNat n -> SNat m -> ((n + m) :~: n) -> m :~: Z
- plusNeutralL :: SNat n -> SNat m -> ((n + m) :~: m) -> n :~: Z
- class (SOrd nat, IsPeano nat) => PeanoOrder nat where
- reflToSEqual :: SNat n -> SNat m -> (n :~: m) -> IsTrue (n == m)
- sLeqReflexive :: SNat n -> SNat m -> IsTrue (n == m) -> IsTrue (n <= m)
- nonSLeqToLT :: (n <= m) ~ False => SNat n -> SNat m -> Compare m n :~: LT
- zero :: Nat
- one :: Nat
- two :: Nat
- three :: Nat
- four :: Nat
- five :: Nat
- six :: Nat
- seven :: Nat
- eight :: Nat
- nine :: Nat
- ten :: Nat
- eleven :: Nat
- twelve :: Nat
- thirteen :: Nat
- fourteen :: Nat
- fifteen :: Nat
- sixteen :: Nat
- seventeen :: Nat
- eighteen :: Nat
- nineteen :: Nat
- twenty :: Nat
- type family Zero :: Nat where ...
- type family One :: Nat where ...
- type family Two :: Nat where ...
- type family Three :: Nat where ...
- type family Four :: Nat where ...
- type family Five :: Nat where ...
- type family Six :: Nat where ...
- type family Seven :: Nat where ...
- type family Eight :: Nat where ...
- type family Nine :: Nat where ...
- type family Ten :: Nat where ...
- type family Eleven :: Nat where ...
- type family Twelve :: Nat where ...
- type family Thirteen :: Nat where ...
- type family Fourteen :: Nat where ...
- type family Fifteen :: Nat where ...
- type family Sixteen :: Nat where ...
- type family Seventeen :: Nat where ...
- type family Eighteen :: Nat where ...
- type family Nineteen :: Nat where ...
- type family Twenty :: Nat where ...
- type ZeroSym0 = Zero
- type OneSym0 = One
- type TwoSym0 = Two
- type ThreeSym0 = Three
- type FourSym0 = Four
- type FiveSym0 = Five
- type SixSym0 = Six
- type SevenSym0 = Seven
- type EightSym0 = Eight
- type NineSym0 = Nine
- type TenSym0 = Ten
- type ElevenSym0 = Eleven
- type TwelveSym0 = Twelve
- type ThirteenSym0 = Thirteen
- type FourteenSym0 = Fourteen
- type FifteenSym0 = Fifteen
- type SixteenSym0 = Sixteen
- type SeventeenSym0 = Seventeen
- type EighteenSym0 = Eighteen
- type NineteenSym0 = Nineteen
- type TwentySym0 = Twenty
- sZero :: Sing (ZeroSym0 :: Nat)
- sOne :: Sing (OneSym0 :: Nat)
- sTwo :: Sing (TwoSym0 :: Nat)
- sThree :: Sing (ThreeSym0 :: Nat)
- sFour :: Sing (FourSym0 :: Nat)
- sFive :: Sing (FiveSym0 :: Nat)
- sSix :: Sing (SixSym0 :: Nat)
- sSeven :: Sing (SevenSym0 :: Nat)
- sEight :: Sing (EightSym0 :: Nat)
- sNine :: Sing (NineSym0 :: Nat)
- sTen :: Sing (TenSym0 :: Nat)
- sEleven :: Sing (ElevenSym0 :: Nat)
- sTwelve :: Sing (TwelveSym0 :: Nat)
- sThirteen :: Sing (ThirteenSym0 :: Nat)
- sFourteen :: Sing (FourteenSym0 :: Nat)
- sFifteen :: Sing (FifteenSym0 :: Nat)
- sSixteen :: Sing (SixteenSym0 :: Nat)
- sSeventeen :: Sing (SeventeenSym0 :: Nat)
- sEighteen :: Sing (EighteenSym0 :: Nat)
- sNineteen :: Sing (NineteenSym0 :: Nat)
- sTwenty :: Sing (TwentySym0 :: Nat)
- n0 :: Nat
- n1 :: Nat
- n2 :: Nat
- n3 :: Nat
- n4 :: Nat
- n5 :: Nat
- n6 :: Nat
- n7 :: Nat
- n8 :: Nat
- n9 :: Nat
- n10 :: Nat
- n11 :: Nat
- n12 :: Nat
- n13 :: Nat
- n14 :: Nat
- n15 :: Nat
- n16 :: Nat
- n17 :: Nat
- n18 :: Nat
- n19 :: Nat
- n20 :: Nat
- type family N0 :: Nat where ...
- type family N1 :: Nat where ...
- type family N2 :: Nat where ...
- type family N3 :: Nat where ...
- type family N4 :: Nat where ...
- type family N5 :: Nat where ...
- type family N6 :: Nat where ...
- type family N7 :: Nat where ...
- type family N8 :: Nat where ...
- type family N9 :: Nat where ...
- type family N10 :: Nat where ...
- type family N11 :: Nat where ...
- type family N12 :: Nat where ...
- type family N13 :: Nat where ...
- type family N14 :: Nat where ...
- type family N15 :: Nat where ...
- type family N16 :: Nat where ...
- type family N17 :: Nat where ...
- type family N18 :: Nat where ...
- type family N19 :: Nat where ...
- type family N20 :: Nat where ...
- type N0Sym0 = N0
- type N1Sym0 = N1
- type N2Sym0 = N2
- type N3Sym0 = N3
- type N4Sym0 = N4
- type N5Sym0 = N5
- type N6Sym0 = N6
- type N7Sym0 = N7
- type N8Sym0 = N8
- type N9Sym0 = N9
- type N10Sym0 = N10
- type N11Sym0 = N11
- type N12Sym0 = N12
- type N13Sym0 = N13
- type N14Sym0 = N14
- type N15Sym0 = N15
- type N16Sym0 = N16
- type N17Sym0 = N17
- type N18Sym0 = N18
- type N19Sym0 = N19
- type N20Sym0 = N20
- sN0 :: Sing (N0Sym0 :: Nat)
- sN1 :: Sing (N1Sym0 :: Nat)
- sN2 :: Sing (N2Sym0 :: Nat)
- sN3 :: Sing (N3Sym0 :: Nat)
- sN4 :: Sing (N4Sym0 :: Nat)
- sN5 :: Sing (N5Sym0 :: Nat)
- sN6 :: Sing (N6Sym0 :: Nat)
- sN7 :: Sing (N7Sym0 :: Nat)
- sN8 :: Sing (N8Sym0 :: Nat)
- sN9 :: Sing (N9Sym0 :: Nat)
- sN10 :: Sing (N10Sym0 :: Nat)
- sN11 :: Sing (N11Sym0 :: Nat)
- sN12 :: Sing (N12Sym0 :: Nat)
- sN13 :: Sing (N13Sym0 :: Nat)
- sN14 :: Sing (N14Sym0 :: Nat)
- sN15 :: Sing (N15Sym0 :: Nat)
- sN16 :: Sing (N16Sym0 :: Nat)
- sN17 :: Sing (N17Sym0 :: Nat)
- sN18 :: Sing (N18Sym0 :: Nat)
- sN19 :: Sing (N19Sym0 :: Nat)
- sN20 :: Sing (N20Sym0 :: Nat)
Re-exported modules.
module Data.Singletons
Natural Numbers
Peano natural numbers. It will be promoted to the type-level natural number.
Instances
data SSym0 (l :: TyFun Nat Nat) Source #
Instances
SuppressUnusedWarnings SSym0 Source # | |
Defined in Data.Type.Natural.Definitions suppressUnusedWarnings :: () # | |
type Apply SSym0 (l :: Nat) Source # | |
Defined in Data.Type.Natural.Definitions |
Singleton type for Nat
.
data family Sing (a :: k) :: * #
The singleton kind-indexed data family.
Instances
Eq (Sing n) # | |
ShowSing Nat => Show (Sing z) # | |
data Sing (z :: Bool) | |
data Sing (z :: Ordering) | |
data Sing (n :: Nat) | |
Defined in Data.Singletons.TypeLits.Internal | |
data Sing (n :: Symbol) | |
Defined in Data.Singletons.TypeLits.Internal | |
data Sing (z :: ()) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (z :: Nat) # | |
data Sing (z :: Void) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (z :: [a]) | |
data Sing (z :: Maybe a) | |
data Sing (z :: NonEmpty a) | |
data Sing (z :: Either a b) | |
data Sing (z :: (a, b)) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (f :: k1 ~> k2) | |
data Sing (z :: (a, b, c)) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (z :: (a, b, c, d)) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (z :: (a, b, c, d, e)) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (z :: (a, b, c, d, e, f)) | |
Defined in Data.Singletons.Prelude.Instances | |
data Sing (z :: (a, b, c, d, e, f, g)) | |
Defined in Data.Singletons.Prelude.Instances |
Arithmetic functions and their singletons.
type family Min (arg :: a) (arg1 :: a) :: a #
Instances
type Min (arg1 :: Bool) (arg2 :: Bool) | |
type Min (arg1 :: Ordering) (arg2 :: Ordering) | |
type Min (arg1 :: Nat) (arg2 :: Nat) | |
type Min (arg1 :: Symbol) (arg2 :: Symbol) | |
type Min (arg1 :: ()) (arg2 :: ()) | |
type Min (a1 :: Nat) (a2 :: Nat) # | |
Defined in Data.Type.Natural.Definitions | |
type Min (arg1 :: Void) (arg2 :: Void) | |
type Min (arg1 :: [a]) (arg2 :: [a]) | |
type Min (arg1 :: Maybe a) (arg2 :: Maybe a) | |
type Min (arg1 :: NonEmpty a) (arg2 :: NonEmpty a) | |
type Min (arg1 :: Either a b) (arg2 :: Either a b) | |
type Min (arg1 :: (a, b)) (arg2 :: (a, b)) | |
type Min (arg1 :: (a, b, c)) (arg2 :: (a, b, c)) | |
type Min (arg1 :: (a, b, c, d)) (arg2 :: (a, b, c, d)) | |
type Min (arg1 :: (a, b, c, d, e)) (arg2 :: (a, b, c, d, e)) | |
type Min (arg1 :: (a, b, c, d, e, f)) (arg2 :: (a, b, c, d, e, f)) | |
type Min (arg1 :: (a, b, c, d, e, f, g)) (arg2 :: (a, b, c, d, e, f, g)) | |
sMin :: SOrd a => Sing t1 -> Sing t2 -> Sing (Apply (Apply (MinSym0 :: TyFun a (TyFun a a -> Type) -> *) t1) t2) #
type family Max (arg :: a) (arg1 :: a) :: a #
Instances
type Max (arg1 :: Bool) (arg2 :: Bool) | |
type Max (arg1 :: Ordering) (arg2 :: Ordering) | |
type Max (arg1 :: Nat) (arg2 :: Nat) | |
type Max (arg1 :: Symbol) (arg2 :: Symbol) | |
type Max (arg1 :: ()) (arg2 :: ()) | |
type Max (a1 :: Nat) (a2 :: Nat) # | |
Defined in Data.Type.Natural.Definitions | |
type Max (arg1 :: Void) (arg2 :: Void) | |
type Max (arg1 :: [a]) (arg2 :: [a]) | |
type Max (arg1 :: Maybe a) (arg2 :: Maybe a) | |
type Max (arg1 :: NonEmpty a) (arg2 :: NonEmpty a) | |
type Max (arg1 :: Either a b) (arg2 :: Either a b) | |
type Max (arg1 :: (a, b)) (arg2 :: (a, b)) | |
type Max (arg1 :: (a, b, c)) (arg2 :: (a, b, c)) | |
type Max (arg1 :: (a, b, c, d)) (arg2 :: (a, b, c, d)) | |
type Max (arg1 :: (a, b, c, d, e)) (arg2 :: (a, b, c, d, e)) | |
type Max (arg1 :: (a, b, c, d, e, f)) (arg2 :: (a, b, c, d, e, f)) | |
type Max (arg1 :: (a, b, c, d, e, f, g)) (arg2 :: (a, b, c, d, e, f, g)) | |
sMax :: SOrd a => Sing t1 -> Sing t2 -> Sing (Apply (Apply (MaxSym0 :: TyFun a (TyFun a a -> Type) -> *) t1) t2) #
data MinSym0 (l :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type)) :: forall a6989586621679299162. TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> * #
Instances
SuppressUnusedWarnings (MinSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) | |
Defined in Data.Singletons.Prelude.Ord suppressUnusedWarnings :: () # | |
type Apply (MinSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) (l :: a6989586621679299162) | |
data MinSym1 (l :: a6989586621679299162) (l1 :: TyFun a6989586621679299162 a6989586621679299162) :: forall a6989586621679299162. a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> * #
Instances
SuppressUnusedWarnings (MinSym1 :: a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> *) | |
Defined in Data.Singletons.Prelude.Ord suppressUnusedWarnings :: () # | |
type Apply (MinSym1 l1 :: TyFun a a -> *) (l2 :: a) | |
data MaxSym0 (l :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type)) :: forall a6989586621679299162. TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> * #
Instances
SuppressUnusedWarnings (MaxSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) | |
Defined in Data.Singletons.Prelude.Ord suppressUnusedWarnings :: () # | |
type Apply (MaxSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) (l :: a6989586621679299162) | |
data MaxSym1 (l :: a6989586621679299162) (l1 :: TyFun a6989586621679299162 a6989586621679299162) :: forall a6989586621679299162. a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> * #
Instances
SuppressUnusedWarnings (MaxSym1 :: a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> *) | |
Defined in Data.Singletons.Prelude.Ord suppressUnusedWarnings :: () # | |
type Apply (MaxSym1 l1 :: TyFun a a -> *) (l2 :: a) | |
data (+@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> * #
Instances
SuppressUnusedWarnings ((+@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) | |
Defined in Data.Singletons.Prelude.Num suppressUnusedWarnings :: () # | |
type Apply ((+@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) | |
data (l :: a6989586621679412326) +@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> * #
Instances
SuppressUnusedWarnings ((+@#@$$) :: a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *) | |
Defined in Data.Singletons.Prelude.Num suppressUnusedWarnings :: () # | |
type Apply ((+@#@$$) l1 :: TyFun a a -> *) (l2 :: a) | |
(%+) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((+@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2) infixl 6 #
data (*@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> * #
Instances
SuppressUnusedWarnings ((*@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) | |
Defined in Data.Singletons.Prelude.Num suppressUnusedWarnings :: () # | |
type Apply ((*@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) | |
data (l :: a6989586621679412326) *@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> * #
Instances
SuppressUnusedWarnings ((*@#@$$) :: a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *) | |
Defined in Data.Singletons.Prelude.Num suppressUnusedWarnings :: () # | |
type Apply ((*@#@$$) l1 :: TyFun a a -> *) (l2 :: a) | |
(%*) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((*@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2) infixl 7 #
(%**) :: forall (t :: Nat) (t :: Nat). Sing t -> Sing t -> Sing (Apply (Apply (**@#@$) t) t :: Nat) Source #
data (-@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> * #
Instances
SuppressUnusedWarnings ((-@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) | |
Defined in Data.Singletons.Prelude.Num suppressUnusedWarnings :: () # | |
type Apply ((-@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) | |
data (l :: a6989586621679412326) -@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> * #
Instances
SuppressUnusedWarnings ((-@#@$$) :: a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *) | |
Defined in Data.Singletons.Prelude.Num suppressUnusedWarnings :: () # | |
type Apply ((-@#@$$) l1 :: TyFun a a -> *) (l2 :: a) | |
(%-) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((-@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2) infixl 6 #
Type-level predicate & judgements
type family (arg :: a) <= (arg1 :: a) :: Bool #
Instances
type (arg1 :: Bool) <= (arg2 :: Bool) | |
type (arg1 :: Ordering) <= (arg2 :: Ordering) | |
type (arg1 :: Nat) <= (arg2 :: Nat) | |
type (arg1 :: Symbol) <= (arg2 :: Symbol) | |
type (arg1 :: ()) <= (arg2 :: ()) | |
type (a1 :: Nat) <= (a2 :: Nat) # | |
Defined in Data.Type.Natural.Definitions | |
type (arg1 :: Void) <= (arg2 :: Void) | |
type (arg1 :: [a]) <= (arg2 :: [a]) | |
type (arg1 :: Maybe a) <= (arg2 :: Maybe a) | |
type (arg1 :: NonEmpty a) <= (arg2 :: NonEmpty a) | |
type (arg1 :: Either a b) <= (arg2 :: Either a b) | |
type (arg1 :: (a, b)) <= (arg2 :: (a, b)) | |
type (arg1 :: (a, b, c)) <= (arg2 :: (a, b, c)) | |
type (arg1 :: (a, b, c, d)) <= (arg2 :: (a, b, c, d)) | |
type (arg1 :: (a, b, c, d, e)) <= (arg2 :: (a, b, c, d, e)) | |
type (arg1 :: (a, b, c, d, e, f)) <= (arg2 :: (a, b, c, d, e, f)) | |
type (arg1 :: (a, b, c, d, e, f, g)) <= (arg2 :: (a, b, c, d, e, f, g)) | |
type LeqInstance n m = IsTrue (n <= m) Source #
boolToClassLeq :: (n <= m) ~ True => SNat n -> SNat m -> LeqInstance n m Source #
propToClassLeq :: Leq n m -> LeqInstance n m Source #
propToBoolLeq :: forall n m. Leq n m -> LeqTrueInstance n m Source #
Conversion functions
Quasi quotes for natural numbers
nat :: QuasiQuoter Source #
Quotesi-quoter for Nat
. This can be used for an expression, pattern and type.
for example: sing :: SNat ([nat| 2 |] :+ [nat| 5 |])
snat :: QuasiQuoter Source #
Properties of natural numbers
class (SDecide nat, SNum nat, SEnum nat, SingKind nat, SingKind nat) => IsPeano nat where Source #
succOneCong, succNonCyclic, predSucc, plusMinus, succInj, (plusZeroL, plusSuccL | plusZeroR, plusZeroL), (multZeroL, multSuccL | multZeroR, multSuccR), induction
succOneCong :: Succ (Zero nat) :~: One nat Source #
succInj :: (Succ n :~: Succ (m :: nat)) -> n :~: m Source #
succInj' :: proxy n -> proxy' m -> (Succ n :~: Succ (m :: nat)) -> n :~: m Source #
succNonCyclic :: Sing n -> (Succ n :~: Zero nat) -> Void Source #
induction :: p (Zero nat) -> (forall n. Sing n -> p n -> p (S n)) -> Sing k -> p k Source #
plusMinus :: Sing (n :: nat) -> Sing m -> ((n + m) - m) :~: n Source #
plusMinus' :: Sing (n :: nat) -> Sing m -> ((n + m) - n) :~: m Source #
plusZeroL :: Sing n -> (Zero nat + n) :~: n Source #
plusSuccL :: Sing n -> Sing m -> (S n + m) :~: S (n + m :: nat) Source #
plusZeroR :: Sing n -> (n + Zero nat) :~: n Source #
plusSuccR :: Sing n -> Sing m -> (n + S m) :~: S (n + m :: nat) Source #
plusComm :: Sing n -> Sing m -> (n + m) :~: ((m :: nat) + n) Source #
plusAssoc :: forall n m l. Sing (n :: nat) -> Sing m -> Sing l -> ((n + m) + l) :~: (n + (m + l)) Source #
multZeroL :: Sing n -> (Zero nat * n) :~: Zero nat Source #
multSuccL :: Sing (n :: nat) -> Sing m -> (S n * m) :~: ((n * m) + m) Source #
multZeroR :: Sing n -> (n * Zero nat) :~: Zero nat Source #
multSuccR :: Sing n -> Sing m -> (n * S m) :~: ((n * m) + (n :: nat)) Source #
multComm :: Sing (n :: nat) -> Sing m -> (n * m) :~: (m * n) Source #
multOneR :: Sing n -> (n * One nat) :~: n Source #
multOneL :: Sing n -> (One nat * n) :~: n Source #
plusMultDistrib :: Sing (n :: nat) -> Sing m -> Sing l -> ((n + m) * l) :~: ((n * l) + (m * l)) Source #
multPlusDistrib :: Sing (n :: nat) -> Sing m -> Sing l -> (n * (m + l)) :~: ((n * m) + (n * l)) Source #
minusNilpotent :: Sing n -> (n - n) :~: Zero nat Source #
multAssoc :: Sing (n :: nat) -> Sing m -> Sing l -> ((n * m) * l) :~: (n * (m * l)) Source #
plusEqCancelL :: Sing (n :: nat) -> Sing m -> Sing l -> ((n + m) :~: (n + l)) -> m :~: l Source #
plusEqCancelR :: forall n m l. Sing (n :: nat) -> Sing m -> Sing l -> ((n + l) :~: (m + l)) -> n :~: m Source #
succAndPlusOneL :: Sing n -> Succ n :~: (One nat + n) Source #
succAndPlusOneR :: Sing n -> Succ n :~: (n + One nat) Source #
predSucc :: Sing n -> Pred (Succ n) :~: (n :: nat) Source #
zeroOrSucc :: Sing (n :: nat) -> ZeroOrSucc n Source #
plusEqZeroL :: Sing n -> Sing m -> ((n + m) :~: Zero nat) -> n :~: Zero nat Source #
plusEqZeroR :: Sing n -> Sing m -> ((n + m) :~: Zero nat) -> m :~: Zero nat Source #
predUnique :: Sing (n :: nat) -> Sing m -> (Succ n :~: m) -> n :~: Pred m Source #
multEqSuccElimL :: Sing (n :: nat) -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> n :~: Succ (Pred n) Source #
multEqSuccElimR :: Sing (n :: nat) -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> m :~: Succ (Pred m) Source #
minusZero :: Sing n -> (n - Zero nat) :~: n Source #
multEqCancelR :: Sing (n :: nat) -> Sing m -> Sing l -> ((n * Succ l) :~: (m * Succ l)) -> n :~: m Source #
succPred :: Sing n -> ((n :~: Zero nat) -> Void) -> Succ (Pred n) :~: n Source #
multEqCancelL :: Sing (n :: nat) -> Sing m -> Sing l -> ((Succ n * m) :~: (Succ n * l)) -> m :~: l Source #
sPred' :: proxy n -> Sing (Succ n) -> Sing (n :: nat) Source #
toNatural :: Sing (n :: nat) -> Natural Source #
fromNatural :: Natural -> SomeSing nat Source #
Instances
Properties of ordering Leq
class (SOrd nat, IsPeano nat) => PeanoOrder nat where Source #
(succLeqToLT, cmpZero, leqRefl | leqZero, leqSucc, viewLeq | leqWitness, leqStep), eqlCmpEQ, ltToLeq, eqToRefl, flipCompare, leqToCmp, leqReversed, lneqSuccLeq, lneqReversed, (leqToMin, geqToMin | minLeqL, minLeqR, minLargest), (leqToMax, geqToMax | maxLeqL, maxLeqR, maxLeast)
leqToCmp :: Sing (a :: nat) -> Sing b -> IsTrue (a <= b) -> Either (a :~: b) (Compare a b :~: LT) Source #
eqlCmpEQ :: Sing (a :: nat) -> Sing b -> (a :~: b) -> Compare a b :~: EQ Source #
eqToRefl :: Sing (a :: nat) -> Sing b -> (Compare a b :~: EQ) -> a :~: b Source #
flipCompare :: Sing (a :: nat) -> Sing b -> FlipOrdering (Compare a b) :~: Compare b a Source #
ltToNeq :: Sing (a :: nat) -> Sing b -> (Compare a b :~: LT) -> (a :~: b) -> Void Source #
leqNeqToLT :: Sing (a :: nat) -> Sing b -> IsTrue (a <= b) -> ((a :~: b) -> Void) -> Compare a b :~: LT Source #
succLeqToLT :: Sing (a :: nat) -> Sing b -> IsTrue (S a <= b) -> Compare a b :~: LT Source #
ltToLeq :: Sing (a :: nat) -> Sing b -> (Compare a b :~: LT) -> IsTrue (a <= b) Source #
gtToLeq :: Sing (a :: nat) -> Sing b -> (Compare a b :~: GT) -> IsTrue (b <= a) Source #
ltToSuccLeq :: Sing (a :: nat) -> Sing b -> (Compare a b :~: LT) -> IsTrue (Succ a <= b) Source #
cmpZero :: Sing a -> Compare (Zero nat) (Succ a) :~: LT Source #
leqToGT :: Sing (a :: nat) -> Sing b -> IsTrue (Succ b <= a) -> Compare a b :~: GT Source #
cmpZero' :: Sing a -> Either (Compare (Zero nat) a :~: EQ) (Compare (Zero nat) a :~: LT) Source #
zeroNoLT :: Sing a -> (Compare a (Zero nat) :~: LT) -> Void Source #
ltRightPredSucc :: Sing (a :: nat) -> Sing b -> (Compare a b :~: LT) -> b :~: Succ (Pred b) Source #
cmpSucc :: Sing (n :: nat) -> Sing m -> Compare n m :~: Compare (Succ n) (Succ m) Source #
ltSucc :: Sing (a :: nat) -> Compare a (Succ a) :~: LT Source #
cmpSuccStepR :: Sing (n :: nat) -> Sing m -> (Compare n m :~: LT) -> Compare n (Succ m) :~: LT Source #
ltSuccLToLT :: Sing (n :: nat) -> Sing m -> (Compare (Succ n) m :~: LT) -> Compare n m :~: LT Source #
leqToLT :: Sing (a :: nat) -> Sing b -> IsTrue (Succ a <= b) -> Compare a b :~: LT Source #
leqZero :: Sing n -> IsTrue (Zero nat <= n) Source #
leqSucc :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> IsTrue (Succ n <= Succ m) Source #
fromLeqView :: LeqView (n :: nat) m -> IsTrue (n <= m) Source #
leqViewRefl :: Sing (n :: nat) -> LeqView n n Source #
viewLeq :: forall n m. Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> LeqView n m Source #
leqWitness :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> DiffNat n m Source #
leqStep :: Sing (n :: nat) -> Sing m -> Sing l -> ((n + l) :~: m) -> IsTrue (n <= m) Source #
leqNeqToSuccLeq :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> ((n :~: m) -> Void) -> IsTrue (Succ n <= m) Source #
leqRefl :: Sing (n :: nat) -> IsTrue (n <= n) Source #
leqSuccStepR :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> IsTrue (n <= Succ m) Source #
leqSuccStepL :: Sing (n :: nat) -> Sing m -> IsTrue (Succ n <= m) -> IsTrue (n <= m) Source #
leqReflexive :: Sing (n :: nat) -> Sing m -> (n :~: m) -> IsTrue (n <= m) Source #
leqTrans :: Sing (n :: nat) -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue (m <= l) -> IsTrue (n <= l) Source #
leqAntisymm :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> IsTrue (m <= n) -> n :~: m Source #
plusMonotone :: Sing (n :: nat) -> Sing m -> Sing l -> Sing k -> IsTrue (n <= m) -> IsTrue (l <= k) -> IsTrue ((n + l) <= (m + k)) Source #
leqZeroElim :: Sing n -> IsTrue (n <= Zero nat) -> n :~: Zero nat Source #
plusMonotoneL :: Sing (n :: nat) -> Sing m -> Sing (l :: nat) -> IsTrue (n <= m) -> IsTrue ((n + l) <= (m + l)) Source #
plusMonotoneR :: Sing n -> Sing m -> Sing (l :: nat) -> IsTrue (m <= l) -> IsTrue ((n + m) <= (n + l)) Source #
plusLeqL :: Sing (n :: nat) -> Sing m -> IsTrue (n <= (n + m)) Source #
plusLeqR :: Sing (n :: nat) -> Sing m -> IsTrue (m <= (n + m)) Source #
plusCancelLeqR :: Sing (n :: nat) -> Sing m -> Sing l -> IsTrue ((n + l) <= (m + l)) -> IsTrue (n <= m) Source #
plusCancelLeqL :: Sing (n :: nat) -> Sing m -> Sing l -> IsTrue ((n + m) <= (n + l)) -> IsTrue (m <= l) Source #
succLeqZeroAbsurd :: Sing n -> IsTrue (S n <= Zero nat) -> Void Source #
succLeqZeroAbsurd' :: Sing n -> (S n <= Zero nat) :~: False Source #
succLeqAbsurd :: Sing (n :: nat) -> IsTrue (S n <= n) -> Void Source #
succLeqAbsurd' :: Sing (n :: nat) -> (S n <= n) :~: False Source #
notLeqToLeq :: (n <= m) ~ False => Sing (n :: nat) -> Sing m -> IsTrue (m <= n) Source #
leqSucc' :: Sing (n :: nat) -> Sing m -> (n <= m) :~: (Succ n <= Succ m) Source #
leqToMin :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> Min n m :~: n Source #
geqToMin :: Sing (n :: nat) -> Sing m -> IsTrue (m <= n) -> Min n m :~: m Source #
minComm :: Sing (n :: nat) -> Sing m -> Min n m :~: Min m n Source #
minLeqL :: Sing (n :: nat) -> Sing m -> IsTrue (Min n m <= n) Source #
minLeqR :: Sing (n :: nat) -> Sing m -> IsTrue (Min n m <= m) Source #
minLargest :: Sing (l :: nat) -> Sing n -> Sing m -> IsTrue (l <= n) -> IsTrue (l <= m) -> IsTrue (l <= Min n m) Source #
leqToMax :: Sing (n :: nat) -> Sing m -> IsTrue (n <= m) -> Max n m :~: m Source #
geqToMax :: Sing (n :: nat) -> Sing m -> IsTrue (m <= n) -> Max n m :~: n Source #
maxComm :: Sing (n :: nat) -> Sing m -> Max n m :~: Max m n Source #
maxLeqR :: Sing (n :: nat) -> Sing m -> IsTrue (m <= Max n m) Source #
maxLeqL :: Sing (n :: nat) -> Sing m -> IsTrue (n <= Max n m) Source #
maxLeast :: Sing (l :: nat) -> Sing n -> Sing m -> IsTrue (n <= l) -> IsTrue (m <= l) -> IsTrue (Max n m <= l) Source #
leqReversed :: Sing (n :: nat) -> Sing m -> (n <= m) :~: (m >= n) Source #
lneqSuccLeq :: Sing (n :: nat) -> Sing m -> (n < m) :~: (Succ n <= m) Source #
lneqReversed :: Sing (n :: nat) -> Sing m -> (n < m) :~: (m > n) Source #
lneqToLT :: Sing (n :: nat) -> Sing (m :: nat) -> IsTrue (n < m) -> Compare n m :~: LT Source #
ltToLneq :: Sing (n :: nat) -> Sing (m :: nat) -> (Compare n m :~: LT) -> IsTrue (n < m) Source #
lneqZero :: Sing (a :: nat) -> IsTrue (Zero nat < Succ a) Source #
lneqSucc :: Sing (n :: nat) -> IsTrue (n < Succ n) Source #
succLneqSucc :: Sing (n :: nat) -> Sing (m :: nat) -> (n < m) :~: (Succ n < Succ m) Source #
lneqRightPredSucc :: Sing (n :: nat) -> Sing (m :: nat) -> IsTrue (n < m) -> m :~: Succ (Pred m) Source #
lneqSuccStepL :: Sing (n :: nat) -> Sing m -> IsTrue (Succ n < m) -> IsTrue (n < m) Source #
lneqSuccStepR :: Sing (n :: nat) -> Sing m -> IsTrue (n < m) -> IsTrue (n < Succ m) Source #
plusStrictMonotone :: Sing (n :: nat) -> Sing m -> Sing l -> Sing k -> IsTrue (n < m) -> IsTrue (l < k) -> IsTrue ((n + l) < (m + k)) Source #
maxZeroL :: Sing n -> Max (Zero nat) n :~: n Source #
maxZeroR :: Sing n -> Max n (Zero nat) :~: n Source #
minZeroL :: Sing n -> Min (Zero nat) n :~: Zero nat Source #
minZeroR :: Sing n -> Min n (Zero nat) :~: Zero nat Source #
minusSucc :: Sing (n :: nat) -> Sing m -> IsTrue (m <= n) -> (Succ n - m) :~: Succ (n - m) Source #
lneqZeroAbsurd :: Sing n -> IsTrue (n < Zero nat) -> Void Source #
minusPlus :: forall (n :: nat) m. PeanoOrder nat => Sing (n :: nat) -> Sing m -> IsTrue (m <= n) -> ((n - m) + m) :~: n Source #
Instances
Useful type synonyms and constructors
type ElevenSym0 = Eleven Source #
type TwelveSym0 = Twelve Source #
type ThirteenSym0 = Thirteen Source #
type FourteenSym0 = Fourteen Source #
type FifteenSym0 = Fifteen Source #
type SixteenSym0 = Sixteen Source #
type SeventeenSym0 = Seventeen Source #
type EighteenSym0 = Eighteen Source #
type NineteenSym0 = Nineteen Source #
type TwentySym0 = Twenty Source #
sSeventeen :: Sing (SeventeenSym0 :: Nat) Source #