type-natural-0.8.2.0: 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)) 

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

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 #

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 #

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

Orphan instances

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