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

Safe HaskellNone
LanguageHaskell2010

Data.Type.Natural.Builtin

Contents

Description

Coercion between Peano Numerals Nat and builtin naturals Nat

Synopsis

Sysnonym to avoid confusion

type Peano = Nat Source #

Type synonym for Nat to avoid confusion with built-in Nat.

Coercion between builtin type-level natural and peano numerals

type family FromPeano (n :: Nat) :: Nat where ... Source #

Equations

FromPeano Z = 0 
FromPeano (S n) = Succ (FromPeano n) 

type family ToPeano (n :: Nat) :: Nat where ... Source #

Equations

ToPeano 0 = Z 
ToPeano n = S (ToPeano (Pred n)) 

Properties of FromPeano and ToPeano.

fromPeanoInjective :: forall n m. (SingI n, SingI m) => (FromPeano n :~: FromPeano m) -> n :~: m Source #

Bijection

Algebraic isomorphisms

Peano and commutative ring axioms for built-in Nat

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 #

inductionNat :: forall p n. p 0 -> (forall m. p m -> p (m + 1)) -> Sing n -> p n Source #

Induction scheme for built-in Nat.

QuasiQuotes

snat :: QuasiQuoter Source #

Quotesi-quoter for singleton types for Nat. This can be used for an expression.

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

Orphan instances

IsPeano Nat Source # 

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