packages feed

type-natural 0.8.0.1 → 0.8.1.0

raw patch · 2 files changed

+43/−26 lines, 2 filesdep ~ghc-typelits-natnormalisePVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: ghc-typelits-natnormalise

API changes (from Hackage documentation)

+ Data.Type.Natural.Builtin: leqqAndLeq :: Sing n -> Sing m -> (n <=? m) :~: (n <= m)
- Data.Type.Natural: (%*) :: forall nat_al84 (a_al82 :: nat_al84) (b_al83 :: nat_al84). SNum nat_al84 => Sing a_al82 -> Sing b_al83 -> Sing ((*) a_al82 b_al83)
+ Data.Type.Natural: (%*) :: forall nat_al8g (a_al8e :: nat_al8g) (b_al8f :: nat_al8g). SNum nat_al8g => Sing a_al8e -> Sing b_al8f -> Sing ((*) a_al8e b_al8f)
- Data.Type.Natural: (%+) :: forall nat_al45 (a_al43 :: nat_al45) (b_al44 :: nat_al45). SNum nat_al45 => Sing a_al43 -> Sing b_al44 -> Sing ((+) a_al43 b_al44)
+ Data.Type.Natural: (%+) :: forall nat_al4h (a_al4f :: nat_al4h) (b_al4g :: nat_al4h). SNum nat_al4h => Sing a_al4f -> Sing b_al4g -> Sing ((+) a_al4f b_al4g)
- Data.Type.Natural: (%-) :: forall nat_al6m (a_al6k :: nat_al6m) (b_al6l :: nat_al6m). SNum nat_al6m => Sing a_al6k -> Sing b_al6l -> Sing ((-) a_al6k b_al6l)
+ Data.Type.Natural: (%-) :: forall nat_al6y (a_al6w :: nat_al6y) (b_al6x :: nat_al6y). SNum nat_al6y => Sing a_al6w -> Sing b_al6x -> Sing ((-) a_al6w b_al6x)
- Data.Type.Natural: data SSym0 (l_anme :: TyFun Nat Nat)
+ Data.Type.Natural: data SSym0 (l_anmq :: TyFun Nat Nat)
- Data.Type.Natural: type (<=) a_akVI b_akVJ = (:<=) a_akVI b_akVJ
+ Data.Type.Natural: type (<=) a_akVU b_akVV = (:<=) a_akVU b_akVV
- Data.Type.Natural: type SSym1 (t_anmd :: Nat) = S t_anmd
+ Data.Type.Natural: type SSym1 (t_anmp :: Nat) = S t_anmp
- Data.Type.Natural.Builtin: (%*) :: forall nat_al84 (a_al82 :: nat_al84) (b_al83 :: nat_al84). SNum nat_al84 => Sing a_al82 -> Sing b_al83 -> Sing ((*) a_al82 b_al83)
+ Data.Type.Natural.Builtin: (%*) :: forall nat_al8g (a_al8e :: nat_al8g) (b_al8f :: nat_al8g). SNum nat_al8g => Sing a_al8e -> Sing b_al8f -> Sing ((*) a_al8e b_al8f)
- Data.Type.Natural.Builtin: (%+) :: forall nat_al45 (a_al43 :: nat_al45) (b_al44 :: nat_al45). SNum nat_al45 => Sing a_al43 -> Sing b_al44 -> Sing ((+) a_al43 b_al44)
+ Data.Type.Natural.Builtin: (%+) :: forall nat_al4h (a_al4f :: nat_al4h) (b_al4g :: nat_al4h). SNum nat_al4h => Sing a_al4f -> Sing b_al4g -> Sing ((+) a_al4f b_al4g)
- Data.Type.Natural.Builtin: (%-) :: forall nat_al6m (a_al6k :: nat_al6m) (b_al6l :: nat_al6m). SNum nat_al6m => Sing a_al6k -> Sing b_al6l -> Sing ((-) a_al6k b_al6l)
+ Data.Type.Natural.Builtin: (%-) :: forall nat_al6y (a_al6w :: nat_al6y) (b_al6x :: nat_al6y). SNum nat_al6y => Sing a_al6w -> Sing b_al6x -> Sing ((-) a_al6w b_al6x)
- Data.Type.Natural.Builtin: (%/=) :: forall nat_akZc (a_akZa :: nat_akZc) (b_akZb :: nat_akZc). SEq nat_akZc => Sing a_akZa -> Sing b_akZb -> Sing ((/=) a_akZa b_akZb)
+ Data.Type.Natural.Builtin: (%/=) :: forall nat_akZo (a_akZm :: nat_akZo) (b_akZn :: nat_akZo). SEq nat_akZo => Sing a_akZm -> Sing b_akZn -> Sing ((/=) a_akZm b_akZn)
- Data.Type.Natural.Builtin: (%<) :: forall nat_akRk (a_akRi :: nat_akRk) (b_akRj :: nat_akRk). SOrd nat_akRk => Sing a_akRi -> Sing b_akRj -> Sing ((<) a_akRi b_akRj)
+ Data.Type.Natural.Builtin: (%<) :: forall nat_akRw (a_akRu :: nat_akRw) (b_akRv :: nat_akRw). SOrd nat_akRw => Sing a_akRu -> Sing b_akRv -> Sing ((<) a_akRu b_akRv)
- Data.Type.Natural.Builtin: (%<=) :: forall nat_akVK (a_akVI :: nat_akVK) (b_akVJ :: nat_akVK). SOrd nat_akVK => Sing a_akVI -> Sing b_akVJ -> Sing ((<=) a_akVI b_akVJ)
+ Data.Type.Natural.Builtin: (%<=) :: forall nat_akVW (a_akVU :: nat_akVW) (b_akVV :: nat_akVW). SOrd nat_akVW => Sing a_akVU -> Sing b_akVV -> Sing ((<=) a_akVU b_akVV)
- Data.Type.Natural.Builtin: (%==) :: forall nat_al15 (a_al13 :: nat_al15) (b_al14 :: nat_al15). SEq nat_al15 => Sing a_al13 -> Sing b_al14 -> Sing ((==) a_al13 b_al14)
+ Data.Type.Natural.Builtin: (%==) :: forall nat_al1h (a_al1f :: nat_al1h) (b_al1g :: nat_al1h). SEq nat_al1h => Sing a_al1f -> Sing b_al1g -> Sing ((==) a_al1f b_al1g)
- Data.Type.Natural.Builtin: (%>) :: forall nat_akU1 (a_akTZ :: nat_akU1) (b_akU0 :: nat_akU1). SOrd nat_akU1 => Sing a_akTZ -> Sing b_akU0 -> Sing ((>) a_akTZ b_akU0)
+ Data.Type.Natural.Builtin: (%>) :: forall nat_akUd (a_akUb :: nat_akUd) (b_akUc :: nat_akUd). SOrd nat_akUd => Sing a_akUb -> Sing b_akUc -> Sing ((>) a_akUb b_akUc)
- Data.Type.Natural.Builtin: (%>=) :: forall nat_akXt (a_akXr :: nat_akXt) (b_akXs :: nat_akXt). SOrd nat_akXt => Sing a_akXr -> Sing b_akXs -> Sing ((>=) a_akXr b_akXs)
+ Data.Type.Natural.Builtin: (%>=) :: forall nat_akXF (a_akXD :: nat_akXF) (b_akXE :: nat_akXF). SOrd nat_akXF => Sing a_akXD -> Sing b_akXE -> Sing ((>=) a_akXD b_akXE)
- Data.Type.Natural.Builtin: type (*@#@$$$) a_al82 b_al83 = (:*$$$) a_al82 b_al83
+ Data.Type.Natural.Builtin: type (*@#@$$$) a_al8e b_al8f = (:*$$$) a_al8e b_al8f
- Data.Type.Natural.Class.Arithmetic: (%*) :: forall nat_al84 (a_al82 :: nat_al84) (b_al83 :: nat_al84). SNum nat_al84 => Sing a_al82 -> Sing b_al83 -> Sing ((*) a_al82 b_al83)
+ Data.Type.Natural.Class.Arithmetic: (%*) :: forall nat_al8g (a_al8e :: nat_al8g) (b_al8f :: nat_al8g). SNum nat_al8g => Sing a_al8e -> Sing b_al8f -> Sing ((*) a_al8e b_al8f)
- Data.Type.Natural.Class.Arithmetic: (%+) :: forall nat_al45 (a_al43 :: nat_al45) (b_al44 :: nat_al45). SNum nat_al45 => Sing a_al43 -> Sing b_al44 -> Sing ((+) a_al43 b_al44)
+ Data.Type.Natural.Class.Arithmetic: (%+) :: forall nat_al4h (a_al4f :: nat_al4h) (b_al4g :: nat_al4h). SNum nat_al4h => Sing a_al4f -> Sing b_al4g -> Sing ((+) a_al4f b_al4g)
- Data.Type.Natural.Class.Arithmetic: (%-) :: forall nat_al6m (a_al6k :: nat_al6m) (b_al6l :: nat_al6m). SNum nat_al6m => Sing a_al6k -> Sing b_al6l -> Sing ((-) a_al6k b_al6l)
+ Data.Type.Natural.Class.Arithmetic: (%-) :: forall nat_al6y (a_al6w :: nat_al6y) (b_al6x :: nat_al6y). SNum nat_al6y => Sing a_al6w -> Sing b_al6x -> Sing ((-) a_al6w b_al6x)
- Data.Type.Natural.Class.Arithmetic: (%/=) :: forall nat_akZc (a_akZa :: nat_akZc) (b_akZb :: nat_akZc). SEq nat_akZc => Sing a_akZa -> Sing b_akZb -> Sing ((/=) a_akZa b_akZb)
+ Data.Type.Natural.Class.Arithmetic: (%/=) :: forall nat_akZo (a_akZm :: nat_akZo) (b_akZn :: nat_akZo). SEq nat_akZo => Sing a_akZm -> Sing b_akZn -> Sing ((/=) a_akZm b_akZn)
- Data.Type.Natural.Class.Arithmetic: (%<) :: forall nat_akRk (a_akRi :: nat_akRk) (b_akRj :: nat_akRk). SOrd nat_akRk => Sing a_akRi -> Sing b_akRj -> Sing ((<) a_akRi b_akRj)
+ Data.Type.Natural.Class.Arithmetic: (%<) :: forall nat_akRw (a_akRu :: nat_akRw) (b_akRv :: nat_akRw). SOrd nat_akRw => Sing a_akRu -> Sing b_akRv -> Sing ((<) a_akRu b_akRv)
- Data.Type.Natural.Class.Arithmetic: (%<=) :: forall nat_akVK (a_akVI :: nat_akVK) (b_akVJ :: nat_akVK). SOrd nat_akVK => Sing a_akVI -> Sing b_akVJ -> Sing ((<=) a_akVI b_akVJ)
+ Data.Type.Natural.Class.Arithmetic: (%<=) :: forall nat_akVW (a_akVU :: nat_akVW) (b_akVV :: nat_akVW). SOrd nat_akVW => Sing a_akVU -> Sing b_akVV -> Sing ((<=) a_akVU b_akVV)
- Data.Type.Natural.Class.Arithmetic: (%==) :: forall nat_al15 (a_al13 :: nat_al15) (b_al14 :: nat_al15). SEq nat_al15 => Sing a_al13 -> Sing b_al14 -> Sing ((==) a_al13 b_al14)
+ Data.Type.Natural.Class.Arithmetic: (%==) :: forall nat_al1h (a_al1f :: nat_al1h) (b_al1g :: nat_al1h). SEq nat_al1h => Sing a_al1f -> Sing b_al1g -> Sing ((==) a_al1f b_al1g)
- Data.Type.Natural.Class.Arithmetic: (%>) :: forall nat_akU1 (a_akTZ :: nat_akU1) (b_akU0 :: nat_akU1). SOrd nat_akU1 => Sing a_akTZ -> Sing b_akU0 -> Sing ((>) a_akTZ b_akU0)
+ Data.Type.Natural.Class.Arithmetic: (%>) :: forall nat_akUd (a_akUb :: nat_akUd) (b_akUc :: nat_akUd). SOrd nat_akUd => Sing a_akUb -> Sing b_akUc -> Sing ((>) a_akUb b_akUc)
- Data.Type.Natural.Class.Arithmetic: (%>=) :: forall nat_akXt (a_akXr :: nat_akXt) (b_akXs :: nat_akXt). SOrd nat_akXt => Sing a_akXr -> Sing b_akXs -> Sing ((>=) a_akXr b_akXs)
+ Data.Type.Natural.Class.Arithmetic: (%>=) :: forall nat_akXF (a_akXD :: nat_akXF) (b_akXE :: nat_akXF). SOrd nat_akXF => Sing a_akXD -> Sing b_akXE -> Sing ((>=) a_akXD b_akXE)
- Data.Type.Natural.Class.Arithmetic: type (*@#@$$$) a_al82 b_al83 = (:*$$$) a_al82 b_al83
+ Data.Type.Natural.Class.Arithmetic: type (*@#@$$$) a_al8e b_al8f = (:*$$$) a_al8e b_al8f
- Data.Type.Natural.Class.Order: (%*) :: forall nat_al84 (a_al82 :: nat_al84) (b_al83 :: nat_al84). SNum nat_al84 => Sing a_al82 -> Sing b_al83 -> Sing ((*) a_al82 b_al83)
+ Data.Type.Natural.Class.Order: (%*) :: forall nat_al8g (a_al8e :: nat_al8g) (b_al8f :: nat_al8g). SNum nat_al8g => Sing a_al8e -> Sing b_al8f -> Sing ((*) a_al8e b_al8f)
- Data.Type.Natural.Class.Order: (%+) :: forall nat_al45 (a_al43 :: nat_al45) (b_al44 :: nat_al45). SNum nat_al45 => Sing a_al43 -> Sing b_al44 -> Sing ((+) a_al43 b_al44)
+ Data.Type.Natural.Class.Order: (%+) :: forall nat_al4h (a_al4f :: nat_al4h) (b_al4g :: nat_al4h). SNum nat_al4h => Sing a_al4f -> Sing b_al4g -> Sing ((+) a_al4f b_al4g)
- Data.Type.Natural.Class.Order: (%-) :: forall nat_al6m (a_al6k :: nat_al6m) (b_al6l :: nat_al6m). SNum nat_al6m => Sing a_al6k -> Sing b_al6l -> Sing ((-) a_al6k b_al6l)
+ Data.Type.Natural.Class.Order: (%-) :: forall nat_al6y (a_al6w :: nat_al6y) (b_al6x :: nat_al6y). SNum nat_al6y => Sing a_al6w -> Sing b_al6x -> Sing ((-) a_al6w b_al6x)
- Data.Type.Natural.Class.Order: (%/=) :: forall nat_akZc (a_akZa :: nat_akZc) (b_akZb :: nat_akZc). SEq nat_akZc => Sing a_akZa -> Sing b_akZb -> Sing ((/=) a_akZa b_akZb)
+ Data.Type.Natural.Class.Order: (%/=) :: forall nat_akZo (a_akZm :: nat_akZo) (b_akZn :: nat_akZo). SEq nat_akZo => Sing a_akZm -> Sing b_akZn -> Sing ((/=) a_akZm b_akZn)
- Data.Type.Natural.Class.Order: (%<) :: forall nat_akRk (a_akRi :: nat_akRk) (b_akRj :: nat_akRk). SOrd nat_akRk => Sing a_akRi -> Sing b_akRj -> Sing ((<) a_akRi b_akRj)
+ Data.Type.Natural.Class.Order: (%<) :: forall nat_akRw (a_akRu :: nat_akRw) (b_akRv :: nat_akRw). SOrd nat_akRw => Sing a_akRu -> Sing b_akRv -> Sing ((<) a_akRu b_akRv)
- Data.Type.Natural.Class.Order: (%<=) :: forall nat_akVK (a_akVI :: nat_akVK) (b_akVJ :: nat_akVK). SOrd nat_akVK => Sing a_akVI -> Sing b_akVJ -> Sing ((<=) a_akVI b_akVJ)
+ Data.Type.Natural.Class.Order: (%<=) :: forall nat_akVW (a_akVU :: nat_akVW) (b_akVV :: nat_akVW). SOrd nat_akVW => Sing a_akVU -> Sing b_akVV -> Sing ((<=) a_akVU b_akVV)
- Data.Type.Natural.Class.Order: (%==) :: forall nat_al15 (a_al13 :: nat_al15) (b_al14 :: nat_al15). SEq nat_al15 => Sing a_al13 -> Sing b_al14 -> Sing ((==) a_al13 b_al14)
+ Data.Type.Natural.Class.Order: (%==) :: forall nat_al1h (a_al1f :: nat_al1h) (b_al1g :: nat_al1h). SEq nat_al1h => Sing a_al1f -> Sing b_al1g -> Sing ((==) a_al1f b_al1g)
- Data.Type.Natural.Class.Order: (%>) :: forall nat_akU1 (a_akTZ :: nat_akU1) (b_akU0 :: nat_akU1). SOrd nat_akU1 => Sing a_akTZ -> Sing b_akU0 -> Sing ((>) a_akTZ b_akU0)
+ Data.Type.Natural.Class.Order: (%>) :: forall nat_akUd (a_akUb :: nat_akUd) (b_akUc :: nat_akUd). SOrd nat_akUd => Sing a_akUb -> Sing b_akUc -> Sing ((>) a_akUb b_akUc)
- Data.Type.Natural.Class.Order: (%>=) :: forall nat_akXt (a_akXr :: nat_akXt) (b_akXs :: nat_akXt). SOrd nat_akXt => Sing a_akXr -> Sing b_akXs -> Sing ((>=) a_akXr b_akXs)
+ Data.Type.Natural.Class.Order: (%>=) :: forall nat_akXF (a_akXD :: nat_akXF) (b_akXE :: nat_akXF). SOrd nat_akXF => Sing a_akXD -> Sing b_akXE -> Sing ((>=) a_akXD b_akXE)
- Data.Type.Natural.Class.Order: sFlipOrdering :: forall (t_aQLG :: Ordering). Sing t_aQLG -> Sing (Apply FlipOrderingSym0 t_aQLG :: Ordering)
+ Data.Type.Natural.Class.Order: sFlipOrdering :: forall (t_aQLS :: Ordering). Sing t_aQLS -> Sing (Apply FlipOrderingSym0 t_aQLS :: Ordering)
- Data.Type.Natural.Class.Order: type (*@#@$$$) a_al82 b_al83 = (:*$$$) a_al82 b_al83
+ Data.Type.Natural.Class.Order: type (*@#@$$$) a_al8e b_al8f = (:*$$$) a_al8e b_al8f

Files

Data/Type/Natural/Builtin.hs view
@@ -9,7 +9,7 @@        ( -- * Sysnonym to avoid confusion          Peano,          -- * Coercion between builtin type-level natural and peano numerals-         FromPeano, ToPeano, sFromPeano, sToPeano,+         FromPeano, ToPeano, sFromPeano, sToPeano, leqqAndLeq,          -- * Properties of @'FromPeano'@ and @'ToPeano'@.          fromPeanoInjective, toPeanoInjective,          -- ** Bijection@@ -96,11 +96,48 @@ toPeanoSuccCong _ = unsafeCoerce (Refl :: () :~: ())   -- We cannot prove this lemma within Haskell, so we assume it a priori. +infix 4 %<=?+(%<=?) :: Sing (n :: TL.Nat) -> Sing m -> Sing (n <=? m)+n %<=? m = case sCompare n m of+  SLT -> STrue+  SEQ -> STrue+  SGT -> SFalse++natLeqSuccEq :: Sing n -> Sing m -> ((n TL.+ 1) <=? (m TL.+ 1)) :~: (n <=? m)+natLeqSuccEq _ _ = Refl++leqqCong :: n :~: m -> l :~: z -> (n <=? l) :~: (m <=? z)+leqqCong Refl Refl = Refl++leqqAndLeq :: Sing n -> Sing m -> (n <=? m) :~: (n PN.<= m)+leqqAndLeq n m =+  case sCompare n m of+    SEQ -> Refl+    SLT -> Refl+    SGT -> Refl++natSuccPred :: forall n. TL.KnownNat n => ((n :~: 0) -> Void) -> Succ (Pred n) :~: n+natSuccPred refute =+  case sCompare (sing :: Sing 1) (sing :: Sing n) of+    SLT -> Refl+    SEQ -> Refl+    SGT -> absurd $ refute Refl++neqZero1leqq :: forall n. TL.KnownNat n => ((n :~: 0) -> Void) -> IsTrue (1 <=? n)+neqZero1leqq refute =+  case sCompare (sing :: Sing 1) (sing :: Sing n) of+    SLT -> Witness+    SEQ -> Witness+    SGT -> absurd $ refute Refl+ sToPeano :: Sing n -> Sing (ToPeano n) sToPeano sn =   case sn %~ (sing :: Sing 0) of     Proved eq     -> withRefl eq SZ-    Disproved _pf -> coerce (sym (toPeanoSuccCong (sPred sn))) (SS (sToPeano (sPred sn)))+    Disproved _pf ->+      withKnownNat sn $+      withRefl (natSuccPred _pf) $+      coerce (sym (toPeanoSuccCong (sPred sn))) (SS (sToPeano (sPred sn)))  -- litSuccInjective :: forall (n :: TL.Nat) (m :: TL.Nat). --                     Succ n :~: Succ m -> n :~: m@@ -216,20 +253,6 @@         =~= SS (sToPeano psn) %* sToPeano sm         === sToPeano (sSucc psn) %* sToPeano sm             `because` multCongL (sym (toPeanoSuccCong psn)) (sToPeano sm)--infix 4 %<=?-(%<=?) :: Sing (n :: TL.Nat) -> Sing m -> Sing (n <=? m)-n %<=? m = case sCompare n m of-  SLT -> STrue-  SEQ -> STrue-  SGT -> SFalse--natLeqSuccEq :: Sing n -> Sing m -> ((n TL.+ 1) <=? (m TL.+ 1)) :~: (n <=? m)-natLeqSuccEq _ _ = Refl--leqqCong :: n :~: m -> l :~: z -> (n <=? l) :~: (m <=? z)-leqqCong Refl Refl = Refl- leqCong :: n :~: m -> l :~: z -> (n PN.<= l) :~: (m PN.<= z) leqCong Refl Refl = Refl @@ -251,12 +274,6 @@ natLeqZero Zero = Refl natLeqZero _    = error "natLeqZero : bug in ghc" --- | Currently, ghc-typelits-natnormalise reduces @(0 - 1) + 1@ to @0@,---   which is contradictory to current GHC's behaviour.---   So our assumption @((n :~: 0) -> Void)@ is simply disregarded.-natSuccPred :: ((n :~: 0) -> Void) -> Succ (Pred n) :~: n-natSuccPred _ = Refl- myLeqPred :: Sing n -> Sing m -> ('S n PN.<= 'S m) :~: (n PN.<= m) myLeqPred SZ _          = Refl myLeqPred (SS _) (SS _) = Refl@@ -267,12 +284,12 @@  toPeanoMonotone :: (n TL.<= m)                 => Sing n -> Sing m -> ((ToPeano n) PN.<= (ToPeano m)) :~: 'True-toPeanoMonotone sn sm =+toPeanoMonotone sn sm =  withKnownNat sn $ withKnownNat sm $   case sn %~ (sing :: Sing 0) of     Proved eql -> withRefl eql Refl-    Disproved nPos -> case sm %~ (sing :: Sing 0) of+    Disproved nPos -> withWitness (neqZero1leqq nPos) $ case sm %~ (sing :: Sing 0) of       Proved mEq0 -> withRefl mEq0 $ absurd $ nPos $ natLeqZero sn-      Disproved mPos ->+      Disproved mPos -> withWitness (neqZero1leqq mPos) $         let pn = sPred sn             pm = sPred sm         in start (sToPeano sn %<= sToPeano sm)
type-natural.cabal view
@@ -2,7 +2,7 @@ -- documentation, see http://haskell.org/cabal/users-guide/  name:                type-natural-version:             0.8.0.1+version:             0.8.1.0 synopsis:            Type-level natural and proofs of their properties. description:         Type-level natural numbers and proofs of their properties.                      .