type-natural-0.7.1.3: 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 # 

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 # 

Methods

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

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

Num Nat Source # 

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 # 

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 # 

Methods

showsPrec :: Int -> Nat -> ShowS #

show :: Nat -> String #

showList :: [Nat] -> ShowS #

SingKind Nat Source # 

Associated Types

type DemoteRep Nat :: * #

SEnum Nat Source # 
SNum Nat Source # 
SOrd Nat Source # 

Methods

sCompare :: Sing Nat t0 -> Sing Nat t1 -> Sing Ordering (Apply Nat Ordering (Apply Nat (TyFun Nat Ordering -> Type) (CompareSym0 Nat) t0) t1) #

(%:<) :: Sing Nat t0 -> Sing Nat t1 -> Sing Bool (Apply Nat Bool (Apply Nat (TyFun Nat Bool -> Type) ((:<$) Nat) t0) t1) #

(%:<=) :: Sing Nat t0 -> Sing Nat t1 -> Sing Bool (Apply Nat Bool (Apply Nat (TyFun Nat Bool -> Type) ((:<=$) Nat) t0) t1) #

(%:>) :: Sing Nat t0 -> Sing Nat t1 -> Sing Bool (Apply Nat Bool (Apply Nat (TyFun Nat Bool -> Type) ((:>$) Nat) t0) t1) #

(%:>=) :: Sing Nat t0 -> Sing Nat t1 -> Sing Bool (Apply Nat Bool (Apply Nat (TyFun Nat Bool -> Type) ((:>=$) Nat) t0) t1) #

sMax :: Sing Nat t0 -> Sing Nat t1 -> Sing Nat (Apply Nat Nat (Apply Nat (TyFun Nat Nat -> Type) (MaxSym0 Nat) t0) t1) #

sMin :: Sing Nat t0 -> Sing Nat t1 -> Sing Nat (Apply Nat Nat (Apply Nat (TyFun Nat Nat -> Type) (MinSym0 Nat) t0) t1) #

SEq Nat Source # 

Methods

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

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

SDecide Nat Source # 

Methods

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

SingI Nat Z Source # 

Methods

sing :: Sing Z a #

SingI Nat n0 => SingI Nat (S n0) Source # 

Methods

sing :: Sing (S n0) a #

PEnum Nat (Proxy * Nat) Source # 

Associated Types

type Succ (Proxy * Nat) (arg0 :: Proxy * Nat) :: a0 #

type Pred (Proxy * Nat) (arg0 :: Proxy * Nat) :: a0 #

type ToEnum (Proxy * Nat) (arg0 :: Nat) :: a0 #

type FromEnum (Proxy * Nat) (arg0 :: Proxy * Nat) :: Nat #

type EnumFromTo (Proxy * Nat) (arg0 :: Proxy * Nat) (arg1 :: Proxy * Nat) :: [a0] #

type EnumFromThenTo (Proxy * Nat) (arg0 :: Proxy * Nat) (arg1 :: Proxy * Nat) (arg2 :: Proxy * Nat) :: [a0] #

PNum Nat (Proxy * Nat) Source # 

Associated Types

type ((Proxy * Nat) :+ (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: a0 #

type ((Proxy * Nat) :- (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: a0 #

type ((Proxy * Nat) :* (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: a0 #

type Negate (Proxy * Nat) (arg0 :: Proxy * Nat) :: a0 #

type Abs (Proxy * Nat) (arg0 :: Proxy * Nat) :: a0 #

type Signum (Proxy * Nat) (arg0 :: Proxy * Nat) :: a0 #

type FromInteger (Proxy * Nat) (arg0 :: Nat) :: a0 #

POrd Nat (Proxy * Nat) Source # 

Associated Types

type Compare (Proxy * Nat) (arg0 :: Proxy * Nat) (arg1 :: Proxy * Nat) :: Ordering #

type ((Proxy * Nat) :< (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: Bool #

type ((Proxy * Nat) :<= (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: Bool #

type ((Proxy * Nat) :> (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: Bool #

type ((Proxy * Nat) :>= (arg0 :: Proxy * Nat)) (arg1 :: Proxy * Nat) :: Bool #

type Max (Proxy * Nat) (arg0 :: Proxy * Nat) (arg1 :: Proxy * Nat) :: a0 #

type Min (Proxy * Nat) (arg0 :: Proxy * Nat) (arg1 :: Proxy * Nat) :: a0 #

PEq Nat (Proxy * Nat) Source # 

Associated Types

type ((Proxy * Nat) :== (x :: Proxy * Nat)) (y :: Proxy * Nat) :: Bool #

type ((Proxy * Nat) :/= (x :: Proxy * Nat)) (y :: Proxy * Nat) :: Bool #

SingI Nat n => Bounded (Ordinal Nat (S n)) # 

Methods

minBound :: Ordinal Nat (S n) #

maxBound :: Ordinal Nat (S n) #

SuppressUnusedWarnings (TyFun Nat Nat -> *) SSym0 Source # 
type DemoteRep Nat Source # 
data Sing Nat Source # 
data Sing Nat where
type FromEnum Nat a0 Source # 
type FromEnum Nat a0
type ToEnum Nat a0 Source # 
type ToEnum Nat a0
type Pred Nat a0 Source # 
type Pred Nat a0
type Succ Nat a0 Source # 
type Succ Nat a0
type FromInteger Nat a0 Source # 
type Signum Nat a0 Source # 
type Signum Nat a0
type Abs Nat a0 Source # 
type Abs Nat a0
type Negate Nat arg0 Source # 
type Negate Nat arg0 = Apply Nat Nat (Negate_1627805905Sym0 Nat) arg0
type EnumFromTo Nat arg0 arg1 Source # 
type EnumFromTo Nat arg0 arg1 = Apply Nat [Nat] (Apply Nat (TyFun Nat [Nat] -> Type) (EnumFromTo_1627820022Sym0 Nat) arg0) arg1
type (:*) Nat a1 a0 Source # 
type (:*) Nat a1 a0
type (:-) Nat a1 a0 Source # 
type (:-) Nat a1 a0
type (:+) Nat a1 a0 Source # 
type (:+) Nat a1 a0
type Min Nat a1 a0 Source # 
type Min Nat a1 a0
type Max Nat a1 a0 Source # 
type Max Nat a1 a0
type (:>=) Nat a1 a0 Source # 
type (:>=) Nat a1 a0
type (:>) Nat a1 a0 Source # 
type (:>) Nat a1 a0
type (:<=) Nat a1 a0 Source # 
type (:<=) Nat a1 a0
type (:<) Nat a1 a0 Source # 
type (:<) Nat a1 a0
type Compare Nat arg0 arg1 Source # 
type Compare Nat arg0 arg1 = Apply Nat Ordering (Apply Nat (TyFun Nat Ordering -> Type) (Compare_1627687955Sym0 Nat) arg0) arg1
type (:/=) Nat x y Source # 
type (:/=) Nat x y = Not ((:==) Nat x y)
type (:==) Nat a0 b0 Source # 
type (:==) Nat a0 b0
type Apply Nat Nat SSym0 l0 Source # 
type Apply Nat Nat SSym0 l0 = SSym1 l0
type EnumFromThenTo Nat arg0 arg1 arg2 Source # 
type EnumFromThenTo Nat arg0 arg1 arg2 = Apply Nat [Nat] (Apply Nat (TyFun Nat [Nat] -> Type) (Apply Nat (TyFun Nat (TyFun Nat [Nat] -> Type) -> Type) (EnumFromThenTo_1627820052Sym0 Nat) arg0) arg1) arg2
type MonomorphicRep Nat (Sing Nat) # 

type SSym1 t = S t Source #

type ZSym0 = Z Source #

Singleton type for Nat.

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

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

The singleton kind-indexed data family.

Instances

data Sing Bool 
data Sing Bool where
data Sing Ordering 
data Sing Nat 
data Sing Nat where
data Sing Symbol 
data Sing Symbol where
data Sing () 
data Sing () where
data Sing Nat # 
data Sing Nat where
type MonomorphicRep Nat (Sing Nat) # 
type MonomorphicRep Nat (Sing Nat) # 
data Sing [a0] 
data Sing [a0] where
data Sing (Maybe a0) 
data Sing (Maybe a0) where
data Sing (NonEmpty a0) 
data Sing (NonEmpty a0) where
data Sing (Either a0 b0) 
data Sing (Either a0 b0) where
data Sing (a0, b0) 
data Sing (a0, b0) where
data Sing ((~>) k1 k2) 
data Sing ((~>) k1 k2) = SLambda {}
data Sing (a0, b0, c0) 
data Sing (a0, b0, c0) where
data Sing (a0, b0, c0, d0) 
data Sing (a0, b0, c0, d0) where
data Sing (a0, b0, c0, d0, e0) 
data Sing (a0, b0, c0, d0, e0) where
data Sing (a0, b0, c0, d0, e0, f0) 
data Sing (a0, b0, c0, d0, e0, f0) where
data Sing (a0, b0, c0, d0, e0, f0, g0) 
data Sing (a0, b0, c0, d0, e0, f0, g0) where

Arithmetic functions and their singletons.

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

type family Min a0 (arg0 :: a0) (arg1 :: a0) :: a0 #

Instances

type Min Bool arg0 arg1 
type Min Bool arg0 arg1 = Apply Bool Bool (Apply Bool (TyFun Bool Bool -> Type) (Min_1627688153Sym0 Bool) arg0) arg1
type Min Ordering arg0 arg1 
type Min Ordering arg0 arg1 = Apply Ordering Ordering (Apply Ordering (TyFun Ordering Ordering -> Type) (Min_1627688153Sym0 Ordering) arg0) arg1
type Min Nat arg0 arg1 
type Min Nat arg0 arg1 = Apply Nat Nat (Apply Nat (TyFun Nat Nat -> Type) (Min_1627688153Sym0 Nat) arg0) arg1
type Min Symbol arg0 arg1 
type Min Symbol arg0 arg1 = Apply Symbol Symbol (Apply Symbol (TyFun Symbol Symbol -> Type) (Min_1627688153Sym0 Symbol) arg0) arg1
type Min () arg0 arg1 
type Min () arg0 arg1 = Apply () () (Apply () (TyFun () () -> Type) (Min_1627688153Sym0 ()) arg0) arg1
type Min Nat a1 a0 # 
type Min Nat a1 a0
type Min [a0] arg0 arg1 
type Min [a0] arg0 arg1 = Apply [a0] [a0] (Apply [a0] (TyFun [a0] [a0] -> Type) (Min_1627688153Sym0 [a0]) arg0) arg1
type Min (Maybe a0) arg0 arg1 
type Min (Maybe a0) arg0 arg1 = Apply (Maybe a0) (Maybe a0) (Apply (Maybe a0) (TyFun (Maybe a0) (Maybe a0) -> Type) (Min_1627688153Sym0 (Maybe a0)) arg0) arg1
type Min (NonEmpty a0) arg0 arg1 
type Min (NonEmpty a0) arg0 arg1 = Apply (NonEmpty a0) (NonEmpty a0) (Apply (NonEmpty a0) (TyFun (NonEmpty a0) (NonEmpty a0) -> Type) (Min_1627688153Sym0 (NonEmpty a0)) arg0) arg1
type Min (Either a0 b0) arg0 arg1 
type Min (Either a0 b0) arg0 arg1 = Apply (Either a0 b0) (Either a0 b0) (Apply (Either a0 b0) (TyFun (Either a0 b0) (Either a0 b0) -> Type) (Min_1627688153Sym0 (Either a0 b0)) arg0) arg1
type Min (a0, b0) arg0 arg1 
type Min (a0, b0) arg0 arg1 = Apply (a0, b0) (a0, b0) (Apply (a0, b0) (TyFun (a0, b0) (a0, b0) -> Type) (Min_1627688153Sym0 (a0, b0)) arg0) arg1
type Min (a0, b0, c0) arg0 arg1 
type Min (a0, b0, c0) arg0 arg1 = Apply (a0, b0, c0) (a0, b0, c0) (Apply (a0, b0, c0) (TyFun (a0, b0, c0) (a0, b0, c0) -> Type) (Min_1627688153Sym0 (a0, b0, c0)) arg0) arg1
type Min (a0, b0, c0, d0) arg0 arg1 
type Min (a0, b0, c0, d0) arg0 arg1 = Apply (a0, b0, c0, d0) (a0, b0, c0, d0) (Apply (a0, b0, c0, d0) (TyFun (a0, b0, c0, d0) (a0, b0, c0, d0) -> Type) (Min_1627688153Sym0 (a0, b0, c0, d0)) arg0) arg1
type Min (a0, b0, c0, d0, e0) arg0 arg1 
type Min (a0, b0, c0, d0, e0) arg0 arg1 = Apply (a0, b0, c0, d0, e0) (a0, b0, c0, d0, e0) (Apply (a0, b0, c0, d0, e0) (TyFun (a0, b0, c0, d0, e0) (a0, b0, c0, d0, e0) -> Type) (Min_1627688153Sym0 (a0, b0, c0, d0, e0)) arg0) arg1
type Min (a0, b0, c0, d0, e0, f0) arg0 arg1 
type Min (a0, b0, c0, d0, e0, f0) arg0 arg1 = Apply (a0, b0, c0, d0, e0, f0) (a0, b0, c0, d0, e0, f0) (Apply (a0, b0, c0, d0, e0, f0) (TyFun (a0, b0, c0, d0, e0, f0) (a0, b0, c0, d0, e0, f0) -> Type) (Min_1627688153Sym0 (a0, b0, c0, d0, e0, f0)) arg0) arg1
type Min (a0, b0, c0, d0, e0, f0, g0) arg0 arg1 
type Min (a0, b0, c0, d0, e0, f0, g0) arg0 arg1 = Apply (a0, b0, c0, d0, e0, f0, g0) (a0, b0, c0, d0, e0, f0, g0) (Apply (a0, b0, c0, d0, e0, f0, g0) (TyFun (a0, b0, c0, d0, e0, f0, g0) (a0, b0, c0, d0, e0, f0, g0) -> Type) (Min_1627688153Sym0 (a0, b0, c0, d0, e0, f0, g0)) arg0) arg1

sMin :: SOrd a0 => forall t0 t1. Sing a0 t0 -> Sing a0 t1 -> Sing a0 (Apply a0 a0 (Apply a0 (TyFun a0 a0 -> Type) (MinSym0 a0) t0) t1) #

max :: Ord a => a -> a -> a #

type family Max a0 (arg0 :: a0) (arg1 :: a0) :: a0 #

Instances

type Max Bool arg0 arg1 
type Max Bool arg0 arg1 = Apply Bool Bool (Apply Bool (TyFun Bool Bool -> Type) (Max_1627688120Sym0 Bool) arg0) arg1
type Max Ordering arg0 arg1 
type Max Ordering arg0 arg1 = Apply Ordering Ordering (Apply Ordering (TyFun Ordering Ordering -> Type) (Max_1627688120Sym0 Ordering) arg0) arg1
type Max Nat arg0 arg1 
type Max Nat arg0 arg1 = Apply Nat Nat (Apply Nat (TyFun Nat Nat -> Type) (Max_1627688120Sym0 Nat) arg0) arg1
type Max Symbol arg0 arg1 
type Max Symbol arg0 arg1 = Apply Symbol Symbol (Apply Symbol (TyFun Symbol Symbol -> Type) (Max_1627688120Sym0 Symbol) arg0) arg1
type Max () arg0 arg1 
type Max () arg0 arg1 = Apply () () (Apply () (TyFun () () -> Type) (Max_1627688120Sym0 ()) arg0) arg1
type Max Nat a1 a0 # 
type Max Nat a1 a0
type Max [a0] arg0 arg1 
type Max [a0] arg0 arg1 = Apply [a0] [a0] (Apply [a0] (TyFun [a0] [a0] -> Type) (Max_1627688120Sym0 [a0]) arg0) arg1
type Max (Maybe a0) arg0 arg1 
type Max (Maybe a0) arg0 arg1 = Apply (Maybe a0) (Maybe a0) (Apply (Maybe a0) (TyFun (Maybe a0) (Maybe a0) -> Type) (Max_1627688120Sym0 (Maybe a0)) arg0) arg1
type Max (NonEmpty a0) arg0 arg1 
type Max (NonEmpty a0) arg0 arg1 = Apply (NonEmpty a0) (NonEmpty a0) (Apply (NonEmpty a0) (TyFun (NonEmpty a0) (NonEmpty a0) -> Type) (Max_1627688120Sym0 (NonEmpty a0)) arg0) arg1
type Max (Either a0 b0) arg0 arg1 
type Max (Either a0 b0) arg0 arg1 = Apply (Either a0 b0) (Either a0 b0) (Apply (Either a0 b0) (TyFun (Either a0 b0) (Either a0 b0) -> Type) (Max_1627688120Sym0 (Either a0 b0)) arg0) arg1
type Max (a0, b0) arg0 arg1 
type Max (a0, b0) arg0 arg1 = Apply (a0, b0) (a0, b0) (Apply (a0, b0) (TyFun (a0, b0) (a0, b0) -> Type) (Max_1627688120Sym0 (a0, b0)) arg0) arg1
type Max (a0, b0, c0) arg0 arg1 
type Max (a0, b0, c0) arg0 arg1 = Apply (a0, b0, c0) (a0, b0, c0) (Apply (a0, b0, c0) (TyFun (a0, b0, c0) (a0, b0, c0) -> Type) (Max_1627688120Sym0 (a0, b0, c0)) arg0) arg1
type Max (a0, b0, c0, d0) arg0 arg1 
type Max (a0, b0, c0, d0) arg0 arg1 = Apply (a0, b0, c0, d0) (a0, b0, c0, d0) (Apply (a0, b0, c0, d0) (TyFun (a0, b0, c0, d0) (a0, b0, c0, d0) -> Type) (Max_1627688120Sym0 (a0, b0, c0, d0)) arg0) arg1
type Max (a0, b0, c0, d0, e0) arg0 arg1 
type Max (a0, b0, c0, d0, e0) arg0 arg1 = Apply (a0, b0, c0, d0, e0) (a0, b0, c0, d0, e0) (Apply (a0, b0, c0, d0, e0) (TyFun (a0, b0, c0, d0, e0) (a0, b0, c0, d0, e0) -> Type) (Max_1627688120Sym0 (a0, b0, c0, d0, e0)) arg0) arg1
type Max (a0, b0, c0, d0, e0, f0) arg0 arg1 
type Max (a0, b0, c0, d0, e0, f0) arg0 arg1 = Apply (a0, b0, c0, d0, e0, f0) (a0, b0, c0, d0, e0, f0) (Apply (a0, b0, c0, d0, e0, f0) (TyFun (a0, b0, c0, d0, e0, f0) (a0, b0, c0, d0, e0, f0) -> Type) (Max_1627688120Sym0 (a0, b0, c0, d0, e0, f0)) arg0) arg1
type Max (a0, b0, c0, d0, e0, f0, g0) arg0 arg1 
type Max (a0, b0, c0, d0, e0, f0, g0) arg0 arg1 = Apply (a0, b0, c0, d0, e0, f0, g0) (a0, b0, c0, d0, e0, f0, g0) (Apply (a0, b0, c0, d0, e0, f0, g0) (TyFun (a0, b0, c0, d0, e0, f0, g0) (a0, b0, c0, d0, e0, f0, g0) -> Type) (Max_1627688120Sym0 (a0, b0, c0, d0, e0, f0, g0)) arg0) arg1

sMax :: SOrd a0 => forall t0 t1. Sing a0 t0 -> Sing a0 t1 -> Sing a0 (Apply a0 a0 (Apply a0 (TyFun a0 a0 -> Type) (MaxSym0 a0) t0) t1) #

data MinSym0 a1627685643 l0 :: forall a1627685643. TyFun a1627685643 (TyFun a1627685643 a1627685643 -> Type) -> * #

Instances

SuppressUnusedWarnings (TyFun a1627685643 (TyFun a1627685643 a1627685643 -> Type) -> *) (MinSym0 a1627685643) 

Methods

suppressUnusedWarnings :: Proxy (MinSym0 a1627685643) t -> () #

type Apply a1627685643 (TyFun a1627685643 a1627685643 -> Type) (MinSym0 a1627685643) l0 
type Apply a1627685643 (TyFun a1627685643 a1627685643 -> Type) (MinSym0 a1627685643) l0 = MinSym1 a1627685643 l0

data MinSym1 a1627685643 l0 l1 :: forall a1627685643. a1627685643 -> TyFun a1627685643 a1627685643 -> * #

Instances

SuppressUnusedWarnings (a1627685643 -> TyFun a1627685643 a1627685643 -> *) (MinSym1 a1627685643) 

Methods

suppressUnusedWarnings :: Proxy (MinSym1 a1627685643) t -> () #

type Apply a1627685643 a1627685643 (MinSym1 a1627685643 l0) l1 
type Apply a1627685643 a1627685643 (MinSym1 a1627685643 l0) l1 = MinSym2 a1627685643 l0 l1

type MinSym2 a1627685643 t0 t1 = Min a1627685643 t0 t1 #

data MaxSym0 a1627685643 l0 :: forall a1627685643. TyFun a1627685643 (TyFun a1627685643 a1627685643 -> Type) -> * #

Instances

SuppressUnusedWarnings (TyFun a1627685643 (TyFun a1627685643 a1627685643 -> Type) -> *) (MaxSym0 a1627685643) 

Methods

suppressUnusedWarnings :: Proxy (MaxSym0 a1627685643) t -> () #

type Apply a1627685643 (TyFun a1627685643 a1627685643 -> Type) (MaxSym0 a1627685643) l0 
type Apply a1627685643 (TyFun a1627685643 a1627685643 -> Type) (MaxSym0 a1627685643) l0 = MaxSym1 a1627685643 l0

data MaxSym1 a1627685643 l0 l1 :: forall a1627685643. a1627685643 -> TyFun a1627685643 a1627685643 -> * #

Instances

SuppressUnusedWarnings (a1627685643 -> TyFun a1627685643 a1627685643 -> *) (MaxSym1 a1627685643) 

Methods

suppressUnusedWarnings :: Proxy (MaxSym1 a1627685643) t -> () #

type Apply a1627685643 a1627685643 (MaxSym1 a1627685643 l0) l1 
type Apply a1627685643 a1627685643 (MaxSym1 a1627685643 l0) l1 = MaxSym2 a1627685643 l0 l1

type MaxSym2 a1627685643 t0 t1 = Max a1627685643 t0 t1 #

type (:+:) n m = n :+ m infixl 6 Source #

type family (a0 :+ (arg0 :: a0)) (arg1 :: a0) :: a0 #

Instances

type (:+) Nat a b 
type (:+) Nat a b = (+) a b
type (:+) Nat a1 a0 # 
type (:+) Nat a1 a0

data a1627805829 :+$ l0 :: forall a1627805829. TyFun a1627805829 (TyFun a1627805829 a1627805829 -> Type) -> * #

Instances

SuppressUnusedWarnings (TyFun a1627805829 (TyFun a1627805829 a1627805829 -> Type) -> *) ((:+$) a1627805829) 

Methods

suppressUnusedWarnings :: Proxy ((:+$) a1627805829) t -> () #

type Apply a1627805829 (TyFun a1627805829 a1627805829 -> Type) ((:+$) a1627805829) l0 
type Apply a1627805829 (TyFun a1627805829 a1627805829 -> Type) ((:+$) a1627805829) l0 = (:+$$) a1627805829 l0

data (a1627805829 :+$$ l0) l1 :: forall a1627805829. a1627805829 -> TyFun a1627805829 a1627805829 -> * #

Instances

SuppressUnusedWarnings (a1627805829 -> TyFun a1627805829 a1627805829 -> *) ((:+$$) a1627805829) 

Methods

suppressUnusedWarnings :: Proxy ((:+$$) a1627805829) t -> () #

type Apply a1627805829 a1627805829 ((:+$$) a1627805829 l0) l1 
type Apply a1627805829 a1627805829 ((:+$$) a1627805829 l0) l1 = (:+$$$) a1627805829 l0 l1

type (:+$$$) a1627805829 t0 t1 = (:+) a1627805829 t0 t1 #

(%+) :: SNat n -> SNat m -> SNat (n :+: m) infixl 6 Source #

Addition for singleton numbers.

(%:+) :: SNum a0 => forall t0 t1. Sing a0 t0 -> Sing a0 t1 -> Sing a0 (Apply a0 a0 (Apply a0 (TyFun a0 a0 -> Type) ((:+$) a0) t0) t1) #

type family (a0 :* (arg0 :: a0)) (arg1 :: a0) :: a0 #

Instances

type (:*) Nat a b 
type (:*) Nat a b = * a b
type (:*) Nat a1 a0 # 
type (:*) Nat a1 a0

type (:*:) n m = n :* m infixl 7 Source #

Type-level multiplication.

data a1627805829 :*$ l0 :: forall a1627805829. TyFun a1627805829 (TyFun a1627805829 a1627805829 -> Type) -> * #

Instances

SuppressUnusedWarnings (TyFun a1627805829 (TyFun a1627805829 a1627805829 -> Type) -> *) ((:*$) a1627805829) 

Methods

suppressUnusedWarnings :: Proxy ((:*$) a1627805829) t -> () #

type Apply a1627805829 (TyFun a1627805829 a1627805829 -> Type) ((:*$) a1627805829) l0 
type Apply a1627805829 (TyFun a1627805829 a1627805829 -> Type) ((:*$) a1627805829) l0 = (:*$$) a1627805829 l0

data (a1627805829 :*$$ l0) l1 :: forall a1627805829. a1627805829 -> TyFun a1627805829 a1627805829 -> * #

Instances

SuppressUnusedWarnings (a1627805829 -> TyFun a1627805829 a1627805829 -> *) ((:*$$) a1627805829) 

Methods

suppressUnusedWarnings :: Proxy ((:*$$) a1627805829) t -> () #

type Apply a1627805829 a1627805829 ((:*$$) a1627805829 l0) l1 
type Apply a1627805829 a1627805829 ((:*$$) a1627805829 l0) l1 = (:*$$$) a1627805829 l0 l1

type (:*$$$) a1627805829 t0 t1 = (:*) a1627805829 t0 t1 #

(%:*) :: SNum a0 => forall t0 t1. Sing a0 t0 -> Sing a0 t1 -> Sing a0 (Apply a0 a0 (Apply a0 (TyFun a0 a0 -> Type) ((:*$) a0) t0) t1) #

(%*) :: SNat n -> SNat m -> SNat (n :*: m) infixl 7 Source #

Multiplication for singleton numbers.

type (:-:) n m = n :- m infixl 6 Source #

type family (a0 :- (arg0 :: a0)) (arg1 :: a0) :: a0 #

Instances

type (:-) Nat a b 
type (:-) Nat a b = (-) a b
type (:-) Nat a1 a0 # 
type (:-) Nat a1 a0

type (:**:) n m = n :** m Source #

Type-level exponentiation.

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

Equations

_z_1627480145 :** Z = Apply SSym0 ZSym0 
n :** (S m) = Apply (Apply (:*$) (Apply (Apply (:**$) n) m)) n 

(%:**) :: forall t t. Sing t -> Sing t -> Sing (Apply (Apply (:**$) t) t :: Nat) Source #

(%**) :: SNat n -> SNat m -> SNat (n :**: m) Source #

Exponentiation for singleton numbers.

data a1627805829 :-$ l0 :: forall a1627805829. TyFun a1627805829 (TyFun a1627805829 a1627805829 -> Type) -> * #

Instances

SuppressUnusedWarnings (TyFun a1627805829 (TyFun a1627805829 a1627805829 -> Type) -> *) ((:-$) a1627805829) 

Methods

suppressUnusedWarnings :: Proxy ((:-$) a1627805829) t -> () #

type Apply a1627805829 (TyFun a1627805829 a1627805829 -> Type) ((:-$) a1627805829) l0 
type Apply a1627805829 (TyFun a1627805829 a1627805829 -> Type) ((:-$) a1627805829) l0 = (:-$$) a1627805829 l0

data (a1627805829 :-$$ l0) l1 :: forall a1627805829. a1627805829 -> TyFun a1627805829 a1627805829 -> * #

Instances

SuppressUnusedWarnings (a1627805829 -> TyFun a1627805829 a1627805829 -> *) ((:-$$) a1627805829) 

Methods

suppressUnusedWarnings :: Proxy ((:-$$) a1627805829) t -> () #

type Apply a1627805829 a1627805829 ((:-$$) a1627805829 l0) l1 
type Apply a1627805829 a1627805829 ((:-$$) a1627805829 l0) l1 = (:-$$$) a1627805829 l0 l1

type (:-$$$) a1627805829 t0 t1 = (:-) a1627805829 t0 t1 #

(%:-) :: SNum a0 => forall t0 t1. Sing a0 t0 -> Sing a0 t1 -> Sing a0 (Apply a0 a0 (Apply a0 (TyFun a0 a0 -> Type) ((:-$) a0) t0) t1) #

(%-) :: (m :<= n) ~ True => SNat n -> SNat m -> SNat (n :-: m) infixl 6 Source #

Type-level predicate & judgements

data Leq n m where Source #

Comparison via GADTs.

Constructors

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

type family (a0 :<= (arg0 :: a0)) (arg1 :: a0) :: Bool #

Instances

type (:<=) Bool arg0 arg1 
type (:<=) Bool arg0 arg1 = Apply Bool Bool (Apply Bool (TyFun Bool Bool -> Type) (TFHelper_1627688021Sym0 Bool) arg0) arg1
type (:<=) Ordering arg0 arg1 
type (:<=) Ordering arg0 arg1 = Apply Ordering Bool (Apply Ordering (TyFun Ordering Bool -> Type) (TFHelper_1627688021Sym0 Ordering) arg0) arg1
type (:<=) Nat arg0 arg1 
type (:<=) Nat arg0 arg1 = Apply Nat Bool (Apply Nat (TyFun Nat Bool -> Type) (TFHelper_1627688021Sym0 Nat) arg0) arg1
type (:<=) Symbol arg0 arg1 
type (:<=) Symbol arg0 arg1 = Apply Symbol Bool (Apply Symbol (TyFun Symbol Bool -> Type) (TFHelper_1627688021Sym0 Symbol) arg0) arg1
type (:<=) () arg0 arg1 
type (:<=) () arg0 arg1 = Apply () Bool (Apply () (TyFun () Bool -> Type) (TFHelper_1627688021Sym0 ()) arg0) arg1
type (:<=) Nat a1 a0 # 
type (:<=) Nat a1 a0
type (:<=) [a0] arg0 arg1 
type (:<=) [a0] arg0 arg1 = Apply [a0] Bool (Apply [a0] (TyFun [a0] Bool -> Type) (TFHelper_1627688021Sym0 [a0]) arg0) arg1
type (:<=) (Maybe a0) arg0 arg1 
type (:<=) (Maybe a0) arg0 arg1 = Apply (Maybe a0) Bool (Apply (Maybe a0) (TyFun (Maybe a0) Bool -> Type) (TFHelper_1627688021Sym0 (Maybe a0)) arg0) arg1
type (:<=) (NonEmpty a0) arg0 arg1 
type (:<=) (NonEmpty a0) arg0 arg1 = Apply (NonEmpty a0) Bool (Apply (NonEmpty a0) (TyFun (NonEmpty a0) Bool -> Type) (TFHelper_1627688021Sym0 (NonEmpty a0)) arg0) arg1
type (:<=) (Either a0 b0) arg0 arg1 
type (:<=) (Either a0 b0) arg0 arg1 = Apply (Either a0 b0) Bool (Apply (Either a0 b0) (TyFun (Either a0 b0) Bool -> Type) (TFHelper_1627688021Sym0 (Either a0 b0)) arg0) arg1
type (:<=) (a0, b0) arg0 arg1 
type (:<=) (a0, b0) arg0 arg1 = Apply (a0, b0) Bool (Apply (a0, b0) (TyFun (a0, b0) Bool -> Type) (TFHelper_1627688021Sym0 (a0, b0)) arg0) arg1
type (:<=) (a0, b0, c0) arg0 arg1 
type (:<=) (a0, b0, c0) arg0 arg1 = Apply (a0, b0, c0) Bool (Apply (a0, b0, c0) (TyFun (a0, b0, c0) Bool -> Type) (TFHelper_1627688021Sym0 (a0, b0, c0)) arg0) arg1
type (:<=) (a0, b0, c0, d0) arg0 arg1 
type (:<=) (a0, b0, c0, d0) arg0 arg1 = Apply (a0, b0, c0, d0) Bool (Apply (a0, b0, c0, d0) (TyFun (a0, b0, c0, d0) Bool -> Type) (TFHelper_1627688021Sym0 (a0, b0, c0, d0)) arg0) arg1
type (:<=) (a0, b0, c0, d0, e0) arg0 arg1 
type (:<=) (a0, b0, c0, d0, e0) arg0 arg1 = Apply (a0, b0, c0, d0, e0) Bool (Apply (a0, b0, c0, d0, e0) (TyFun (a0, b0, c0, d0, e0) Bool -> Type) (TFHelper_1627688021Sym0 (a0, b0, c0, d0, e0)) arg0) arg1
type (:<=) (a0, b0, c0, d0, e0, f0) arg0 arg1 
type (:<=) (a0, b0, c0, d0, e0, f0) arg0 arg1 = Apply (a0, b0, c0, d0, e0, f0) Bool (Apply (a0, b0, c0, d0, e0, f0) (TyFun (a0, b0, c0, d0, e0, f0) Bool -> Type) (TFHelper_1627688021Sym0 (a0, b0, c0, d0, e0, f0)) arg0) arg1
type (:<=) (a0, b0, c0, d0, e0, f0, g0) arg0 arg1 
type (:<=) (a0, b0, c0, d0, e0, f0, g0) arg0 arg1 = Apply (a0, b0, c0, d0, e0, f0, g0) Bool (Apply (a0, b0, c0, d0, e0, f0, g0) (TyFun (a0, b0, c0, d0, e0, f0, g0) Bool -> Type) (TFHelper_1627688021Sym0 (a0, b0, c0, d0, e0, f0, g0)) arg0) arg1

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

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

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 m. PeanoOrder nat => Sing (n :: nat) -> 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

Methods

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

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

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

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

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

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

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

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

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

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

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

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

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

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

multSuccL :: Sing Nat n -> Sing Nat m -> (Nat :~: (Nat :* S Nat n) m) ((Nat :+ (Nat :* n) m) m) Source #

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

multSuccR :: Sing Nat n -> Sing Nat m -> (Nat :~: (Nat :* n) (S Nat m)) ((Nat :+ (Nat :* n) m) n) Source #

multComm :: Sing Nat n -> Sing Nat m -> (Nat :~: (Nat :* n) m) ((Nat :* m) n) Source #

multOneR :: Sing Nat n -> (Nat :~: (Nat :* n) (One Nat)) n Source #

multOneL :: Sing Nat n -> (Nat :~: (Nat :* One Nat) n) n Source #

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

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

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

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

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

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

succAndPlusOneL :: Sing Nat n -> (Nat :~: Succ Nat n) ((Nat :+ One Nat) n) Source #

succAndPlusOneR :: Sing Nat n -> (Nat :~: Succ Nat n) ((Nat :+ n) (One Nat)) Source #

predSucc :: Sing Nat n -> (Nat :~: Pred Nat (Succ Nat n)) n Source #

zeroOrSucc :: Sing Nat n -> ZeroOrSucc Nat n Source #

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

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

predUnique :: Sing Nat n -> Sing Nat m -> (Nat :~: Succ Nat n) m -> (Nat :~: n) (Pred Nat m) Source #

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

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

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

multEqCancelR :: Sing Nat n -> Sing Nat m -> Sing Nat l -> (Nat :~: (Nat :* n) (Succ Nat l)) ((Nat :* m) (Succ Nat l)) -> (Nat :~: n) m Source #

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

multEqCancelL :: Sing Nat n -> Sing Nat m -> Sing Nat l -> (Nat :~: (Nat :* Succ Nat n) m) ((Nat :* Succ Nat n) l) -> (Nat :~: m) l Source #

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

PeanoOrder Nat Source # 

Methods

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

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

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

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

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

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

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

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

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

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

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

leqToGT :: Sing Nat a -> Sing Nat b -> IsTrue ((Nat :<= Succ Nat b) a) -> (Ordering :~: Compare Nat a b) GT Source #

cmpZero' :: Sing Nat a -> Either ((Ordering :~: Compare Nat (Zero Nat) a) EQ) ((Ordering :~: Compare Nat (Zero Nat) a) LT) Source #

zeroNoLT :: Sing Nat a -> (Ordering :~: Compare Nat a (Zero Nat)) LT -> Void Source #

ltRightPredSucc :: Sing Nat a -> Sing Nat b -> (Ordering :~: Compare Nat a b) LT -> (Nat :~: b) (Succ Nat (Pred Nat b)) Source #

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

plusMonotone :: Sing Nat n -> Sing Nat m -> Sing Nat l -> Sing Nat k -> IsTrue ((Nat :<= n) m) -> IsTrue ((Nat :<= l) k) -> IsTrue ((Nat :<= (Nat :+ n) l) ((Nat :+ m) k)) Source #

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

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

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

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

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

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

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

succLeqZeroAbsurd :: Sing Nat n -> IsTrue ((Nat :<= S Nat n) (Zero Nat)) -> Void Source #

succLeqZeroAbsurd' :: Sing Nat n -> (Bool :~: (Nat :<= S Nat n) (Zero Nat)) False Source #

succLeqAbsurd :: Sing Nat n -> IsTrue ((Nat :<= S Nat n) n) -> Void Source #

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

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

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

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

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

minComm :: Sing Nat n -> Sing Nat m -> (Nat :~: Min Nat n m) (Min Nat m n) Source #

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

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

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

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

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

maxComm :: Sing Nat n -> Sing Nat m -> (Nat :~: Max Nat n m) (Max Nat m n) Source #

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

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

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

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

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

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

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

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

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

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

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

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

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

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

plusStrictMonotone :: Sing Nat n -> Sing Nat m -> Sing Nat l -> Sing Nat k -> IsTrue ((Nat :< n) m) -> IsTrue ((Nat :< l) k) -> IsTrue ((Nat :< (Nat :+ n) l) ((Nat :+ m) k)) Source #

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

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

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

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

minusSucc :: Sing Nat n -> Sing Nat m -> IsTrue ((Nat :<= m) n) -> (Nat :~: (Nat :- Succ Nat n) m) (Succ Nat ((Nat :- n) m)) Source #

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

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

Monomorphicable Nat (Sing Nat) Source # 

Associated Types

type MonomorphicRep (Sing Nat) (k1 :: Sing Nat -> *) :: * #