type-natural-0.8.2.0: Type-level natural and proofs of their properties.

Safe HaskellNone
LanguageHaskell2010

Data.Type.Natural

Contents

Description

Type level peano natural number, some arithmetic functions and their singletons.

Synopsis

Re-exported modules.

Natural Numbers

Peano natural numbers. It will be promoted to the type-level natural number.

data Nat Source #

Constructors

Z 
S Nat 
Instances
Enum Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

succ :: Nat -> Nat #

pred :: Nat -> Nat #

toEnum :: Int -> Nat #

fromEnum :: Nat -> Int #

enumFrom :: Nat -> [Nat] #

enumFromThen :: Nat -> Nat -> [Nat] #

enumFromTo :: Nat -> Nat -> [Nat] #

enumFromThenTo :: Nat -> Nat -> Nat -> [Nat] #

Eq Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

(==) :: Nat -> Nat -> Bool #

(/=) :: Nat -> Nat -> Bool #

Num Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

(+) :: Nat -> Nat -> Nat #

(-) :: Nat -> Nat -> Nat #

(*) :: Nat -> Nat -> Nat #

negate :: Nat -> Nat #

abs :: Nat -> Nat #

signum :: Nat -> Nat #

fromInteger :: Integer -> Nat #

Ord Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

compare :: Nat -> Nat -> Ordering #

(<) :: Nat -> Nat -> Bool #

(<=) :: Nat -> Nat -> Bool #

(>) :: Nat -> Nat -> Bool #

(>=) :: Nat -> Nat -> Bool #

max :: Nat -> Nat -> Nat #

min :: Nat -> Nat -> Nat #

Show Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

showsPrec :: Int -> Nat -> ShowS #

show :: Nat -> String #

showList :: [Nat] -> ShowS #

SingKind Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Associated Types

type Demote Nat = (r :: *) #

PEnum Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Associated Types

type Succ arg :: a #

type Pred arg :: a #

type ToEnum arg :: a #

type FromEnum arg :: Nat #

type EnumFromTo arg arg1 :: [a] #

type EnumFromThenTo arg arg1 arg2 :: [a] #

SEnum Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

PShow Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Associated Types

type ShowsPrec arg arg1 arg2 :: Symbol #

type Show_ arg :: Symbol #

type ShowList arg arg1 :: Symbol #

SShow Nat => SShow Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

sShowsPrec :: Sing t1 -> Sing t2 -> Sing t3 -> Sing (Apply (Apply (Apply ShowsPrecSym0 t1) t2) t3) #

sShow_ :: Sing t -> Sing (Apply Show_Sym0 t) #

sShowList :: Sing t1 -> Sing t2 -> Sing (Apply (Apply ShowListSym0 t1) t2) #

PNum Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Associated Types

type arg + arg1 :: a #

type arg - arg1 :: a #

type arg * arg1 :: a #

type Negate arg :: a #

type Abs arg :: a #

type Signum arg :: a #

type FromInteger arg :: a #

SNum Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

(%+) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (+@#@$) t1) t2) #

(%-) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (-@#@$) t1) t2) #

(%*) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (*@#@$) t1) t2) #

sNegate :: Sing t -> Sing (Apply NegateSym0 t) #

sAbs :: Sing t -> Sing (Apply AbsSym0 t) #

sSignum :: Sing t -> Sing (Apply SignumSym0 t) #

sFromInteger :: Sing t -> Sing (Apply FromIntegerSym0 t) #

ShowSing Nat => ShowSing Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

showsSingPrec :: Int -> Sing a -> ShowS #

POrd Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Associated Types

type Compare arg arg1 :: Ordering #

type arg < arg1 :: Bool #

type arg <= arg1 :: Bool #

type arg > arg1 :: Bool #

type arg >= arg1 :: Bool #

type Max arg arg1 :: a #

type Min arg arg1 :: a #

SOrd Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

sCompare :: Sing t1 -> Sing t2 -> Sing (Apply (Apply CompareSym0 t1) t2) #

(%<) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (<@#@$) t1) t2) #

(%<=) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (<=@#@$) t1) t2) #

(%>) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (>@#@$) t1) t2) #

(%>=) :: Sing t1 -> Sing t2 -> Sing (Apply (Apply (>=@#@$) t1) t2) #

sMax :: Sing t1 -> Sing t2 -> Sing (Apply (Apply MaxSym0 t1) t2) #

sMin :: Sing t1 -> Sing t2 -> Sing (Apply (Apply MinSym0 t1) t2) #

SEq Nat => SEq Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

(%==) :: Sing a -> Sing b -> Sing (a == b) #

(%/=) :: Sing a -> Sing b -> Sing (a /= b) #

PEq Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Associated Types

type x == y :: Bool #

type x /= y :: Bool #

SDecide Nat => SDecide Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

(%~) :: Sing a -> Sing b -> Decision (a :~: b) #

IsPeano Nat Source #

Since 0.5.0.0

Instance details

Defined in Data.Type.Natural

Methods

succOneCong :: Succ (Zero Nat) :~: One Nat Source #

succInj :: (Succ n :~: Succ m) -> n :~: m Source #

succInj' :: proxy n -> proxy' m -> (Succ n :~: Succ m) -> n :~: m Source #

succNonCyclic :: Sing n -> (Succ n :~: Zero Nat) -> Void Source #

induction :: p (Zero Nat) -> (forall (n :: Nat). Sing n -> p n -> p (S n)) -> Sing k -> p k Source #

plusMinus :: Sing n -> Sing m -> ((n + m) - m) :~: n Source #

plusMinus' :: Sing n -> 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) Source #

plusZeroR :: Sing n -> (n + Zero Nat) :~: n Source #

plusSuccR :: Sing n -> Sing m -> (n + S m) :~: S (n + m) Source #

plusComm :: Sing n -> Sing m -> (n + m) :~: (m + n) Source #

plusAssoc :: Sing n -> Sing m -> Sing l -> ((n + m) + l) :~: (n + (m + l)) Source #

multZeroL :: Sing n -> (Zero Nat * n) :~: Zero Nat Source #

multSuccL :: Sing n -> 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) Source #

multComm :: Sing n -> 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 -> Sing m -> Sing l -> ((n + m) * l) :~: ((n * l) + (m * l)) Source #

multPlusDistrib :: Sing n -> Sing m -> Sing l -> (n * (m + l)) :~: ((n * m) + (n * l)) Source #

minusNilpotent :: Sing n -> (n - n) :~: Zero Nat Source #

multAssoc :: Sing n -> Sing m -> Sing l -> ((n * m) * l) :~: (n * (m * l)) Source #

plusEqCancelL :: Sing n -> Sing m -> Sing l -> ((n + m) :~: (n + l)) -> m :~: l Source #

plusEqCancelR :: Sing n -> 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 Source #

zeroOrSucc :: Sing n -> 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 -> Sing m -> (Succ n :~: m) -> n :~: Pred m Source #

multEqSuccElimL :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> n :~: Succ (Pred n) Source #

multEqSuccElimR :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> m :~: Succ (Pred m) Source #

minusZero :: Sing n -> (n - Zero Nat) :~: n Source #

multEqCancelR :: Sing n -> 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 -> Sing m -> Sing l -> ((Succ n * m) :~: (Succ n * l)) -> m :~: l Source #

sPred' :: proxy n -> Sing (Succ n) -> Sing n Source #

toNatural :: Sing n -> Natural Source #

fromNatural :: Natural -> SomeSing Nat Source #

PeanoOrder Nat Source # 
Instance details

Defined in Data.Type.Natural

Methods

leqToCmp :: Sing a -> Sing b -> IsTrue (a <= b) -> Either (a :~: b) (Compare a b :~: LT) Source #

eqlCmpEQ :: Sing a -> Sing b -> (a :~: b) -> Compare a b :~: EQ Source #

eqToRefl :: Sing a -> Sing b -> (Compare a b :~: EQ) -> a :~: b Source #

flipCompare :: Sing a -> Sing b -> FlipOrdering (Compare a b) :~: Compare b a Source #

ltToNeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> (a :~: b) -> Void Source #

leqNeqToLT :: Sing a -> Sing b -> IsTrue (a <= b) -> ((a :~: b) -> Void) -> Compare a b :~: LT Source #

succLeqToLT :: Sing a -> Sing b -> IsTrue (S a <= b) -> Compare a b :~: LT Source #

ltToLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (a <= b) Source #

gtToLeq :: Sing a -> Sing b -> (Compare a b :~: GT) -> IsTrue (b <= a) Source #

ltToSuccLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (Succ a <= b) Source #

cmpZero :: Sing a -> Compare (Zero Nat) (Succ a) :~: LT Source #

leqToGT :: Sing a -> 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 -> Sing b -> (Compare a b :~: LT) -> b :~: Succ (Pred b) Source #

cmpSucc :: Sing n -> Sing m -> Compare n m :~: Compare (Succ n) (Succ m) Source #

ltSucc :: Sing a -> Compare a (Succ a) :~: LT Source #

cmpSuccStepR :: Sing n -> Sing m -> (Compare n m :~: LT) -> Compare n (Succ m) :~: LT Source #

ltSuccLToLT :: Sing n -> Sing m -> (Compare (Succ n) m :~: LT) -> Compare n m :~: LT Source #

leqToLT :: Sing a -> Sing b -> IsTrue (Succ a <= b) -> Compare a b :~: LT Source #

leqZero :: Sing n -> IsTrue (Zero Nat <= n) Source #

leqSucc :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (Succ n <= Succ m) Source #

fromLeqView :: LeqView n m -> IsTrue (n <= m) Source #

leqViewRefl :: Sing n -> LeqView n n Source #

viewLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> LeqView n m Source #

leqWitness :: Sing n -> Sing m -> IsTrue (n <= m) -> DiffNat n m Source #

leqStep :: Sing n -> Sing m -> Sing l -> ((n + l) :~: m) -> IsTrue (n <= m) Source #

leqNeqToSuccLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> ((n :~: m) -> Void) -> IsTrue (Succ n <= m) Source #

leqRefl :: Sing n -> IsTrue (n <= n) Source #

leqSuccStepR :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (n <= Succ m) Source #

leqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n <= m) -> IsTrue (n <= m) Source #

leqReflexive :: Sing n -> Sing m -> (n :~: m) -> IsTrue (n <= m) Source #

leqTrans :: Sing n -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue (m <= l) -> IsTrue (n <= l) Source #

leqAntisymm :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (m <= n) -> n :~: m Source #

plusMonotone :: Sing n -> 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 -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue ((n + l) <= (m + l)) Source #

plusMonotoneR :: Sing n -> Sing m -> Sing l -> IsTrue (m <= l) -> IsTrue ((n + m) <= (n + l)) Source #

plusLeqL :: Sing n -> Sing m -> IsTrue (n <= (n + m)) Source #

plusLeqR :: Sing n -> Sing m -> IsTrue (m <= (n + m)) Source #

plusCancelLeqR :: Sing n -> Sing m -> Sing l -> IsTrue ((n + l) <= (m + l)) -> IsTrue (n <= m) Source #

plusCancelLeqL :: Sing n -> 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 -> IsTrue (S n <= n) -> Void Source #

succLeqAbsurd' :: Sing n -> (S n <= n) :~: False Source #

notLeqToLeq :: (n <= m) ~ False => Sing n -> Sing m -> IsTrue (m <= n) Source #

leqSucc' :: Sing n -> Sing m -> (n <= m) :~: (Succ n <= Succ m) Source #

leqToMin :: Sing n -> Sing m -> IsTrue (n <= m) -> Min n m :~: n Source #

geqToMin :: Sing n -> Sing m -> IsTrue (m <= n) -> Min n m :~: m Source #

minComm :: Sing n -> Sing m -> Min n m :~: Min m n Source #

minLeqL :: Sing n -> Sing m -> IsTrue (Min n m <= n) Source #

minLeqR :: Sing n -> Sing m -> IsTrue (Min n m <= m) Source #

minLargest :: Sing l -> Sing n -> Sing m -> IsTrue (l <= n) -> IsTrue (l <= m) -> IsTrue (l <= Min n m) Source #

leqToMax :: Sing n -> Sing m -> IsTrue (n <= m) -> Max n m :~: m Source #

geqToMax :: Sing n -> Sing m -> IsTrue (m <= n) -> Max n m :~: n Source #

maxComm :: Sing n -> Sing m -> Max n m :~: Max m n Source #

maxLeqR :: Sing n -> Sing m -> IsTrue (m <= Max n m) Source #

maxLeqL :: Sing n -> Sing m -> IsTrue (n <= Max n m) Source #

maxLeast :: Sing l -> Sing n -> Sing m -> IsTrue (n <= l) -> IsTrue (m <= l) -> IsTrue (Max n m <= l) Source #

leqReversed :: Sing n -> Sing m -> (n <= m) :~: (m >= n) Source #

lneqSuccLeq :: Sing n -> Sing m -> (n < m) :~: (Succ n <= m) Source #

lneqReversed :: Sing n -> Sing m -> (n < m) :~: (m > n) Source #

lneqToLT :: Sing n -> Sing m -> IsTrue (n < m) -> Compare n m :~: LT Source #

ltToLneq :: Sing n -> Sing m -> (Compare n m :~: LT) -> IsTrue (n < m) Source #

lneqZero :: Sing a -> IsTrue (Zero Nat < Succ a) Source #

lneqSucc :: Sing n -> IsTrue (n < Succ n) Source #

succLneqSucc :: Sing n -> Sing m -> (n < m) :~: (Succ n < Succ m) Source #

lneqRightPredSucc :: Sing n -> Sing m -> IsTrue (n < m) -> m :~: Succ (Pred m) Source #

lneqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n < m) -> IsTrue (n < m) Source #

lneqSuccStepR :: Sing n -> Sing m -> IsTrue (n < m) -> IsTrue (n < Succ m) Source #

plusStrictMonotone :: Sing n -> 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 -> Sing m -> IsTrue (m <= n) -> (Succ n - m) :~: Succ (n - m) Source #

lneqZeroAbsurd :: Sing n -> IsTrue (n < Zero Nat) -> Void Source #

minusPlus :: PeanoOrder Nat => Sing n -> Sing m -> IsTrue (m <= n) -> ((n - m) + m) :~: n Source #

SingI Z Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

sing :: Sing Z #

SingI n => SingI (S n :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

sing :: Sing (S n) #

SingI n => Bounded (Ordinal (S n)) # 
Instance details

Defined in Data.Type.Ordinal

Methods

minBound :: Ordinal (S n) #

maxBound :: Ordinal (S n) #

Eq (Sing n) # 
Instance details

Defined in Data.Type.Natural.Core

Methods

(==) :: Sing n -> Sing n -> Bool #

(/=) :: Sing n -> Sing n -> Bool #

ShowSing Nat => Show (Sing z) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

showsPrec :: Int -> Sing z -> ShowS #

show :: Sing z -> String #

showList :: [Sing z] -> ShowS #

SuppressUnusedWarnings SSym0 Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Demote Nat Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Demote Nat = Nat
data Sing (z :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

data Sing (z :: Nat) where
type FromEnum (a :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type FromEnum (a :: Nat)
type ToEnum a Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type ToEnum a
type Pred (a :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Pred (a :: Nat)
type Succ (a :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Succ (a :: Nat)
type Show_ (arg :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Show_ (arg :: Nat) = Apply (Show__6989586621679675935Sym0 :: TyFun Nat Symbol -> *) arg
type FromInteger a Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Signum (a :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Signum (a :: Nat)
type Abs (a :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Abs (a :: Nat)
type Negate (arg :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Negate (arg :: Nat) = Apply (Negate_6989586621679412401Sym0 :: TyFun Nat Nat -> *) arg
type EnumFromTo (arg :: Nat) (arg1 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type EnumFromTo (arg :: Nat) (arg1 :: Nat) = Apply (Apply (EnumFromTo_6989586621679845907Sym0 :: TyFun Nat (TyFun Nat [Nat] -> Type) -> *) arg) arg1
type ShowList (arg :: [Nat]) arg1 Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type ShowList (arg :: [Nat]) arg1 = Apply (Apply (ShowList_6989586621679675953Sym0 :: TyFun [Nat] (TyFun Symbol Symbol -> Type) -> *) arg) arg1
type (a1 :: Nat) * (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) * (a2 :: Nat)
type (a1 :: Nat) - (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) - (a2 :: Nat)
type (a1 :: Nat) + (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) + (a2 :: Nat)
type Min (a1 :: Nat) (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Min (a1 :: Nat) (a2 :: Nat)
type Max (a1 :: Nat) (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Max (a1 :: Nat) (a2 :: Nat)
type (a1 :: Nat) >= (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) >= (a2 :: Nat)
type (a1 :: Nat) > (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) > (a2 :: Nat)
type (a1 :: Nat) <= (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) <= (a2 :: Nat)
type (a1 :: Nat) < (a2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) < (a2 :: Nat)
type Compare (arg :: Nat) (arg1 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Compare (arg :: Nat) (arg1 :: Nat) = Apply (Apply (Compare_6989586621679300505Sym0 :: TyFun Nat (TyFun Nat Ordering -> Type) -> *) arg) arg1
type (x :: Nat) /= (y :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (x :: Nat) /= (y :: Nat) = Not (x == y)
type (a :: Nat) == (b :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a :: Nat) == (b :: Nat)
type Apply SSym0 (l :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Apply SSym0 (l :: Nat) = S l
type EnumFromThenTo (arg :: Nat) (arg1 :: Nat) (arg2 :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type EnumFromThenTo (arg :: Nat) (arg1 :: Nat) (arg2 :: Nat) = Apply (Apply (Apply (EnumFromThenTo_6989586621679845937Sym0 :: TyFun Nat (TyFun Nat (TyFun Nat [Nat] -> Type) -> Type) -> *) arg) arg1) arg2
type ShowsPrec a1 (a2 :: Nat) a3 Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type ShowsPrec a1 (a2 :: Nat) a3

data SSym0 (l :: TyFun Nat Nat) Source #

Instances
SuppressUnusedWarnings SSym0 Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Apply SSym0 (l :: Nat) Source # 
Instance details

Defined in Data.Type.Natural.Definitions

type Apply SSym0 (l :: Nat) = S l

type SSym1 (t :: Nat) = S t Source #

type ZSym0 = Z Source #

Singleton type for Nat.

type SNat = (Sing :: Nat -> Type) Source #

data family Sing (a :: k) :: * #

The singleton kind-indexed data family.

Instances
Eq (Sing n) # 
Instance details

Defined in Data.Type.Natural.Core

Methods

(==) :: Sing n -> Sing n -> Bool #

(/=) :: Sing n -> Sing n -> Bool #

ShowSing Nat => Show (Sing z) # 
Instance details

Defined in Data.Type.Natural.Definitions

Methods

showsPrec :: Int -> Sing z -> ShowS #

show :: Sing z -> String #

showList :: [Sing z] -> ShowS #

data Sing (z :: Bool) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: Bool) where
data Sing (z :: Ordering) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: Ordering) where
data Sing (n :: Nat) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

data Sing (n :: Nat) where
data Sing (n :: Symbol) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

data Sing (n :: Symbol) where
data Sing (z :: ()) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: ()) where
data Sing (z :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

data Sing (z :: Nat) where
data Sing (z :: Void) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: Void)
data Sing (z :: [a]) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: [a]) where
data Sing (z :: Maybe a) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: Maybe a) where
data Sing (z :: NonEmpty a) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: NonEmpty a) where
data Sing (z :: Either a b) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: Either a b) where
data Sing (z :: (a, b)) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: (a, b)) where
data Sing (f :: k1 ~> k2) 
Instance details

Defined in Data.Singletons.Internal

data Sing (f :: k1 ~> k2) = SLambda {}
data Sing (z :: (a, b, c)) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: (a, b, c)) where
data Sing (z :: (a, b, c, d)) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: (a, b, c, d)) where
data Sing (z :: (a, b, c, d, e)) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: (a, b, c, d, e)) where
data Sing (z :: (a, b, c, d, e, f)) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: (a, b, c, d, e, f)) where
data Sing (z :: (a, b, c, d, e, f, g)) 
Instance details

Defined in Data.Singletons.Prelude.Instances

data Sing (z :: (a, b, c, d, e, f, g)) where

Arithmetic functions and their singletons.

min :: Ord a => a -> a -> a #

type family Min (arg :: a) (arg1 :: a) :: a #

Instances
type Min (arg1 :: Bool) (arg2 :: Bool) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: Bool) (arg2 :: Bool) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun Bool (TyFun Bool Bool -> Type) -> *) arg1) arg2
type Min (arg1 :: Ordering) (arg2 :: Ordering) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: Ordering) (arg2 :: Ordering) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun Ordering (TyFun Ordering Ordering -> Type) -> *) arg1) arg2
type Min (arg1 :: Nat) (arg2 :: Nat) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

type Min (arg1 :: Nat) (arg2 :: Nat) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun Nat (TyFun Nat Nat -> Type) -> *) arg1) arg2
type Min (arg1 :: Symbol) (arg2 :: Symbol) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

type Min (arg1 :: Symbol) (arg2 :: Symbol) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun Symbol (TyFun Symbol Symbol -> Type) -> *) arg1) arg2
type Min (arg1 :: ()) (arg2 :: ()) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: ()) (arg2 :: ()) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun () (TyFun () () -> Type) -> *) arg1) arg2
type Min (a1 :: Nat) (a2 :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

type Min (a1 :: Nat) (a2 :: Nat)
type Min (arg1 :: Void) (arg2 :: Void) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: Void) (arg2 :: Void) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun Void (TyFun Void Void -> Type) -> *) arg1) arg2
type Min (arg1 :: [a]) (arg2 :: [a]) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: [a]) (arg2 :: [a]) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun [a] (TyFun [a] [a] -> Type) -> *) arg1) arg2
type Min (arg1 :: Maybe a) (arg2 :: Maybe a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: Maybe a) (arg2 :: Maybe a) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (Maybe a) (TyFun (Maybe a) (Maybe a) -> Type) -> *) arg1) arg2
type Min (arg1 :: NonEmpty a) (arg2 :: NonEmpty a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: NonEmpty a) (arg2 :: NonEmpty a) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (NonEmpty a) (TyFun (NonEmpty a) (NonEmpty a) -> Type) -> *) arg1) arg2
type Min (arg1 :: Either a b) (arg2 :: Either a b) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: Either a b) (arg2 :: Either a b) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (Either a b) (TyFun (Either a b) (Either a b) -> Type) -> *) arg1) arg2
type Min (arg1 :: (a, b)) (arg2 :: (a, b)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: (a, b)) (arg2 :: (a, b)) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (a, b) (TyFun (a, b) (a, b) -> Type) -> *) arg1) arg2
type Min (arg1 :: (a, b, c)) (arg2 :: (a, b, c)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: (a, b, c)) (arg2 :: (a, b, c)) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (a, b, c) (TyFun (a, b, c) (a, b, c) -> Type) -> *) arg1) arg2
type Min (arg1 :: (a, b, c, d)) (arg2 :: (a, b, c, d)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: (a, b, c, d)) (arg2 :: (a, b, c, d)) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (a, b, c, d) (TyFun (a, b, c, d) (a, b, c, d) -> Type) -> *) arg1) arg2
type Min (arg1 :: (a, b, c, d, e)) (arg2 :: (a, b, c, d, e)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: (a, b, c, d, e)) (arg2 :: (a, b, c, d, e)) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (a, b, c, d, e) (TyFun (a, b, c, d, e) (a, b, c, d, e) -> Type) -> *) arg1) arg2
type Min (arg1 :: (a, b, c, d, e, f)) (arg2 :: (a, b, c, d, e, f)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: (a, b, c, d, e, f)) (arg2 :: (a, b, c, d, e, f)) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (a, b, c, d, e, f) (TyFun (a, b, c, d, e, f) (a, b, c, d, e, f) -> Type) -> *) arg1) arg2
type Min (arg1 :: (a, b, c, d, e, f, g)) (arg2 :: (a, b, c, d, e, f, g)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Min (arg1 :: (a, b, c, d, e, f, g)) (arg2 :: (a, b, c, d, e, f, g)) = Apply (Apply (Min_6989586621679300703Sym0 :: TyFun (a, b, c, d, e, f, g) (TyFun (a, b, c, d, e, f, g) (a, b, c, d, e, f, g) -> Type) -> *) arg1) arg2

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 #

Instances
type Max (arg1 :: Bool) (arg2 :: Bool) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: Bool) (arg2 :: Bool) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun Bool (TyFun Bool Bool -> Type) -> *) arg1) arg2
type Max (arg1 :: Ordering) (arg2 :: Ordering) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: Ordering) (arg2 :: Ordering) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun Ordering (TyFun Ordering Ordering -> Type) -> *) arg1) arg2
type Max (arg1 :: Nat) (arg2 :: Nat) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

type Max (arg1 :: Nat) (arg2 :: Nat) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun Nat (TyFun Nat Nat -> Type) -> *) arg1) arg2
type Max (arg1 :: Symbol) (arg2 :: Symbol) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

type Max (arg1 :: Symbol) (arg2 :: Symbol) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun Symbol (TyFun Symbol Symbol -> Type) -> *) arg1) arg2
type Max (arg1 :: ()) (arg2 :: ()) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: ()) (arg2 :: ()) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun () (TyFun () () -> Type) -> *) arg1) arg2
type Max (a1 :: Nat) (a2 :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

type Max (a1 :: Nat) (a2 :: Nat)
type Max (arg1 :: Void) (arg2 :: Void) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: Void) (arg2 :: Void) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun Void (TyFun Void Void -> Type) -> *) arg1) arg2
type Max (arg1 :: [a]) (arg2 :: [a]) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: [a]) (arg2 :: [a]) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun [a] (TyFun [a] [a] -> Type) -> *) arg1) arg2
type Max (arg1 :: Maybe a) (arg2 :: Maybe a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: Maybe a) (arg2 :: Maybe a) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (Maybe a) (TyFun (Maybe a) (Maybe a) -> Type) -> *) arg1) arg2
type Max (arg1 :: NonEmpty a) (arg2 :: NonEmpty a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: NonEmpty a) (arg2 :: NonEmpty a) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (NonEmpty a) (TyFun (NonEmpty a) (NonEmpty a) -> Type) -> *) arg1) arg2
type Max (arg1 :: Either a b) (arg2 :: Either a b) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: Either a b) (arg2 :: Either a b) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (Either a b) (TyFun (Either a b) (Either a b) -> Type) -> *) arg1) arg2
type Max (arg1 :: (a, b)) (arg2 :: (a, b)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: (a, b)) (arg2 :: (a, b)) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (a, b) (TyFun (a, b) (a, b) -> Type) -> *) arg1) arg2
type Max (arg1 :: (a, b, c)) (arg2 :: (a, b, c)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: (a, b, c)) (arg2 :: (a, b, c)) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (a, b, c) (TyFun (a, b, c) (a, b, c) -> Type) -> *) arg1) arg2
type Max (arg1 :: (a, b, c, d)) (arg2 :: (a, b, c, d)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: (a, b, c, d)) (arg2 :: (a, b, c, d)) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (a, b, c, d) (TyFun (a, b, c, d) (a, b, c, d) -> Type) -> *) arg1) arg2
type Max (arg1 :: (a, b, c, d, e)) (arg2 :: (a, b, c, d, e)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: (a, b, c, d, e)) (arg2 :: (a, b, c, d, e)) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (a, b, c, d, e) (TyFun (a, b, c, d, e) (a, b, c, d, e) -> Type) -> *) arg1) arg2
type Max (arg1 :: (a, b, c, d, e, f)) (arg2 :: (a, b, c, d, e, f)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: (a, b, c, d, e, f)) (arg2 :: (a, b, c, d, e, f)) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (a, b, c, d, e, f) (TyFun (a, b, c, d, e, f) (a, b, c, d, e, f) -> Type) -> *) arg1) arg2
type Max (arg1 :: (a, b, c, d, e, f, g)) (arg2 :: (a, b, c, d, e, f, g)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Max (arg1 :: (a, b, c, d, e, f, g)) (arg2 :: (a, b, c, d, e, f, g)) = Apply (Apply (Max_6989586621679300670Sym0 :: TyFun (a, b, c, d, e, f, g) (TyFun (a, b, c, d, e, f, g) (a, b, c, d, e, f, g) -> Type) -> *) arg1) arg2

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) -> *) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MinSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) (l :: a6989586621679299162) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MinSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) (l :: a6989586621679299162) = MinSym1 l

data MinSym1 (l :: a6989586621679299162) (l1 :: TyFun a6989586621679299162 a6989586621679299162) :: forall a6989586621679299162. a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> * #

Instances
SuppressUnusedWarnings (MinSym1 :: a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> *) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MinSym1 l1 :: TyFun a a -> *) (l2 :: a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MinSym1 l1 :: TyFun a a -> *) (l2 :: a) = Min l1 l2

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) -> * #

Instances
SuppressUnusedWarnings (MaxSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MaxSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) (l :: a6989586621679299162) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MaxSym0 :: TyFun a6989586621679299162 (TyFun a6989586621679299162 a6989586621679299162 -> Type) -> *) (l :: a6989586621679299162) = MaxSym1 l

data MaxSym1 (l :: a6989586621679299162) (l1 :: TyFun a6989586621679299162 a6989586621679299162) :: forall a6989586621679299162. a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> * #

Instances
SuppressUnusedWarnings (MaxSym1 :: a6989586621679299162 -> TyFun a6989586621679299162 a6989586621679299162 -> *) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MaxSym1 l1 :: TyFun a a -> *) (l2 :: a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type Apply (MaxSym1 l1 :: TyFun a a -> *) (l2 :: a) = Max l1 l2

type MaxSym2 (t :: a6989586621679299162) (t1 :: a6989586621679299162) = Max t t1 #

type family (arg :: a) + (arg1 :: a) :: a #

Instances
type (a :: Nat) + (b :: Nat) 
Instance details

Defined in Data.Singletons.Prelude.Num

type (a :: Nat) + (b :: Nat) = a + b
type (a1 :: Nat) + (a2 :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) + (a2 :: Nat)

data (+@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> * #

Instances
SuppressUnusedWarnings ((+@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((+@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((+@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) = (+@#@$$) l

data (l :: a6989586621679412326) +@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> * #

Instances
SuppressUnusedWarnings ((+@#@$$) :: a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((+@#@$$) l1 :: TyFun a a -> *) (l2 :: a) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((+@#@$$) l1 :: TyFun a a -> *) (l2 :: a) = l1 + l2

type (+@#@$$$) (t :: a6989586621679412326) (t1 :: a6989586621679412326) = t + t1 #

(%+) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((+@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2) infixl 6 #

type family (arg :: a) * (arg1 :: a) :: a #

Instances
type (a :: Nat) * (b :: Nat) 
Instance details

Defined in Data.Singletons.Prelude.Num

type (a :: Nat) * (b :: Nat) = a * b
type (a1 :: Nat) * (a2 :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) * (a2 :: Nat)

data (*@#@$) (l :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type)) :: forall a6989586621679412326. TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> * #

Instances
SuppressUnusedWarnings ((*@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((*@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((*@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) = (*@#@$$) l

data (l :: a6989586621679412326) *@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> * #

Instances
SuppressUnusedWarnings ((*@#@$$) :: a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((*@#@$$) l1 :: TyFun a a -> *) (l2 :: a) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((*@#@$$) l1 :: TyFun a a -> *) (l2 :: a) = l1 * l2

type (*@#@$$$) (t :: a6989586621679412326) (t1 :: a6989586621679412326) = t * t1 #

(%*) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((*@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2) infixl 7 #

type family (arg :: a) - (arg1 :: a) :: a #

Instances
type (a :: Nat) - (b :: Nat) 
Instance details

Defined in Data.Singletons.Prelude.Num

type (a :: Nat) - (b :: Nat) = a - b
type (a1 :: Nat) - (a2 :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) - (a2 :: Nat)

type family (a :: Nat) ** (a :: Nat) :: Nat where ... Source #

Equations

_ ** Z = Apply SSym0 ZSym0 
n ** (S m) = Apply (Apply (*@#@$) (Apply (Apply (**@#@$) n) m)) n 

(%**) :: 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) -> *) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((-@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((-@#@$) :: TyFun a6989586621679412326 (TyFun a6989586621679412326 a6989586621679412326 -> Type) -> *) (l :: a6989586621679412326) = (-@#@$$) l

data (l :: a6989586621679412326) -@#@$$ (l1 :: TyFun a6989586621679412326 a6989586621679412326) :: forall a6989586621679412326. a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> * #

Instances
SuppressUnusedWarnings ((-@#@$$) :: a6989586621679412326 -> TyFun a6989586621679412326 a6989586621679412326 -> *) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((-@#@$$) l1 :: TyFun a a -> *) (l2 :: a) 
Instance details

Defined in Data.Singletons.Prelude.Num

type Apply ((-@#@$$) l1 :: TyFun a a -> *) (l2 :: a) = l1 - l2

type (-@#@$$$) (t :: a6989586621679412326) (t1 :: a6989586621679412326) = t - t1 #

(%-) :: SNum a => Sing t1 -> Sing t2 -> Sing (Apply (Apply ((-@#@$) :: TyFun a (TyFun a a -> Type) -> *) t1) t2) infixl 6 #

Type-level predicate & judgements

data Leq (n :: Nat) (m :: Nat) where Source #

Comparison via GADTs.

Constructors

ZeroLeq :: SNat m -> Leq Zero m 
SuccLeqSucc :: Leq n m -> Leq (S n) (S m) 

type family (arg :: a) <= (arg1 :: a) :: Bool #

Instances
type (arg1 :: Bool) <= (arg2 :: Bool) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: Bool) <= (arg2 :: Bool) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun Bool (TyFun Bool Bool -> Type) -> *) arg1) arg2
type (arg1 :: Ordering) <= (arg2 :: Ordering) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: Ordering) <= (arg2 :: Ordering) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun Ordering (TyFun Ordering Bool -> Type) -> *) arg1) arg2
type (arg1 :: Nat) <= (arg2 :: Nat) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

type (arg1 :: Nat) <= (arg2 :: Nat) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun Nat (TyFun Nat Bool -> Type) -> *) arg1) arg2
type (arg1 :: Symbol) <= (arg2 :: Symbol) 
Instance details

Defined in Data.Singletons.TypeLits.Internal

type (arg1 :: Symbol) <= (arg2 :: Symbol) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun Symbol (TyFun Symbol Bool -> Type) -> *) arg1) arg2
type (arg1 :: ()) <= (arg2 :: ()) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: ()) <= (arg2 :: ()) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun () (TyFun () Bool -> Type) -> *) arg1) arg2
type (a1 :: Nat) <= (a2 :: Nat) # 
Instance details

Defined in Data.Type.Natural.Definitions

type (a1 :: Nat) <= (a2 :: Nat)
type (arg1 :: Void) <= (arg2 :: Void) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: Void) <= (arg2 :: Void) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun Void (TyFun Void Bool -> Type) -> *) arg1) arg2
type (arg1 :: [a]) <= (arg2 :: [a]) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: [a]) <= (arg2 :: [a]) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun [a] (TyFun [a] Bool -> Type) -> *) arg1) arg2
type (arg1 :: Maybe a) <= (arg2 :: Maybe a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: Maybe a) <= (arg2 :: Maybe a) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (Maybe a) (TyFun (Maybe a) Bool -> Type) -> *) arg1) arg2
type (arg1 :: NonEmpty a) <= (arg2 :: NonEmpty a) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: NonEmpty a) <= (arg2 :: NonEmpty a) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (NonEmpty a) (TyFun (NonEmpty a) Bool -> Type) -> *) arg1) arg2
type (arg1 :: Either a b) <= (arg2 :: Either a b) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: Either a b) <= (arg2 :: Either a b) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (Either a b) (TyFun (Either a b) Bool -> Type) -> *) arg1) arg2
type (arg1 :: (a, b)) <= (arg2 :: (a, b)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: (a, b)) <= (arg2 :: (a, b)) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (a, b) (TyFun (a, b) Bool -> Type) -> *) arg1) arg2
type (arg1 :: (a, b, c)) <= (arg2 :: (a, b, c)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: (a, b, c)) <= (arg2 :: (a, b, c)) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (a, b, c) (TyFun (a, b, c) Bool -> Type) -> *) arg1) arg2
type (arg1 :: (a, b, c, d)) <= (arg2 :: (a, b, c, d)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: (a, b, c, d)) <= (arg2 :: (a, b, c, d)) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (a, b, c, d) (TyFun (a, b, c, d) Bool -> Type) -> *) arg1) arg2
type (arg1 :: (a, b, c, d, e)) <= (arg2 :: (a, b, c, d, e)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: (a, b, c, d, e)) <= (arg2 :: (a, b, c, d, e)) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (a, b, c, d, e) (TyFun (a, b, c, d, e) Bool -> Type) -> *) arg1) arg2
type (arg1 :: (a, b, c, d, e, f)) <= (arg2 :: (a, b, c, d, e, f)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: (a, b, c, d, e, f)) <= (arg2 :: (a, b, c, d, e, f)) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (a, b, c, d, e, f) (TyFun (a, b, c, d, e, f) Bool -> Type) -> *) arg1) arg2
type (arg1 :: (a, b, c, d, e, f, g)) <= (arg2 :: (a, b, c, d, e, f, g)) 
Instance details

Defined in Data.Singletons.Prelude.Ord

type (arg1 :: (a, b, c, d, e, f, g)) <= (arg2 :: (a, b, c, d, e, f, g)) = Apply (Apply (TFHelper_6989586621679300571Sym0 :: TyFun (a, b, c, d, e, f, g) (TyFun (a, b, c, d, e, f, g) Bool -> Type) -> *) arg1) arg2

type LeqInstance n m = IsTrue (n <= m) Source #

boolToPropLeq :: (n <= m) ~ True => SNat n -> SNat m -> Leq n m Source #

boolToClassLeq :: (n <= m) ~ True => SNat n -> SNat m -> LeqInstance n m Source #

propToBoolLeq :: forall n m. Leq n m -> LeqTrueInstance n m Source #

Conversion functions

natToInt :: Integral n => Nat -> n Source #

Convert Nat into normal integers.

intToNat :: (Integral a, Ord a) => a -> Nat Source #

Convert integral numbers into Nat

sNatToInt :: Num n => SNat x -> n Source #

Convert 'SNat n' into normal integers.

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 #

Quotesi-quoter for SNat. This can be used for an expression.

For example: [snat|12|] %+ [snat| 5 |].

Properties of natural numbers

class (SDecide nat, SNum nat, SEnum nat, SingKind nat, SingKind nat) => IsPeano nat where Source #

Methods

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
IsPeano Nat Source # 
Instance details

Defined in Data.Type.Natural.Builtin

Methods

succOneCong :: Succ (Zero Nat) :~: One Nat Source #

succInj :: (Succ n :~: Succ m) -> n :~: m Source #

succInj' :: proxy n -> proxy' m -> (Succ n :~: Succ m) -> n :~: m Source #

succNonCyclic :: Sing n -> (Succ n :~: Zero Nat) -> Void Source #

induction :: p (Zero Nat) -> (forall (n :: Nat). Sing n -> p n -> p (S n)) -> Sing k -> p k Source #

plusMinus :: Sing n -> Sing m -> ((n + m) - m) :~: n Source #

plusMinus' :: Sing n -> 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) Source #

plusZeroR :: Sing n -> (n + Zero Nat) :~: n Source #

plusSuccR :: Sing n -> Sing m -> (n + S m) :~: S (n + m) Source #

plusComm :: Sing n -> Sing m -> (n + m) :~: (m + n) Source #

plusAssoc :: Sing n -> Sing m -> Sing l -> ((n + m) + l) :~: (n + (m + l)) Source #

multZeroL :: Sing n -> (Zero Nat * n) :~: Zero Nat Source #

multSuccL :: Sing n -> 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) Source #

multComm :: Sing n -> 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 -> Sing m -> Sing l -> ((n + m) * l) :~: ((n * l) + (m * l)) Source #

multPlusDistrib :: Sing n -> Sing m -> Sing l -> (n * (m + l)) :~: ((n * m) + (n * l)) Source #

minusNilpotent :: Sing n -> (n - n) :~: Zero Nat Source #

multAssoc :: Sing n -> Sing m -> Sing l -> ((n * m) * l) :~: (n * (m * l)) Source #

plusEqCancelL :: Sing n -> Sing m -> Sing l -> ((n + m) :~: (n + l)) -> m :~: l Source #

plusEqCancelR :: Sing n -> 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 Source #

zeroOrSucc :: Sing n -> 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 -> Sing m -> (Succ n :~: m) -> n :~: Pred m Source #

multEqSuccElimL :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> n :~: Succ (Pred n) Source #

multEqSuccElimR :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> m :~: Succ (Pred m) Source #

minusZero :: Sing n -> (n - Zero Nat) :~: n Source #

multEqCancelR :: Sing n -> 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 -> Sing m -> Sing l -> ((Succ n * m) :~: (Succ n * l)) -> m :~: l Source #

sPred' :: proxy n -> Sing (Succ n) -> Sing n Source #

toNatural :: Sing n -> Natural Source #

fromNatural :: Natural -> SomeSing Nat Source #

IsPeano Nat Source #

Since 0.5.0.0

Instance details

Defined in Data.Type.Natural

Methods

succOneCong :: Succ (Zero Nat) :~: One Nat Source #

succInj :: (Succ n :~: Succ m) -> n :~: m Source #

succInj' :: proxy n -> proxy' m -> (Succ n :~: Succ m) -> n :~: m Source #

succNonCyclic :: Sing n -> (Succ n :~: Zero Nat) -> Void Source #

induction :: p (Zero Nat) -> (forall (n :: Nat). Sing n -> p n -> p (S n)) -> Sing k -> p k Source #

plusMinus :: Sing n -> Sing m -> ((n + m) - m) :~: n Source #

plusMinus' :: Sing n -> 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) Source #

plusZeroR :: Sing n -> (n + Zero Nat) :~: n Source #

plusSuccR :: Sing n -> Sing m -> (n + S m) :~: S (n + m) Source #

plusComm :: Sing n -> Sing m -> (n + m) :~: (m + n) Source #

plusAssoc :: Sing n -> Sing m -> Sing l -> ((n + m) + l) :~: (n + (m + l)) Source #

multZeroL :: Sing n -> (Zero Nat * n) :~: Zero Nat Source #

multSuccL :: Sing n -> 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) Source #

multComm :: Sing n -> 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 -> Sing m -> Sing l -> ((n + m) * l) :~: ((n * l) + (m * l)) Source #

multPlusDistrib :: Sing n -> Sing m -> Sing l -> (n * (m + l)) :~: ((n * m) + (n * l)) Source #

minusNilpotent :: Sing n -> (n - n) :~: Zero Nat Source #

multAssoc :: Sing n -> Sing m -> Sing l -> ((n * m) * l) :~: (n * (m * l)) Source #

plusEqCancelL :: Sing n -> Sing m -> Sing l -> ((n + m) :~: (n + l)) -> m :~: l Source #

plusEqCancelR :: Sing n -> 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 Source #

zeroOrSucc :: Sing n -> 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 -> Sing m -> (Succ n :~: m) -> n :~: Pred m Source #

multEqSuccElimL :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> n :~: Succ (Pred n) Source #

multEqSuccElimR :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> m :~: Succ (Pred m) Source #

minusZero :: Sing n -> (n - Zero Nat) :~: n Source #

multEqCancelR :: Sing n -> 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 -> Sing m -> Sing l -> ((Succ n * m) :~: (Succ n * l)) -> m :~: l Source #

sPred' :: proxy n -> Sing (Succ n) -> Sing n Source #

toNatural :: Sing n -> Natural Source #

fromNatural :: Natural -> SomeSing Nat Source #

plusCong :: (n :~: m) -> (n' :~: m') -> (n + n') :~: (m + m') Source #

plusCongR :: Sing k -> (n :~: m) -> (k + n) :~: (k + m) Source #

plusCongL :: (n :~: m) -> Sing k -> (n + k) :~: (m + k) Source #

snEqZAbsurd :: SingI n => (S n :~: Z) -> a Source #

plusInjectiveL :: SNat n -> SNat m -> SNat l -> ((n + m) :~: (n + l)) -> m :~: l Source #

plusInjectiveR :: SNat n -> SNat m -> SNat l -> ((n + l) :~: (m + l)) -> n :~: m Source #

multCongL :: (n :~: m) -> Sing k -> (n * k) :~: (m * k) Source #

multCongR :: Sing k -> (n :~: m) -> (k * n) :~: (k * m) Source #

multCong :: (n :~: m) -> (l :~: k) -> (n * l) :~: (m * k) Source #

plusMinusEqL :: SNat n -> SNat m -> ((n + m) - m) :~: n Source #

plusNeutralR :: SNat n -> SNat m -> ((n + m) :~: n) -> m :~: Z Source #

plusNeutralL :: SNat n -> SNat m -> ((n + m) :~: m) -> n :~: Z Source #

Properties of ordering Leq

class (SOrd nat, IsPeano nat) => PeanoOrder nat where Source #

Methods

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
PeanoOrder Nat Source # 
Instance details

Defined in Data.Type.Natural.Builtin

Methods

leqToCmp :: Sing a -> Sing b -> IsTrue (a <= b) -> Either (a :~: b) (Compare a b :~: LT) Source #

eqlCmpEQ :: Sing a -> Sing b -> (a :~: b) -> Compare a b :~: EQ Source #

eqToRefl :: Sing a -> Sing b -> (Compare a b :~: EQ) -> a :~: b Source #

flipCompare :: Sing a -> Sing b -> FlipOrdering (Compare a b) :~: Compare b a Source #

ltToNeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> (a :~: b) -> Void Source #

leqNeqToLT :: Sing a -> Sing b -> IsTrue (a <= b) -> ((a :~: b) -> Void) -> Compare a b :~: LT Source #

succLeqToLT :: Sing a -> Sing b -> IsTrue (S a <= b) -> Compare a b :~: LT Source #

ltToLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (a <= b) Source #

gtToLeq :: Sing a -> Sing b -> (Compare a b :~: GT) -> IsTrue (b <= a) Source #

ltToSuccLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (Succ a <= b) Source #

cmpZero :: Sing a -> Compare (Zero Nat) (Succ a) :~: LT Source #

leqToGT :: Sing a -> 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 -> Sing b -> (Compare a b :~: LT) -> b :~: Succ (Pred b) Source #

cmpSucc :: Sing n -> Sing m -> Compare n m :~: Compare (Succ n) (Succ m) Source #

ltSucc :: Sing a -> Compare a (Succ a) :~: LT Source #

cmpSuccStepR :: Sing n -> Sing m -> (Compare n m :~: LT) -> Compare n (Succ m) :~: LT Source #

ltSuccLToLT :: Sing n -> Sing m -> (Compare (Succ n) m :~: LT) -> Compare n m :~: LT Source #

leqToLT :: Sing a -> Sing b -> IsTrue (Succ a <= b) -> Compare a b :~: LT Source #

leqZero :: Sing n -> IsTrue (Zero Nat <= n) Source #

leqSucc :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (Succ n <= Succ m) Source #

fromLeqView :: LeqView n m -> IsTrue (n <= m) Source #

leqViewRefl :: Sing n -> LeqView n n Source #

viewLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> LeqView n m Source #

leqWitness :: Sing n -> Sing m -> IsTrue (n <= m) -> DiffNat n m Source #

leqStep :: Sing n -> Sing m -> Sing l -> ((n + l) :~: m) -> IsTrue (n <= m) Source #

leqNeqToSuccLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> ((n :~: m) -> Void) -> IsTrue (Succ n <= m) Source #

leqRefl :: Sing n -> IsTrue (n <= n) Source #

leqSuccStepR :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (n <= Succ m) Source #

leqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n <= m) -> IsTrue (n <= m) Source #

leqReflexive :: Sing n -> Sing m -> (n :~: m) -> IsTrue (n <= m) Source #

leqTrans :: Sing n -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue (m <= l) -> IsTrue (n <= l) Source #

leqAntisymm :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (m <= n) -> n :~: m Source #

plusMonotone :: Sing n -> 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 -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue ((n + l) <= (m + l)) Source #

plusMonotoneR :: Sing n -> Sing m -> Sing l -> IsTrue (m <= l) -> IsTrue ((n + m) <= (n + l)) Source #

plusLeqL :: Sing n -> Sing m -> IsTrue (n <= (n + m)) Source #

plusLeqR :: Sing n -> Sing m -> IsTrue (m <= (n + m)) Source #

plusCancelLeqR :: Sing n -> Sing m -> Sing l -> IsTrue ((n + l) <= (m + l)) -> IsTrue (n <= m) Source #

plusCancelLeqL :: Sing n -> 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 -> IsTrue (S n <= n) -> Void Source #

succLeqAbsurd' :: Sing n -> (S n <= n) :~: False Source #

notLeqToLeq :: (n <= m) ~ False => Sing n -> Sing m -> IsTrue (m <= n) Source #

leqSucc' :: Sing n -> Sing m -> (n <= m) :~: (Succ n <= Succ m) Source #

leqToMin :: Sing n -> Sing m -> IsTrue (n <= m) -> Min n m :~: n Source #

geqToMin :: Sing n -> Sing m -> IsTrue (m <= n) -> Min n m :~: m Source #

minComm :: Sing n -> Sing m -> Min n m :~: Min m n Source #

minLeqL :: Sing n -> Sing m -> IsTrue (Min n m <= n) Source #

minLeqR :: Sing n -> Sing m -> IsTrue (Min n m <= m) Source #

minLargest :: Sing l -> Sing n -> Sing m -> IsTrue (l <= n) -> IsTrue (l <= m) -> IsTrue (l <= Min n m) Source #

leqToMax :: Sing n -> Sing m -> IsTrue (n <= m) -> Max n m :~: m Source #

geqToMax :: Sing n -> Sing m -> IsTrue (m <= n) -> Max n m :~: n Source #

maxComm :: Sing n -> Sing m -> Max n m :~: Max m n Source #

maxLeqR :: Sing n -> Sing m -> IsTrue (m <= Max n m) Source #

maxLeqL :: Sing n -> Sing m -> IsTrue (n <= Max n m) Source #

maxLeast :: Sing l -> Sing n -> Sing m -> IsTrue (n <= l) -> IsTrue (m <= l) -> IsTrue (Max n m <= l) Source #

leqReversed :: Sing n -> Sing m -> (n <= m) :~: (m >= n) Source #

lneqSuccLeq :: Sing n -> Sing m -> (n < m) :~: (Succ n <= m) Source #

lneqReversed :: Sing n -> Sing m -> (n < m) :~: (m > n) Source #

lneqToLT :: Sing n -> Sing m -> IsTrue (n < m) -> Compare n m :~: LT Source #

ltToLneq :: Sing n -> Sing m -> (Compare n m :~: LT) -> IsTrue (n < m) Source #

lneqZero :: Sing a -> IsTrue (Zero Nat < Succ a) Source #

lneqSucc :: Sing n -> IsTrue (n < Succ n) Source #

succLneqSucc :: Sing n -> Sing m -> (n < m) :~: (Succ n < Succ m) Source #

lneqRightPredSucc :: Sing n -> Sing m -> IsTrue (n < m) -> m :~: Succ (Pred m) Source #

lneqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n < m) -> IsTrue (n < m) Source #

lneqSuccStepR :: Sing n -> Sing m -> IsTrue (n < m) -> IsTrue (n < Succ m) Source #

plusStrictMonotone :: Sing n -> 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 -> Sing m -> IsTrue (m <= n) -> (Succ n - m) :~: Succ (n - m) Source #

lneqZeroAbsurd :: Sing n -> IsTrue (n < Zero Nat) -> Void Source #

minusPlus :: PeanoOrder Nat => Sing n -> Sing m -> IsTrue (m <= n) -> ((n - m) + m) :~: n Source #

PeanoOrder Nat Source # 
Instance details

Defined in Data.Type.Natural

Methods

leqToCmp :: Sing a -> Sing b -> IsTrue (a <= b) -> Either (a :~: b) (Compare a b :~: LT) Source #

eqlCmpEQ :: Sing a -> Sing b -> (a :~: b) -> Compare a b :~: EQ Source #

eqToRefl :: Sing a -> Sing b -> (Compare a b :~: EQ) -> a :~: b Source #

flipCompare :: Sing a -> Sing b -> FlipOrdering (Compare a b) :~: Compare b a Source #

ltToNeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> (a :~: b) -> Void Source #

leqNeqToLT :: Sing a -> Sing b -> IsTrue (a <= b) -> ((a :~: b) -> Void) -> Compare a b :~: LT Source #

succLeqToLT :: Sing a -> Sing b -> IsTrue (S a <= b) -> Compare a b :~: LT Source #

ltToLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (a <= b) Source #

gtToLeq :: Sing a -> Sing b -> (Compare a b :~: GT) -> IsTrue (b <= a) Source #

ltToSuccLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (Succ a <= b) Source #

cmpZero :: Sing a -> Compare (Zero Nat) (Succ a) :~: LT Source #

leqToGT :: Sing a -> 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 -> Sing b -> (Compare a b :~: LT) -> b :~: Succ (Pred b) Source #

cmpSucc :: Sing n -> Sing m -> Compare n m :~: Compare (Succ n) (Succ m) Source #

ltSucc :: Sing a -> Compare a (Succ a) :~: LT Source #

cmpSuccStepR :: Sing n -> Sing m -> (Compare n m :~: LT) -> Compare n (Succ m) :~: LT Source #

ltSuccLToLT :: Sing n -> Sing m -> (Compare (Succ n) m :~: LT) -> Compare n m :~: LT Source #

leqToLT :: Sing a -> Sing b -> IsTrue (Succ a <= b) -> Compare a b :~: LT Source #

leqZero :: Sing n -> IsTrue (Zero Nat <= n) Source #

leqSucc :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (Succ n <= Succ m) Source #

fromLeqView :: LeqView n m -> IsTrue (n <= m) Source #

leqViewRefl :: Sing n -> LeqView n n Source #

viewLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> LeqView n m Source #

leqWitness :: Sing n -> Sing m -> IsTrue (n <= m) -> DiffNat n m Source #

leqStep :: Sing n -> Sing m -> Sing l -> ((n + l) :~: m) -> IsTrue (n <= m) Source #

leqNeqToSuccLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> ((n :~: m) -> Void) -> IsTrue (Succ n <= m) Source #

leqRefl :: Sing n -> IsTrue (n <= n) Source #

leqSuccStepR :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (n <= Succ m) Source #

leqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n <= m) -> IsTrue (n <= m) Source #

leqReflexive :: Sing n -> Sing m -> (n :~: m) -> IsTrue (n <= m) Source #

leqTrans :: Sing n -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue (m <= l) -> IsTrue (n <= l) Source #

leqAntisymm :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (m <= n) -> n :~: m Source #

plusMonotone :: Sing n -> 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 -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue ((n + l) <= (m + l)) Source #

plusMonotoneR :: Sing n -> Sing m -> Sing l -> IsTrue (m <= l) -> IsTrue ((n + m) <= (n + l)) Source #

plusLeqL :: Sing n -> Sing m -> IsTrue (n <= (n + m)) Source #

plusLeqR :: Sing n -> Sing m -> IsTrue (m <= (n + m)) Source #

plusCancelLeqR :: Sing n -> Sing m -> Sing l -> IsTrue ((n + l) <= (m + l)) -> IsTrue (n <= m) Source #

plusCancelLeqL :: Sing n -> 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 -> IsTrue (S n <= n) -> Void Source #

succLeqAbsurd' :: Sing n -> (S n <= n) :~: False Source #

notLeqToLeq :: (n <= m) ~ False => Sing n -> Sing m -> IsTrue (m <= n) Source #

leqSucc' :: Sing n -> Sing m -> (n <= m) :~: (Succ n <= Succ m) Source #

leqToMin :: Sing n -> Sing m -> IsTrue (n <= m) -> Min n m :~: n Source #

geqToMin :: Sing n -> Sing m -> IsTrue (m <= n) -> Min n m :~: m Source #

minComm :: Sing n -> Sing m -> Min n m :~: Min m n Source #

minLeqL :: Sing n -> Sing m -> IsTrue (Min n m <= n) Source #

minLeqR :: Sing n -> Sing m -> IsTrue (Min n m <= m) Source #

minLargest :: Sing l -> Sing n -> Sing m -> IsTrue (l <= n) -> IsTrue (l <= m) -> IsTrue (l <= Min n m) Source #

leqToMax :: Sing n -> Sing m -> IsTrue (n <= m) -> Max n m :~: m Source #

geqToMax :: Sing n -> Sing m -> IsTrue (m <= n) -> Max n m :~: n Source #

maxComm :: Sing n -> Sing m -> Max n m :~: Max m n Source #

maxLeqR :: Sing n -> Sing m -> IsTrue (m <= Max n m) Source #

maxLeqL :: Sing n -> Sing m -> IsTrue (n <= Max n m) Source #

maxLeast :: Sing l -> Sing n -> Sing m -> IsTrue (n <= l) -> IsTrue (m <= l) -> IsTrue (Max n m <= l) Source #

leqReversed :: Sing n -> Sing m -> (n <= m) :~: (m >= n) Source #

lneqSuccLeq :: Sing n -> Sing m -> (n < m) :~: (Succ n <= m) Source #

lneqReversed :: Sing n -> Sing m -> (n < m) :~: (m > n) Source #

lneqToLT :: Sing n -> Sing m -> IsTrue (n < m) -> Compare n m :~: LT Source #

ltToLneq :: Sing n -> Sing m -> (Compare n m :~: LT) -> IsTrue (n < m) Source #

lneqZero :: Sing a -> IsTrue (Zero Nat < Succ a) Source #

lneqSucc :: Sing n -> IsTrue (n < Succ n) Source #

succLneqSucc :: Sing n -> Sing m -> (n < m) :~: (Succ n < Succ m) Source #

lneqRightPredSucc :: Sing n -> Sing m -> IsTrue (n < m) -> m :~: Succ (Pred m) Source #

lneqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n < m) -> IsTrue (n < m) Source #

lneqSuccStepR :: Sing n -> Sing m -> IsTrue (n < m) -> IsTrue (n < Succ m) Source #

plusStrictMonotone :: Sing n -> 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 -> Sing m -> IsTrue (m <= n) -> (Succ n - m) :~: Succ (n - m) Source #

lneqZeroAbsurd :: Sing n -> IsTrue (n < Zero Nat) -> Void Source #

minusPlus :: PeanoOrder Nat => Sing n -> Sing m -> IsTrue (m <= n) -> ((n - m) + m) :~: n Source #

reflToSEqual :: SNat n -> SNat m -> (n :~: m) -> IsTrue (n == m) Source #

sLeqReflexive :: SNat n -> SNat m -> IsTrue (n == m) -> IsTrue (n <= m) Source #

nonSLeqToLT :: (n <= m) ~ False => SNat n -> SNat m -> Compare m n :~: LT Source #

Useful type synonyms and constructors

type family Zero :: Nat where ... Source #

Equations

Zero = ZSym0 

type family One :: Nat where ... Source #

Equations

One = Apply SSym0 ZeroSym0 

type family Two :: Nat where ... Source #

Equations

Two = Apply SSym0 OneSym0 

type family Three :: Nat where ... Source #

Equations

Three = Apply SSym0 TwoSym0 

type family Four :: Nat where ... Source #

Equations

Four = Apply SSym0 ThreeSym0 

type family Five :: Nat where ... Source #

Equations

Five = Apply SSym0 FourSym0 

type family Six :: Nat where ... Source #

Equations

Six = Apply SSym0 FiveSym0 

type family Seven :: Nat where ... Source #

Equations

Seven = Apply SSym0 SixSym0 

type family Eight :: Nat where ... Source #

Equations

Eight = Apply SSym0 SevenSym0 

type family Nine :: Nat where ... Source #

Equations

Nine = Apply SSym0 EightSym0 

type family Ten :: Nat where ... Source #

Equations

Ten = Apply SSym0 NineSym0 

type family Eleven :: Nat where ... Source #

Equations

Eleven = Apply SSym0 TenSym0 

type family Twelve :: Nat where ... Source #

type family Thirteen :: Nat where ... Source #

type family Fourteen :: Nat where ... Source #

type family Fifteen :: Nat where ... Source #

type family Sixteen :: Nat where ... Source #

type family Seventeen :: Nat where ... Source #

type family Eighteen :: Nat where ... Source #

type family Nineteen :: Nat where ... Source #

type family Twenty :: Nat where ... Source #

type family N0 :: Nat where ... Source #

Equations

N0 = ZeroSym0 

type family N1 :: Nat where ... Source #

Equations

N1 = OneSym0 

type family N2 :: Nat where ... Source #

Equations

N2 = TwoSym0 

type family N3 :: Nat where ... Source #

Equations

N3 = ThreeSym0 

type family N4 :: Nat where ... Source #

Equations

N4 = FourSym0 

type family N5 :: Nat where ... Source #

Equations

N5 = FiveSym0 

type family N6 :: Nat where ... Source #

Equations

N6 = SixSym0 

type family N7 :: Nat where ... Source #

Equations

N7 = SevenSym0 

type family N8 :: Nat where ... Source #

Equations

N8 = EightSym0 

type family N9 :: Nat where ... Source #

Equations

N9 = NineSym0 

type family N10 :: Nat where ... Source #

Equations

N10 = TenSym0 

type family N11 :: Nat where ... Source #

Equations

N11 = ElevenSym0 

type family N12 :: Nat where ... Source #

Equations

N12 = TwelveSym0 

type family N13 :: Nat where ... Source #

Equations

N13 = ThirteenSym0 

type family N14 :: Nat where ... Source #

Equations

N14 = FourteenSym0 

type family N15 :: Nat where ... Source #

Equations

N15 = FifteenSym0 

type family N16 :: Nat where ... Source #

Equations

N16 = SixteenSym0 

type family N17 :: Nat where ... Source #

Equations

N17 = SeventeenSym0 

type family N18 :: Nat where ... Source #

Equations

N18 = EighteenSym0 

type family N19 :: Nat where ... Source #

Equations

N19 = NineteenSym0 

type family N20 :: Nat where ... Source #

Equations

N20 = TwentySym0 

type N0Sym0 = N0 Source #

type N1Sym0 = N1 Source #

type N2Sym0 = N2 Source #

type N3Sym0 = N3 Source #

type N4Sym0 = N4 Source #

type N5Sym0 = N5 Source #

type N6Sym0 = N6 Source #

type N7Sym0 = N7 Source #

type N8Sym0 = N8 Source #

type N9Sym0 = N9 Source #

Orphan instances

IsPeano Nat Source #

Since 0.5.0.0

Instance details

Methods

succOneCong :: Succ (Zero Nat) :~: One Nat Source #

succInj :: (Succ n :~: Succ m) -> n :~: m Source #

succInj' :: proxy n -> proxy' m -> (Succ n :~: Succ m) -> n :~: m Source #

succNonCyclic :: Sing n -> (Succ n :~: Zero Nat) -> Void Source #

induction :: p (Zero Nat) -> (forall (n :: Nat). Sing n -> p n -> p (S n)) -> Sing k -> p k Source #

plusMinus :: Sing n -> Sing m -> ((n + m) - m) :~: n Source #

plusMinus' :: Sing n -> 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) Source #

plusZeroR :: Sing n -> (n + Zero Nat) :~: n Source #

plusSuccR :: Sing n -> Sing m -> (n + S m) :~: S (n + m) Source #

plusComm :: Sing n -> Sing m -> (n + m) :~: (m + n) Source #

plusAssoc :: Sing n -> Sing m -> Sing l -> ((n + m) + l) :~: (n + (m + l)) Source #

multZeroL :: Sing n -> (Zero Nat * n) :~: Zero Nat Source #

multSuccL :: Sing n -> 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) Source #

multComm :: Sing n -> 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 -> Sing m -> Sing l -> ((n + m) * l) :~: ((n * l) + (m * l)) Source #

multPlusDistrib :: Sing n -> Sing m -> Sing l -> (n * (m + l)) :~: ((n * m) + (n * l)) Source #

minusNilpotent :: Sing n -> (n - n) :~: Zero Nat Source #

multAssoc :: Sing n -> Sing m -> Sing l -> ((n * m) * l) :~: (n * (m * l)) Source #

plusEqCancelL :: Sing n -> Sing m -> Sing l -> ((n + m) :~: (n + l)) -> m :~: l Source #

plusEqCancelR :: Sing n -> 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 Source #

zeroOrSucc :: Sing n -> 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 -> Sing m -> (Succ n :~: m) -> n :~: Pred m Source #

multEqSuccElimL :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> n :~: Succ (Pred n) Source #

multEqSuccElimR :: Sing n -> Sing m -> Sing l -> ((n * m) :~: Succ l) -> m :~: Succ (Pred m) Source #

minusZero :: Sing n -> (n - Zero Nat) :~: n Source #

multEqCancelR :: Sing n -> 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 -> Sing m -> Sing l -> ((Succ n * m) :~: (Succ n * l)) -> m :~: l Source #

sPred' :: proxy n -> Sing (Succ n) -> Sing n Source #

toNatural :: Sing n -> Natural Source #

fromNatural :: Natural -> SomeSing Nat Source #

PeanoOrder Nat Source # 
Instance details

Methods

leqToCmp :: Sing a -> Sing b -> IsTrue (a <= b) -> Either (a :~: b) (Compare a b :~: LT) Source #

eqlCmpEQ :: Sing a -> Sing b -> (a :~: b) -> Compare a b :~: EQ Source #

eqToRefl :: Sing a -> Sing b -> (Compare a b :~: EQ) -> a :~: b Source #

flipCompare :: Sing a -> Sing b -> FlipOrdering (Compare a b) :~: Compare b a Source #

ltToNeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> (a :~: b) -> Void Source #

leqNeqToLT :: Sing a -> Sing b -> IsTrue (a <= b) -> ((a :~: b) -> Void) -> Compare a b :~: LT Source #

succLeqToLT :: Sing a -> Sing b -> IsTrue (S a <= b) -> Compare a b :~: LT Source #

ltToLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (a <= b) Source #

gtToLeq :: Sing a -> Sing b -> (Compare a b :~: GT) -> IsTrue (b <= a) Source #

ltToSuccLeq :: Sing a -> Sing b -> (Compare a b :~: LT) -> IsTrue (Succ a <= b) Source #

cmpZero :: Sing a -> Compare (Zero Nat) (Succ a) :~: LT Source #

leqToGT :: Sing a -> 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 -> Sing b -> (Compare a b :~: LT) -> b :~: Succ (Pred b) Source #

cmpSucc :: Sing n -> Sing m -> Compare n m :~: Compare (Succ n) (Succ m) Source #

ltSucc :: Sing a -> Compare a (Succ a) :~: LT Source #

cmpSuccStepR :: Sing n -> Sing m -> (Compare n m :~: LT) -> Compare n (Succ m) :~: LT Source #

ltSuccLToLT :: Sing n -> Sing m -> (Compare (Succ n) m :~: LT) -> Compare n m :~: LT Source #

leqToLT :: Sing a -> Sing b -> IsTrue (Succ a <= b) -> Compare a b :~: LT Source #

leqZero :: Sing n -> IsTrue (Zero Nat <= n) Source #

leqSucc :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (Succ n <= Succ m) Source #

fromLeqView :: LeqView n m -> IsTrue (n <= m) Source #

leqViewRefl :: Sing n -> LeqView n n Source #

viewLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> LeqView n m Source #

leqWitness :: Sing n -> Sing m -> IsTrue (n <= m) -> DiffNat n m Source #

leqStep :: Sing n -> Sing m -> Sing l -> ((n + l) :~: m) -> IsTrue (n <= m) Source #

leqNeqToSuccLeq :: Sing n -> Sing m -> IsTrue (n <= m) -> ((n :~: m) -> Void) -> IsTrue (Succ n <= m) Source #

leqRefl :: Sing n -> IsTrue (n <= n) Source #

leqSuccStepR :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (n <= Succ m) Source #

leqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n <= m) -> IsTrue (n <= m) Source #

leqReflexive :: Sing n -> Sing m -> (n :~: m) -> IsTrue (n <= m) Source #

leqTrans :: Sing n -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue (m <= l) -> IsTrue (n <= l) Source #

leqAntisymm :: Sing n -> Sing m -> IsTrue (n <= m) -> IsTrue (m <= n) -> n :~: m Source #

plusMonotone :: Sing n -> 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 -> Sing m -> Sing l -> IsTrue (n <= m) -> IsTrue ((n + l) <= (m + l)) Source #

plusMonotoneR :: Sing n -> Sing m -> Sing l -> IsTrue (m <= l) -> IsTrue ((n + m) <= (n + l)) Source #

plusLeqL :: Sing n -> Sing m -> IsTrue (n <= (n + m)) Source #

plusLeqR :: Sing n -> Sing m -> IsTrue (m <= (n + m)) Source #

plusCancelLeqR :: Sing n -> Sing m -> Sing l -> IsTrue ((n + l) <= (m + l)) -> IsTrue (n <= m) Source #

plusCancelLeqL :: Sing n -> 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 -> IsTrue (S n <= n) -> Void Source #

succLeqAbsurd' :: Sing n -> (S n <= n) :~: False Source #

notLeqToLeq :: (n <= m) ~ False => Sing n -> Sing m -> IsTrue (m <= n) Source #

leqSucc' :: Sing n -> Sing m -> (n <= m) :~: (Succ n <= Succ m) Source #

leqToMin :: Sing n -> Sing m -> IsTrue (n <= m) -> Min n m :~: n Source #

geqToMin :: Sing n -> Sing m -> IsTrue (m <= n) -> Min n m :~: m Source #

minComm :: Sing n -> Sing m -> Min n m :~: Min m n Source #

minLeqL :: Sing n -> Sing m -> IsTrue (Min n m <= n) Source #

minLeqR :: Sing n -> Sing m -> IsTrue (Min n m <= m) Source #

minLargest :: Sing l -> Sing n -> Sing m -> IsTrue (l <= n) -> IsTrue (l <= m) -> IsTrue (l <= Min n m) Source #

leqToMax :: Sing n -> Sing m -> IsTrue (n <= m) -> Max n m :~: m Source #

geqToMax :: Sing n -> Sing m -> IsTrue (m <= n) -> Max n m :~: n Source #

maxComm :: Sing n -> Sing m -> Max n m :~: Max m n Source #

maxLeqR :: Sing n -> Sing m -> IsTrue (m <= Max n m) Source #

maxLeqL :: Sing n -> Sing m -> IsTrue (n <= Max n m) Source #

maxLeast :: Sing l -> Sing n -> Sing m -> IsTrue (n <= l) -> IsTrue (m <= l) -> IsTrue (Max n m <= l) Source #

leqReversed :: Sing n -> Sing m -> (n <= m) :~: (m >= n) Source #

lneqSuccLeq :: Sing n -> Sing m -> (n < m) :~: (Succ n <= m) Source #

lneqReversed :: Sing n -> Sing m -> (n < m) :~: (m > n) Source #

lneqToLT :: Sing n -> Sing m -> IsTrue (n < m) -> Compare n m :~: LT Source #

ltToLneq :: Sing n -> Sing m -> (Compare n m :~: LT) -> IsTrue (n < m) Source #

lneqZero :: Sing a -> IsTrue (Zero Nat < Succ a) Source #

lneqSucc :: Sing n -> IsTrue (n < Succ n) Source #

succLneqSucc :: Sing n -> Sing m -> (n < m) :~: (Succ n < Succ m) Source #

lneqRightPredSucc :: Sing n -> Sing m -> IsTrue (n < m) -> m :~: Succ (Pred m) Source #

lneqSuccStepL :: Sing n -> Sing m -> IsTrue (Succ n < m) -> IsTrue (n < m) Source #

lneqSuccStepR :: Sing n -> Sing m -> IsTrue (n < m) -> IsTrue (n < Succ m) Source #

plusStrictMonotone :: Sing n -> 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 -> Sing m -> IsTrue (m <= n) -> (Succ n - m) :~: Succ (n - m) Source #

lneqZeroAbsurd :: Sing n -> IsTrue (n < Zero Nat) -> Void Source #

minusPlus :: PeanoOrder Nat => Sing n -> Sing m -> IsTrue (m <= n) -> ((n - m) + m) :~: n Source #