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

Safe HaskellNone
LanguageHaskell2010

Data.Type.Natural.Class.Order

Synopsis

Documentation

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 #

data DiffNat n m where Source #

Constructors

DiffNat :: Sing n -> Sing m -> DiffNat n (n :+ m) 

data LeqView n m where Source #

Constructors

LeqZero :: Sing n -> LeqView (Zero nat) n 
LeqSucc :: Sing n -> Sing m -> IsTrue (n :<= m) -> LeqView (Succ n) (Succ m) 

sFlipOrdering :: forall t. Sing t -> Sing (Apply FlipOrderingSym0 t :: Ordering) Source #

coerceLeqL :: forall n m l. IsPeano nat => (n :~: m) -> Sing l -> IsTrue (n :<= l) -> IsTrue (m :<= l) Source #

coerceLeqR :: forall n m l. IsPeano nat => Sing l -> (n :~: m) -> IsTrue (l :<= n) -> IsTrue (l :<= m) Source #

sLeqCongL :: (a :~: b) -> Sing c -> (a :<= c) :~: (b :<= c) Source #

sLeqCongR :: Sing a -> (b :~: c) -> (a :<= b) :~: (a :<= c) Source #

sLeqCong :: (a :~: b) -> (c :~: d) -> (a :<= c) :~: (b :<= d) Source #

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

Natural subtraction, truncated to zero if m > n.

(%:-.) :: PeanoOrder nat => Sing (n :: nat) -> Sing m -> Sing (n :-. m) Source #

minPlusTruncMinus :: PeanoOrder nat => Sing (n :: nat) -> Sing (m :: nat) -> (Min n m :+ (n :-. m)) :~: n Source #

truncMinusLeq :: PeanoOrder nat => Sing (n :: nat) -> Sing m -> IsTrue ((n :-. m) :<= n) Source #