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

toPeanoInjective :: forall n m. (KnownNat n, KnownNat m) => (ToPeano n :~: ToPeano m) -> n :~: m Source #

Bijection

Algebraic isomorphisms

Peano and commutative ring axioms for built-in Nat

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 #

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 |].

Re-exports

type (<) a b = (:<) a b infix 4 Source #

type (<@#@$$$) a b = (:<$$$) a b Source #

(%<) :: forall nat (a :: nat) (b :: nat). SOrd nat => Sing a -> Sing b -> Sing ((<) a b) infix 4 Source #

type (>) a b = (:>) a b infix 4 Source #

type (>@#@$$$) a b = (:>$$$) a b Source #

(%>) :: forall nat (a :: nat) (b :: nat). SOrd nat => Sing a -> Sing b -> Sing ((>) a b) infix 4 Source #

type (<=) a b = (:<=) a b infix 4 Source #

type (<=@#@$$$) a b = (:<=$$$) a b Source #

(%<=) :: forall nat (a :: nat) (b :: nat). SOrd nat => Sing a -> Sing b -> Sing ((<=) a b) infix 4 Source #

type (>=) a b = (:>=) a b infix 4 Source #

type (>=@#@$$$) a b = (:>=$$$) a b Source #

(%>=) :: forall nat (a :: nat) (b :: nat). SOrd nat => Sing a -> Sing b -> Sing ((>=) a b) infix 4 Source #

type (/=) a b = (:/=) a b infix 4 Source #

type (/=@#@$$$) a b = (:/=$$$) a b Source #

(%/=) :: forall nat (a :: nat) (b :: nat). SEq nat => Sing a -> Sing b -> Sing ((/=) a b) infix 4 Source #

type (==) a b = (:==) a b infix 4 Source #

type (==@#@$$$) a b = (:==$$$) a b Source #

(%==) :: forall nat (a :: nat) (b :: nat). SEq nat => Sing a -> Sing b -> Sing ((==) a b) infix 4 Source #

type (+) a b = (:+) a b infixl 6 Source #

type (+@#@$$$) a b = (:+$$$) a b Source #

(%+) :: forall nat (a :: nat) (b :: nat). SNum nat => Sing a -> Sing b -> Sing ((+) a b) infixl 6 Source #

type (-) a b = (:-) a b infixl 6 Source #

type (-@#@$$$) a b = (:-$$$) a b Source #

(%-) :: forall nat (a :: nat) (b :: nat). SNum nat => Sing a -> Sing b -> Sing ((-) a b) infixl 6 Source #

type * a b = (:*) a b infixl 7 Source #

type (*@#@$$$) a b = (:*$$$) a b Source #

(%*) :: forall nat (a :: nat) (b :: nat). SNum nat => Sing a -> Sing b -> Sing (* a b) infixl 7 Source #

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 :: Nat). 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 #

toNatural :: Sing Nat n -> Natural Source #

fromNatural :: Natural -> SomeSing Nat 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 #