type-natural-1.1.0.0: Type-level natural and proofs of their properties.
Safe HaskellNone
LanguageHaskell2010

Data.Type.Natural.Lemma.Arithmetic

Documentation

type Zero = 0 Source #

type One = 1 Source #

type S n = Succ n Source #

data ZeroOrSucc n where Source #

Constructors

IsZero :: ZeroOrSucc 0 
IsSucc :: SNat n -> ZeroOrSucc (n + 1) 

plusCong :: (n :~: m) -> (n' :~: m') -> (n + n') :~: (m + m') Source #

plusCongR :: SNat k -> (n :~: m) -> (k + n) :~: (k + m) Source #

plusCongL :: (n :~: m) -> SNat k -> (n + k) :~: (m + k) Source #

predCong :: (n :~: m) -> Pred n :~: Pred m Source #

type Succ n = n + 1 Source #

sS :: SNat n -> SNat (Succ n) Source #

sSucc :: SNat n -> SNat (Succ n) Source #

type Pred n = n - 1 Source #

sPred :: SNat n -> SNat (Pred n) Source #

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

succCong :: (n :~: m) -> S n :~: S m Source #

multCong :: (n :~: m) -> (l :~: k) -> (n * l) :~: (m * k) Source #

multCongL :: (n :~: m) -> SNat k -> (n * k) :~: (m * k) Source #

multCongR :: SNat k -> (n :~: m) -> (k * n) :~: (k * m) Source #

minusCong :: (n :~: m) -> (l :~: k) -> (n - l) :~: (m - k) Source #

minusCongL :: (n :~: m) -> SNat k -> (n - k) :~: (m - k) Source #

minusCongR :: SNat k -> (n :~: m) -> (k - n) :~: (k - m) Source #

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

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

induction :: forall p k. p 0 -> (forall n. SNat n -> p n -> p (S n)) -> SNat k -> p k Source #

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

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

plusZeroL :: SNat n -> (0 + n) :~: n Source #

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

plusZeroR :: SNat n -> (n + 0) :~: n Source #

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

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

plusAssoc :: forall n m l. SNat n -> SNat m -> SNat l -> ((n + m) + l) :~: (n + (m + l)) Source #

multZeroL :: SNat n -> (0 * n) :~: 0 Source #

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

multSuccL' :: SNat n -> SNat m -> (S n * m) :~: ((n * m) + (1 * m)) Source #

multZeroR :: SNat n -> (n * 0) :~: 0 Source #

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

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

multOneR :: SNat n -> (n * 1) :~: n Source #

multOneL :: SNat n -> (1 * n) :~: n Source #

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

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

minusNilpotent :: SNat n -> (n - n) :~: 0 Source #

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

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

plusEqCancelR :: forall n m l. SNat n -> SNat m -> SNat l -> ((n + l) :~: (m + l)) -> n :~: m Source #

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

viewNat :: forall n. SNat n -> ZeroOrSucc n Source #

plusEqZeroL :: SNat n -> SNat m -> ((n + m) :~: 0) -> n :~: 0 Source #

plusEqZeroR :: SNat n -> SNat m -> ((n + m) :~: 0) -> m :~: 0 Source #

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

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

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

minusZero :: SNat n -> (n - 0) :~: n Source #

multEqCancelR :: forall n m l. SNat n -> SNat m -> SNat l -> ((n * Succ l) :~: (m * Succ l)) -> n :~: m Source #

succPred :: SNat n -> ((n :~: 0) -> Void) -> Succ (Pred n) :~: n Source #

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

pattern Zero :: () => n ~ 0 => SNat n Source #

pattern Succ :: forall n n1. () => n ~ Succ n1 => SNat n1 -> SNat n Source #