packages feed

kind-integer 0.5 → 0.6.0

raw patch · 5 files changed

+5042/−4127 lines, 5 filesdep +singletons-basePVP ok

version bump matches the API change (PVP)

Dependencies added: singletons-base

API changes (from Hackage documentation)

- KindInteger: class KnownInteger (i :: Integer)
- KindInteger: eqIntegerRep :: Integer -> Integer -> Bool
- KindInteger: fromPrelude :: Integer -> Integer
- KindInteger: infixl 6 -
- KindInteger: infixr 4 /=
- KindInteger: instance GHC.Classes.Eq KindInteger.Integer
- KindInteger: instance GHC.Classes.Eq KindInteger.Round
- KindInteger: instance GHC.Classes.Ord KindInteger.Integer
- KindInteger: instance GHC.Classes.Ord KindInteger.Round
- KindInteger: instance GHC.Enum.Bounded KindInteger.Round
- KindInteger: instance GHC.Enum.Enum KindInteger.Round
- KindInteger: instance GHC.Read.Read KindInteger.Integer
- KindInteger: instance GHC.Read.Read KindInteger.Round
- KindInteger: instance GHC.Show.Show KindInteger.Integer
- KindInteger: instance GHC.Show.Show KindInteger.Round
- KindInteger: instance GHC.TypeNats.KnownNat x => KindInteger.KnownInteger (KindInteger.N x)
- KindInteger: instance GHC.TypeNats.KnownNat x => KindInteger.KnownInteger (KindInteger.P x)
- KindInteger: showsPrecTypeLit :: Int -> Integer -> ShowS
- KindInteger: toPrelude :: Integer -> Integer
- KindInteger: type CmpInteger (a :: Integer) (b :: Integer) = CmpInteger_ (Normalize a) (Normalize b) :: Ordering
+ KindInteger: (%^) :: Sing (b :: Integer) -> Sing (p :: Natural) -> Sing (b ^ p :: Integer)
+ KindInteger: [SRoundAway] :: SRound ('RoundAway :: Round)
+ KindInteger: [SRoundDown] :: SRound ('RoundDown :: Round)
+ KindInteger: [SRoundHalfAway] :: SRound ('RoundHalfAway :: Round)
+ KindInteger: [SRoundHalfDown] :: SRound ('RoundHalfDown :: Round)
+ KindInteger: [SRoundHalfEven] :: SRound ('RoundHalfEven :: Round)
+ KindInteger: [SRoundHalfOdd] :: SRound ('RoundHalfOdd :: Round)
+ KindInteger: [SRoundHalfUp] :: SRound ('RoundHalfUp :: Round)
+ KindInteger: [SRoundHalfZero] :: SRound ('RoundHalfZero :: Round)
+ KindInteger: [SRoundUp] :: SRound ('RoundUp :: Round)
+ KindInteger: [SRoundZero] :: SRound ('RoundZero :: Round)
+ KindInteger: data (^@#@$$) :: Integer -> Natural ~> Integer
+ KindInteger: data DivRemSym0 :: Round ~> Integer ~> Integer ~> (Integer, Integer)
+ KindInteger: data DivRemSym1 :: Round -> Integer ~> Integer ~> (Integer, Integer)
+ KindInteger: data DivRemSym2 :: Round -> Integer -> Integer ~> (Integer, Integer)
+ KindInteger: data DivSym0 :: Round ~> Integer ~> Integer ~> Integer
+ KindInteger: data DivSym1 :: Round -> Integer ~> Integer ~> Integer
+ KindInteger: data DivSym2 :: Round -> Integer -> Integer ~> Integer
+ KindInteger: data EvenSym0 :: Integer ~> Bool
+ KindInteger: data FoldSym0 :: k ~> (Natural ~> k) ~> (Natural ~> k) ~> Integer ~> k
+ KindInteger: data FoldSym1 :: k -> (Natural ~> k) ~> (Natural ~> k) ~> Integer ~> k
+ KindInteger: data FoldSym2 :: k -> (Natural ~> k) -> (Natural ~> k) ~> Integer ~> k
+ KindInteger: data FoldSym3 :: k -> (Natural ~> k) -> (Natural ~> k) -> Integer ~> k
+ KindInteger: data FromNaturalSym0 :: Natural ~> Integer
+ KindInteger: data GCDSym0 :: Integer ~> Integer ~> Natural
+ KindInteger: data GCDSym1 :: Integer -> Integer ~> Natural
+ KindInteger: data KnownIntegerSym0 :: Integer ~> Constraint
+ KindInteger: data LCMSym0 :: Integer ~> Integer ~> Natural
+ KindInteger: data LCMSym1 :: Integer -> Integer ~> Natural
+ KindInteger: data Log2Sym0 :: Integer ~> Natural
+ KindInteger: data NSym0 :: Natural ~> Integer
+ KindInteger: data NormalizedSym0 :: Integer ~> Integer
+ KindInteger: data OddSym0 :: Integer ~> Bool
+ KindInteger: data PSym0 :: Natural ~> Integer
+ KindInteger: data RemSym0 :: Round ~> Integer ~> Integer ~> Integer
+ KindInteger: data RemSym1 :: Round -> Integer ~> Integer ~> Integer
+ KindInteger: data RemSym2 :: Round -> Integer -> Integer ~> Integer
+ KindInteger: data SRound :: Round -> Type
+ KindInteger: data ShowLitSym0 :: Integer ~> Symbol
+ KindInteger: data ShowsLitSym0 :: Integer ~> Symbol ~> Symbol
+ KindInteger: data ShowsLitSym1 :: Integer -> Symbol ~> Symbol
+ KindInteger: data ShowsPrecLitSym0 :: Natural ~> Integer ~> Symbol ~> Symbol
+ KindInteger: data ShowsPrecLitSym1 :: Natural -> Integer ~> Symbol ~> Symbol
+ KindInteger: data ShowsPrecLitSym2 :: Natural -> Integer -> Symbol ~> Symbol
+ KindInteger: instance (KindInteger.KnownInteger (KindInteger.N n), n GHC.Types.~ KindInteger.Abs (KindInteger.N n)) => KindInteger.KnownInteger_ (KindInteger.N n)
+ KindInteger: instance (KindInteger.KnownInteger (KindInteger.P n), n GHC.Types.~ KindInteger.Abs (KindInteger.P n)) => KindInteger.KnownInteger_ (KindInteger.P n)
+ KindInteger: instance Data.Eq.Singletons.PEq KindInteger.Integer
+ KindInteger: instance Data.Eq.Singletons.SEq KindInteger.Integer
+ KindInteger: instance Data.Ord.Singletons.POrd KindInteger.Integer
+ KindInteger: instance Data.Ord.Singletons.SOrd KindInteger.Integer
+ KindInteger: instance GHC.Classes.Eq (KindInteger.SInteger i)
+ KindInteger: instance GHC.Classes.Ord (KindInteger.SInteger i)
+ KindInteger: instance GHC.Num.Singletons.PNum KindInteger.Integer
+ KindInteger: instance GHC.Num.Singletons.SNum KindInteger.Integer
+ KindInteger: instance KindInteger.KnownInteger i => GHC.Read.Read (KindInteger.SInteger i)
+ KindInteger: instance KindInteger.KnownInteger_ KindInteger.Z
+ KindInteger: instance Text.Show.Singletons.PShow KindInteger.Integer
+ KindInteger: instance Text.Show.Singletons.SShow KindInteger.Integer
+ KindInteger: pattern SZ :: SInteger Z
+ KindInteger: pattern SP :: 0 < x => (KnownInteger (P x), KnownNat x) => Sing (x :: Natural) -> SInteger (P x)
+ KindInteger: readPrecLit :: ReadPrec Integer
+ KindInteger: sAbs :: SInteger i -> Sing (Abs i :: Natural)
+ KindInteger: sDiv :: SRound r -> SInteger a -> SInteger b -> SInteger (Div r a b)
+ KindInteger: sDivRem :: SRound r -> SInteger a -> SInteger b -> (SInteger (Div r a b), SInteger (Rem r a b))
+ KindInteger: sEven :: SInteger i -> Sing (Even i :: Bool)
+ KindInteger: sFold :: SingKind k => Sing (z :: k) -> Sing (n :: Natural ~> k) -> Sing (p :: Natural ~> k) -> SInteger i -> Sing (Fold z n p i)
+ KindInteger: sFromNatural :: Sing (x :: Natural) -> SInteger (FromNatural x)
+ KindInteger: sGCD :: SInteger a -> SInteger b -> Sing (GCD a b :: Natural)
+ KindInteger: sLCM :: SInteger a -> SInteger b -> Sing (LCM a b :: Natural)
+ KindInteger: sLog2 :: SInteger i -> Sing (Log2 i :: Natural)
+ KindInteger: sNegateRefl :: SInteger i -> i :~: Negate (Negate i)
+ KindInteger: sOdd :: SInteger i -> Sing (Odd i :: Bool)
+ KindInteger: sRem :: SRound r -> SInteger a -> SInteger b -> SInteger (Rem r a b)
+ KindInteger: sShowLit :: SInteger i -> Sing (ShowLit i)
+ KindInteger: sShowsLit :: SInteger i -> Sing (s :: Symbol) -> Sing (ShowsLit i s)
+ KindInteger: sShowsPrecLit :: Sing (p :: Natural) -> SInteger i -> Sing (s :: Symbol) -> Sing (ShowsPrecLit p i s)
+ KindInteger: sZagZig :: Sing (n :: Natural) -> SInteger (ZagZig n)
+ KindInteger: sZagZigRefl :: Sing (n :: Natural) -> n :~: ZigZag (ZagZig n)
+ KindInteger: sZigZag :: SInteger i -> Sing (ZigZag i :: Natural)
+ KindInteger: sZigZagRefl :: SInteger i -> i :~: ZagZig (ZigZag i)
+ KindInteger: showLit :: Integer -> String
+ KindInteger: showsLit :: Integer -> ShowS
+ KindInteger: showsPrecLit :: Int -> Integer -> ShowS
+ KindInteger: type Abs (i :: Integer) = Fold 0 IdSym0 IdSym0 i :: Natural
+ KindInteger: type DivRemSym3 r a b = DivRem r a b
+ KindInteger: type DivSym3 r a b = Div r a b
+ KindInteger: type EvenSym1 i = Even i
+ KindInteger: type FoldSym4 z n p i = Fold z n p i
+ KindInteger: type FromNaturalSym1 i = FromNatural i
+ KindInteger: type KnownInteger (i :: Integer) = (KnownInteger_ i, Normalized i ~ i, KnownNat (Abs i))
+ KindInteger: type KnownIntegerSym1 i = KnownInteger i
+ KindInteger: type Log2Sym1 a = Log2 a
+ KindInteger: type NSym1 x = N x
+ KindInteger: type NormalizedSym1 i = Normalized i
+ KindInteger: type OddSym1 i = Odd i
+ KindInteger: type PSym1 x = P x
+ KindInteger: type RemSym3 r a b = Rem r a b
+ KindInteger: type ShowLit (i :: Integer) = ShowsLit i "" :: Symbol
+ KindInteger: type ShowLitSym1 i = ShowLit i
+ KindInteger: type ShowsLit (i :: Integer) (s :: Symbol) = ShowsPrecLit 0 i s :: Symbol
+ KindInteger: type ShowsLitSym2 i s = ShowsLit i s
+ KindInteger: type ShowsPrecLit p i s = ShowsPrecLit_ p (Normalized i) s
+ KindInteger: type ShowsPrecLitSym3 p i s = ShowsPrecLit p i s
+ KindInteger: type Z = 'Z :: Integer
+ KindInteger: type ZSym0 = Z
+ KindInteger: type ZagZig n = If (Mod n 2 == 1) (Negate (FromNatural (Div (n + 1) 2))) (FromNatural (Div n 2))
+ KindInteger: type ZigZag (i :: Integer) = ZigZag_ (Normalized i) :: Natural
- KindInteger: SomeInteger :: Proxy n -> SomeInteger
+ KindInteger: SomeInteger :: Proxy i -> SomeInteger
- KindInteger: infixl 7 `Rem`
+ KindInteger: infixl 7 `DivRem`
- KindInteger: infixr 8 ^
+ KindInteger: infixr 8 ^@#@$$$
- KindInteger: type (a :: k) /= (b :: k) = (a /=? b) ~ 'True :: Constraint
+ KindInteger: type (^@#@$$$) b p = b ^ p
- KindInteger: type Div (r :: Round) (a :: Integer) (b :: Integer) = Div_ r (Normalize a) (Normalize b) :: Integer
+ KindInteger: type Div (r :: Round) (a :: Integer) (b :: Integer) = Div_ r (Normalized a) (Normalized b) :: Integer
- KindInteger: type Even (x :: Integer) = Mod (Abs x) 2 ==? 0 :: Bool
+ KindInteger: type Even (i :: Integer) = Mod (Abs i) 2 == 0 :: Bool
- KindInteger: type Log2 (a :: Integer) = Log2_ (Normalize a) :: Integer
+ KindInteger: type Log2 (a :: Integer) = Fold (TypeError ('Text "Logarithm of zero.")) (ConstSym1 (TypeError ('Text "Logarithm of negative number."))) (Log2Sym0) a :: Natural
- KindInteger: type N (x :: Natural) = 'N_ x :: Integer
+ KindInteger: type N (x :: Natural) = 'N x :: Integer
- KindInteger: type Odd (x :: Integer) = Mod (Abs x) 2 ==? 1 :: Bool
+ KindInteger: type Odd (i :: Integer) = Mod (Abs i) 2 == 1 :: Bool
- KindInteger: type P (x :: Natural) = 'P_ x :: Integer
+ KindInteger: type P (x :: Natural) = 'P x :: Integer
- KindInteger: type Rem (r :: Round) (a :: Integer) (b :: Integer) = a - b * Div r a b :: Integer
+ KindInteger: type Rem (r :: Round) (a :: Integer) (b :: Integer) = Rem_ r (Normalized a) (Normalized b) :: Integer
- KindInteger: type family Negate (x :: Integer) :: Integer
+ KindInteger: type family RoundHalfOddSym0 :: Round
- KindInteger: withKnownInteger :: forall i rep (r :: TYPE rep). SInteger i -> (KnownInteger i => r) -> r
+ KindInteger: withKnownInteger :: forall i rep (x :: TYPE rep). SInteger i -> (KnownInteger i => x) -> x
- KindInteger: withSomeSInteger :: forall rep (r :: TYPE rep). Integer -> (forall n. SInteger n -> r) -> r
+ KindInteger: withSomeSInteger :: forall rep (x :: TYPE rep). Integer -> (forall (i :: Integer). Sing i -> x) -> x

Files

CHANGELOG.md view
@@ -1,3 +1,39 @@+# Version 0.6.0++* COMPILER ASSISTED BREAKING CHANGE: `KindInteger.Integer` is now+  is now only ever used as a kind. So, all term-level functions in+  the `KindInteger` consume and produce `Prelude.Integer`s.++* COMPILER ASSISTED BREAKING CHANGE: Removed `Eq`, `Ord`, `Show` and+  `Read` instances for `KindInteger.Integer`.++* COMPILER ASSISTED BREAKING CHANGE: `Z` is now used to represent+  zero, instead of the previous `P 0`.++* COMPILER ASSISTED BREAKING CHANGE: `P 0` and `N 0` are not+  `KnownInteger`s anymore.++* COMPILER ASSISTED BREAKING CHANGE: `KnownInteger` is now a type-synonym+  that implies `Normalized i ~ i` and `KnownNat (Abs i)` as well.++* Added `readPrecTypeLit`.++* Added `Normalized`.++* Added `singletons-base` support for `Integer`, including `PNum`, `SNum`,+  `PEq`, `SEq`, `POrd`, `SOrd`, `PShow` and `SShow`. Most arithmetic+  functions are now exported through `PNum` and `SNum`, rather than standalone.++* Added `ShowLit`, `ShowsLit`, `ShowsPrecLit` and its singletons and+  promoted versions.++* Added `Fold` and `sFold`.++* Added defunctionalization symbols.++* Added ZigZag encoding and decoding tools.++ # Version 0.5  * COMPILER ASSISTED BREAKING CHANGE: `integerVal`, `someIntegerVal`,
kind-integer.cabal view
@@ -1,6 +1,6 @@ cabal-version: 2.4 name: kind-integer-version: 0.5+version: 0.6.0 license: BSD-3-Clause license-file: LICENSE extra-source-files: README.md CHANGELOG.md@@ -23,9 +23,14 @@ common basic   default-language: GHC2021   ghc-options: -O2 -Wall -Werror=incomplete-patterns-  build-depends: base ==4.*+  build-depends:+    base ==4.*,+    singletons,+    singletons-base,   default-extensions:     DataKinds+    DerivingStrategies+    LambdaCase     MultiWayIf     NoStarIsType     RoleAnnotations@@ -36,9 +41,9 @@  library   import: basic-  build-depends: singletons   hs-source-dirs: lib   exposed-modules: KindInteger+  other-modules: KindInteger.Round  test-suite test   import: basic
lib/KindInteger.hs view
@@ -1,764 +1,1282 @@-{-# LANGUAGE UndecidableInstances #-}---- | This module provides a type-level representation for term-level--- 'P.Integer's. This type-level representation is also named 'P.Integer',--- So import this module qualified to avoid name conflicts.------ @--- import "KindInteger" qualified as KI--- @------ The implementation details are the same as the ones for type-level 'Natural's--- in "GHC.TypeNats" as of @base-4.18@, and it will continue to evolve together--- with @base@, trying to follow its API as much as possible until the day--- @base@ provides its own type-level integer, making this module redundant.-module KindInteger {--}-  ( -- * Integer kind-    Integer-  , type P-  , type N-  , Normalize--    -- * Prelude support-  , toPrelude-  , fromPrelude-  , showsPrecTypeLit--    -- * Types ⇔ Terms-  , KnownInteger(integerSing), integerVal-  , SomeInteger(..)-  , someIntegerVal-  , sameInteger--    -- * Singletons-  , SInteger-  , pattern SInteger-  , fromSInteger-  , withSomeSInteger-  , withKnownInteger--    -- * Arithmethic-  , type (+), type (*), type (^), type (-)-  , Odd, Even, Abs, Sign, Negate, GCD, LCM, Log2--    -- ** Division-  , Div-  , Rem-  , DivRem-  , Round(..)-    -- *** Term-level-  , div-  , rem-  , divRem--    -- * Comparisons-  , CmpInteger-  , cmpInteger-  , eqIntegerRep--    -- * Extra-  , type (==?), type (==), type (/=?), type (/=)-  ) --}-  where--import Control.Exception qualified as Ex-import Data.Bits-import Data.Proxy-import Data.Singletons-import Data.Singletons.Decide-import Data.Type.Bool (If)-import Data.Type.Coercion-import Data.Type.Equality (TestEquality(..))-import Data.Type.Ord-import GHC.Base (WithDict(..))-import GHC.Exts (TYPE, Constraint)-import GHC.Real qualified as P-import GHC.Show (appPrec, appPrec1)-import GHC.TypeLits qualified as L-import Numeric.Natural (Natural)-import Prelude hiding (Integer, (==), (/=), div, rem)-import Prelude qualified as P-import Unsafe.Coerce(unsafeCoerce)-------------------------------------------------------------------------------------- | Type-level version of 'P.Integer', mostly used as a /kind/ for 'P' and 'N'.------ * A positive number /+x/ is represented as @'P' x@.------ * A negative number /-x/ is represented as @'N' x@.------ * /Zero/ can be represented as @'P' 0@ or @'N' 0@. For consistency, all--- /zero/ outputs from type families in this "KindInteger" module use the--- @'P' 0@, but don't assume that this will be the case elsewhere. So, if you--- need to treat /zero/ specially in some situation, be sure to handle both the--- @'P' 0@ and @'N' 0@ cases.------ __NB__: 'Integer' is mostly used as a kind, with its types constructed--- using 'P' and 'N'.  However, it might also be used as type, with its terms--- constructed using 'fromPrelude'. One reason why you may want a 'Integer'--- at the term-level is so that you embed it in larger data-types (for example,--- the "KindRational" module from the--- [@kind-rational@](https://hackage.haskell.org/package/kind-rational)--- library embeds this 'I.Integer' in its 'KindRational.Rational' type).--- Contrary to "Prelude"'s 'P.Integer', "KindInteger"'s 'Integer' preserves--- the internal distinction between @'P' 0@ and @'N' 0@, this is why functions--- such as 'fromSInteger' prefer to use "KindInteger"'s 'Integer' rather--- than "Prelude"'s 'P.Integer'.-data Integer-  = P_ Natural-  | N_ Natural---- | Note that @'P' 0 '==' 'N' 0@.-instance Eq Integer where-  a == b = toPrelude a P.== toPrelude b--instance Ord Integer where-  compare a b = compare (toPrelude a) (toPrelude b)-  a <= b = toPrelude a <= toPrelude b---- | Same as "Prelude" 'P.Integer'.-instance Show Integer where-  showsPrec p = showsPrec p . toPrelude---- | Same as "Prelude" 'P.Integer'.-instance Read Integer where-  readsPrec p xs = do (a, ys) <- readsPrec p xs-                      [(fromPrelude a, ys)]---- | Shows the 'Integer' as it appears literally at the type-level.------ This is different from normal 'show' for 'Integer', which shows--- the term-level value.------ @--- 'shows'            0 ('fromPrelude' 8) \"z\" == \"8z\"--- 'showsPrecTypeLit' 0 ('fromPrelude' 8) \"z\" == \"P 8z\"--- @-showsPrecTypeLit :: Int -> Integer -> ShowS-showsPrecTypeLit p i = showParen (p > appPrec) $ case i of-  P_ x -> showString "P " . shows x-  N_ x -> showString "N " . shows x---- | * A positive number /+x/ is represented as @'P' x@.------ * /Zero/ can be represented as @'P' 0@ (see notes at 'Integer').-type P (x :: Natural) = 'P_ x :: Integer---- | * A negative number /-x/ is represented as @'N' x@.------ * /Zero/ can be represented as @'N' 0@ (but often isn't, see notes at 'Integer').-type N (x :: Natural) = 'N_ x :: Integer---- | Convert a term-level "KindInteger" 'Integer' into a term-level--- "Prelude" 'P.Integer'.------ @--- 'fromPrelude' . 'toPrelude' == 'id'--- 'toPrelude' . 'fromPrelude' == 'id'--- @-toPrelude :: Integer -> P.Integer-toPrelude (P_ n) = toInteger n-toPrelude (N_ n) = negate (toInteger n)---- | Obtain a term-level "KindInteger" 'Integer' from a term-level--- "Prelude" 'P.Integer'. This can fail if the "Prelude" 'P.Integer' is--- infinite, or if it is so big that it would exhaust system resources.------ @--- 'fromPrelude' . 'toPrelude' == 'id'--- 'toPrelude' . 'fromPrelude' == 'id'--- @------ This function can be handy if you are passing "KindInteger"'s 'Integer'--- around for some reason. But, other than this, "KindInteger" doesn't offer--- any tool to deal with the internals of its 'Integer'.-fromPrelude :: P.Integer -> Integer-fromPrelude i = if i >= 0 then P_ (fromInteger i)-                          else N_ (fromInteger (negate i))-------------------------------------------------------------------------------------- | This class gives the integer associated with a type-level integer.--- There are instances of the class for every integer.-class KnownInteger (i :: Integer) where-  integerSing :: SInteger i---- | Positive numbers and zero.-instance L.KnownNat x => KnownInteger (P x) where-  integerSing = UnsafeSInteger (P_ (fromInteger (L.natVal (Proxy @x))))---- | Negative numbers and zero.------ Implementation note: Notice that @'N' 0@ will not be 'Normalize'd to--- @'P' 0@. This is so that 'SDecide', 'TestEquality' and 'TestCoercion'--- behave as expected. If you want a 'Normalize'd 'SInteger', then use--- @'integerSing' \@('Normalize' i)@.-instance L.KnownNat x => KnownInteger (N x) where-  integerSing = UnsafeSInteger (N_ (fromInteger (L.natVal (Proxy @x))))---- | Term-level "KindRational" 'Integer' representation of the type-level--- 'Integer' @i@.-integerVal :: forall i proxy. KnownInteger i => proxy i -> Integer-integerVal _ = case integerSing :: SInteger i of UnsafeSInteger x -> x---- | This type represents unknown type-level 'Integer'.-data SomeInteger = forall n. KnownInteger n => SomeInteger (Proxy n)---- | Convert a term-level "KindInteger" 'Integer' into an unknown--- type-level 'Integer'.-someIntegerVal :: Integer -> SomeInteger-someIntegerVal i = withSomeSInteger i $ \(si :: SInteger i) ->-                   withKnownInteger si (SomeInteger @i Proxy)---- | Note that @'P' 0 '==' 'N' 0@.-instance Eq SomeInteger where-  SomeInteger x == SomeInteger y = integerVal x P.== integerVal y--instance Ord SomeInteger where-  compare (SomeInteger x) (SomeInteger y) =-    compare (integerVal x) (integerVal y)--instance Show SomeInteger where-  showsPrec p (SomeInteger x) = showsPrec p (integerVal x)--instance Read SomeInteger where-  readsPrec p xs = do (a, ys) <- readsPrec p xs-                      [(someIntegerVal a, ys)]------------------------------------------------------------------------------------- Within this module, we use these “normalization” tools to make sure that--- /zero/ is always represented as @'P' 0@. We don't export any of these--- normalization tools to end-users because it seems like we can't make them--- reliable enough so as to offer a decent user experience. So, we just tell--- users to deal with the fact that both @'P' 0@ and @'N' 0@ mean /zero/.---- | Make sure /zero/ is represented as @'P' 0@, not as @'N' 0@------ Notice that all the tools in the "KindInteger" can readily handle--- non-'Normalize'd inputs. This 'Normalize' type-family is offered offered--- only as a convenience in case you want to simplify /your/ dealing with--- /zeros/.-type family Normalize (i :: Integer) :: Integer where-  Normalize (N 0) = P 0-  Normalize i     = i---- | Construct a 'Normalize'd 'N'egative type-level 'Integer'.------ To be used for producing all negative outputs in this module.-type NN (a :: Natural) = Normalize (N a) :: Integer------------------------------------------------------------------------------------infixl 6 +, --infixl 7 *, `Div`, `Rem`-infixr 8 ^---- | Whether a type-level 'Natural' is odd. /Zero/ is not considered odd.-type Odd (x :: Integer) = L.Mod (Abs x) 2 ==? 1 :: Bool---- | Whether a type-level 'Natural' is even. /Zero/ is considered even.-type Even (x :: Integer) = L.Mod (Abs x) 2 ==? 0 :: Bool---- | Negation of type-level 'Integer's.-type family Negate (x :: Integer) :: Integer where-  Negate (P 0) = P 0-  Negate (P x) = N x-  Negate (N x) = P x---- | Sign of type-level 'Integer's.------ * @'P' 0@ if zero.------ * @'P' 1@ if positive.------ * @'N' 1@ if negative.-type family Sign (x :: Integer) :: Integer where-  Sign (P 0) = P 0-  Sign (N 0) = P 0-  Sign (P _) = P 1-  Sign (N _) = N 1---- | Absolute value of a type-level 'Integer', as a type-level 'Natural'.-type family Abs (x :: Integer) :: Natural where-  Abs (P x) = x-  Abs (N x) = x---- | Addition of type-level 'Integer's.-type (a :: Integer) + (b :: Integer) = Add_ (Normalize a) (Normalize b) :: Integer-type family Add_ (a :: Integer) (b :: Integer) :: Integer where-  Add_ (P a) (P b) = P (a L.+ b)-  Add_ (N a) (N b) = NN (a L.+ b)-  Add_ (P a) (N b) = If (b <=? a) (P (a L.- b)) (NN (b L.- a))-  Add_ (N a) (P b) = Add_ (P b) (N a)---- | Multiplication of type-level 'Integer's.-type (a :: Integer) * (b :: Integer) = Mul_ (Normalize a) (Normalize b) :: Integer-type family Mul_ (a :: Integer) (b :: Integer) :: Integer where-  Mul_ (P a) (P b) = P (a L.* b)-  Mul_ (N a) (N b) = Mul_ (P a) (P b)-  Mul_ (P a) (N b) = NN (a L.* b)-  Mul_ (N a) (P b) = Mul_ (P a) (N b)---- | Exponentiation of type-level 'Integer's.------ * Exponentiation by negative 'Integer' doesn't type-check.-type (a :: Integer) ^ (b :: Integer) = Pow_ (Normalize a) (Normalize b) :: Integer-type family Pow_ (a :: Integer) (b :: Integer) :: Integer where-  Pow_ (P a) (P b) = P (a L.^ b)-  Pow_ (N a) (P b) = NN (a L.^ b)-  Pow_ _     (N _) = L.TypeError ('L.Text "KindInteger.(^): Negative exponent")---- | Subtraction of type-level 'Integer's.-type (a :: Integer) - (b :: Integer) = a + Negate b :: Integer---- | Get both the quotient and the 'Rem'ainder of the 'Div'ision of--- type-level 'Integer's @a@ and @b@ using the specified 'Round'ing @r@.------ @--- forall (r :: 'Round') (a :: 'Integer') (b :: 'Integer').---   (b '/=' 0) =>---     'DivRem' r a b '=='  '('Div' r a b, 'Rem' r a b)--- @-type DivRem (r :: Round) (a :: Integer) (b :: Integer) =-  '( Div r a b, Rem r a b ) :: (Integer, Integer)---- | 'Rem'ainder of the division of type-level 'Integer' @a@ by @b@,--- using the specified 'Round'ing @r@.------ @--- forall (r :: 'Round') (a :: 'Integer') (b :: 'Integer').---   (b '/=' 0) =>---     'Rem' r a b  '=='  a '-' b '*' 'Div' r a b--- @------ * Division by /zero/ doesn't type-check.-type Rem (r :: Round) (a :: Integer) (b :: Integer) =-  a - b * Div r a b :: Integer---- | Divide of type-level 'Integer' @a@ by @b@,--- using the specified 'Round'ing @r@.------ * Division by /zero/ doesn't type-check.-type Div (r :: Round) (a :: Integer) (b :: Integer) =-  Div_ r (Normalize a) (Normalize b) :: Integer--type family Div_ (r :: Round) (a :: Integer) (b :: Integer) :: Integer where-  Div_ r (P a) (P b) = Div__ r (P a) b-  Div_ r (N a) (N b) = Div__ r (P a) b-  Div_ r (P a) (N b) = Div__ r (N a) b-  Div_ r (N a) (P b) = Div__ r (N a) b--type family Div__ (r :: Round) (a :: Integer) (b :: Natural) :: Integer where-  Div__ _ _ 0 = L.TypeError ('L.Text "KindInteger.Div: Division by zero")-  Div__ _ (P 0) _ = P 0-  Div__ _ (N 0) _ = P 0--  Div__ 'RoundDown (P a) b = P (L.Div a b)-  Div__ 'RoundDown (N a) b = NN (If (b L.* L.Div a b ==? a)-                                    (L.Div a b)-                                    (L.Div a b L.+ 1))--  Div__ 'RoundUp a b = Negate (Div__ 'RoundDown (Negate a) b)--  Div__ 'RoundZero (P a) b = Div__ 'RoundDown (P a) b-  Div__ 'RoundZero (N a) b = Negate (Div__ 'RoundDown (P a) b)--  Div__ 'RoundAway (P a) b = Div__ 'RoundUp (P a) b-  Div__ 'RoundAway (N a) b = Div__ 'RoundDown (N a) b--  Div__ 'RoundHalfDown a b = If (HalfLT (R a b) (Div__ 'RoundUp a b))-                                (Div__ 'RoundUp a b)-                                (Div__ 'RoundDown a b)--  Div__ 'RoundHalfUp a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))-                              (Div__ 'RoundDown a b)-                              (Div__ 'RoundUp a b)--  Div__ 'RoundHalfEven a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))-                                (Div__ 'RoundDown a b)-                                (If (HalfLT (R a b) (Div__ 'RoundUp a b))-                                    (Div__ 'RoundUp a b)-                                    (If (Even (Div__ 'RoundDown a b))-                                        (Div__ 'RoundDown a b)-                                        (Div__ 'RoundUp a b)))--  Div__ 'RoundHalfOdd a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))-                               (Div__ 'RoundDown a b)-                               (If (HalfLT (R a b) (Div__ 'RoundUp a b))-                                   (Div__ 'RoundUp a b)-                                   (If (Odd (Div__ 'RoundDown a b))-                                       (Div__ 'RoundDown a b)-                                       (Div__ 'RoundUp a b)))--  Div__ 'RoundHalfZero a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))-                                (Div__ 'RoundDown a b)-                                (If (HalfLT (R a b) (Div__ 'RoundUp a b))-                                    (Div__ 'RoundUp a b)-                                    (Div__ 'RoundZero a b))--  Div__ 'RoundHalfAway (P a) b = Div__ 'RoundHalfUp   (P a) b-  Div__ 'RoundHalfAway (N a) b = Div__ 'RoundHalfDown (N a) b----- | Log base 2 ('floor'ed) of type-level 'Integer's.------ * Logarithm of /zero/ doesn't type-check.------ * Logarithm of negative number doesn't type-check.-type Log2 (a :: Integer) = Log2_ (Normalize a) :: Integer-type family Log2_ (a :: Integer) :: Integer where-  Log2_ (P 0) = L.TypeError ('L.Text "KindInteger.Log2: Logarithm of zero")-  Log2_ (P a) = P (L.Log2 a)-  Log2_ (N a) = L.TypeError ('L.Text "KindInteger.Log2: Logarithm of negative number")---- | Greatest Common Divisor of type-level 'Integer' numbers @a@ and @b@.------ Returns a 'Natural', since the Greatest Common Divisor is always positive.-type GCD (a :: Integer) (b :: Integer) = NatGCD (Abs a) (Abs b) :: Natural---- | Greatest Common Divisor of type-level 'Natural's @a@ and @b@.-type family NatGCD (a :: Natural) (b :: Natural) :: Natural where-  NatGCD a 0 = a-  NatGCD a b = NatGCD b (L.Mod a b)---- | Least Common Multiple of type-level 'Integer' numbers @a@ and @b@.------ Returns a 'Natural', since the Least Common Multiple is always positive.-type LCM (a :: Integer) (b :: Integer) = NatLCM (Abs a) (Abs b) :: Natural---- | Least Common Multiple of type-level 'Natural's @a@ and @b@.-type NatLCM (a :: Natural) (b :: Natural) =-  L.Div a (NatGCD a b) L.* b :: Natural-------------------------------------------------------------------------------------- | Comparison of type-level 'Integer's, as a function.-type CmpInteger (a :: Integer) (b :: Integer) =-  CmpInteger_ (Normalize a) (Normalize b) :: Ordering-type family CmpInteger_ (a :: Integer) (b :: Integer) :: Ordering where-  CmpInteger_ a a = 'EQ-  CmpInteger_ (P a) (P b) = Compare a b-  CmpInteger_ (N a) (N b) = Compare b a-  CmpInteger_ (N _) (P _) = 'LT-  CmpInteger_ (P _) (N _) = 'GT---- | "Data.Type.Ord" support for type-level 'Integer's.-type instance Compare (a :: Integer) (b :: Integer) =-  CmpInteger a b :: Ordering-------------------------------------------------------------------------------------- | We either get evidence that this function was instantiated with the--- same type-level 'Integer's, or 'Nothing'.-sameInteger-  :: forall a b proxy1 proxy2-  .  (KnownInteger a, KnownInteger b)-  => proxy1 a-  -> proxy2 b-  -> Maybe (a :~: b)-sameInteger _ _ = testEquality (integerSing @a) (integerSing @b)---- | Like 'sameInteger', but if the type-level 'Integer's aren't equal, this--- additionally provides proof of 'LT' or 'GT'.-cmpInteger-  :: forall a b proxy1 proxy2-  .  (KnownInteger a, KnownInteger b)-  => proxy1 a-  -> proxy2 b-  -> OrderingI a b-cmpInteger x y = case compare (integerVal x) (integerVal y) of-  EQ -> case unsafeCoerce Refl :: CmpInteger a b :~: 'EQ of-    Refl -> case unsafeCoerce Refl :: a :~: b of-      Refl -> EQI-  LT -> case unsafeCoerce Refl :: (CmpInteger a b :~: 'LT) of-    Refl -> LTI-  GT -> case unsafeCoerce Refl :: (CmpInteger a b :~: 'GT) of-    Refl -> GTI-------------------------------------------------------------------------------------- | Singleton type for a type-level 'Integer' @i@.-newtype SInteger (i :: Integer) = UnsafeSInteger Integer-type role SInteger representational---- | A explicitly bidirectional pattern synonym relating an 'SInteger' to a--- 'KnownInteger' constraint.------ As an __expression__: Constructs an explicit @'SInteger' i@ value from an--- implicit @'KnownInteger' i@ constraint:------ @--- 'SInteger' @i :: 'KnownInteger' i => 'SInteger' i--- @------ As a __pattern__: Matches on an explicit @'SInteger' i@ value bringing--- an implicit @'KnownInteger' i@ constraint into scope:------ @--- f :: 'SInteger' i -> ..--- f SInteger = {- SInteger i in scope -}--- @-pattern SInteger :: forall i. () => KnownInteger i => SInteger i-pattern SInteger <- (knownIntegerInstance -> KnownIntegeregerInstance)-  where SInteger = integerSing---- | An internal data type that is only used for defining the 'SInteger' pattern--- synonym.-data KnownIntegeregerInstance (i :: Integer) where-  KnownIntegeregerInstance :: KnownInteger i => KnownIntegeregerInstance i---- | An internal function that is only used for defining the 'SInteger' pattern--- synonym.-knownIntegerInstance :: SInteger i -> KnownIntegeregerInstance i-knownIntegerInstance si = withKnownInteger si KnownIntegeregerInstance--instance Show (SInteger i) where-  showsPrec p (UnsafeSInteger i) = showParen (p > appPrec) $-    showString "SInteger @" . showsPrecTypeLit appPrec1 i---- | Note that this checks for type equality. That is, @'P' 0@ and @'N' 0@--- are not equal types, even if they are treated equally elsewhere in--- "KindInteger".-instance TestEquality SInteger where-  testEquality = decideEquality-  {-# INLINE testEquality #-}---- | Note that this checks for type equality. That is, @'P' 0@ and @'N' 0@--- are not equal types, even if they are treated equally elsewhere in--- "KindInteger".-instance TestCoercion SInteger where-  testCoercion = decideCoercion-  {-# INLINE testCoercion #-}---- | Return the term-level "KindInteger" 'Integer' number corresponding to @i@--- in a @'SInteger' i@ value.-fromSInteger :: SInteger i -> Integer-fromSInteger (UnsafeSInteger i) = i-{-# INLINE fromSInteger #-}---- | Whether the internal representation of the 'Integer's are equal.------ Note that this is not the same as '(P.==)'. Use '(P.==)' unless you--- know what you are doing.-eqIntegerRep :: Integer -> Integer -> Bool-eqIntegerRep (N_ l) (N_ r) = l P.== r-eqIntegerRep (P_ l) (P_ r) = l P.== r-eqIntegerRep _      _      = False-{-# INLINE eqIntegerRep #-}---- | Convert an explicit @'SInteger' i@ value into an implicit--- @'KnownInteger' i@ constraint.-withKnownInteger-  :: forall i rep (r :: TYPE rep). SInteger i -> (KnownInteger i => r) -> r-withKnownInteger = withDict @(KnownInteger i)---- | Convert a "KindIiteger" 'Integer' number into an @'SInteger' n@ value,--- where @n@ is a fresh type-level 'Integer'.-withSomeSInteger-  :: forall rep (r :: TYPE rep). Integer -> (forall n. SInteger n -> r) -> r-withSomeSInteger n k = k (UnsafeSInteger n)--- It's very important to keep this NOINLINE! See the docs at "GHC.TypeNats"-{-# NOINLINE withSomeSInteger #-}------------------------------------------------------------------------------------type instance Sing = SInteger--instance KnownInteger i => SingI (i :: Integer) where-  sing = integerSing-  {-# INLINE sing #-}---- | 'Demote' refers to "KindInteger"'s 'Integer' rather than "Prelude"'s--- 'Integer' so that the 'SInteger''s internal representation is preserved.--- Use 'toPrelude' and 'fromPrelude' as necessary.-instance SingKind Integer where-  type Demote Integer = Integer-  fromSing = fromSInteger-  {-# INLINE fromSing #-}-  toSing i = withSomeSInteger i SomeSing-  {-# INLINE toSing #-}---- | Note that this checks for type equality. That is, @'P' 0@ and @'N' 0@--- are not equal types, even if they are treated equally elsewhere in--- "KindInteger".-instance SDecide Integer where-  UnsafeSInteger l %~ UnsafeSInteger r =-    case eqIntegerRep l r of-      True  -> Proved (unsafeCoerce Refl)-      False -> Disproved (\Refl -> error "SDecide.Integer")------------------------------------------------------------------------------------data Round-  = RoundUp-  -- ^ Round __up__ towards positive infinity.-  | RoundDown-  -- ^ Round __down__ towards negative infinity.  Also known as "Prelude"'s-  -- 'P.floor'. This is the type of rounding used by "Prelude"'s 'P.div',-  -- 'P.mod', 'P.divMod', 'L.Div', 'L.Mod'.-  | RoundZero-  -- ^ Round towards __zero__.  Also known as "Prelude"'s 'P.truncate'. This is-  -- the type of rounding used by "Prelude"'s 'P.quot', 'P.rem', 'P.quotRem'.-  | RoundAway-  -- ^ Round __away__ from zero.-  | RoundHalfUp-  -- ^ Round towards the closest integer. If __half__way between two integers,-  -- round __up__ towards positive infinity.-  | RoundHalfDown-  -- ^ Round towards the closest integer. If __half__way between two integers,-  -- round __down__ towards negative infinity.-  | RoundHalfZero-  -- ^ Round towards the closest integer. If __half__way between two integers,-  -- round towards __zero__.-  | RoundHalfAway-  -- ^ Round towards the closest integer. If __half__way between two integers,-  -- round __away__ from zero.-  | RoundHalfEven-  -- ^ Round towards the closest integer. If __half__way between two integers,-  -- round towards the closest __even__ integer. Also known as "Prelude"'s-  -- 'P.round'.-  | RoundHalfOdd-  -- ^ Round towards the closest integer. If __half__way between two integers,-  -- round towards the closest __odd__ integer.-  deriving (Eq, Ord, Show, Read, Enum, Bounded)----- | Divide @a@ by @a@ using the specified 'Round'ing.--- Return the quotient @q@. See 'divRem'.-div :: Round-    -> P.Integer  -- ^ Dividend @a@.-    -> P.Integer  -- ^ Divisor @b@.-    -> P.Integer  -- ^ Quotient @q@.-div r a b = fst (divRem r a b)---- | Divide @a@ by @a@ using the specified 'Round'ing.--- Return the remainder @m@. See 'divRem'.-rem :: Round-    -> P.Integer  -- ^ Dividend @a@.-    -> P.Integer  -- ^ Divisor @b@.-    -> P.Integer  -- ^ Remainder @m@.-rem r a b = snd (divRem r a b)---- | Divide @a@ by @a@ using the specified 'Round'ing.--- Return the quotient @q@ and the remainder @m@.------ @--- forall (r :: 'Round') (a :: 'P.Integer') (b :: 'P.Integer').---   (b 'P./=' 0) =>---     case 'divRem' r a b of---       (q, m) -> m 'P.==' a 'P.-' b 'P.*' q--- @-divRem-  :: Round-  -> P.Integer  -- ^ Dividend @a@.-  -> P.Integer  -- ^ Divisor @b@.-  -> (P.Integer, P.Integer)  -- ^ Quotient @q@ and remainder @m@.-{-# NOINLINE divRem #-}-divRem RoundZero = \a (errDiv0 -> b) -> P.quotRem a b-divRem RoundDown = \a (errDiv0 -> b) -> P.divMod a b-divRem RoundUp = \a (errDiv0 -> b) -> _divRemRoundUpNoCheck a b-divRem RoundAway = \a (errDiv0 -> b) ->-  if xor (a < 0) (b < 0)-     then P.divMod a b-     else _divRemRoundUpNoCheck a b-divRem RoundHalfUp = _divRemHalf $ \_ _ up -> up-divRem RoundHalfDown = _divRemHalf $ \_ down _ -> down-divRem RoundHalfZero = _divRemHalf $ \neg down up ->-  if neg then up else down-divRem RoundHalfAway = _divRemHalf $ \neg down up ->-  if neg then down else up-divRem RoundHalfEven = _divRemHalf $ \_ down up ->-  if even (fst down) then down else up-divRem RoundHalfOdd = _divRemHalf $ \_ down up ->-  if odd (fst down) then down else up--_divRemRoundUpNoCheck :: P.Integer -> P.Integer -> (P.Integer, P.Integer)-_divRemRoundUpNoCheck a b =-  let q = negate (P.div (negate a) b)-  in (q, a - b * q)-{-# INLINE _divRemRoundUpNoCheck #-}--_divRemHalf-  :: (Bool ->-      (P.Integer, P.Integer) ->-      (P.Integer, P.Integer) ->-      (P.Integer, P.Integer))-  -- ^ Negative -> divRem RoundDown -> divRem RoundDown -> Result-  -> P.Integer  -- ^ Dividend-  -> P.Integer  -- ^ Divisor-  -> (P.Integer, P.Integer)-_divRemHalf f = \a (errDiv0 -> b) ->-  let neg  = xor (a < 0) (b < 0)-      down = P.divMod a b-      up   = _divRemRoundUpNoCheck a b-  in  case compare (a P.% b - toRational (fst down)) (1 P.:% 2) of-        LT -> down-        GT -> up-        EQ -> f neg down up-{-# INLINE _divRemHalf #-}------------------------------------------------------------------------------------- Extras--infixr 4 /=, /=?, ==, ==?---- | This should be exported by "Data.Type.Ord".-type (a :: k) ==? (b :: k) = OrdCond (Compare a b) 'False 'True 'False :: Bool---- | This should be exported by "Data.Type.Ord".-type (a :: k) == (b :: k) = (a ==? b) ~ 'True :: Constraint---- | This should be exported by "Data.Type.Ord".-type (a :: k) /=? (b :: k) = OrdCond (Compare a b) 'True 'False 'True :: Bool---- | This should be exported by "Data.Type.Ord".-type (a :: k) /= (b :: k) = (a /=? b) ~ 'True :: Constraint------------------------------------------------------------------------------------- Rational tools--data Rat = Rat Integer Natural--type family R (n :: Integer) (d :: Natural) :: Rat where-  R (P n) d = RatNormalize ('Rat (P n) d)-  R (N n) d = RatNormalize ('Rat (N n) d)--type family RatNormalize (r :: Rat) :: Rat where-  RatNormalize ('Rat _ 0) =-    L.TypeError ('L.Text "KindInteger: Denominator is 0")-  RatNormalize ('Rat (P 0) _) = 'Rat (P 0) 1-  RatNormalize ('Rat (N 0) _) = 'Rat (P 0) 1-  RatNormalize ('Rat (P n) d) = 'Rat (P (L.Div n (NatGCD n d)))-                                     (L.Div d (NatGCD n d))-  RatNormalize ('Rat (N n) d) = 'Rat (N (L.Div n (NatGCD n d)))-                                     (L.Div d (NatGCD n d))--type family RatAbs (a :: Rat) :: Rat where-  RatAbs ('Rat n d) = RatNormalize ('Rat (P (Abs n)) d)--type RatAdd (a :: Rat) (b :: Rat) =-  RatNormalize (RatAdd_ (RatNormalize a) (RatNormalize b)) :: Rat-type family RatAdd_ (a :: Rat) (b :: Rat) :: Rat where-  RatAdd_ ('Rat an ad) ('Rat bn bd) = 'Rat (an * P bd + bn * P ad) (ad L.* bd)--type family RatNegate (a :: Rat) :: Rat where-  RatNegate ('Rat n d) = RatNormalize ('Rat (Negate n) d)--type RatMinus (a :: Rat) (b :: Rat) = RatAdd a (RatNegate b)--type instance Compare (a :: Rat) (b :: Rat) = RatCmp a b-type RatCmp (a :: Rat) (b :: Rat) =-  RatCmp_ (RatNormalize a) (RatNormalize b) :: Ordering-type family RatCmp_ (a :: Rat) (b :: Rat) :: Ordering where-  RatCmp_ a a = 'EQ-  RatCmp_ ('Rat an ad) ('Rat bn bd) = CmpInteger (an * P bd) (bn * P ad)---- | ''True' if the distance between @a@ and @b@ is less than /0.5/.-type HalfLT (a :: Rat) (b :: Integer) =-  (RatAbs (RatMinus a ('Rat b 1))) <? ('Rat (P 1) 2) :: Bool--errDiv0 :: P.Integer -> P.Integer-errDiv0 0 = Ex.throw Ex.DivideByZero-errDiv0 i = i+{-# LANGUAGE StrictData #-}+{-# LANGUAGE TypeFamilyDependencies #-}+{-# LANGUAGE UndecidableInstances #-}++-- | This module provides a type-level representation for term-level+-- 'P.Integer's. This type-level representation is also named 'P.Integer',+-- So import this module qualified to avoid name conflicts.+--+-- @+-- import "KindInteger" qualified as KI+-- @+--+-- The implementation details are similar to the ones for type-level 'Natural's+-- as of @base-4.18@ and @singletons-base-3.1.1@, and they will continue to+-- evolve together with @base@ and @singletons-base@, trying to more or less+-- follow their API.+module KindInteger {--}+  ( -- * Integer+    Integer+  , type Z, pattern SZ+  , type N, pattern SN+  , type P, pattern SP+  , FromNatural, sFromNatural+  , Fold, sFold+    -- * SInteger+  , KnownInteger+  , Normalized+  , integerSing+  , integerVal+  , withKnownInteger+  , SomeInteger(..)+  , someIntegerVal+  , SInteger+  , pattern SInteger+  , fromSInteger+  , withSomeSInteger+    -- * Proofs+  , sNegateRefl+  , sZigZagRefl+  , sZagZigRefl++    -- * Show+    --+    -- | Besides the following /\*Lit/ tools, 'P.PShow' and 'P.SShow' can+    -- be used to display as "Prelude".'P.Integer' does.+  , ShowLit, showLit, sShowLit+  , ShowsLit, showsLit, sShowsLit+  , ShowsPrecLit, showsPrecLit, sShowsPrecLit+  , readPrecLit++    -- * Operations+    --+    -- | Additional arithmetic operations are provided through the 'P.PNum'+    -- and 'P.SNum' instances. Notably 'P.Abs', 'P.sAbs', 'P.Negate',+    -- 'P.sNegate', 'P.Signum', 'P.sSignum', 'P.+', 'P.-', 'P.*', 'P.%+',+    -- 'P.%-', 'P.%*'.+  , type (^), (%^)+  , Odd, sOdd+  , Even, sEven+  , Abs, sAbs+  , GCD, sGCD+  , LCM, sLCM+  , Log2, sLog2+  , Div, sDiv, div+  , Rem, sRem, rem+  , DivRem, sDivRem, divRem+    -- ** Rounding+  , Round(..)+  , SRound(..)++    -- * Comparisons+    --+    -- | Additional comparison tools are available at 'SDdecide',+    -- 'TestEquality', 'TestCoercion', 'P.PEq', 'P.SEq', 'P.POrd', 'P.SOrd'+    -- and 'Compare'.+  , cmpInteger+  , sameInteger++    -- * Misc+  , ZigZag, sZigZag+  , ZagZig, sZagZig++    -- * Defunctionalization+  , ZSym0+  , NSym0, NSym1+  , PSym0, PSym1+  , FromNaturalSym0, FromNaturalSym1+  , KnownIntegerSym0, KnownIntegerSym1+  , NormalizedSym0, NormalizedSym1+  , FoldSym0, FoldSym1, FoldSym2, FoldSym3, FoldSym4+  , type (^@#@$), type (^@#@$$), type (^@#@$$$)+  , OddSym0, OddSym1+  , EvenSym0, EvenSym1+  , GCDSym0, GCDSym1+  , LCMSym0, LCMSym1+  , Log2Sym0, Log2Sym1+  , DivSym0, DivSym1, DivSym2, DivSym3+  , RemSym0, RemSym1, RemSym2, RemSym3+  , DivRemSym0, DivRemSym1, DivRemSym2, DivRemSym3+  , ShowLitSym0, ShowLitSym1+  , ShowsLitSym0, ShowsLitSym1, ShowsLitSym2+  , ShowsPrecLitSym0, ShowsPrecLitSym1, ShowsPrecLitSym2, ShowsPrecLitSym3+  , RoundUpSym0+  , RoundDownSym0+  , RoundZeroSym0+  , RoundAwaySym0+  , RoundHalfUpSym0+  , RoundHalfDownSym0+  , RoundHalfZeroSym0+  , RoundHalfAwaySym0+  , RoundHalfEvenSym0+  , RoundHalfOddSym0+  ) --}+  where++import Control.Applicative+import Control.Exception qualified as Ex+import Control.Monad+import Data.Bits+import Data.Bool.Singletons (SBool(..))+import Data.Char qualified as Char+import Data.Eq.Singletons qualified as EqS+import Data.Maybe+import Data.Ord.Singletons qualified as OrdS+import Data.Proxy+import Data.Singletons+import Data.Singletons.Decide+import Data.String+import Data.Type.Bool (If)+import Data.Type.Coercion+import Data.Type.Equality (TestEquality(..))+import Data.Type.Ord+import GHC.Base (WithDict(..))+import GHC.Exts (TYPE, Constraint, coerce)+import GHC.Num.Integer (integerLog2)+import GHC.Real qualified as P+import GHC.Show (appPrec1)+import GHC.TypeLits qualified as L+import GHC.TypeLits.Singletons qualified as L hiding (natVal)+import Numeric.Natural (Natural)+import Prelude hiding (Show, Integer, (==), (/=), div, rem)+import Prelude qualified as P+import Prelude.Singletons qualified as P+import Text.ParserCombinators.ReadP qualified as ReadP+import Text.ParserCombinators.ReadPrec qualified as ReadPrec+import Text.Read qualified as Read+import Text.Show.Singletons (AppPrec1)+import Unsafe.Coerce (unsafeCoerce)++import KindInteger.Round++--------------------------------------------------------------------------------++-- | Type-level version of 'P.Integer', only used as a /kind/.+--+-- * Zero is represented as t'Z'.+--+-- * A positive number /+x/ is represented as @t'P' x@.+--+-- * A negative number /-x/ is represented as @t'N' x@.++-- __Note__: This representation is depressing. We hate it. It's not “total”,+-- because things such as @'N' 0@ and @'P' 0@ are not “valid”, and it's not+-- efficient, because we have to pay attention to three different constructors+-- rather than just one. The reason why we use this horrible representation+-- anyway is that type errors are easier to understand, since literals like+-- @'N' 2@ or 'Z' will show up in them. @'N' 0@ and @'P' 0@ will type-check+-- just fine on their own. However, tools in this module will reject them. For+-- example, there is no 'KnownInteger' instance for them, and 'Normalized'+-- will fail to type-check. Moreover, it is not possible to construct a+-- 'SInteger' for @'N' 0@ or @'P' 0@. If we could customize the way this+-- 'Integer' gets rendered in type-errors, we'd switch to a better internal+-- representation such as ZigZag. Also note that rather than exporting the+-- constructors directly, we export type-synonyms with the same name. This is+-- mostly so that users don't need to type the annoying preceeding tick.+data Integer+  = Z         -- ^ 0.+  | N Natural -- ^ Guaranteed to be greater than 0 only after going through+              -- 'KnownInteger', 'Normalized' or 'SInteger'.+  | P Natural -- ^ Guaranteed to be greater than 0 only after going through+              -- 'KnownInteger', 'Normalized' or 'SInteger'.++--------------------------------------------------------------------------------++-- | Zero is represented as t'Z'.+type Z = 'Z :: Integer++type ZSym0 :: Integer++type ZSym0 = Z++-- | A negative number /-x/ is represented as @t'N' x@.+--+-- While a standalone @t'N' 0@ type-checks, it is not considered valid,+-- so tools like 'KnownInteger' or 'Normalized' will reject it.+-- @t'N' 0@ itself is not rejected so that it can be used to pattern-match+-- against 'Integer's at the type-level if necessary.+type N (x :: Natural) = 'N x :: Integer++data NSym0 :: Natural ~> Integer+type NSym1 :: Natural -> Integer++type instance Apply NSym0 x = NSym1 x+type NSym1 x = N x++-- | A positive number /+x/ is represented as @t'P' x@.+--+-- While a standalone @t'P' 0@ type-checks, it is not considered valid,+-- so tools like 'KnownInteger' or 'Normalized' will reject it.+-- @t'P' 0@ itself is not rejected so that it can be used to pattern-match+-- against 'Integer's at the type-level if necessary.+type P (x :: Natural) = 'P x :: Integer++data PSym0 :: Natural ~> Integer+type PSym1 :: Natural -> Integer++type instance Apply PSym0 x = PSym1 x+type PSym1 x = P x++--------------------------------------------------------------------------------++-- | @'SZ' == 'sing' \@Z@+pattern SZ :: SInteger Z+pattern SZ <- UnsafeSInteger _+  where SZ = UnsafeSInteger 0+{-# COMPLETE SZ #-}++-- | @'SP' ('sing' \@1) == 'sing' \@(P 1)@+pattern SP :: (0 < x)+           => (KnownInteger (P x), L.KnownNat x)+           => Sing (x :: Natural)+           -> SInteger (P x)+pattern SP x <- (patternSP -> PatternSI x)+  where SP = UnsafeSInteger . toInteger . fromSing+{-# COMPLETE SP #-}++-- | @'SN' ('sing' \@1) == 'sing' \@(N 1)@+pattern SN :: (0 < x)+           => (KnownInteger (N x), L.KnownNat x)+           => Sing (x :: Natural)+           -> SInteger (N x)+pattern SN x <- (patternSN -> PatternSI x)+  where SN = UnsafeSInteger . negate . toInteger . fromSing+{-# COMPLETE SN #-}++-- | Internal. Used to implement 'SP' and 'SN'.+data PatternSI i n = (KnownInteger i, L.KnownNat n) => PatternSI (Sing n)++patternSI :: SInteger i -> PatternSI i (Abs i)+patternSI si@SInteger | sa <- sAbs si = L.withKnownNat sa (PatternSI sa)++patternSN :: SInteger (N x) -> PatternSI (N x) x+patternSN = unsafeCoerce . patternSI++patternSP :: SInteger (P x) -> PatternSI (P x) x+patternSP = unsafeCoerce . patternSI++--------------------------------------------------------------------------------++-- | @'Fold' z n p i@ evaluates to @z@ if @i@ is zero, otherwise applies @n@ to+-- the absolute value of @i@ if negative, or @p@ to the absolute value of @i@ if+-- positive. @t'N' 0@ and @t'P' 0@ fail to type-check.+type family Fold+     (z :: k)+     (n :: Natural ~> k)+     (p :: Natural ~> k)+     (i :: Integer)+     :: k where+  Fold _ _ _ (N 0) = L.TypeError ('L.Text "Use ‘Z’ instead of ‘N 0’.")+  Fold _ _ _ (P 0) = L.TypeError ('L.Text "Use ‘Z’ instead of ‘P 0’.")+  Fold z _ _  Z    = z+  Fold _ n _ (N x) = n @@ x+  Fold _ _ p (P x) = p @@ x++data FoldSym0 :: k ~> (Natural ~> k) ~> (Natural ~> k) ~> Integer ~> k+data FoldSym1 :: k -> (Natural ~> k) ~> (Natural ~> k) ~> Integer ~> k+data FoldSym2 :: k -> (Natural ~> k) -> (Natural ~> k) ~> Integer ~> k+data FoldSym3 :: k -> (Natural ~> k) -> (Natural ~> k) -> Integer ~> k+type FoldSym4 :: k -> (Natural ~> k) -> (Natural ~> k) -> Integer -> k++type instance Apply FoldSym0 z = FoldSym1 z+type instance Apply (FoldSym1 z) n = FoldSym2 z n+type instance Apply (FoldSym2 z n) p = FoldSym3 z n p+type instance Apply (FoldSym3 z n p) i = FoldSym4 z n p i+type FoldSym4 z n p i = Fold z n p i++-- | Singleton version of 'Fold'.+sFold+  :: SingKind k+  => Sing (z :: k)+  -> Sing (n :: Natural ~> k)+  -> Sing (p :: Natural ~> k)+  -> SInteger i+  -> Sing (Fold z n p i)+sFold sz sn sp si =+  case compare (fromSing si) 0 of+    EQ -> unsafeCoerce sz+    LT -> unsafeCoerce (sn @@ sAbs si)+    GT -> unsafeCoerce (sp @@ sAbs si)++--------------------------------------------------------------------------------++-- | Displays @i@ as it would show literally as a term.+--+-- @+-- 'P.Show_' ( t'N' 1) ~ \"-1\"+-- 'P.Show_'   t'Z'    ~  \"0\"+-- 'P.Show_' ( t'P' 1) ~  \"1\"+-- @+--+-- @t'N' 0@ and @t'P' 0@ fail to type-check.+instance P.PShow Integer where+  type ShowsPrec p i s = ShowsPrec_ p (Normalized i) s++type ShowsPrec_ :: Natural -> Integer -> L.Symbol -> L.Symbol+type family ShowsPrec_ p i s where+  ShowsPrec_ _  Z    s = P.Shows 0 s+  ShowsPrec_ p (N x) s =+    P.ShowParen (p P.>= AppPrec1) (P.ShowCharSym1 '-' P..@#@$$$ P.ShowsSym1 x) s+  ShowsPrec_ _ (P x) s = P.Shows x s++-- | Displays @i@ as it would show literally as a term.+--+-- @+-- 'fromSing' \@('P.sShow_' ('SN' ('sing' \@1))) == \"-1\"+-- 'fromSing' \@('P.sShow_' 'SZ')             ==  \"0\"+-- 'fromSing' \@('P.sShow_' ('SP' ('sing' \@1))) ==  \"1\"+-- @+instance P.SShow Integer where+  sShowsPrec _ si ss =+    withSomeSing (fromString (show (fromSing si)) <> fromSing ss) unsafeCoerce++--------------------------------------------------------------------------------++-- | Displays @i@ as it would show literally as a type.+--+-- @+-- 'P.ShowLit' ( t'N' 1) ~ \"P 1\"+-- 'P.ShowLit'   t'Z'    ~ \"Z\"+-- 'P.ShowLit' ( t'P' 1) ~ \"P 1\"+-- @+--+-- @t'N' 0@ and @t'P' 0@ fail to type-check.+type ShowLit (i :: Integer) = ShowsLit i "" :: L.Symbol++data ShowLitSym0 :: Integer ~> L.Symbol+type ShowLitSym1 :: Integer -> L.Symbol++type instance Apply ShowLitSym0 i = ShowLitSym1 i+type ShowLitSym1 i = ShowLit i++-- | Displays @i@ as it would show literally as a type. See 'ShowLit.+-- Behaves like 'P.Shows'.+type ShowsLit (i :: Integer) (s :: L.Symbol) = ShowsPrecLit 0 i s :: L.Symbol++data ShowsLitSym0 :: Integer ~> L.Symbol ~> L.Symbol+data ShowsLitSym1 :: Integer -> L.Symbol ~> L.Symbol+type ShowsLitSym2 :: Integer -> L.Symbol -> L.Symbol++type instance Apply ShowsLitSym0 i = ShowsLitSym1 i+type instance Apply (ShowsLitSym1 i) s = ShowsLitSym2 i s+type ShowsLitSym2 i s = ShowsLit i s++-- | Displays @i@ as it would show literally as a type. See 'ShowLit.+-- Behaves like 'P.ShowsPrec'.+type ShowsPrecLit :: Natural -> Integer -> L.Symbol -> L.Symbol+type ShowsPrecLit p i s = ShowsPrecLit_ p (Normalized i) s++type ShowsPrecLit_ :: Natural -> Integer -> L.Symbol -> L.Symbol+type family ShowsPrecLit_ p i s where+  ShowsPrecLit_ _ Z s = P.ShowString "Z" s+  ShowsPrecLit_ p (N n) s =+    P.ShowParen (p P.>= 11) (P.ShowStringSym1 "N " P..@#@$$$ P.ShowsSym1 n) s+  ShowsPrecLit_ p (P n) s =+    P.ShowParen (p P.>= 11) (P.ShowStringSym1 "P " P..@#@$$$ P.ShowsSym1 n) s++data ShowsPrecLitSym0 :: Natural ~> Integer ~> L.Symbol ~> L.Symbol+data ShowsPrecLitSym1 :: Natural -> Integer ~> L.Symbol ~> L.Symbol+data ShowsPrecLitSym2 :: Natural -> Integer -> L.Symbol ~> L.Symbol+type ShowsPrecLitSym3 :: Natural -> Integer -> L.Symbol -> L.Symbol++type instance Apply ShowsPrecLitSym0 p = ShowsPrecLitSym1 p+type instance Apply (ShowsPrecLitSym1 p) i = ShowsPrecLitSym2 p i+type instance Apply (ShowsPrecLitSym2 p i) s = ShowsPrecLitSym3 p i s+type ShowsPrecLitSym3 p i s = ShowsPrecLit p i s++-- | Singleton version of 'ShowLit'.+--+-- @+-- 'fromSing' \@('sShowLit' ('SN' ('sing' \@1))) == \"N 1\"+-- 'fromSing' \@('sShowLit' 'SZ')             == \"Z"+-- 'fromSing' \@('sShowLit' ('SP' ('sing' \@1))) == \"P 1\"+-- @+sShowLit :: SInteger i -> Sing (ShowLit i)+sShowLit si = sShowsLit si (sing @"")++-- | Demoted version of 'ShowLit'.+showLit :: P.Integer -> String+showLit i = showsLit i ""++-- | Singleton version of 'ShowsLit'.+sShowsLit :: SInteger i -> Sing (s :: P.Symbol) -> Sing (ShowsLit i s)+sShowsLit = sShowsPrecLit (sing @0)++-- | Demoted version of 'ShowsLit'.+showsLit :: P.Integer -> ShowS+showsLit = showsPrecLit 0++-- | Singleton version of 'ShowsPrecLit'.+sShowsPrecLit+  :: Sing (p :: Natural) -> SInteger i -> Sing (s :: P.Symbol)+  -> Sing (ShowsPrecLit p i s)+sShowsPrecLit sp si ss =+  let p = fromMaybe (error "sShowsPrecLit: invalid precedence")+                    (toIntegralSized (fromSing sp))+      t = fromString (showsPrecLit p (fromSing si) "")+  in withSomeSing (t <> fromSing ss) unsafeCoerce++-- | Demoted version of 'ShowsPrecLit'.+showsPrecLit :: Int -> P.Integer -> ShowS+showsPrecLit p | p < 0 = error "showsPrecLit: negative precedence"+showsPrecLit p = \case+  0         -> showChar 'Z'+  i | i > 0 -> showParen (p >= appPrec1) (showString "P " . shows i)+  i         -> showParen (p >= appPrec1) (showString "N " . shows (abs i))++-- | Inverse of 'showsPrecLit'.+readPrecLit :: ReadPrec.ReadPrec P.Integer+readPrecLit = Read.parens $ asum+    [ 0 <$ ReadPrec.lift (ReadP.char 'Z')+    , do ReadPrec.lift $ ReadP.char 'N' >> pSkipSpaces1+         n <- Read.parens (ReadPrec.lift pNatural)+         guard (n P./= 0)+         pure $ negate $ fromIntegral n+    , do ReadPrec.lift $ ReadP.char 'P' >> pSkipSpaces1+         n <- Read.parens (ReadPrec.lift pNatural)+         guard (n P./= 0)+         pure $ fromIntegral n+    ]+  where+    pNatural :: ReadP.ReadP Natural+    pNatural = read <$> ReadP.munch1 (\c -> c >= '0' && c <= '9')++--------------------------------------------------------------------------------++-- | This class gives the 'SInteger' associated with a type-level 'Integer'.+class KnownInteger_ (i :: Integer) where+  integerSing_ :: SInteger i++-- | Type-level 'Integer's satisfying 'KnownInteger' can be converted to+-- 'SInteger's using 'integerSing'. Every 'Integer' other than @'N' 0@ and+-- @'P' 0@ are 'KnownInteger's.++-- Note: Ideally, the constraints mentioned here would be superclasses to+-- 'KnownInteger_'. However, 'withDict' doesn't allow having a superclass+-- there, so we treat 'KnownInteger_' as internal an export 'KnownInteger' only.+-- The 'KnownNat (Abs i)' constraint is listed here as a convenience, seeing+-- as it is necessary to implement 'KnownInteger_' anyway.+type KnownInteger (i :: Integer) =+  (KnownInteger_ i, Normalized i ~ i, L.KnownNat (Abs i))++data KnownIntegerSym0 :: Integer ~> Constraint+type KnownIntegerSym1 :: Integer -> Constraint++type instance Apply KnownIntegerSym0 i = KnownIntegerSym1 i+type KnownIntegerSym1 i = KnownInteger i++-- | Convert an implicit 'KnownInteger' to an explicit 'SInteger'.+integerSing :: KnownInteger i => SInteger i+integerSing = integerSing_ -- The difference is in the constraint.+{-# INLINE integerSing #-}++instance KnownInteger_ Z where+  integerSing_ = UnsafeSInteger 0+  {-# INLINE integerSing_ #-}++instance (KnownInteger (N n), n ~ Abs (N n)) => KnownInteger_ (N n) where+  integerSing_ = UnsafeSInteger $! P.negate (L.natVal (Proxy @n))+  {-# INLINE integerSing_ #-}++instance (KnownInteger (P n), n ~ Abs (P n)) => KnownInteger_ (P n) where+  integerSing_ = UnsafeSInteger $! L.natVal (Proxy @n)+  {-# INLINE integerSing_ #-}++-- | @'Normalized' i@ is an identity function that fails to type-check+-- if @i@ is not in normalized form. That is, /zero/ is represented with t'Z',+-- not with @t'P' 0@ or @ t'N' 0@.+type family Normalized (i :: Integer) :: Integer where+  Normalized (N 0) = L.TypeError ('L.Text "Use ‘Z’ instead of ‘N 0’.")+  Normalized (P 0) = L.TypeError ('L.Text "Use ‘Z’ instead of ‘P 0’.")+  Normalized i     = i++data NormalizedSym0 :: Integer ~> Integer+type NormalizedSym1 :: Integer -> Integer++type instance Apply NormalizedSym0 i = Normalized i+type NormalizedSym1 i = Normalized i++-- | 'SInteger' contains only 'Normalized' integers.+sNormalizedRefl :: SInteger i -> (i :~: Normalized i)+sNormalizedRefl !_ = unsafeCoerce Refl++-- | Term-level "Prelude".'P.Integer' representation of the type-level+-- 'Integer'.+integerVal :: forall i proxy. KnownInteger i => proxy i -> P.Integer+integerVal _ = case integerSing_ :: SInteger i of UnsafeSInteger x -> x+{-# INLINE integerVal #-}++-- | Term-level representation of an existentialized 'KnownInteger'.+data SomeInteger = forall i. KnownInteger i => SomeInteger (Proxy i)++-- | Convert a term-level "Prelude".'P.Integer' into an+-- extistentialized 'KnownInteger' wrapped in 'SomeInteger'.+someIntegerVal :: P.Integer -> SomeInteger+someIntegerVal = \i ->+  withSomeSInteger i $ \(si :: SInteger i) ->+  withKnownInteger si $ SomeInteger (Proxy @i)++instance Eq SomeInteger where+  SomeInteger x == SomeInteger y =+    integerVal x P.== integerVal y+  {-# INLINE (==) #-}++instance Ord SomeInteger where+  compare (SomeInteger x) (SomeInteger y) =+    compare (integerVal x) (integerVal y)+  {-# INLINE compare #-}++-- | As for "Prelude".'P.Integer'.+instance P.Show SomeInteger where+  showsPrec p (SomeInteger i) =+    showsPrec p (integerVal i)++-- | As for "Prelude".'P.Integer'.+instance Read SomeInteger where+  readPrec = fmap someIntegerVal Read.readPrec++--------------------------------------------------------------------------------++-- | Construct a type-level 'Integer' from a type-level 'Natural'.+type family FromNatural (x :: Natural) :: Integer where+  FromNatural 0 = Z+  FromNatural x = P x++data FromNaturalSym0 :: Natural ~> Integer+type FromNaturalSym1 :: Natural -> Integer++type instance Apply FromNaturalSym0 i = FromNatural i+type FromNaturalSym1 i = FromNatural i++-- | Singleton version of 'FromNatural'.+sFromNatural :: Sing (x :: Natural) -> SInteger (FromNatural x)+sFromNatural = UnsafeSInteger . toInteger . fromSing+{-# INLINE sFromNatural #-}++--------------------------------------------------------------------------------++-- | Demoted version of 'ZigZag'.+zigZag :: P.Integer -> Natural+zigZag 0 = 0+zigZag i = fromInteger (if i < 0 then abs i * 2 - 1 else i * 2)++-- | Singleton version of 'ZigZag'.+sZigZag :: SInteger i -> Sing (ZigZag i :: Natural)+sZigZag si = withSomeSing @Natural (zigZag (fromSing si)) unsafeCoerce++-- | Identity.+sZigZagRefl :: SInteger i -> (i :~: ZagZig (ZigZag i))+sZigZagRefl !_ = unsafeCoerce Refl++-- | Demoted version of 'ZagZig'.+zagZig :: Natural -> P.Integer+zagZig 0 = 0+zagZig n = if odd n then P.negate (P.toInteger (P.div (n + 1) 2))+                    else P.toInteger (P.div n 2)++-- | Singleton version of 'ZagZig'.+sZagZig :: Sing (n :: Natural) -> SInteger (ZagZig n)+sZagZig = UnsafeSInteger . zagZig . fromSing++-- | Identity.+sZagZigRefl :: Sing (n :: Natural) -> (n :~: ZigZag (ZagZig n))+sZagZigRefl !_ = unsafeCoerce Refl++-- | ZigZag encoding of an 'Integer'.+--+-- * /0/ is /0/+--+-- * /-x/ is /abs(x) * 2 - 1/+--+-- * /+x/ is /x * 2/+type ZigZag :: Integer -> Natural+type ZigZag (i :: Integer) = ZigZag_ (Normalized i) :: Natural+type family ZigZag_ (i :: Integer) :: Natural where+  ZigZag_  Z    = 0+  ZigZag_ (P x) = x P.* 2+  ZigZag_ (N x) = x P.* 2 P.- 1++data ZigZagSym0 :: Integer ~> Natural+type ZigZagSym1 :: Integer -> Natural++type instance Apply ZigZagSym0 i = ZigZagSym1 i+type ZigZagSym1 i = ZigZag i++-- | Inverse of 'ZigZag'.+type ZagZig :: Natural -> Integer+type ZagZig n = If (L.Mod n 2 P.== 1)+                   (P.Negate (FromNatural (L.Div (n L.+ 1) 2)))+                   (FromNatural (L.Div n 2))++data ZagZigSym0 :: Natural ~> Integer+type ZagZigSym1 :: Natural -> Integer++type instance Apply ZagZigSym0 n = ZagZigSym1 n+type ZagZigSym1 n = ZagZig n++--------------------------------------------------------------------------------+++-- | Whether a type-level 'Integer' is odd. /Zero/ is not considered odd.+type Odd (i :: Integer) = L.Mod (Abs i) 2 P.== 1 :: Bool++data OddSym0 :: Integer ~> Bool+type OddSym1 :: Integer -> Bool++type instance Apply OddSym0 i = Odd i+type OddSym1 i = Odd i++-- | Singleton version of 'Odd'.+sOdd :: SInteger i -> Sing (Odd i :: Bool)+sOdd si | odd (fromSing si) = unsafeCoerce STrue+        | otherwise         = unsafeCoerce SFalse++-- | Whether a type-level 'Integer' is even. /Zero/ is considered even.+type Even (i :: Integer) = L.Mod (Abs i) 2 P.== 0 :: Bool++data EvenSym0 :: Integer ~> Bool+type EvenSym1 :: Integer -> Bool++type instance Apply EvenSym0 i = Even i+type EvenSym1 i = Even i++-- | Singleton version of 'Even'.+sEven :: SInteger i -> Sing (Even i :: Bool)+sEven si | even (fromSing si) = unsafeCoerce STrue+         | otherwise          = unsafeCoerce SFalse++--------------------------------------------------------------------------------++-- | Double negation is identity.+sNegateRefl :: SInteger i -> (i :~: P.Negate (P.Negate i))+sNegateRefl !_ = unsafeCoerce Refl++--------------------------------------------------------------------------------++-- | Absolute value of a type-level 'Integer', as a type-level 'Natural'.+type Abs (i :: Integer) = Fold 0 P.IdSym0 P.IdSym0 i :: Natural++data AbsSym0 :: Integer ~> Natural+type AbsSym1 :: Integer -> Natural++type instance Apply AbsSym0 x = AbsSym1 x+type AbsSym1 x = Abs x++-- | Singleton version of 'Abs'.+sAbs :: SInteger i -> Sing (Abs i :: Natural)+sAbs si = withSomeSing @Natural (fromInteger (abs (fromSing si))) unsafeCoerce++--------------------------------------------------------------------------------++infixr 8 %^, ^, ^@#@$$$++-- | Singleton version of '^'.+(%^) :: Sing (b :: Integer) -> Sing (p :: Natural) -> Sing (b ^ p :: Integer)+sb %^ sp = UnsafeSInteger (fromSing sb ^ fromSing sp)+{-# INLINE (%^) #-}++-- | Exponentiation of type-level 'Integer's.+type (b :: Integer) ^ (p :: Natural) = Pow (Normalized b) p :: Integer++data (^@#@$) :: Integer ~> Natural ~> Integer+data (^@#@$$) :: Integer -> Natural ~> Integer+type (^@#@$$$) :: Integer -> Natural -> Integer++type instance Apply ((^@#@$$) b) p = (^@#@$$$) b p+type instance Apply (^@#@$) b = (^@#@$$) b+type (^@#@$$$) b p = b ^ p++type family Pow (b :: Integer) (p :: Natural) :: Integer where+  Pow _ 0 = P 1+  Pow Z _ = Z+  Pow (P b) p = FromNatural (b L.^ p)+  Pow (N b) p = FromNatural (b L.^ p) P.* If (Even (P p)) (P 1) (N 1)++--------------------------------------------------------------------------------++infixl 7 `Div`, `Rem`, `DivRem`++-- | Get both the quotient and the 'Rem'ainder of the 'Div'ision of+-- type-level 'Integer's @a@ and @b@ using the specified 'Round'ing @r@.+--+-- @+-- forall (r :: 'Round') (a :: 'Integer') (b :: 'Integer').+--   (b '/=' 0) =>+--     'DivRem' r a b '=='  '('Div' r a b, 'Rem' r a b)+-- @+type DivRem (r :: Round) (a :: Integer) (b :: Integer) =+  '( Div r a b, Rem r a b ) :: (Integer, Integer)++data DivRemSym0 :: Round ~> Integer ~> Integer ~> (Integer, Integer)+data DivRemSym1 :: Round -> Integer ~> Integer ~> (Integer, Integer)+data DivRemSym2 :: Round -> Integer -> Integer ~> (Integer, Integer)+type DivRemSym3 :: Round -> Integer -> Integer -> (Integer, Integer)++type instance Apply DivRemSym0 r = DivRemSym1 r+type instance Apply (DivRemSym1 r) a = DivRemSym2 r a+type instance Apply (DivRemSym2 r a) b = DivRemSym3 r a b+type DivRemSym3 r a b = DivRem r a b++--------------------------------------------------------------------------------++-- | 'Rem'ainder of the division of type-level 'Integer' @a@ by @b@,+-- using the specified 'Round'ing @r@.+--+-- @+-- forall (r :: 'Round') (a :: 'Integer') (b :: 'Integer').+--   (b '/=' 0) =>+--     'Rem' r a b  '=='  a '-' b '*' 'Div' r a b+-- @+--+-- * Division by /zero/ doesn't type-check.+type Rem (r :: Round) (a :: Integer) (b :: Integer) =+  Rem_ r (Normalized a) (Normalized b) :: Integer+type Rem_ (r :: Round) (a :: Integer) (b :: Integer) =+  a P.- b P.* Div r a b :: Integer++data RemSym0 :: Round ~> Integer ~> Integer ~> Integer+data RemSym1 :: Round -> Integer ~> Integer ~> Integer+data RemSym2 :: Round -> Integer -> Integer ~> Integer+type RemSym3 :: Round -> Integer -> Integer -> Integer++type instance Apply RemSym0 r = RemSym1 r+type instance Apply (RemSym1 r) a = RemSym2 r a+type instance Apply (RemSym2 r a) b = RemSym3 r a b+type RemSym3 r a b = Rem r a b++-- | Demoted version of 'Rem'.+--+-- Throws 'Ex.DivdeByZero' where 'Div' would fail to type-check.+rem :: Round+    -> P.Integer  -- ^ Dividend @a@.+    -> P.Integer  -- ^ Divisor @b@.+    -> P.Integer  -- ^ Remainder @m@.+rem r a b = snd (divRem r a b)++-- | Singleton version of 'Rem'.+sRem :: SRound r+     -> SInteger a  -- ^ Dividend.+     -> SInteger b  -- ^ Divisor.+     -> SInteger (Rem r a b)+sRem sr sa sb = snd (sDivRem sr sa sb)++--------------------------------------------------------------------------------++-- | Divide the type-level 'Integer' @a@ by @b@,+-- using the specified 'Round'ing @r@.+--+-- * Division by /zero/ doesn't type-check.+type Div (r :: Round) (a :: Integer) (b :: Integer) =+  Div_ r (Normalized a) (Normalized b) :: Integer+type family Div_ (r :: Round) (a :: Integer) (b :: Integer) :: Integer where+  Div_ r  Z     Z    = Div__ r Z 0+  Div_ r  Z    (P b) = Div__ r Z b+  Div_ r  Z    (N b) = Div__ r Z b+  Div_ r (P a) (P b) = Div__ r (P a) b+  Div_ r (N a) (N b) = Div__ r (P a) b+  Div_ r (P a) (N b) = Div__ r (N a) b+  Div_ r (N a) (P b) = Div__ r (N a) b++data DivSym0 :: Round ~> Integer ~> Integer ~> Integer+data DivSym1 :: Round -> Integer ~> Integer ~> Integer+data DivSym2 :: Round -> Integer -> Integer ~> Integer+type DivSym3 :: Round -> Integer -> Integer -> Integer++type instance Apply DivSym0 r = DivSym1 r+type instance Apply (DivSym1 r) a = DivSym2 r a+type instance Apply (DivSym2 r a) b = DivSym3 r a b+type DivSym3 r a b = Div r a b++type family Div__ (r :: Round) (a :: Integer) (b :: Natural) :: Integer where+  Div__ _ _   0 = L.TypeError ('L.Text "Division by zero")+  Div__ _ Z _ = Z++  Div__ 'RoundDown (P a) b = FromNatural (L.Div a b)+  Div__ 'RoundDown (N a) b = P.Negate (FromNatural (If (b L.* L.Div a b P.== a)+                                                       (L.Div a b)+                                                       (L.Div a b L.+ 1)))++  Div__ 'RoundUp a b = P.Negate (Div__ 'RoundDown (P.Negate a) b)++  Div__ 'RoundZero (P a) b = Div__ 'RoundDown (P a) b+  Div__ 'RoundZero (N a) b = P.Negate (Div__ 'RoundDown (P a) b)++  Div__ 'RoundAway (P a) b = Div__ 'RoundUp (P a) b+  Div__ 'RoundAway (N a) b = Div__ 'RoundDown (N a) b++  Div__ 'RoundHalfDown a b = If (HalfLT (R a b) (Div__ 'RoundUp a b))+                                (Div__ 'RoundUp a b)+                                (Div__ 'RoundDown a b)++  Div__ 'RoundHalfUp a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))+                              (Div__ 'RoundDown a b)+                              (Div__ 'RoundUp a b)++  Div__ 'RoundHalfEven a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))+                                (Div__ 'RoundDown a b)+                                (If (HalfLT (R a b) (Div__ 'RoundUp a b))+                                    (Div__ 'RoundUp a b)+                                    (If (Even (Div__ 'RoundDown a b))+                                        (Div__ 'RoundDown a b)+                                        (Div__ 'RoundUp a b)))++  Div__ 'RoundHalfOdd a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))+                               (Div__ 'RoundDown a b)+                               (If (HalfLT (R a b) (Div__ 'RoundUp a b))+                                   (Div__ 'RoundUp a b)+                                   (If (Odd (Div__ 'RoundDown a b))+                                       (Div__ 'RoundDown a b)+                                       (Div__ 'RoundUp a b)))++  Div__ 'RoundHalfZero a b = If (HalfLT (R a b) (Div__ 'RoundDown a b))+                                (Div__ 'RoundDown a b)+                                (If (HalfLT (R a b) (Div__ 'RoundUp a b))+                                    (Div__ 'RoundUp a b)+                                    (Div__ 'RoundZero a b))++  Div__ 'RoundHalfAway (P a) b = Div__ 'RoundHalfUp   (P a) b+  Div__ 'RoundHalfAway (N a) b = Div__ 'RoundHalfDown (N a) b++-- | Demoted version of 'Div'.+--+-- Throws 'Ex.DivdeByZero' where 'Div' would fail to type-check.+div :: Round+    -> P.Integer  -- ^ Dividend @a@.+    -> P.Integer  -- ^ Divisor @b@.+    -> P.Integer  -- ^ Quotient @q@.+div r a b = fst (divRem r a b)++-- | Singleton version of 'Div'.+sDiv :: SRound r+     -> SInteger a  -- ^ Dividend.+     -> SInteger b  -- ^ Divisor.+     -> SInteger (Div r a b)+sDiv sr sa sb = fst (sDivRem sr sa sb)++--------------------------------------------------------------------------------++-- | Singleton version of 'Log2'.+sLog2 :: SInteger i -> Sing (Log2 i :: Natural)+sLog2 si = withSomeSing+             (fromIntegral (integerLog2 (fromSing si)) :: Natural)+             unsafeCoerce+++-- | Log base 2 ('floor'ed) of type-level 'Integer's.+--+-- * Logarithm of /zero/ doesn't type-check.+--+-- * Logarithm of negative number doesn't type-check.+type Log2 (a :: Integer) =+  Fold (L.TypeError ('L.Text "Logarithm of zero."))+       (P.ConstSym1 (L.TypeError ('L.Text "Logarithm of negative number.")))+       (L.Log2Sym0)+       a+    :: Natural++data Log2Sym0 :: Integer ~> Natural+type Log2Sym1 :: Integer -> Natural++type instance Apply Log2Sym0 a = Log2Sym1 a+type Log2Sym1 a = Log2 a++--------------------------------------------------------------------------------++-- | Singleton version of 'GCD'.+sGCD :: SInteger a -> SInteger b -> Sing (GCD a b :: Natural)+sGCD sa sb = withSomeSing @Natural+               (fromInteger (gcd (fromSing sa) (fromSing sb)))+               unsafeCoerce++-- | Greatest Common Divisor of type-level 'Integer' numbers @a@ and @b@.+--+-- Returns a 'Natural', since the Greatest Common Divisor is always positive.+type GCD (a :: Integer) (b :: Integer) = NatGCD (Abs a) (Abs b) :: Natural++data GCDSym0 :: Integer ~> Integer ~> Natural+data GCDSym1 :: Integer -> Integer ~> Natural+type GCDSym2 :: Integer -> Integer -> Natural++type instance Apply GCDSym0 a = GCDSym1 a+type instance Apply (GCDSym1 a) b = GCDSym2 a b+type GCDSym2 a b = GCD a b++-- | Greatest Common Divisor of type-level 'Natural's @a@ and @b@.+type family NatGCD (a :: Natural) (b :: Natural) :: Natural where+  NatGCD a 0 = a+  NatGCD a b = NatGCD b (L.Mod a b)++--------------------------------------------------------------------------------++-- | Singleton version of 'LCM'.+sLCM :: SInteger a -> SInteger b -> Sing (LCM a b :: Natural)+sLCM sa sb = withSomeSing @Natural+               (fromInteger (lcm (fromSing sa) (fromSing sb)))+               unsafeCoerce++-- | Least Common Multiple of type-level 'Integer' numbers @a@ and @b@.+--+-- Returns a 'Natural', since the Least Common Multiple is always positive.+type LCM (a :: Integer) (b :: Integer) = NatLCM (Abs a) (Abs b) :: Natural++data LCMSym0 :: Integer ~> Integer ~> Natural+data LCMSym1 :: Integer -> Integer ~> Natural+type LCMSym2 :: Integer -> Integer -> Natural++type instance Apply LCMSym0 a = LCMSym1 a+type instance Apply (LCMSym1 a) b = LCMSym2 a b+type LCMSym2 a b = LCM a b++-- | Least Common Multiple of type-level 'Natural's @a@ and @b@.+type NatLCM (a :: Natural) (b :: Natural) =+  L.Div a (NatGCD a b) L.* b :: Natural++--------------------------------------------------------------------------------++type Add_ :: Ordering -> Ordering ->  Natural -> Natural -> Integer+type family Add_ lc rc la ra where+  Add_ 'EQ 'EQ _ _ = Z+  Add_ 'EQ 'LT _ r = N r+  Add_ 'EQ 'GT _ r = P r+  Add_ 'LT 'EQ l _ = N l+  Add_ 'GT 'EQ l _ = P l+  Add_ 'LT 'LT l r = N (l L.+ r)+  Add_ 'LT 'GT l r = OrdCond (Compare l r) (P (r P.- l)) Z (N (l P.- r))+  Add_ 'GT 'GT l r = P (l L.+ r)+  Add_ 'GT 'LT l r = OrdCond (Compare l r) (N (r P.- l)) Z (P (l P.- r))++--------------------------------------------------------------------------------++type Mul_ :: Ordering -> Ordering ->  Natural -> Natural -> Integer+type family Mul_ lc rc la ra where+  Mul_ _   'EQ _ _ = Z+  Mul_ 'EQ _   _ _ = Z+  Mul_ x   x   l r = P (l L.* r)+  Mul_ _   _   l r = N (l L.* r)++--------------------------------------------------------------------------------++instance P.PNum Integer where+  type l + r = Add_ (Compare l Z) (Compare r Z) (Abs l) (Abs r)+  type l - r = l P.+ P.Negate r+  type l * r = Mul_ (Compare l Z) (Compare r Z) (Abs l) (Abs r)+  type Negate i = Fold Z PSym0 NSym0 i+  type Abs i = FromNatural (Abs i)+  type Signum i = Fold Z (P.ConstSym1 (N 1)) (P.ConstSym1 (P 1)) i+  type FromInteger i = FromNatural i++instance P.SNum Integer where+  l %+ r = UnsafeSInteger (fromSing l + fromSing r)+  l %- r = UnsafeSInteger (fromSing l - fromSing r)+  l %* r = UnsafeSInteger (fromSing l * fromSing r)+  sNegate = UnsafeSInteger . negate . fromSing+  sAbs = sFromNatural . sAbs+  sSignum = UnsafeSInteger . signum . fromSing+  sFromInteger = sFromNatural++--------------------------------------------------------------------------------++type instance Compare (l :: Integer) (r :: Integer) =+  CmpInteger_ (Fold 'EQ (P.ConstSym1 'LT) (P.ConstSym1 'GT) l)+              (Fold 'EQ (P.ConstSym1 'LT) (P.ConstSym1 'GT) r)+              (Abs l)+              (Abs r)++type CmpInteger_ :: Ordering -> Ordering -> Natural -> Natural -> Ordering+type family CmpInteger_ lc rc la ra where+  CmpInteger_ 'LT 'LT l r = Compare r l+  CmpInteger_ 'LT 'EQ _ _ = 'LT+  CmpInteger_ 'LT 'GT _ _ = 'LT+  CmpInteger_ 'EQ 'LT _ _ = 'GT+  CmpInteger_ 'EQ 'EQ _ _ = 'EQ+  CmpInteger_ 'EQ 'GT _ _ = 'LT+  CmpInteger_ 'GT 'LT _ _ = 'GT+  CmpInteger_ 'GT 'EQ _ _ = 'GT+  CmpInteger_ 'GT 'GT l r = Compare l r++instance OrdS.POrd Integer where+  type Compare l r = Data.Type.Ord.Compare l r++instance OrdS.SOrd Integer where+  sCompare sa sb =+    case compare (fromSing sa) (fromSing sb) of+      LT -> unsafeCoerce OrdS.SLT+      EQ -> unsafeCoerce OrdS.SEQ+      GT -> unsafeCoerce OrdS.SGT++--------------------------------------------------------------------------------++instance EqS.PEq Integer where+  type a == b = OrdCond (Compare a b) 'False 'True 'False++instance EqS.SEq Integer where+  sa %== sb = case fromSing sa P.== fromSing sb of+    True  -> unsafeCoerce STrue+    False -> unsafeCoerce SFalse++--------------------------------------------------------------------------------++-- | We either get evidence that this function was instantiated with the+-- same type-level 'Integer's, or 'Nothing'.+sameInteger+  :: forall a b proxy1 proxy2+  .  (KnownInteger a, KnownInteger b)+  => proxy1 a+  -> proxy2 b+  -> Maybe (a :~: b)+sameInteger _ _ = testEquality (sing @a) (sing @b)++-- | Like 'sameInteger', but if the type-level 'Integer's aren't equal, this+-- additionally provides proof of 'LT' or 'GT'.+cmpInteger+  :: forall a b proxy1 proxy2+  .  (KnownInteger a, KnownInteger b)+  => proxy1 a+  -> proxy2 b+  -> OrderingI a b+cmpInteger _ _ = case compare (demote @a) (demote @b) of+  EQ | Refl <- (unsafeCoerce Refl :: a :~: b)+     , Refl <- (unsafeCoerce Refl :: Compare a b :~: 'EQ) -> EQI+  LT | Refl <- (unsafeCoerce Refl :: Compare a b :~: 'LT) -> LTI+  GT | Refl <- (unsafeCoerce Refl :: Compare a b :~: 'GT) -> GTI++--------------------------------------------------------------------------------++-- | Singleton type for a type-level 'Integer' @i@.+newtype SInteger (i :: Integer) = UnsafeSInteger P.Integer+type role SInteger representational++-- | A explicitly bidirectional pattern synonym relating an 'SInteger' to a+-- 'KnownInteger' constraint.+--+-- As an __expression__: Constructs an explicit @'SInteger' i@ value from an+-- implicit @'KnownInteger' i@ constraint:+--+-- @+-- 'SInteger' @i :: 'KnownInteger' i => 'SInteger' i+-- @+--+-- As a __pattern__: Matches on an explicit @'SInteger' i@ value bringing+-- an implicit @'KnownInteger' i@ constraint into scope:+--+-- @+-- f :: 'SInteger' i -> ..+-- f si\@'SInteger' = /... both (si :: 'SInteger' i) and ('KnownInteger' i) in scope .../+-- @+pattern SInteger :: forall i. () => KnownInteger i => SInteger i+pattern SInteger <- (patternSInteger -> PatternSInteger)+  where SInteger = integerSing+{-# COMPLETE SInteger #-}++-- | Only used for defining the 'SInteger' pattern synonym.+data PatternSInteger (i :: Integer) where+  PatternSInteger :: KnownInteger i => PatternSInteger i++-- | Only used for defining the 'SInteger' pattern synonym.+patternSInteger :: SInteger i -> PatternSInteger i+patternSInteger si = withKnownInteger si PatternSInteger++instance Eq (SInteger i) where+  _ == _ = True++instance Ord (SInteger i) where+  compare _ _ = P.EQ++instance P.Show (SInteger i) where+  showsPrec p i =+    showParen (p >= appPrec1) $+      showString "SInteger @" .+      showsPrecLit appPrec1 (fromSing i)++instance forall i. KnownInteger i => Read (SInteger i) where+  readPrec = ReadPrec.lift $ do+    let si = integerSing @i+    _ <- ReadP.string "SInteger" >> pSkipSpaces1+    _ <- ReadP.char '@'+    _ <- ReadP.string (showsPrecLit appPrec1 (fromSing si) "")+    pure si++instance TestEquality SInteger where+  testEquality = decideEquality+  {-# INLINE testEquality #-}++instance TestCoercion SInteger where+  testCoercion = decideCoercion+  {-# INLINE testCoercion #-}++-- | Return the term-level "Prelude".'P.Integer' number corresponding to @i@.+fromSInteger :: SInteger i -> P.Integer+fromSInteger = coerce+{-# INLINE fromSInteger #-}++withKnownInteger_+  :: forall i rep (x :: TYPE rep)+  .  SInteger i+  -> (KnownInteger_ i => x)+  -> x+withKnownInteger_ = withDict @(KnownInteger_ i)++-- | Convert an explicit @'SInteger' i@ value into an implicit+-- @'KnownInteger' i@ constraint.+withKnownInteger+  :: forall i rep (x :: TYPE rep)+  .  SInteger i+  -> (KnownInteger i => x)+  -> x+withKnownInteger si x+  | sa :: Sing a <- sAbs si+  , Refl <- sNormalizedRefl si+  = L.withKnownNat sa (withKnownInteger_ si x)++-- | Convert a "Prelude".'P.Integer' number into an @'SInteger' n@ value,+-- where @n@ is a fresh type-level 'Integer'.+withSomeSInteger+  :: forall rep (x :: TYPE rep)+  .  P.Integer+  -> (forall (i :: Integer). Sing i -> x)+  -> x+withSomeSInteger i k = k (UnsafeSInteger i)+-- It's very important to keep this NOINLINE! See the docs at "GHC.TypeNats"+{-# NOINLINE withSomeSInteger #-}++--------------------------------------------------------------------------------++type instance Sing = SInteger++instance (KnownInteger i) => SingI (i :: Integer) where+  sing = integerSing+  {-# INLINE sing #-}++instance SingKind Integer where+  type Demote Integer = P.Integer+  fromSing = fromSInteger+  {-# INLINE fromSing #-}+  toSing i = withSomeSInteger i SomeSing+  {-# INLINE toSing #-}++instance SDecide Integer where+  l %~ r = case fromSing l P.== fromSing r of+    True  -> Proved (unsafeCoerce Refl)+    False -> Disproved (\Refl -> error "KindInteger.Integer: SDecide")++--------------------------------------------------------------------------------++-- | Demoted version of 'DivRem'.+--+-- Throws 'Ex.DivdeByZero' where 'Div' would fail to type-check.+divRem+  :: Round+  -> P.Integer  -- ^ Dividend @a@.+  -> P.Integer  -- ^ Divisor @b@.+  -> (P.Integer, P.Integer)  -- ^ Quotient @q@ and remainder @m@.+{-# NOINLINE divRem #-}+divRem RoundZero = \a (errDiv0 -> b) -> P.quotRem a b+divRem RoundDown = \a (errDiv0 -> b) -> P.divMod a b+divRem RoundUp = \a (errDiv0 -> b) -> _divRemRoundUpNoCheck a b+divRem RoundAway = \a (errDiv0 -> b) ->+  if xor (a < 0) (b < 0)+     then P.divMod a b+     else _divRemRoundUpNoCheck a b+divRem RoundHalfUp = _divRemHalf $ \_ _ up -> up+divRem RoundHalfDown = _divRemHalf $ \_ down _ -> down+divRem RoundHalfZero = _divRemHalf $ \neg down up ->+  if neg then up else down+divRem RoundHalfAway = _divRemHalf $ \neg down up ->+  if neg then down else up+divRem RoundHalfEven = _divRemHalf $ \_ down up ->+  if even (fst down) then down else up+divRem RoundHalfOdd = _divRemHalf $ \_ down up ->+  if odd (fst down) then down else up++_divRemRoundUpNoCheck :: P.Integer -> P.Integer -> (P.Integer, P.Integer)+_divRemRoundUpNoCheck a b =+  let q = negate (P.div (negate a) b)+  in (q, a - b * q)+{-# INLINE _divRemRoundUpNoCheck #-}++_divRemHalf+  :: (Bool ->+      (P.Integer, P.Integer) ->+      (P.Integer, P.Integer) ->+      (P.Integer, P.Integer))+  -- ^ Negative -> divRem RoundDown -> divRem RoundUp -> Result+  -> P.Integer  -- ^ Dividend+  -> P.Integer  -- ^ Divisor+  -> (P.Integer, P.Integer)+_divRemHalf f = \a (errDiv0 -> b) ->+  let neg  = xor (a < 0) (b < 0)+      down = P.divMod a b+      up   = _divRemRoundUpNoCheck a b+  in  case compare (a P.% b - toRational (fst down)) (1 P.:% 2) of+        LT -> down+        GT -> up+        EQ -> f neg down up+{-# INLINE _divRemHalf #-}++-- | Singleton version of 'DivRem'.+sDivRem :: SRound r+        -> SInteger a   -- ^ Dividend.+        -> SInteger b   -- ^ Divisor.+        -> (SInteger (Div r a b), SInteger (Rem r a b))+sDivRem sr sa sb =+  let (q, m) = divRem (fromSing sr) (fromSing sa) (fromSing sb)+  in withSomeSing q $ \sq ->+     withSomeSInteger m $ \sm ->+     (unsafeCoerce sq, unsafeCoerce sm)++--------------------------------------------------------------------------------+-- Rational tools necessary to support 'HalfLT'++data Rat = MkRat Integer Natural+  -- ^ Invariant: 'Natural' is never 0. This is enforced by the 'R' type-family.++type R :: Integer -> Natural -> Rat+type family R n d where+  R _ 0 = L.TypeError ('L.Text "Denominator is 0.")+  R n d = Fold ('MkRat Z 1) (RAuxSym2 NSym0 d) (RAuxSym2 PSym0 d) n++data RAuxSym2 :: (Natural ~> Integer) -> Natural -> Natural ~> Rat+type instance Apply (RAuxSym2 fn d) n = 'MkRat (fn @@ n) d++type RatReduce :: Rat -> Rat+type family RatReduce r where+  RatReduce ('MkRat n d) = 'MkRat+    (P.Signum n P.* FromNatural (L.Div (Abs n) (NatGCD (Abs n) d)))+    (L.Div d (NatGCD (Abs n) d))++type RatAbs :: Rat -> Rat+type family RatAbs r where+  RatAbs ('MkRat n d) = R (P.Abs n) d++type RatAdd :: Rat -> Rat -> Rat+type family RatAdd l r where+  RatAdd ('MkRat ln ld) ('MkRat rn rd) =+    RatReduce (R (ln P.* P rd P.+ rn P.* P ld) (ld P.* rd))++type RatNegate :: Rat -> Rat+type family RatNegate r where+  RatNegate ('MkRat n d) = R (P.Negate n) d++type RatMinus :: Rat -> Rat -> Rat+type RatMinus l r = RatAdd l (RatNegate r)++type RatCmp :: Rat -> Rat -> Ordering+type RatCmp l r = RatCmp_ (RatReduce l) (RatReduce r)+type family RatCmp_ (a :: Rat) (b :: Rat) :: Ordering where+  RatCmp_ a a = 'EQ+  RatCmp_ ('MkRat an ad) ('MkRat bn bd) = Compare (an P.* P bd) (bn P.* P ad)++-- | ''True' if the distance between @a@ and @b@ is less than /0.5/.+type HalfLT :: Rat -> Integer -> Bool+type HalfLT a b =+  'LT P.== RatCmp (RatAbs (RatMinus a ('MkRat b 1))) ('MkRat (P 1) 2)++--------------------------------------------------------------------------------++errDiv0 :: P.Integer -> P.Integer+errDiv0 0 = Ex.throw Ex.DivideByZero+errDiv0 i = i++pSkipSpaces1 :: ReadP.ReadP ()+pSkipSpaces1 = void $ ReadP.munch1 Char.isSpace 
+ lib/KindInteger/Round.hs view
@@ -0,0 +1,73 @@+{-# LANGUAGE TemplateHaskell #-}+{-# LANGUAGE UndecidableInstances #-}++-- | We define 'Round' here keep the TemplateHaskell stuff contained.+module KindInteger.Round {--}+  ( Round(..)+  , RoundUpSym0+  , RoundDownSym0+  , RoundZeroSym0+  , RoundAwaySym0+  , RoundHalfUpSym0+  , RoundHalfDownSym0+  , RoundHalfZeroSym0+  , RoundHalfAwaySym0+  , RoundHalfEvenSym0+  , RoundHalfOddSym0+  , SRound(..)+  ) --}+  where++import Data.Bool.Singletons+import Data.Eq.Singletons+import Data.Ord.Singletons+import Data.Singletons.TH+import Prelude.Singletons++--------------------------------------------------------------------------------++-- | Rounding strategy.+data Round+  = RoundUp+  -- ^ Round __up__ towards positive infinity.+  | RoundDown+  -- ^ Round __down__ towards negative infinity.  Also known as "Prelude"'s+  -- 'P.floor'. This is the type of rounding used by "Prelude"'s 'P.div',+  -- 'P.mod', 'P.divMod', 'L.Div', 'L.Mod'.+  | RoundZero+  -- ^ Round towards __zero__.  Also known as "Prelude"'s 'P.truncate'. This is+  -- the type of rounding used by "Prelude"'s 'P.quot', 'P.rem', 'P.quotRem'.+  | RoundAway+  -- ^ Round __away__ from zero.+  | RoundHalfUp+  -- ^ Round towards the closest integer. If __half__way between two integers,+  -- round __up__ towards positive infinity.+  | RoundHalfDown+  -- ^ Round towards the closest integer. If __half__way between two integers,+  -- round __down__ towards negative infinity.+  | RoundHalfZero+  -- ^ Round towards the closest integer. If __half__way between two integers,+  -- round towards __zero__.+  | RoundHalfAway+  -- ^ Round towards the closest integer. If __half__way between two integers,+  -- round __away__ from zero.+  | RoundHalfEven+  -- ^ Round towards the closest integer. If __half__way between two integers,+  -- round towards the closest __even__ integer. Also known as "Prelude"'s+  -- 'P.round'.+  | RoundHalfOdd+  -- ^ Round towards the closest integer. If __half__way between two integers,+  -- round towards the closest __odd__ integer.+  deriving stock (Read)++$(fmap concat $ sequence+    [ genSingletons [''Round]+    , singletons [d|+      deriving stock instance Bounded Round+      deriving stock instance Enum Round+      deriving stock instance Eq Round+      deriving stock instance Ord Round+      deriving stock instance Show Round+      |]+    ])+
test/Main.hs view
@@ -11,3364 +11,3647 @@ import Data.Ratio as P import Data.Type.Equality (TestEquality(..)) import Data.Type.Ord (type (<=))-import GHC.Exts (Constraint)-import Prelude hiding (Integer)-import Prelude qualified as P-import System.Exit-import Text.Read--import KindInteger (P, N)-import KindInteger qualified as K------------------------------------------------------------------------------------data Dict (c :: Constraint) where-  Dict :: c => Dict c------------------------------------------------------------------------------------_testEq =  Dict-_testEq :: Dict-  ( P 0 K.== P 0,   'True ~ (P 0 K.==? P 0)-  , N 0 K.== N 0,   'True ~ (N 0 K.==? N 0)-  , P 0 K.== N 0,   'True ~ (P 0 K.==? N 0)-  , N 0 K.== P 0,   'True ~ (N 0 K.==? P 0)--  , P 0 K./= P 1,   'True ~ (P 0 K./=? P 1)-  , P 0 K./= N 1,   'True ~ (P 0 K./=? N 1)--  , N 0 K./= N 1,   'True ~ (N 0 K./=? N 1)-  , N 0 K./= N 1,   'True ~ (N 0 K./=? N 1)--  , P 1 K./= P 0,   'True ~ (P 1 K./=? P 0)-  , P 1 K./= N 0,   'True ~ (P 1 K./=? N 0)--  , N 1 K./= N 0,   'True ~ (N 1 K./=? N 0)-  , N 1 K./= N 0,   'True ~ (N 1 K./=? N 0)-  )--_testCmp =  Dict-_testCmp :: Dict-  ( P 0 <= P 0-  , P 0 <= N 0-  , N 0 <= P 0-  , N 0 <= N 0--  , N 2 <= N 1-  , N 1 <= N 0-  , N 0 <= P 1--  , P 0 <= P 1-  , P 1 <= P 2-  )--_testAdd  = Dict-_testAdd :: Dict-  ( P 0 ~ P 0 K.+ P 0-  , P 0 ~ N 0 K.+ N 0-  , P 0 ~ P 0 K.+ N 0-  , P 0 ~ N 0 K.+ P 0--  , P 1 ~ P 1 K.+ P 0-  , N 1 ~ N 1 K.+ N 0-  , P 1 ~ P 1 K.+ N 0-  , N 1 ~ N 1 K.+ P 0--  , P 1 ~ P 0 K.+ P 1-  , N 1 ~ N 0 K.+ N 1-  , N 1 ~ P 0 K.+ N 1-  , P 1 ~ N 0 K.+ P 1--  , P 2 ~ P 1 K.+ P 1-  , N 2 ~ N 1 K.+ N 1-  , P 0 ~ P 1 K.+ N 1-  , P 0 ~ N 1 K.+ P 1-  )--_testMul  = Dict-_testMul :: Dict-  ( P 0 ~ P 0 K.* P 0-  , P 0 ~ N 0 K.* N 0-  , P 0 ~ P 0 K.* N 0-  , P 0 ~ N 0 K.* P 0--  , P 0 ~ P 1 K.* P 0-  , P 0 ~ N 1 K.* N 0-  , P 0 ~ P 1 K.* N 0-  , P 0 ~ N 1 K.* P 0--  , P 0 ~ P 0 K.* P 1-  , P 0 ~ N 0 K.* N 1-  , P 0 ~ P 0 K.* N 1-  , P 0 ~ N 0 K.* P 1--  , P 1 ~ P 1 K.* P 1-  , P 1 ~ N 1 K.* N 1-  , N 1 ~ P 1 K.* N 1-  , N 1 ~ N 1 K.* P 1--  , P 2 ~ P 2 K.* P 1-  , P 2 ~ N 2 K.* N 1-  , N 2 ~ P 2 K.* N 1-  , N 2 ~ N 2 K.* P 1--  , P 6 ~ P 2 K.* P 3-  , P 6 ~ N 2 K.* N 3-  , N 6 ~ P 2 K.* N 3-  , N 6 ~ N 2 K.* P 3-  )--_testLog2 =  Dict-_testLog2 :: Dict-  ( P 0 ~ K.Log2 (P 1)-  , P 1 ~ K.Log2 (P 2)-  , P 1 ~ K.Log2 (P 3)-  , P 2 ~ K.Log2 (P 4)-  , P 2 ~ K.Log2 (P 5)-  , P 2 ~ K.Log2 (P 6)-  , P 2 ~ K.Log2 (P 7)-  , P 3 ~ K.Log2 (P 8)-  , P 3 ~ K.Log2 (P 9)-  , P 3 ~ K.Log2 (P 10)-  , P 3 ~ K.Log2 (P 11)-  , P 3 ~ K.Log2 (P 12)-  , P 3 ~ K.Log2 (P 13)-  , P 3 ~ K.Log2 (P 14)-  , P 3 ~ K.Log2 (P 15)-  , P 4 ~ K.Log2 (P 16)-  , P 4 ~ K.Log2 (P 17)-  , P 4 ~ K.Log2 (P 18)-  , P 4 ~ K.Log2 (P 19)-  , P 4 ~ K.Log2 (P 20)-  , P 4 ~ K.Log2 (P 21)-  , P 4 ~ K.Log2 (P 22)-  , P 4 ~ K.Log2 (P 23)-  , P 4 ~ K.Log2 (P 24)-  , P 4 ~ K.Log2 (P 25)-  , P 4 ~ K.Log2 (P 26)-  , P 4 ~ K.Log2 (P 27)-  , P 4 ~ K.Log2 (P 28)-  , P 4 ~ K.Log2 (P 29)-  , P 4 ~ K.Log2 (P 30)-  , P 4 ~ K.Log2 (P 31)-  , P 5 ~ K.Log2 (P 32)-  )--_testNegate =  Dict-_testNegate :: Dict-  ( P 0 ~ K.Negate (P 0)-  , P 0 ~ K.Negate (N 0)-  , N 1 ~ K.Negate (P 1)-  , P 1 ~ K.Negate (N 1)-  , N 2 ~ K.Negate (P 2)-  , P 2 ~ K.Negate (N 2)-  )--_testSign =  Dict-_testSign :: Dict-  ( P 0 ~ K.Sign (P 0)-  , P 0 ~ K.Sign (N 0)-  , P 1 ~ K.Sign (P 1)-  , N 1 ~ K.Sign (N 1)-  , P 1 ~ K.Sign (P 2)-  , N 1 ~ K.Sign (N 2)-  )--_testAbs =  Dict-_testAbs :: Dict-  ( 0 ~ K.Abs (P 0)-  , 0 ~ K.Abs (N 0)-  , 1 ~ K.Abs (P 1)-  , 1 ~ K.Abs (N 1)-  , 2 ~ K.Abs (P 2)-  , 2 ~ K.Abs (N 2)-  )--_testEven =  Dict-_testEven :: Dict-  ( 'True  ~ K.Even (P 0)-  , 'True  ~ K.Even (N 0)-  , 'False ~ K.Even (P 1)-  , 'False ~ K.Even (N 1)-  , 'True  ~ K.Even (P 2)-  , 'True  ~ K.Even (N 2)-  )--_testOdd =  Dict-_testOdd :: Dict-  ( 'False  ~ K.Odd (P 0)-  , 'False  ~ K.Odd (N 0)-  , 'True   ~ K.Odd (P 1)-  , 'True   ~ K.Odd (N 1)-  , 'False  ~ K.Odd (P 2)-  , 'False  ~ K.Odd (N 2)-  )--_testGCD =  Dict-_testGCD :: Dict-  ( 0 ~ K.GCD (P 0) (P 0)-  , 0 ~ K.GCD (P 0) (N 0)-  , 0 ~ K.GCD (N 0) (P 0)-  , 0 ~ K.GCD (N 0) (N 0)--  , 1 ~ K.GCD (P 1) (P 0)-  , 1 ~ K.GCD (P 1) (N 0)-  , 1 ~ K.GCD (N 1) (P 0)-  , 1 ~ K.GCD (N 1) (N 0)--  , 1 ~ K.GCD (P 0) (P 1)-  , 1 ~ K.GCD (P 0) (N 1)-  , 1 ~ K.GCD (N 0) (P 1)-  , 1 ~ K.GCD (N 0) (N 1)--  , 1 ~ K.GCD (P 1) (P 2)-  , 1 ~ K.GCD (P 1) (N 2)-  , 1 ~ K.GCD (N 1) (P 2)-  , 1 ~ K.GCD (N 1) (N 2)--  , 1 ~ K.GCD (P 2) (P 1)-  , 1 ~ K.GCD (P 2) (N 1)-  , 1 ~ K.GCD (N 2) (P 1)-  , 1 ~ K.GCD (N 2) (N 1)--  , 3 ~ K.GCD (P 6) (P 9)-  , 3 ~ K.GCD (P 6) (N 9)-  , 3 ~ K.GCD (N 6) (P 9)-  , 3 ~ K.GCD (N 6) (N 9)--  , 3 ~ K.GCD (P 9) (P 6)-  , 3 ~ K.GCD (P 9) (N 6)-  , 3 ~ K.GCD (N 9) (P 6)-  , 3 ~ K.GCD (N 9) (N 6)-  )--_testLCM =  Dict-_testLCM :: Dict-  ( 0 ~ K.LCM (P 0) (P 0)-  , 0 ~ K.LCM (P 0) (N 0)-  , 0 ~ K.LCM (N 0) (P 0)-  , 0 ~ K.LCM (N 0) (N 0)--  , 0 ~ K.LCM (P 1) (P 0)-  , 0 ~ K.LCM (P 1) (N 0)-  , 0 ~ K.LCM (N 1) (P 0)-  , 0 ~ K.LCM (N 1) (N 0)--  , 0 ~ K.LCM (P 0) (P 1)-  , 0 ~ K.LCM (P 0) (N 1)-  , 0 ~ K.LCM (N 0) (P 1)-  , 0 ~ K.LCM (N 0) (N 1)--  , 2 ~ K.LCM (P 1) (P 2)-  , 2 ~ K.LCM (P 1) (N 2)-  , 2 ~ K.LCM (N 1) (P 2)-  , 2 ~ K.LCM (N 1) (N 2)--  , 2 ~ K.LCM (P 2) (P 1)-  , 2 ~ K.LCM (P 2) (N 1)-  , 2 ~ K.LCM (N 2) (P 1)-  , 2 ~ K.LCM (N 2) (N 1)--  , 18 ~ K.LCM (P 6) (P 9)-  , 18 ~ K.LCM (P 6) (N 9)-  , 18 ~ K.LCM (N 6) (P 9)-  , 18 ~ K.LCM (N 6) (N 9)--  , 18 ~ K.LCM (P 9) (P 6)-  , 18 ~ K.LCM (P 9) (N 6)-  , 18 ~ K.LCM (N 9) (P 6)-  , 18 ~ K.LCM (N 9) (N 6)-  )------------------------------------------------------------------------------------assert-  :: String  -- ^ Test name-  -> Bool    -- ^ Successful is true-  -> IO Bool -- ^ Return the same 'Bool' given as input.-assert n x = do-  putStrLn ((if x then "[OK] " else "[FAIL] ") <> n)-  pure x--testsMain :: [IO Bool] -> IO a-testsMain xs = do-  res <- sequence xs-  let (oks, bads) = List.partition id res-  putStrLn ("[TOTAL] OK: " <> show (length oks) <>-            ". FAIL: " <> show (length bads) <> ".")-  case bads of-    [] -> exitSuccess-    _  -> exitFailure--main :: IO ()-main = testsMain $-  [ assert "Prelude % throws RatioZeroDenominator" =<< do-      ea <- Ex.try (Ex.evaluate (1 P.% 0 :: P.Rational))-      pure (ea == Left Ex.RatioZeroDenominator)--  , assert "integerVal . someIntegerVal == id" $-    flip all [-5 .. 5] $ \a ->-      let a' = K.fromPrelude a-      in case K.someIntegerVal a' of-           K.SomeInteger pa ->-             a' == K.integerVal pa--  , assert "sameIntegerVal a a" $-    flip all [-5 .. 5] $ \a ->-      let a' = K.fromPrelude a-      in case K.someIntegerVal a' of-           K.SomeInteger pa ->-             isJust (K.sameInteger pa pa)--  , assert "sameIntegerVal a a'" $-    flip all [-5 .. 5] $ \a ->-      let a' = K.fromPrelude a-      in case (K.someIntegerVal a', K.someIntegerVal a') of-           (K.SomeInteger pa1, K.SomeInteger pa2) ->-             isJust (K.sameInteger pa1 pa2)--  , assert "sameIntegerVal a b" $-    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->-      let a' = K.fromPrelude a-          b' = K.fromPrelude b-      in case (K.someIntegerVal a', K.someIntegerVal b') of-           (K.SomeInteger pa, K.SomeInteger pb)-             | a == b    -> isJust    (K.sameInteger pa pb)-             | otherwise -> isNothing (K.sameInteger pa pb)--  , assert "Eq fromPrelude" $-    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->-      (a == b) == (K.fromPrelude a == K.fromPrelude b)--  , assert "Ord fromPrelude" $-    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->-      (a `compare` b) == (K.fromPrelude a `compare` K.fromPrelude b)--  , assert "Show fromPrelude" $-    flip all [-5 .. 5] $ \i ->-      show i == show (K.fromPrelude i)--  , assert "Read fromPrelude" $-    flip all [-5 .. 5] $ \i ->-      let str = show (i :: P.Integer)-      in readMaybe @P.Integer str-            == fmap K.toPrelude (readMaybe @K.Integer str)--  , assert "Eq SomeInteger" $-    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->-      let a' = K.fromPrelude a-          b' = K.fromPrelude b-      in (a == b) == (K.someIntegerVal a' == K.someIntegerVal b')--  , assert "Ord SomeInteger" $-    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->-      compare a b ==-         compare (K.someIntegerVal (K.fromPrelude a))-                 (K.someIntegerVal (K.fromPrelude b))--  , assert "Show SomeInteger" $-    flip all [-5 .. 5] $ \a ->-      let a' = K.fromPrelude a-      in show a == show (K.someIntegerVal a')--  , assert "Read SomeInteger" $-    flip all [-5 .. 5] $ \i ->-      let str = show (i :: P.Integer)-      in readMaybe @P.Integer str-            == fmap (\(K.SomeInteger p) -> K.toPrelude (K.integerVal p))-                    (readMaybe @K.SomeInteger str)--  , assert "TestEquality +0 +0" $-     isJust (testEquality (K.SInteger @(P 0)) (K.SInteger @(P 0)))-  , assert "TestEquality -0 -0" $-     isJust (testEquality (K.SInteger @(N 0)) (K.SInteger @(N 0)))-  , assert "TestEquality +0 -0" $-     isNothing (testEquality (K.SInteger @(P 0)) (K.SInteger @(N 0)))-  , assert "TestEquality -0 +0" $-     isNothing (testEquality (K.SInteger @(N 0)) (K.SInteger @(P 0)))-  , assert "TestEquality +0 +1" $-     isNothing (testEquality (K.SInteger @(P 0)) (K.SInteger @(P 1)))-  , assert "TestEquality +0 -1" $-     isNothing (testEquality (K.SInteger @(P 0)) (K.SInteger @(N 1)))-  , assert "TestEquality -0 +1" $-     isNothing (testEquality (K.SInteger @(N 0)) (K.SInteger @(P 1)))-  , assert "TestEquality -0 -1" $-     isNothing (testEquality (K.SInteger @(N 0)) (K.SInteger @(N 1)))-  , assert "TestEquality +1 +0" $-     isNothing (testEquality (K.SInteger @(P 1)) (K.SInteger @(P 0)))-  , assert "TestEquality +1 -0" $-     isNothing (testEquality (K.SInteger @(P 1)) (K.SInteger @(N 0)))-  , assert "TestEquality -1 +0" $-     isNothing (testEquality (K.SInteger @(N 1)) (K.SInteger @(P 0)))-  , assert "TestEquality -1 -0" $-     isNothing (testEquality (K.SInteger @(N 1)) (K.SInteger @(N 0)))--  , assert "Show Integer +0" $-     "0" == show (K.fromSInteger (K.SInteger @(P 0)))-  , assert "Show Integer -0" $-     "0" == show (K.fromSInteger (K.SInteger @(N 0)))-  , assert "Show Integer +1" $-     "1" == show (K.fromSInteger (K.SInteger @(P 1)))-  , assert "Show Integer -1" $-     "-1" == show (K.fromSInteger (K.SInteger @(N 1)))--  , assert "Show SInteger +0" $-     "SInteger @(P 0)" == show (K.SInteger @(P 0))-  , assert "Show SInteger -0" $-     "SInteger @(N 0)" == show (K.SInteger @(N 0))-  , assert "Show SInteger +1" $-     "SInteger @(P 1)" == show (K.SInteger @(P 1))-  , assert "Show SInteger -1" $-     "SInteger @(N 1)" == show (K.SInteger @(N 1))--  ] <> testsDivRem--testsDivRem :: [IO Bool]-testsDivRem = do-  b :: P.Integer <- [-5 .. 5]-  guard (b P./= 0)-  a :: P.Integer <- [-5 .. 5]-  r :: K.Round <- [minBound .. maxBound]-  let tname :: String -> ShowS-      tname t = showString t . showChar ' ' . shows r . showChar ' '-              . shows a . showChar ' ' . shows b-  [ assert (tname "divRem" "") $ case K.divRem r a b of-                                   (q, m) -> m == a - b * q-    , assert (tname "div" "") $ fst (K.divRem r a b) == K.div r a b-    , assert (tname "rem" "") $ snd (K.divRem r a b) == K.rem r a b-    ]-------------------------------------------------------------------------------------_divRemTestCode :: String-_divRemTestCode = unlines $ List.sort $ do-  b <- [-4 .. 4]-  guard (b P./= 0)-  a <- [-4 .. 4]-  r <- [minBound..maxBound]-  let (q, m) = K.divRem r a b-      sname :: String -> ShowS-      sname t = showString "_test_"-              . showString t-              . showChar '_'-              . showsPrec 0 r-              . showChar '_'-              . showChar (if a < 0 then 'N' else 'P')-              . shows (abs a)-              . showChar '_'-              . showChar (if b < 0 then 'N' else 'P')-              . shows (abs b)-      sDiv :: ShowS-      sDiv = sname "Div"-           . showString " :: Dict (K.Div 'K."-           . shows r-           . showChar ' '-           . K.showsPrecTypeLit 11 (K.fromPrelude a)-           . showChar ' '-           . K.showsPrecTypeLit 11 (K.fromPrelude b)-           . showString " ~ "-           . K.showsPrecTypeLit 0 (K.fromPrelude q)-           . showString ")\n"-           . sname "Div"-           . showString " =  Dict"-      sRem :: ShowS-      sRem = sname "Rem"-           . showString " :: Dict (K.Rem 'K."-           . shows r-           . showChar ' '-           . K.showsPrecTypeLit 11 (K.fromPrelude a)-           . showChar ' '-           . K.showsPrecTypeLit 11 (K.fromPrelude b)-           . showString " ~ "-           . K.showsPrecTypeLit 0 (K.fromPrelude m)-           . showString ")\n"-           . sname "Rem"-           . showString " =  Dict"-      ss :: ShowS-      ss = sDiv . showChar '\n' . sRem-  pure (ss "")----- The following tests are generated by `_divRemTestCode` in this remule.--- Copy and paste by hand.-_test_Div_RoundAway_N1_N1 :: Dict (K.Div 'K.RoundAway (N 1) (N 1) ~ P 1)-_test_Div_RoundAway_N1_N1 =  Dict-_test_Rem_RoundAway_N1_N1 :: Dict (K.Rem 'K.RoundAway (N 1) (N 1) ~ P 0)-_test_Rem_RoundAway_N1_N1 =  Dict-_test_Div_RoundAway_N1_N2 :: Dict (K.Div 'K.RoundAway (N 1) (N 2) ~ P 1)-_test_Div_RoundAway_N1_N2 =  Dict-_test_Rem_RoundAway_N1_N2 :: Dict (K.Rem 'K.RoundAway (N 1) (N 2) ~ P 1)-_test_Rem_RoundAway_N1_N2 =  Dict-_test_Div_RoundAway_N1_N3 :: Dict (K.Div 'K.RoundAway (N 1) (N 3) ~ P 1)-_test_Div_RoundAway_N1_N3 =  Dict-_test_Rem_RoundAway_N1_N3 :: Dict (K.Rem 'K.RoundAway (N 1) (N 3) ~ P 2)-_test_Rem_RoundAway_N1_N3 =  Dict-_test_Div_RoundAway_N1_N4 :: Dict (K.Div 'K.RoundAway (N 1) (N 4) ~ P 1)-_test_Div_RoundAway_N1_N4 =  Dict-_test_Rem_RoundAway_N1_N4 :: Dict (K.Rem 'K.RoundAway (N 1) (N 4) ~ P 3)-_test_Rem_RoundAway_N1_N4 =  Dict-_test_Div_RoundAway_N1_P1 :: Dict (K.Div 'K.RoundAway (N 1) (P 1) ~ N 1)-_test_Div_RoundAway_N1_P1 =  Dict-_test_Rem_RoundAway_N1_P1 :: Dict (K.Rem 'K.RoundAway (N 1) (P 1) ~ P 0)-_test_Rem_RoundAway_N1_P1 =  Dict-_test_Div_RoundAway_N1_P2 :: Dict (K.Div 'K.RoundAway (N 1) (P 2) ~ N 1)-_test_Div_RoundAway_N1_P2 =  Dict-_test_Rem_RoundAway_N1_P2 :: Dict (K.Rem 'K.RoundAway (N 1) (P 2) ~ P 1)-_test_Rem_RoundAway_N1_P2 =  Dict-_test_Div_RoundAway_N1_P3 :: Dict (K.Div 'K.RoundAway (N 1) (P 3) ~ N 1)-_test_Div_RoundAway_N1_P3 =  Dict-_test_Rem_RoundAway_N1_P3 :: Dict (K.Rem 'K.RoundAway (N 1) (P 3) ~ P 2)-_test_Rem_RoundAway_N1_P3 =  Dict-_test_Div_RoundAway_N1_P4 :: Dict (K.Div 'K.RoundAway (N 1) (P 4) ~ N 1)-_test_Div_RoundAway_N1_P4 =  Dict-_test_Rem_RoundAway_N1_P4 :: Dict (K.Rem 'K.RoundAway (N 1) (P 4) ~ P 3)-_test_Rem_RoundAway_N1_P4 =  Dict-_test_Div_RoundAway_N2_N1 :: Dict (K.Div 'K.RoundAway (N 2) (N 1) ~ P 2)-_test_Div_RoundAway_N2_N1 =  Dict-_test_Rem_RoundAway_N2_N1 :: Dict (K.Rem 'K.RoundAway (N 2) (N 1) ~ P 0)-_test_Rem_RoundAway_N2_N1 =  Dict-_test_Div_RoundAway_N2_N2 :: Dict (K.Div 'K.RoundAway (N 2) (N 2) ~ P 1)-_test_Div_RoundAway_N2_N2 =  Dict-_test_Rem_RoundAway_N2_N2 :: Dict (K.Rem 'K.RoundAway (N 2) (N 2) ~ P 0)-_test_Rem_RoundAway_N2_N2 =  Dict-_test_Div_RoundAway_N2_N3 :: Dict (K.Div 'K.RoundAway (N 2) (N 3) ~ P 1)-_test_Div_RoundAway_N2_N3 =  Dict-_test_Rem_RoundAway_N2_N3 :: Dict (K.Rem 'K.RoundAway (N 2) (N 3) ~ P 1)-_test_Rem_RoundAway_N2_N3 =  Dict-_test_Div_RoundAway_N2_N4 :: Dict (K.Div 'K.RoundAway (N 2) (N 4) ~ P 1)-_test_Div_RoundAway_N2_N4 =  Dict-_test_Rem_RoundAway_N2_N4 :: Dict (K.Rem 'K.RoundAway (N 2) (N 4) ~ P 2)-_test_Rem_RoundAway_N2_N4 =  Dict-_test_Div_RoundAway_N2_P1 :: Dict (K.Div 'K.RoundAway (N 2) (P 1) ~ N 2)-_test_Div_RoundAway_N2_P1 =  Dict-_test_Rem_RoundAway_N2_P1 :: Dict (K.Rem 'K.RoundAway (N 2) (P 1) ~ P 0)-_test_Rem_RoundAway_N2_P1 =  Dict-_test_Div_RoundAway_N2_P2 :: Dict (K.Div 'K.RoundAway (N 2) (P 2) ~ N 1)-_test_Div_RoundAway_N2_P2 =  Dict-_test_Rem_RoundAway_N2_P2 :: Dict (K.Rem 'K.RoundAway (N 2) (P 2) ~ P 0)-_test_Rem_RoundAway_N2_P2 =  Dict-_test_Div_RoundAway_N2_P3 :: Dict (K.Div 'K.RoundAway (N 2) (P 3) ~ N 1)-_test_Div_RoundAway_N2_P3 =  Dict-_test_Rem_RoundAway_N2_P3 :: Dict (K.Rem 'K.RoundAway (N 2) (P 3) ~ P 1)-_test_Rem_RoundAway_N2_P3 =  Dict-_test_Div_RoundAway_N2_P4 :: Dict (K.Div 'K.RoundAway (N 2) (P 4) ~ N 1)-_test_Div_RoundAway_N2_P4 =  Dict-_test_Rem_RoundAway_N2_P4 :: Dict (K.Rem 'K.RoundAway (N 2) (P 4) ~ P 2)-_test_Rem_RoundAway_N2_P4 =  Dict-_test_Div_RoundAway_N3_N1 :: Dict (K.Div 'K.RoundAway (N 3) (N 1) ~ P 3)-_test_Div_RoundAway_N3_N1 =  Dict-_test_Rem_RoundAway_N3_N1 :: Dict (K.Rem 'K.RoundAway (N 3) (N 1) ~ P 0)-_test_Rem_RoundAway_N3_N1 =  Dict-_test_Div_RoundAway_N3_N2 :: Dict (K.Div 'K.RoundAway (N 3) (N 2) ~ P 2)-_test_Div_RoundAway_N3_N2 =  Dict-_test_Rem_RoundAway_N3_N2 :: Dict (K.Rem 'K.RoundAway (N 3) (N 2) ~ P 1)-_test_Rem_RoundAway_N3_N2 =  Dict-_test_Div_RoundAway_N3_N3 :: Dict (K.Div 'K.RoundAway (N 3) (N 3) ~ P 1)-_test_Div_RoundAway_N3_N3 =  Dict-_test_Rem_RoundAway_N3_N3 :: Dict (K.Rem 'K.RoundAway (N 3) (N 3) ~ P 0)-_test_Rem_RoundAway_N3_N3 =  Dict-_test_Div_RoundAway_N3_N4 :: Dict (K.Div 'K.RoundAway (N 3) (N 4) ~ P 1)-_test_Div_RoundAway_N3_N4 =  Dict-_test_Rem_RoundAway_N3_N4 :: Dict (K.Rem 'K.RoundAway (N 3) (N 4) ~ P 1)-_test_Rem_RoundAway_N3_N4 =  Dict-_test_Div_RoundAway_N3_P1 :: Dict (K.Div 'K.RoundAway (N 3) (P 1) ~ N 3)-_test_Div_RoundAway_N3_P1 =  Dict-_test_Rem_RoundAway_N3_P1 :: Dict (K.Rem 'K.RoundAway (N 3) (P 1) ~ P 0)-_test_Rem_RoundAway_N3_P1 =  Dict-_test_Div_RoundAway_N3_P2 :: Dict (K.Div 'K.RoundAway (N 3) (P 2) ~ N 2)-_test_Div_RoundAway_N3_P2 =  Dict-_test_Rem_RoundAway_N3_P2 :: Dict (K.Rem 'K.RoundAway (N 3) (P 2) ~ P 1)-_test_Rem_RoundAway_N3_P2 =  Dict-_test_Div_RoundAway_N3_P3 :: Dict (K.Div 'K.RoundAway (N 3) (P 3) ~ N 1)-_test_Div_RoundAway_N3_P3 =  Dict-_test_Rem_RoundAway_N3_P3 :: Dict (K.Rem 'K.RoundAway (N 3) (P 3) ~ P 0)-_test_Rem_RoundAway_N3_P3 =  Dict-_test_Div_RoundAway_N3_P4 :: Dict (K.Div 'K.RoundAway (N 3) (P 4) ~ N 1)-_test_Div_RoundAway_N3_P4 =  Dict-_test_Rem_RoundAway_N3_P4 :: Dict (K.Rem 'K.RoundAway (N 3) (P 4) ~ P 1)-_test_Rem_RoundAway_N3_P4 =  Dict-_test_Div_RoundAway_N4_N1 :: Dict (K.Div 'K.RoundAway (N 4) (N 1) ~ P 4)-_test_Div_RoundAway_N4_N1 =  Dict-_test_Rem_RoundAway_N4_N1 :: Dict (K.Rem 'K.RoundAway (N 4) (N 1) ~ P 0)-_test_Rem_RoundAway_N4_N1 =  Dict-_test_Div_RoundAway_N4_N2 :: Dict (K.Div 'K.RoundAway (N 4) (N 2) ~ P 2)-_test_Div_RoundAway_N4_N2 =  Dict-_test_Rem_RoundAway_N4_N2 :: Dict (K.Rem 'K.RoundAway (N 4) (N 2) ~ P 0)-_test_Rem_RoundAway_N4_N2 =  Dict-_test_Div_RoundAway_N4_N3 :: Dict (K.Div 'K.RoundAway (N 4) (N 3) ~ P 2)-_test_Div_RoundAway_N4_N3 =  Dict-_test_Rem_RoundAway_N4_N3 :: Dict (K.Rem 'K.RoundAway (N 4) (N 3) ~ P 2)-_test_Rem_RoundAway_N4_N3 =  Dict-_test_Div_RoundAway_N4_N4 :: Dict (K.Div 'K.RoundAway (N 4) (N 4) ~ P 1)-_test_Div_RoundAway_N4_N4 =  Dict-_test_Rem_RoundAway_N4_N4 :: Dict (K.Rem 'K.RoundAway (N 4) (N 4) ~ P 0)-_test_Rem_RoundAway_N4_N4 =  Dict-_test_Div_RoundAway_N4_P1 :: Dict (K.Div 'K.RoundAway (N 4) (P 1) ~ N 4)-_test_Div_RoundAway_N4_P1 =  Dict-_test_Rem_RoundAway_N4_P1 :: Dict (K.Rem 'K.RoundAway (N 4) (P 1) ~ P 0)-_test_Rem_RoundAway_N4_P1 =  Dict-_test_Div_RoundAway_N4_P2 :: Dict (K.Div 'K.RoundAway (N 4) (P 2) ~ N 2)-_test_Div_RoundAway_N4_P2 =  Dict-_test_Rem_RoundAway_N4_P2 :: Dict (K.Rem 'K.RoundAway (N 4) (P 2) ~ P 0)-_test_Rem_RoundAway_N4_P2 =  Dict-_test_Div_RoundAway_N4_P3 :: Dict (K.Div 'K.RoundAway (N 4) (P 3) ~ N 2)-_test_Div_RoundAway_N4_P3 =  Dict-_test_Rem_RoundAway_N4_P3 :: Dict (K.Rem 'K.RoundAway (N 4) (P 3) ~ P 2)-_test_Rem_RoundAway_N4_P3 =  Dict-_test_Div_RoundAway_N4_P4 :: Dict (K.Div 'K.RoundAway (N 4) (P 4) ~ N 1)-_test_Div_RoundAway_N4_P4 =  Dict-_test_Rem_RoundAway_N4_P4 :: Dict (K.Rem 'K.RoundAway (N 4) (P 4) ~ P 0)-_test_Rem_RoundAway_N4_P4 =  Dict-_test_Div_RoundAway_P0_N1 :: Dict (K.Div 'K.RoundAway (P 0) (N 1) ~ P 0)-_test_Div_RoundAway_P0_N1 =  Dict-_test_Rem_RoundAway_P0_N1 :: Dict (K.Rem 'K.RoundAway (P 0) (N 1) ~ P 0)-_test_Rem_RoundAway_P0_N1 =  Dict-_test_Div_RoundAway_P0_N2 :: Dict (K.Div 'K.RoundAway (P 0) (N 2) ~ P 0)-_test_Div_RoundAway_P0_N2 =  Dict-_test_Rem_RoundAway_P0_N2 :: Dict (K.Rem 'K.RoundAway (P 0) (N 2) ~ P 0)-_test_Rem_RoundAway_P0_N2 =  Dict-_test_Div_RoundAway_P0_N3 :: Dict (K.Div 'K.RoundAway (P 0) (N 3) ~ P 0)-_test_Div_RoundAway_P0_N3 =  Dict-_test_Rem_RoundAway_P0_N3 :: Dict (K.Rem 'K.RoundAway (P 0) (N 3) ~ P 0)-_test_Rem_RoundAway_P0_N3 =  Dict-_test_Div_RoundAway_P0_N4 :: Dict (K.Div 'K.RoundAway (P 0) (N 4) ~ P 0)-_test_Div_RoundAway_P0_N4 =  Dict-_test_Rem_RoundAway_P0_N4 :: Dict (K.Rem 'K.RoundAway (P 0) (N 4) ~ P 0)-_test_Rem_RoundAway_P0_N4 =  Dict-_test_Div_RoundAway_P0_P1 :: Dict (K.Div 'K.RoundAway (P 0) (P 1) ~ P 0)-_test_Div_RoundAway_P0_P1 =  Dict-_test_Rem_RoundAway_P0_P1 :: Dict (K.Rem 'K.RoundAway (P 0) (P 1) ~ P 0)-_test_Rem_RoundAway_P0_P1 =  Dict-_test_Div_RoundAway_P0_P2 :: Dict (K.Div 'K.RoundAway (P 0) (P 2) ~ P 0)-_test_Div_RoundAway_P0_P2 =  Dict-_test_Rem_RoundAway_P0_P2 :: Dict (K.Rem 'K.RoundAway (P 0) (P 2) ~ P 0)-_test_Rem_RoundAway_P0_P2 =  Dict-_test_Div_RoundAway_P0_P3 :: Dict (K.Div 'K.RoundAway (P 0) (P 3) ~ P 0)-_test_Div_RoundAway_P0_P3 =  Dict-_test_Rem_RoundAway_P0_P3 :: Dict (K.Rem 'K.RoundAway (P 0) (P 3) ~ P 0)-_test_Rem_RoundAway_P0_P3 =  Dict-_test_Div_RoundAway_P0_P4 :: Dict (K.Div 'K.RoundAway (P 0) (P 4) ~ P 0)-_test_Div_RoundAway_P0_P4 =  Dict-_test_Rem_RoundAway_P0_P4 :: Dict (K.Rem 'K.RoundAway (P 0) (P 4) ~ P 0)-_test_Rem_RoundAway_P0_P4 =  Dict-_test_Div_RoundAway_P1_N1 :: Dict (K.Div 'K.RoundAway (P 1) (N 1) ~ N 1)-_test_Div_RoundAway_P1_N1 =  Dict-_test_Rem_RoundAway_P1_N1 :: Dict (K.Rem 'K.RoundAway (P 1) (N 1) ~ P 0)-_test_Rem_RoundAway_P1_N1 =  Dict-_test_Div_RoundAway_P1_N2 :: Dict (K.Div 'K.RoundAway (P 1) (N 2) ~ N 1)-_test_Div_RoundAway_P1_N2 =  Dict-_test_Rem_RoundAway_P1_N2 :: Dict (K.Rem 'K.RoundAway (P 1) (N 2) ~ N 1)-_test_Rem_RoundAway_P1_N2 =  Dict-_test_Div_RoundAway_P1_N3 :: Dict (K.Div 'K.RoundAway (P 1) (N 3) ~ N 1)-_test_Div_RoundAway_P1_N3 =  Dict-_test_Rem_RoundAway_P1_N3 :: Dict (K.Rem 'K.RoundAway (P 1) (N 3) ~ N 2)-_test_Rem_RoundAway_P1_N3 =  Dict-_test_Div_RoundAway_P1_N4 :: Dict (K.Div 'K.RoundAway (P 1) (N 4) ~ N 1)-_test_Div_RoundAway_P1_N4 =  Dict-_test_Rem_RoundAway_P1_N4 :: Dict (K.Rem 'K.RoundAway (P 1) (N 4) ~ N 3)-_test_Rem_RoundAway_P1_N4 =  Dict-_test_Div_RoundAway_P1_P1 :: Dict (K.Div 'K.RoundAway (P 1) (P 1) ~ P 1)-_test_Div_RoundAway_P1_P1 =  Dict-_test_Rem_RoundAway_P1_P1 :: Dict (K.Rem 'K.RoundAway (P 1) (P 1) ~ P 0)-_test_Rem_RoundAway_P1_P1 =  Dict-_test_Div_RoundAway_P1_P2 :: Dict (K.Div 'K.RoundAway (P 1) (P 2) ~ P 1)-_test_Div_RoundAway_P1_P2 =  Dict-_test_Rem_RoundAway_P1_P2 :: Dict (K.Rem 'K.RoundAway (P 1) (P 2) ~ N 1)-_test_Rem_RoundAway_P1_P2 =  Dict-_test_Div_RoundAway_P1_P3 :: Dict (K.Div 'K.RoundAway (P 1) (P 3) ~ P 1)-_test_Div_RoundAway_P1_P3 =  Dict-_test_Rem_RoundAway_P1_P3 :: Dict (K.Rem 'K.RoundAway (P 1) (P 3) ~ N 2)-_test_Rem_RoundAway_P1_P3 =  Dict-_test_Div_RoundAway_P1_P4 :: Dict (K.Div 'K.RoundAway (P 1) (P 4) ~ P 1)-_test_Div_RoundAway_P1_P4 =  Dict-_test_Rem_RoundAway_P1_P4 :: Dict (K.Rem 'K.RoundAway (P 1) (P 4) ~ N 3)-_test_Rem_RoundAway_P1_P4 =  Dict-_test_Div_RoundAway_P2_N1 :: Dict (K.Div 'K.RoundAway (P 2) (N 1) ~ N 2)-_test_Div_RoundAway_P2_N1 =  Dict-_test_Rem_RoundAway_P2_N1 :: Dict (K.Rem 'K.RoundAway (P 2) (N 1) ~ P 0)-_test_Rem_RoundAway_P2_N1 =  Dict-_test_Div_RoundAway_P2_N2 :: Dict (K.Div 'K.RoundAway (P 2) (N 2) ~ N 1)-_test_Div_RoundAway_P2_N2 =  Dict-_test_Rem_RoundAway_P2_N2 :: Dict (K.Rem 'K.RoundAway (P 2) (N 2) ~ P 0)-_test_Rem_RoundAway_P2_N2 =  Dict-_test_Div_RoundAway_P2_N3 :: Dict (K.Div 'K.RoundAway (P 2) (N 3) ~ N 1)-_test_Div_RoundAway_P2_N3 =  Dict-_test_Rem_RoundAway_P2_N3 :: Dict (K.Rem 'K.RoundAway (P 2) (N 3) ~ N 1)-_test_Rem_RoundAway_P2_N3 =  Dict-_test_Div_RoundAway_P2_N4 :: Dict (K.Div 'K.RoundAway (P 2) (N 4) ~ N 1)-_test_Div_RoundAway_P2_N4 =  Dict-_test_Rem_RoundAway_P2_N4 :: Dict (K.Rem 'K.RoundAway (P 2) (N 4) ~ N 2)-_test_Rem_RoundAway_P2_N4 =  Dict-_test_Div_RoundAway_P2_P1 :: Dict (K.Div 'K.RoundAway (P 2) (P 1) ~ P 2)-_test_Div_RoundAway_P2_P1 =  Dict-_test_Rem_RoundAway_P2_P1 :: Dict (K.Rem 'K.RoundAway (P 2) (P 1) ~ P 0)-_test_Rem_RoundAway_P2_P1 =  Dict-_test_Div_RoundAway_P2_P2 :: Dict (K.Div 'K.RoundAway (P 2) (P 2) ~ P 1)-_test_Div_RoundAway_P2_P2 =  Dict-_test_Rem_RoundAway_P2_P2 :: Dict (K.Rem 'K.RoundAway (P 2) (P 2) ~ P 0)-_test_Rem_RoundAway_P2_P2 =  Dict-_test_Div_RoundAway_P2_P3 :: Dict (K.Div 'K.RoundAway (P 2) (P 3) ~ P 1)-_test_Div_RoundAway_P2_P3 =  Dict-_test_Rem_RoundAway_P2_P3 :: Dict (K.Rem 'K.RoundAway (P 2) (P 3) ~ N 1)-_test_Rem_RoundAway_P2_P3 =  Dict-_test_Div_RoundAway_P2_P4 :: Dict (K.Div 'K.RoundAway (P 2) (P 4) ~ P 1)-_test_Div_RoundAway_P2_P4 =  Dict-_test_Rem_RoundAway_P2_P4 :: Dict (K.Rem 'K.RoundAway (P 2) (P 4) ~ N 2)-_test_Rem_RoundAway_P2_P4 =  Dict-_test_Div_RoundAway_P3_N1 :: Dict (K.Div 'K.RoundAway (P 3) (N 1) ~ N 3)-_test_Div_RoundAway_P3_N1 =  Dict-_test_Rem_RoundAway_P3_N1 :: Dict (K.Rem 'K.RoundAway (P 3) (N 1) ~ P 0)-_test_Rem_RoundAway_P3_N1 =  Dict-_test_Div_RoundAway_P3_N2 :: Dict (K.Div 'K.RoundAway (P 3) (N 2) ~ N 2)-_test_Div_RoundAway_P3_N2 =  Dict-_test_Rem_RoundAway_P3_N2 :: Dict (K.Rem 'K.RoundAway (P 3) (N 2) ~ N 1)-_test_Rem_RoundAway_P3_N2 =  Dict-_test_Div_RoundAway_P3_N3 :: Dict (K.Div 'K.RoundAway (P 3) (N 3) ~ N 1)-_test_Div_RoundAway_P3_N3 =  Dict-_test_Rem_RoundAway_P3_N3 :: Dict (K.Rem 'K.RoundAway (P 3) (N 3) ~ P 0)-_test_Rem_RoundAway_P3_N3 =  Dict-_test_Div_RoundAway_P3_N4 :: Dict (K.Div 'K.RoundAway (P 3) (N 4) ~ N 1)-_test_Div_RoundAway_P3_N4 =  Dict-_test_Rem_RoundAway_P3_N4 :: Dict (K.Rem 'K.RoundAway (P 3) (N 4) ~ N 1)-_test_Rem_RoundAway_P3_N4 =  Dict-_test_Div_RoundAway_P3_P1 :: Dict (K.Div 'K.RoundAway (P 3) (P 1) ~ P 3)-_test_Div_RoundAway_P3_P1 =  Dict-_test_Rem_RoundAway_P3_P1 :: Dict (K.Rem 'K.RoundAway (P 3) (P 1) ~ P 0)-_test_Rem_RoundAway_P3_P1 =  Dict-_test_Div_RoundAway_P3_P2 :: Dict (K.Div 'K.RoundAway (P 3) (P 2) ~ P 2)-_test_Div_RoundAway_P3_P2 =  Dict-_test_Rem_RoundAway_P3_P2 :: Dict (K.Rem 'K.RoundAway (P 3) (P 2) ~ N 1)-_test_Rem_RoundAway_P3_P2 =  Dict-_test_Div_RoundAway_P3_P3 :: Dict (K.Div 'K.RoundAway (P 3) (P 3) ~ P 1)-_test_Div_RoundAway_P3_P3 =  Dict-_test_Rem_RoundAway_P3_P3 :: Dict (K.Rem 'K.RoundAway (P 3) (P 3) ~ P 0)-_test_Rem_RoundAway_P3_P3 =  Dict-_test_Div_RoundAway_P3_P4 :: Dict (K.Div 'K.RoundAway (P 3) (P 4) ~ P 1)-_test_Div_RoundAway_P3_P4 =  Dict-_test_Rem_RoundAway_P3_P4 :: Dict (K.Rem 'K.RoundAway (P 3) (P 4) ~ N 1)-_test_Rem_RoundAway_P3_P4 =  Dict-_test_Div_RoundAway_P4_N1 :: Dict (K.Div 'K.RoundAway (P 4) (N 1) ~ N 4)-_test_Div_RoundAway_P4_N1 =  Dict-_test_Rem_RoundAway_P4_N1 :: Dict (K.Rem 'K.RoundAway (P 4) (N 1) ~ P 0)-_test_Rem_RoundAway_P4_N1 =  Dict-_test_Div_RoundAway_P4_N2 :: Dict (K.Div 'K.RoundAway (P 4) (N 2) ~ N 2)-_test_Div_RoundAway_P4_N2 =  Dict-_test_Rem_RoundAway_P4_N2 :: Dict (K.Rem 'K.RoundAway (P 4) (N 2) ~ P 0)-_test_Rem_RoundAway_P4_N2 =  Dict-_test_Div_RoundAway_P4_N3 :: Dict (K.Div 'K.RoundAway (P 4) (N 3) ~ N 2)-_test_Div_RoundAway_P4_N3 =  Dict-_test_Rem_RoundAway_P4_N3 :: Dict (K.Rem 'K.RoundAway (P 4) (N 3) ~ N 2)-_test_Rem_RoundAway_P4_N3 =  Dict-_test_Div_RoundAway_P4_N4 :: Dict (K.Div 'K.RoundAway (P 4) (N 4) ~ N 1)-_test_Div_RoundAway_P4_N4 =  Dict-_test_Rem_RoundAway_P4_N4 :: Dict (K.Rem 'K.RoundAway (P 4) (N 4) ~ P 0)-_test_Rem_RoundAway_P4_N4 =  Dict-_test_Div_RoundAway_P4_P1 :: Dict (K.Div 'K.RoundAway (P 4) (P 1) ~ P 4)-_test_Div_RoundAway_P4_P1 =  Dict-_test_Rem_RoundAway_P4_P1 :: Dict (K.Rem 'K.RoundAway (P 4) (P 1) ~ P 0)-_test_Rem_RoundAway_P4_P1 =  Dict-_test_Div_RoundAway_P4_P2 :: Dict (K.Div 'K.RoundAway (P 4) (P 2) ~ P 2)-_test_Div_RoundAway_P4_P2 =  Dict-_test_Rem_RoundAway_P4_P2 :: Dict (K.Rem 'K.RoundAway (P 4) (P 2) ~ P 0)-_test_Rem_RoundAway_P4_P2 =  Dict-_test_Div_RoundAway_P4_P3 :: Dict (K.Div 'K.RoundAway (P 4) (P 3) ~ P 2)-_test_Div_RoundAway_P4_P3 =  Dict-_test_Rem_RoundAway_P4_P3 :: Dict (K.Rem 'K.RoundAway (P 4) (P 3) ~ N 2)-_test_Rem_RoundAway_P4_P3 =  Dict-_test_Div_RoundAway_P4_P4 :: Dict (K.Div 'K.RoundAway (P 4) (P 4) ~ P 1)-_test_Div_RoundAway_P4_P4 =  Dict-_test_Rem_RoundAway_P4_P4 :: Dict (K.Rem 'K.RoundAway (P 4) (P 4) ~ P 0)-_test_Rem_RoundAway_P4_P4 =  Dict-_test_Div_RoundDown_N1_N1 :: Dict (K.Div 'K.RoundDown (N 1) (N 1) ~ P 1)-_test_Div_RoundDown_N1_N1 =  Dict-_test_Rem_RoundDown_N1_N1 :: Dict (K.Rem 'K.RoundDown (N 1) (N 1) ~ P 0)-_test_Rem_RoundDown_N1_N1 =  Dict-_test_Div_RoundDown_N1_N2 :: Dict (K.Div 'K.RoundDown (N 1) (N 2) ~ P 0)-_test_Div_RoundDown_N1_N2 =  Dict-_test_Rem_RoundDown_N1_N2 :: Dict (K.Rem 'K.RoundDown (N 1) (N 2) ~ N 1)-_test_Rem_RoundDown_N1_N2 =  Dict-_test_Div_RoundDown_N1_N3 :: Dict (K.Div 'K.RoundDown (N 1) (N 3) ~ P 0)-_test_Div_RoundDown_N1_N3 =  Dict-_test_Rem_RoundDown_N1_N3 :: Dict (K.Rem 'K.RoundDown (N 1) (N 3) ~ N 1)-_test_Rem_RoundDown_N1_N3 =  Dict-_test_Div_RoundDown_N1_N4 :: Dict (K.Div 'K.RoundDown (N 1) (N 4) ~ P 0)-_test_Div_RoundDown_N1_N4 =  Dict-_test_Rem_RoundDown_N1_N4 :: Dict (K.Rem 'K.RoundDown (N 1) (N 4) ~ N 1)-_test_Rem_RoundDown_N1_N4 =  Dict-_test_Div_RoundDown_N1_P1 :: Dict (K.Div 'K.RoundDown (N 1) (P 1) ~ N 1)-_test_Div_RoundDown_N1_P1 =  Dict-_test_Rem_RoundDown_N1_P1 :: Dict (K.Rem 'K.RoundDown (N 1) (P 1) ~ P 0)-_test_Rem_RoundDown_N1_P1 =  Dict-_test_Div_RoundDown_N1_P2 :: Dict (K.Div 'K.RoundDown (N 1) (P 2) ~ N 1)-_test_Div_RoundDown_N1_P2 =  Dict-_test_Rem_RoundDown_N1_P2 :: Dict (K.Rem 'K.RoundDown (N 1) (P 2) ~ P 1)-_test_Rem_RoundDown_N1_P2 =  Dict-_test_Div_RoundDown_N1_P3 :: Dict (K.Div 'K.RoundDown (N 1) (P 3) ~ N 1)-_test_Div_RoundDown_N1_P3 =  Dict-_test_Rem_RoundDown_N1_P3 :: Dict (K.Rem 'K.RoundDown (N 1) (P 3) ~ P 2)-_test_Rem_RoundDown_N1_P3 =  Dict-_test_Div_RoundDown_N1_P4 :: Dict (K.Div 'K.RoundDown (N 1) (P 4) ~ N 1)-_test_Div_RoundDown_N1_P4 =  Dict-_test_Rem_RoundDown_N1_P4 :: Dict (K.Rem 'K.RoundDown (N 1) (P 4) ~ P 3)-_test_Rem_RoundDown_N1_P4 =  Dict-_test_Div_RoundDown_N2_N1 :: Dict (K.Div 'K.RoundDown (N 2) (N 1) ~ P 2)-_test_Div_RoundDown_N2_N1 =  Dict-_test_Rem_RoundDown_N2_N1 :: Dict (K.Rem 'K.RoundDown (N 2) (N 1) ~ P 0)-_test_Rem_RoundDown_N2_N1 =  Dict-_test_Div_RoundDown_N2_N2 :: Dict (K.Div 'K.RoundDown (N 2) (N 2) ~ P 1)-_test_Div_RoundDown_N2_N2 =  Dict-_test_Rem_RoundDown_N2_N2 :: Dict (K.Rem 'K.RoundDown (N 2) (N 2) ~ P 0)-_test_Rem_RoundDown_N2_N2 =  Dict-_test_Div_RoundDown_N2_N3 :: Dict (K.Div 'K.RoundDown (N 2) (N 3) ~ P 0)-_test_Div_RoundDown_N2_N3 =  Dict-_test_Rem_RoundDown_N2_N3 :: Dict (K.Rem 'K.RoundDown (N 2) (N 3) ~ N 2)-_test_Rem_RoundDown_N2_N3 =  Dict-_test_Div_RoundDown_N2_N4 :: Dict (K.Div 'K.RoundDown (N 2) (N 4) ~ P 0)-_test_Div_RoundDown_N2_N4 =  Dict-_test_Rem_RoundDown_N2_N4 :: Dict (K.Rem 'K.RoundDown (N 2) (N 4) ~ N 2)-_test_Rem_RoundDown_N2_N4 =  Dict-_test_Div_RoundDown_N2_P1 :: Dict (K.Div 'K.RoundDown (N 2) (P 1) ~ N 2)-_test_Div_RoundDown_N2_P1 =  Dict-_test_Rem_RoundDown_N2_P1 :: Dict (K.Rem 'K.RoundDown (N 2) (P 1) ~ P 0)-_test_Rem_RoundDown_N2_P1 =  Dict-_test_Div_RoundDown_N2_P2 :: Dict (K.Div 'K.RoundDown (N 2) (P 2) ~ N 1)-_test_Div_RoundDown_N2_P2 =  Dict-_test_Rem_RoundDown_N2_P2 :: Dict (K.Rem 'K.RoundDown (N 2) (P 2) ~ P 0)-_test_Rem_RoundDown_N2_P2 =  Dict-_test_Div_RoundDown_N2_P3 :: Dict (K.Div 'K.RoundDown (N 2) (P 3) ~ N 1)-_test_Div_RoundDown_N2_P3 =  Dict-_test_Rem_RoundDown_N2_P3 :: Dict (K.Rem 'K.RoundDown (N 2) (P 3) ~ P 1)-_test_Rem_RoundDown_N2_P3 =  Dict-_test_Div_RoundDown_N2_P4 :: Dict (K.Div 'K.RoundDown (N 2) (P 4) ~ N 1)-_test_Div_RoundDown_N2_P4 =  Dict-_test_Rem_RoundDown_N2_P4 :: Dict (K.Rem 'K.RoundDown (N 2) (P 4) ~ P 2)-_test_Rem_RoundDown_N2_P4 =  Dict-_test_Div_RoundDown_N3_N1 :: Dict (K.Div 'K.RoundDown (N 3) (N 1) ~ P 3)-_test_Div_RoundDown_N3_N1 =  Dict-_test_Rem_RoundDown_N3_N1 :: Dict (K.Rem 'K.RoundDown (N 3) (N 1) ~ P 0)-_test_Rem_RoundDown_N3_N1 =  Dict-_test_Div_RoundDown_N3_N2 :: Dict (K.Div 'K.RoundDown (N 3) (N 2) ~ P 1)-_test_Div_RoundDown_N3_N2 =  Dict-_test_Rem_RoundDown_N3_N2 :: Dict (K.Rem 'K.RoundDown (N 3) (N 2) ~ N 1)-_test_Rem_RoundDown_N3_N2 =  Dict-_test_Div_RoundDown_N3_N3 :: Dict (K.Div 'K.RoundDown (N 3) (N 3) ~ P 1)-_test_Div_RoundDown_N3_N3 =  Dict-_test_Rem_RoundDown_N3_N3 :: Dict (K.Rem 'K.RoundDown (N 3) (N 3) ~ P 0)-_test_Rem_RoundDown_N3_N3 =  Dict-_test_Div_RoundDown_N3_N4 :: Dict (K.Div 'K.RoundDown (N 3) (N 4) ~ P 0)-_test_Div_RoundDown_N3_N4 =  Dict-_test_Rem_RoundDown_N3_N4 :: Dict (K.Rem 'K.RoundDown (N 3) (N 4) ~ N 3)-_test_Rem_RoundDown_N3_N4 =  Dict-_test_Div_RoundDown_N3_P1 :: Dict (K.Div 'K.RoundDown (N 3) (P 1) ~ N 3)-_test_Div_RoundDown_N3_P1 =  Dict-_test_Rem_RoundDown_N3_P1 :: Dict (K.Rem 'K.RoundDown (N 3) (P 1) ~ P 0)-_test_Rem_RoundDown_N3_P1 =  Dict-_test_Div_RoundDown_N3_P2 :: Dict (K.Div 'K.RoundDown (N 3) (P 2) ~ N 2)-_test_Div_RoundDown_N3_P2 =  Dict-_test_Rem_RoundDown_N3_P2 :: Dict (K.Rem 'K.RoundDown (N 3) (P 2) ~ P 1)-_test_Rem_RoundDown_N3_P2 =  Dict-_test_Div_RoundDown_N3_P3 :: Dict (K.Div 'K.RoundDown (N 3) (P 3) ~ N 1)-_test_Div_RoundDown_N3_P3 =  Dict-_test_Rem_RoundDown_N3_P3 :: Dict (K.Rem 'K.RoundDown (N 3) (P 3) ~ P 0)-_test_Rem_RoundDown_N3_P3 =  Dict-_test_Div_RoundDown_N3_P4 :: Dict (K.Div 'K.RoundDown (N 3) (P 4) ~ N 1)-_test_Div_RoundDown_N3_P4 =  Dict-_test_Rem_RoundDown_N3_P4 :: Dict (K.Rem 'K.RoundDown (N 3) (P 4) ~ P 1)-_test_Rem_RoundDown_N3_P4 =  Dict-_test_Div_RoundDown_N4_N1 :: Dict (K.Div 'K.RoundDown (N 4) (N 1) ~ P 4)-_test_Div_RoundDown_N4_N1 =  Dict-_test_Rem_RoundDown_N4_N1 :: Dict (K.Rem 'K.RoundDown (N 4) (N 1) ~ P 0)-_test_Rem_RoundDown_N4_N1 =  Dict-_test_Div_RoundDown_N4_N2 :: Dict (K.Div 'K.RoundDown (N 4) (N 2) ~ P 2)-_test_Div_RoundDown_N4_N2 =  Dict-_test_Rem_RoundDown_N4_N2 :: Dict (K.Rem 'K.RoundDown (N 4) (N 2) ~ P 0)-_test_Rem_RoundDown_N4_N2 =  Dict-_test_Div_RoundDown_N4_N3 :: Dict (K.Div 'K.RoundDown (N 4) (N 3) ~ P 1)-_test_Div_RoundDown_N4_N3 =  Dict-_test_Rem_RoundDown_N4_N3 :: Dict (K.Rem 'K.RoundDown (N 4) (N 3) ~ N 1)-_test_Rem_RoundDown_N4_N3 =  Dict-_test_Div_RoundDown_N4_N4 :: Dict (K.Div 'K.RoundDown (N 4) (N 4) ~ P 1)-_test_Div_RoundDown_N4_N4 =  Dict-_test_Rem_RoundDown_N4_N4 :: Dict (K.Rem 'K.RoundDown (N 4) (N 4) ~ P 0)-_test_Rem_RoundDown_N4_N4 =  Dict-_test_Div_RoundDown_N4_P1 :: Dict (K.Div 'K.RoundDown (N 4) (P 1) ~ N 4)-_test_Div_RoundDown_N4_P1 =  Dict-_test_Rem_RoundDown_N4_P1 :: Dict (K.Rem 'K.RoundDown (N 4) (P 1) ~ P 0)-_test_Rem_RoundDown_N4_P1 =  Dict-_test_Div_RoundDown_N4_P2 :: Dict (K.Div 'K.RoundDown (N 4) (P 2) ~ N 2)-_test_Div_RoundDown_N4_P2 =  Dict-_test_Rem_RoundDown_N4_P2 :: Dict (K.Rem 'K.RoundDown (N 4) (P 2) ~ P 0)-_test_Rem_RoundDown_N4_P2 =  Dict-_test_Div_RoundDown_N4_P3 :: Dict (K.Div 'K.RoundDown (N 4) (P 3) ~ N 2)-_test_Div_RoundDown_N4_P3 =  Dict-_test_Rem_RoundDown_N4_P3 :: Dict (K.Rem 'K.RoundDown (N 4) (P 3) ~ P 2)-_test_Rem_RoundDown_N4_P3 =  Dict-_test_Div_RoundDown_N4_P4 :: Dict (K.Div 'K.RoundDown (N 4) (P 4) ~ N 1)-_test_Div_RoundDown_N4_P4 =  Dict-_test_Rem_RoundDown_N4_P4 :: Dict (K.Rem 'K.RoundDown (N 4) (P 4) ~ P 0)-_test_Rem_RoundDown_N4_P4 =  Dict-_test_Div_RoundDown_P0_N1 :: Dict (K.Div 'K.RoundDown (P 0) (N 1) ~ P 0)-_test_Div_RoundDown_P0_N1 =  Dict-_test_Rem_RoundDown_P0_N1 :: Dict (K.Rem 'K.RoundDown (P 0) (N 1) ~ P 0)-_test_Rem_RoundDown_P0_N1 =  Dict-_test_Div_RoundDown_P0_N2 :: Dict (K.Div 'K.RoundDown (P 0) (N 2) ~ P 0)-_test_Div_RoundDown_P0_N2 =  Dict-_test_Rem_RoundDown_P0_N2 :: Dict (K.Rem 'K.RoundDown (P 0) (N 2) ~ P 0)-_test_Rem_RoundDown_P0_N2 =  Dict-_test_Div_RoundDown_P0_N3 :: Dict (K.Div 'K.RoundDown (P 0) (N 3) ~ P 0)-_test_Div_RoundDown_P0_N3 =  Dict-_test_Rem_RoundDown_P0_N3 :: Dict (K.Rem 'K.RoundDown (P 0) (N 3) ~ P 0)-_test_Rem_RoundDown_P0_N3 =  Dict-_test_Div_RoundDown_P0_N4 :: Dict (K.Div 'K.RoundDown (P 0) (N 4) ~ P 0)-_test_Div_RoundDown_P0_N4 =  Dict-_test_Rem_RoundDown_P0_N4 :: Dict (K.Rem 'K.RoundDown (P 0) (N 4) ~ P 0)-_test_Rem_RoundDown_P0_N4 =  Dict-_test_Div_RoundDown_P0_P1 :: Dict (K.Div 'K.RoundDown (P 0) (P 1) ~ P 0)-_test_Div_RoundDown_P0_P1 =  Dict-_test_Rem_RoundDown_P0_P1 :: Dict (K.Rem 'K.RoundDown (P 0) (P 1) ~ P 0)-_test_Rem_RoundDown_P0_P1 =  Dict-_test_Div_RoundDown_P0_P2 :: Dict (K.Div 'K.RoundDown (P 0) (P 2) ~ P 0)-_test_Div_RoundDown_P0_P2 =  Dict-_test_Rem_RoundDown_P0_P2 :: Dict (K.Rem 'K.RoundDown (P 0) (P 2) ~ P 0)-_test_Rem_RoundDown_P0_P2 =  Dict-_test_Div_RoundDown_P0_P3 :: Dict (K.Div 'K.RoundDown (P 0) (P 3) ~ P 0)-_test_Div_RoundDown_P0_P3 =  Dict-_test_Rem_RoundDown_P0_P3 :: Dict (K.Rem 'K.RoundDown (P 0) (P 3) ~ P 0)-_test_Rem_RoundDown_P0_P3 =  Dict-_test_Div_RoundDown_P0_P4 :: Dict (K.Div 'K.RoundDown (P 0) (P 4) ~ P 0)-_test_Div_RoundDown_P0_P4 =  Dict-_test_Rem_RoundDown_P0_P4 :: Dict (K.Rem 'K.RoundDown (P 0) (P 4) ~ P 0)-_test_Rem_RoundDown_P0_P4 =  Dict-_test_Div_RoundDown_P1_N1 :: Dict (K.Div 'K.RoundDown (P 1) (N 1) ~ N 1)-_test_Div_RoundDown_P1_N1 =  Dict-_test_Rem_RoundDown_P1_N1 :: Dict (K.Rem 'K.RoundDown (P 1) (N 1) ~ P 0)-_test_Rem_RoundDown_P1_N1 =  Dict-_test_Div_RoundDown_P1_N2 :: Dict (K.Div 'K.RoundDown (P 1) (N 2) ~ N 1)-_test_Div_RoundDown_P1_N2 =  Dict-_test_Rem_RoundDown_P1_N2 :: Dict (K.Rem 'K.RoundDown (P 1) (N 2) ~ N 1)-_test_Rem_RoundDown_P1_N2 =  Dict-_test_Div_RoundDown_P1_N3 :: Dict (K.Div 'K.RoundDown (P 1) (N 3) ~ N 1)-_test_Div_RoundDown_P1_N3 =  Dict-_test_Rem_RoundDown_P1_N3 :: Dict (K.Rem 'K.RoundDown (P 1) (N 3) ~ N 2)-_test_Rem_RoundDown_P1_N3 =  Dict-_test_Div_RoundDown_P1_N4 :: Dict (K.Div 'K.RoundDown (P 1) (N 4) ~ N 1)-_test_Div_RoundDown_P1_N4 =  Dict-_test_Rem_RoundDown_P1_N4 :: Dict (K.Rem 'K.RoundDown (P 1) (N 4) ~ N 3)-_test_Rem_RoundDown_P1_N4 =  Dict-_test_Div_RoundDown_P1_P1 :: Dict (K.Div 'K.RoundDown (P 1) (P 1) ~ P 1)-_test_Div_RoundDown_P1_P1 =  Dict-_test_Rem_RoundDown_P1_P1 :: Dict (K.Rem 'K.RoundDown (P 1) (P 1) ~ P 0)-_test_Rem_RoundDown_P1_P1 =  Dict-_test_Div_RoundDown_P1_P2 :: Dict (K.Div 'K.RoundDown (P 1) (P 2) ~ P 0)-_test_Div_RoundDown_P1_P2 =  Dict-_test_Rem_RoundDown_P1_P2 :: Dict (K.Rem 'K.RoundDown (P 1) (P 2) ~ P 1)-_test_Rem_RoundDown_P1_P2 =  Dict-_test_Div_RoundDown_P1_P3 :: Dict (K.Div 'K.RoundDown (P 1) (P 3) ~ P 0)-_test_Div_RoundDown_P1_P3 =  Dict-_test_Rem_RoundDown_P1_P3 :: Dict (K.Rem 'K.RoundDown (P 1) (P 3) ~ P 1)-_test_Rem_RoundDown_P1_P3 =  Dict-_test_Div_RoundDown_P1_P4 :: Dict (K.Div 'K.RoundDown (P 1) (P 4) ~ P 0)-_test_Div_RoundDown_P1_P4 =  Dict-_test_Rem_RoundDown_P1_P4 :: Dict (K.Rem 'K.RoundDown (P 1) (P 4) ~ P 1)-_test_Rem_RoundDown_P1_P4 =  Dict-_test_Div_RoundDown_P2_N1 :: Dict (K.Div 'K.RoundDown (P 2) (N 1) ~ N 2)-_test_Div_RoundDown_P2_N1 =  Dict-_test_Rem_RoundDown_P2_N1 :: Dict (K.Rem 'K.RoundDown (P 2) (N 1) ~ P 0)-_test_Rem_RoundDown_P2_N1 =  Dict-_test_Div_RoundDown_P2_N2 :: Dict (K.Div 'K.RoundDown (P 2) (N 2) ~ N 1)-_test_Div_RoundDown_P2_N2 =  Dict-_test_Rem_RoundDown_P2_N2 :: Dict (K.Rem 'K.RoundDown (P 2) (N 2) ~ P 0)-_test_Rem_RoundDown_P2_N2 =  Dict-_test_Div_RoundDown_P2_N3 :: Dict (K.Div 'K.RoundDown (P 2) (N 3) ~ N 1)-_test_Div_RoundDown_P2_N3 =  Dict-_test_Rem_RoundDown_P2_N3 :: Dict (K.Rem 'K.RoundDown (P 2) (N 3) ~ N 1)-_test_Rem_RoundDown_P2_N3 =  Dict-_test_Div_RoundDown_P2_N4 :: Dict (K.Div 'K.RoundDown (P 2) (N 4) ~ N 1)-_test_Div_RoundDown_P2_N4 =  Dict-_test_Rem_RoundDown_P2_N4 :: Dict (K.Rem 'K.RoundDown (P 2) (N 4) ~ N 2)-_test_Rem_RoundDown_P2_N4 =  Dict-_test_Div_RoundDown_P2_P1 :: Dict (K.Div 'K.RoundDown (P 2) (P 1) ~ P 2)-_test_Div_RoundDown_P2_P1 =  Dict-_test_Rem_RoundDown_P2_P1 :: Dict (K.Rem 'K.RoundDown (P 2) (P 1) ~ P 0)-_test_Rem_RoundDown_P2_P1 =  Dict-_test_Div_RoundDown_P2_P2 :: Dict (K.Div 'K.RoundDown (P 2) (P 2) ~ P 1)-_test_Div_RoundDown_P2_P2 =  Dict-_test_Rem_RoundDown_P2_P2 :: Dict (K.Rem 'K.RoundDown (P 2) (P 2) ~ P 0)-_test_Rem_RoundDown_P2_P2 =  Dict-_test_Div_RoundDown_P2_P3 :: Dict (K.Div 'K.RoundDown (P 2) (P 3) ~ P 0)-_test_Div_RoundDown_P2_P3 =  Dict-_test_Rem_RoundDown_P2_P3 :: Dict (K.Rem 'K.RoundDown (P 2) (P 3) ~ P 2)-_test_Rem_RoundDown_P2_P3 =  Dict-_test_Div_RoundDown_P2_P4 :: Dict (K.Div 'K.RoundDown (P 2) (P 4) ~ P 0)-_test_Div_RoundDown_P2_P4 =  Dict-_test_Rem_RoundDown_P2_P4 :: Dict (K.Rem 'K.RoundDown (P 2) (P 4) ~ P 2)-_test_Rem_RoundDown_P2_P4 =  Dict-_test_Div_RoundDown_P3_N1 :: Dict (K.Div 'K.RoundDown (P 3) (N 1) ~ N 3)-_test_Div_RoundDown_P3_N1 =  Dict-_test_Rem_RoundDown_P3_N1 :: Dict (K.Rem 'K.RoundDown (P 3) (N 1) ~ P 0)-_test_Rem_RoundDown_P3_N1 =  Dict-_test_Div_RoundDown_P3_N2 :: Dict (K.Div 'K.RoundDown (P 3) (N 2) ~ N 2)-_test_Div_RoundDown_P3_N2 =  Dict-_test_Rem_RoundDown_P3_N2 :: Dict (K.Rem 'K.RoundDown (P 3) (N 2) ~ N 1)-_test_Rem_RoundDown_P3_N2 =  Dict-_test_Div_RoundDown_P3_N3 :: Dict (K.Div 'K.RoundDown (P 3) (N 3) ~ N 1)-_test_Div_RoundDown_P3_N3 =  Dict-_test_Rem_RoundDown_P3_N3 :: Dict (K.Rem 'K.RoundDown (P 3) (N 3) ~ P 0)-_test_Rem_RoundDown_P3_N3 =  Dict-_test_Div_RoundDown_P3_N4 :: Dict (K.Div 'K.RoundDown (P 3) (N 4) ~ N 1)-_test_Div_RoundDown_P3_N4 =  Dict-_test_Rem_RoundDown_P3_N4 :: Dict (K.Rem 'K.RoundDown (P 3) (N 4) ~ N 1)-_test_Rem_RoundDown_P3_N4 =  Dict-_test_Div_RoundDown_P3_P1 :: Dict (K.Div 'K.RoundDown (P 3) (P 1) ~ P 3)-_test_Div_RoundDown_P3_P1 =  Dict-_test_Rem_RoundDown_P3_P1 :: Dict (K.Rem 'K.RoundDown (P 3) (P 1) ~ P 0)-_test_Rem_RoundDown_P3_P1 =  Dict-_test_Div_RoundDown_P3_P2 :: Dict (K.Div 'K.RoundDown (P 3) (P 2) ~ P 1)-_test_Div_RoundDown_P3_P2 =  Dict-_test_Rem_RoundDown_P3_P2 :: Dict (K.Rem 'K.RoundDown (P 3) (P 2) ~ P 1)-_test_Rem_RoundDown_P3_P2 =  Dict-_test_Div_RoundDown_P3_P3 :: Dict (K.Div 'K.RoundDown (P 3) (P 3) ~ P 1)-_test_Div_RoundDown_P3_P3 =  Dict-_test_Rem_RoundDown_P3_P3 :: Dict (K.Rem 'K.RoundDown (P 3) (P 3) ~ P 0)-_test_Rem_RoundDown_P3_P3 =  Dict-_test_Div_RoundDown_P3_P4 :: Dict (K.Div 'K.RoundDown (P 3) (P 4) ~ P 0)-_test_Div_RoundDown_P3_P4 =  Dict-_test_Rem_RoundDown_P3_P4 :: Dict (K.Rem 'K.RoundDown (P 3) (P 4) ~ P 3)-_test_Rem_RoundDown_P3_P4 =  Dict-_test_Div_RoundDown_P4_N1 :: Dict (K.Div 'K.RoundDown (P 4) (N 1) ~ N 4)-_test_Div_RoundDown_P4_N1 =  Dict-_test_Rem_RoundDown_P4_N1 :: Dict (K.Rem 'K.RoundDown (P 4) (N 1) ~ P 0)-_test_Rem_RoundDown_P4_N1 =  Dict-_test_Div_RoundDown_P4_N2 :: Dict (K.Div 'K.RoundDown (P 4) (N 2) ~ N 2)-_test_Div_RoundDown_P4_N2 =  Dict-_test_Rem_RoundDown_P4_N2 :: Dict (K.Rem 'K.RoundDown (P 4) (N 2) ~ P 0)-_test_Rem_RoundDown_P4_N2 =  Dict-_test_Div_RoundDown_P4_N3 :: Dict (K.Div 'K.RoundDown (P 4) (N 3) ~ N 2)-_test_Div_RoundDown_P4_N3 =  Dict-_test_Rem_RoundDown_P4_N3 :: Dict (K.Rem 'K.RoundDown (P 4) (N 3) ~ N 2)-_test_Rem_RoundDown_P4_N3 =  Dict-_test_Div_RoundDown_P4_N4 :: Dict (K.Div 'K.RoundDown (P 4) (N 4) ~ N 1)-_test_Div_RoundDown_P4_N4 =  Dict-_test_Rem_RoundDown_P4_N4 :: Dict (K.Rem 'K.RoundDown (P 4) (N 4) ~ P 0)-_test_Rem_RoundDown_P4_N4 =  Dict-_test_Div_RoundDown_P4_P1 :: Dict (K.Div 'K.RoundDown (P 4) (P 1) ~ P 4)-_test_Div_RoundDown_P4_P1 =  Dict-_test_Rem_RoundDown_P4_P1 :: Dict (K.Rem 'K.RoundDown (P 4) (P 1) ~ P 0)-_test_Rem_RoundDown_P4_P1 =  Dict-_test_Div_RoundDown_P4_P2 :: Dict (K.Div 'K.RoundDown (P 4) (P 2) ~ P 2)-_test_Div_RoundDown_P4_P2 =  Dict-_test_Rem_RoundDown_P4_P2 :: Dict (K.Rem 'K.RoundDown (P 4) (P 2) ~ P 0)-_test_Rem_RoundDown_P4_P2 =  Dict-_test_Div_RoundDown_P4_P3 :: Dict (K.Div 'K.RoundDown (P 4) (P 3) ~ P 1)-_test_Div_RoundDown_P4_P3 =  Dict-_test_Rem_RoundDown_P4_P3 :: Dict (K.Rem 'K.RoundDown (P 4) (P 3) ~ P 1)-_test_Rem_RoundDown_P4_P3 =  Dict-_test_Div_RoundDown_P4_P4 :: Dict (K.Div 'K.RoundDown (P 4) (P 4) ~ P 1)-_test_Div_RoundDown_P4_P4 =  Dict-_test_Rem_RoundDown_P4_P4 :: Dict (K.Rem 'K.RoundDown (P 4) (P 4) ~ P 0)-_test_Rem_RoundDown_P4_P4 =  Dict-_test_Div_RoundHalfAway_N1_N1 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 1) ~ P 1)-_test_Div_RoundHalfAway_N1_N1 =  Dict-_test_Rem_RoundHalfAway_N1_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_N1_N1 =  Dict-_test_Div_RoundHalfAway_N1_N2 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 2) ~ P 1)-_test_Div_RoundHalfAway_N1_N2 =  Dict-_test_Rem_RoundHalfAway_N1_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 2) ~ P 1)-_test_Rem_RoundHalfAway_N1_N2 =  Dict-_test_Div_RoundHalfAway_N1_N3 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 3) ~ P 0)-_test_Div_RoundHalfAway_N1_N3 =  Dict-_test_Rem_RoundHalfAway_N1_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 3) ~ N 1)-_test_Rem_RoundHalfAway_N1_N3 =  Dict-_test_Div_RoundHalfAway_N1_N4 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 4) ~ P 0)-_test_Div_RoundHalfAway_N1_N4 =  Dict-_test_Rem_RoundHalfAway_N1_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 4) ~ N 1)-_test_Rem_RoundHalfAway_N1_N4 =  Dict-_test_Div_RoundHalfAway_N1_P1 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 1) ~ N 1)-_test_Div_RoundHalfAway_N1_P1 =  Dict-_test_Rem_RoundHalfAway_N1_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_N1_P1 =  Dict-_test_Div_RoundHalfAway_N1_P2 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 2) ~ N 1)-_test_Div_RoundHalfAway_N1_P2 =  Dict-_test_Rem_RoundHalfAway_N1_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 2) ~ P 1)-_test_Rem_RoundHalfAway_N1_P2 =  Dict-_test_Div_RoundHalfAway_N1_P3 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 3) ~ P 0)-_test_Div_RoundHalfAway_N1_P3 =  Dict-_test_Rem_RoundHalfAway_N1_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 3) ~ N 1)-_test_Rem_RoundHalfAway_N1_P3 =  Dict-_test_Div_RoundHalfAway_N1_P4 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 4) ~ P 0)-_test_Div_RoundHalfAway_N1_P4 =  Dict-_test_Rem_RoundHalfAway_N1_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 4) ~ N 1)-_test_Rem_RoundHalfAway_N1_P4 =  Dict-_test_Div_RoundHalfAway_N2_N1 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 1) ~ P 2)-_test_Div_RoundHalfAway_N2_N1 =  Dict-_test_Rem_RoundHalfAway_N2_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_N2_N1 =  Dict-_test_Div_RoundHalfAway_N2_N2 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 2) ~ P 1)-_test_Div_RoundHalfAway_N2_N2 =  Dict-_test_Rem_RoundHalfAway_N2_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 2) ~ P 0)-_test_Rem_RoundHalfAway_N2_N2 =  Dict-_test_Div_RoundHalfAway_N2_N3 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 3) ~ P 1)-_test_Div_RoundHalfAway_N2_N3 =  Dict-_test_Rem_RoundHalfAway_N2_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 3) ~ P 1)-_test_Rem_RoundHalfAway_N2_N3 =  Dict-_test_Div_RoundHalfAway_N2_N4 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 4) ~ P 1)-_test_Div_RoundHalfAway_N2_N4 =  Dict-_test_Rem_RoundHalfAway_N2_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 4) ~ P 2)-_test_Rem_RoundHalfAway_N2_N4 =  Dict-_test_Div_RoundHalfAway_N2_P1 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 1) ~ N 2)-_test_Div_RoundHalfAway_N2_P1 =  Dict-_test_Rem_RoundHalfAway_N2_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_N2_P1 =  Dict-_test_Div_RoundHalfAway_N2_P2 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 2) ~ N 1)-_test_Div_RoundHalfAway_N2_P2 =  Dict-_test_Rem_RoundHalfAway_N2_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 2) ~ P 0)-_test_Rem_RoundHalfAway_N2_P2 =  Dict-_test_Div_RoundHalfAway_N2_P3 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 3) ~ N 1)-_test_Div_RoundHalfAway_N2_P3 =  Dict-_test_Rem_RoundHalfAway_N2_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 3) ~ P 1)-_test_Rem_RoundHalfAway_N2_P3 =  Dict-_test_Div_RoundHalfAway_N2_P4 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 4) ~ N 1)-_test_Div_RoundHalfAway_N2_P4 =  Dict-_test_Rem_RoundHalfAway_N2_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 4) ~ P 2)-_test_Rem_RoundHalfAway_N2_P4 =  Dict-_test_Div_RoundHalfAway_N3_N1 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 1) ~ P 3)-_test_Div_RoundHalfAway_N3_N1 =  Dict-_test_Rem_RoundHalfAway_N3_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_N3_N1 =  Dict-_test_Div_RoundHalfAway_N3_N2 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 2) ~ P 2)-_test_Div_RoundHalfAway_N3_N2 =  Dict-_test_Rem_RoundHalfAway_N3_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 2) ~ P 1)-_test_Rem_RoundHalfAway_N3_N2 =  Dict-_test_Div_RoundHalfAway_N3_N3 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 3) ~ P 1)-_test_Div_RoundHalfAway_N3_N3 =  Dict-_test_Rem_RoundHalfAway_N3_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 3) ~ P 0)-_test_Rem_RoundHalfAway_N3_N3 =  Dict-_test_Div_RoundHalfAway_N3_N4 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 4) ~ P 1)-_test_Div_RoundHalfAway_N3_N4 =  Dict-_test_Rem_RoundHalfAway_N3_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 4) ~ P 1)-_test_Rem_RoundHalfAway_N3_N4 =  Dict-_test_Div_RoundHalfAway_N3_P1 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 1) ~ N 3)-_test_Div_RoundHalfAway_N3_P1 =  Dict-_test_Rem_RoundHalfAway_N3_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_N3_P1 =  Dict-_test_Div_RoundHalfAway_N3_P2 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 2) ~ N 2)-_test_Div_RoundHalfAway_N3_P2 =  Dict-_test_Rem_RoundHalfAway_N3_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 2) ~ P 1)-_test_Rem_RoundHalfAway_N3_P2 =  Dict-_test_Div_RoundHalfAway_N3_P3 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 3) ~ N 1)-_test_Div_RoundHalfAway_N3_P3 =  Dict-_test_Rem_RoundHalfAway_N3_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 3) ~ P 0)-_test_Rem_RoundHalfAway_N3_P3 =  Dict-_test_Div_RoundHalfAway_N3_P4 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 4) ~ N 1)-_test_Div_RoundHalfAway_N3_P4 =  Dict-_test_Rem_RoundHalfAway_N3_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 4) ~ P 1)-_test_Rem_RoundHalfAway_N3_P4 =  Dict-_test_Div_RoundHalfAway_N4_N1 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 1) ~ P 4)-_test_Div_RoundHalfAway_N4_N1 =  Dict-_test_Rem_RoundHalfAway_N4_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_N4_N1 =  Dict-_test_Div_RoundHalfAway_N4_N2 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 2) ~ P 2)-_test_Div_RoundHalfAway_N4_N2 =  Dict-_test_Rem_RoundHalfAway_N4_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 2) ~ P 0)-_test_Rem_RoundHalfAway_N4_N2 =  Dict-_test_Div_RoundHalfAway_N4_N3 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 3) ~ P 1)-_test_Div_RoundHalfAway_N4_N3 =  Dict-_test_Rem_RoundHalfAway_N4_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 3) ~ N 1)-_test_Rem_RoundHalfAway_N4_N3 =  Dict-_test_Div_RoundHalfAway_N4_N4 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 4) ~ P 1)-_test_Div_RoundHalfAway_N4_N4 =  Dict-_test_Rem_RoundHalfAway_N4_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 4) ~ P 0)-_test_Rem_RoundHalfAway_N4_N4 =  Dict-_test_Div_RoundHalfAway_N4_P1 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 1) ~ N 4)-_test_Div_RoundHalfAway_N4_P1 =  Dict-_test_Rem_RoundHalfAway_N4_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_N4_P1 =  Dict-_test_Div_RoundHalfAway_N4_P2 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 2) ~ N 2)-_test_Div_RoundHalfAway_N4_P2 =  Dict-_test_Rem_RoundHalfAway_N4_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 2) ~ P 0)-_test_Rem_RoundHalfAway_N4_P2 =  Dict-_test_Div_RoundHalfAway_N4_P3 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 3) ~ N 1)-_test_Div_RoundHalfAway_N4_P3 =  Dict-_test_Rem_RoundHalfAway_N4_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 3) ~ N 1)-_test_Rem_RoundHalfAway_N4_P3 =  Dict-_test_Div_RoundHalfAway_N4_P4 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 4) ~ N 1)-_test_Div_RoundHalfAway_N4_P4 =  Dict-_test_Rem_RoundHalfAway_N4_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 4) ~ P 0)-_test_Rem_RoundHalfAway_N4_P4 =  Dict-_test_Div_RoundHalfAway_P0_N1 :: Dict (K.Div 'K.RoundHalfAway (P 0) (N 1) ~ P 0)-_test_Div_RoundHalfAway_P0_N1 =  Dict-_test_Rem_RoundHalfAway_P0_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_P0_N1 =  Dict-_test_Div_RoundHalfAway_P0_N2 :: Dict (K.Div 'K.RoundHalfAway (P 0) (N 2) ~ P 0)-_test_Div_RoundHalfAway_P0_N2 =  Dict-_test_Rem_RoundHalfAway_P0_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (N 2) ~ P 0)-_test_Rem_RoundHalfAway_P0_N2 =  Dict-_test_Div_RoundHalfAway_P0_N3 :: Dict (K.Div 'K.RoundHalfAway (P 0) (N 3) ~ P 0)-_test_Div_RoundHalfAway_P0_N3 =  Dict-_test_Rem_RoundHalfAway_P0_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (N 3) ~ P 0)-_test_Rem_RoundHalfAway_P0_N3 =  Dict-_test_Div_RoundHalfAway_P0_N4 :: Dict (K.Div 'K.RoundHalfAway (P 0) (N 4) ~ P 0)-_test_Div_RoundHalfAway_P0_N4 =  Dict-_test_Rem_RoundHalfAway_P0_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (N 4) ~ P 0)-_test_Rem_RoundHalfAway_P0_N4 =  Dict-_test_Div_RoundHalfAway_P0_P1 :: Dict (K.Div 'K.RoundHalfAway (P 0) (P 1) ~ P 0)-_test_Div_RoundHalfAway_P0_P1 =  Dict-_test_Rem_RoundHalfAway_P0_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_P0_P1 =  Dict-_test_Div_RoundHalfAway_P0_P2 :: Dict (K.Div 'K.RoundHalfAway (P 0) (P 2) ~ P 0)-_test_Div_RoundHalfAway_P0_P2 =  Dict-_test_Rem_RoundHalfAway_P0_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (P 2) ~ P 0)-_test_Rem_RoundHalfAway_P0_P2 =  Dict-_test_Div_RoundHalfAway_P0_P3 :: Dict (K.Div 'K.RoundHalfAway (P 0) (P 3) ~ P 0)-_test_Div_RoundHalfAway_P0_P3 =  Dict-_test_Rem_RoundHalfAway_P0_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (P 3) ~ P 0)-_test_Rem_RoundHalfAway_P0_P3 =  Dict-_test_Div_RoundHalfAway_P0_P4 :: Dict (K.Div 'K.RoundHalfAway (P 0) (P 4) ~ P 0)-_test_Div_RoundHalfAway_P0_P4 =  Dict-_test_Rem_RoundHalfAway_P0_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 0) (P 4) ~ P 0)-_test_Rem_RoundHalfAway_P0_P4 =  Dict-_test_Div_RoundHalfAway_P1_N1 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 1) ~ N 1)-_test_Div_RoundHalfAway_P1_N1 =  Dict-_test_Rem_RoundHalfAway_P1_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_P1_N1 =  Dict-_test_Div_RoundHalfAway_P1_N2 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 2) ~ N 1)-_test_Div_RoundHalfAway_P1_N2 =  Dict-_test_Rem_RoundHalfAway_P1_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 2) ~ N 1)-_test_Rem_RoundHalfAway_P1_N2 =  Dict-_test_Div_RoundHalfAway_P1_N3 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 3) ~ P 0)-_test_Div_RoundHalfAway_P1_N3 =  Dict-_test_Rem_RoundHalfAway_P1_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 3) ~ P 1)-_test_Rem_RoundHalfAway_P1_N3 =  Dict-_test_Div_RoundHalfAway_P1_N4 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 4) ~ P 0)-_test_Div_RoundHalfAway_P1_N4 =  Dict-_test_Rem_RoundHalfAway_P1_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 4) ~ P 1)-_test_Rem_RoundHalfAway_P1_N4 =  Dict-_test_Div_RoundHalfAway_P1_P1 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 1) ~ P 1)-_test_Div_RoundHalfAway_P1_P1 =  Dict-_test_Rem_RoundHalfAway_P1_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_P1_P1 =  Dict-_test_Div_RoundHalfAway_P1_P2 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 2) ~ P 1)-_test_Div_RoundHalfAway_P1_P2 =  Dict-_test_Rem_RoundHalfAway_P1_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 2) ~ N 1)-_test_Rem_RoundHalfAway_P1_P2 =  Dict-_test_Div_RoundHalfAway_P1_P3 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 3) ~ P 0)-_test_Div_RoundHalfAway_P1_P3 =  Dict-_test_Rem_RoundHalfAway_P1_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 3) ~ P 1)-_test_Rem_RoundHalfAway_P1_P3 =  Dict-_test_Div_RoundHalfAway_P1_P4 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 4) ~ P 0)-_test_Div_RoundHalfAway_P1_P4 =  Dict-_test_Rem_RoundHalfAway_P1_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 4) ~ P 1)-_test_Rem_RoundHalfAway_P1_P4 =  Dict-_test_Div_RoundHalfAway_P2_N1 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 1) ~ N 2)-_test_Div_RoundHalfAway_P2_N1 =  Dict-_test_Rem_RoundHalfAway_P2_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_P2_N1 =  Dict-_test_Div_RoundHalfAway_P2_N2 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 2) ~ N 1)-_test_Div_RoundHalfAway_P2_N2 =  Dict-_test_Rem_RoundHalfAway_P2_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 2) ~ P 0)-_test_Rem_RoundHalfAway_P2_N2 =  Dict-_test_Div_RoundHalfAway_P2_N3 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 3) ~ N 1)-_test_Div_RoundHalfAway_P2_N3 =  Dict-_test_Rem_RoundHalfAway_P2_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 3) ~ N 1)-_test_Rem_RoundHalfAway_P2_N3 =  Dict-_test_Div_RoundHalfAway_P2_N4 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 4) ~ N 1)-_test_Div_RoundHalfAway_P2_N4 =  Dict-_test_Rem_RoundHalfAway_P2_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 4) ~ N 2)-_test_Rem_RoundHalfAway_P2_N4 =  Dict-_test_Div_RoundHalfAway_P2_P1 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 1) ~ P 2)-_test_Div_RoundHalfAway_P2_P1 =  Dict-_test_Rem_RoundHalfAway_P2_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_P2_P1 =  Dict-_test_Div_RoundHalfAway_P2_P2 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 2) ~ P 1)-_test_Div_RoundHalfAway_P2_P2 =  Dict-_test_Rem_RoundHalfAway_P2_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 2) ~ P 0)-_test_Rem_RoundHalfAway_P2_P2 =  Dict-_test_Div_RoundHalfAway_P2_P3 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 3) ~ P 1)-_test_Div_RoundHalfAway_P2_P3 =  Dict-_test_Rem_RoundHalfAway_P2_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 3) ~ N 1)-_test_Rem_RoundHalfAway_P2_P3 =  Dict-_test_Div_RoundHalfAway_P2_P4 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 4) ~ P 1)-_test_Div_RoundHalfAway_P2_P4 =  Dict-_test_Rem_RoundHalfAway_P2_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 4) ~ N 2)-_test_Rem_RoundHalfAway_P2_P4 =  Dict-_test_Div_RoundHalfAway_P3_N1 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 1) ~ N 3)-_test_Div_RoundHalfAway_P3_N1 =  Dict-_test_Rem_RoundHalfAway_P3_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_P3_N1 =  Dict-_test_Div_RoundHalfAway_P3_N2 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 2) ~ N 2)-_test_Div_RoundHalfAway_P3_N2 =  Dict-_test_Rem_RoundHalfAway_P3_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 2) ~ N 1)-_test_Rem_RoundHalfAway_P3_N2 =  Dict-_test_Div_RoundHalfAway_P3_N3 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 3) ~ N 1)-_test_Div_RoundHalfAway_P3_N3 =  Dict-_test_Rem_RoundHalfAway_P3_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 3) ~ P 0)-_test_Rem_RoundHalfAway_P3_N3 =  Dict-_test_Div_RoundHalfAway_P3_N4 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 4) ~ N 1)-_test_Div_RoundHalfAway_P3_N4 =  Dict-_test_Rem_RoundHalfAway_P3_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 4) ~ N 1)-_test_Rem_RoundHalfAway_P3_N4 =  Dict-_test_Div_RoundHalfAway_P3_P1 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 1) ~ P 3)-_test_Div_RoundHalfAway_P3_P1 =  Dict-_test_Rem_RoundHalfAway_P3_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_P3_P1 =  Dict-_test_Div_RoundHalfAway_P3_P2 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 2) ~ P 2)-_test_Div_RoundHalfAway_P3_P2 =  Dict-_test_Rem_RoundHalfAway_P3_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 2) ~ N 1)-_test_Rem_RoundHalfAway_P3_P2 =  Dict-_test_Div_RoundHalfAway_P3_P3 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 3) ~ P 1)-_test_Div_RoundHalfAway_P3_P3 =  Dict-_test_Rem_RoundHalfAway_P3_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 3) ~ P 0)-_test_Rem_RoundHalfAway_P3_P3 =  Dict-_test_Div_RoundHalfAway_P3_P4 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 4) ~ P 1)-_test_Div_RoundHalfAway_P3_P4 =  Dict-_test_Rem_RoundHalfAway_P3_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 4) ~ N 1)-_test_Rem_RoundHalfAway_P3_P4 =  Dict-_test_Div_RoundHalfAway_P4_N1 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 1) ~ N 4)-_test_Div_RoundHalfAway_P4_N1 =  Dict-_test_Rem_RoundHalfAway_P4_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 1) ~ P 0)-_test_Rem_RoundHalfAway_P4_N1 =  Dict-_test_Div_RoundHalfAway_P4_N2 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 2) ~ N 2)-_test_Div_RoundHalfAway_P4_N2 =  Dict-_test_Rem_RoundHalfAway_P4_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 2) ~ P 0)-_test_Rem_RoundHalfAway_P4_N2 =  Dict-_test_Div_RoundHalfAway_P4_N3 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 3) ~ N 1)-_test_Div_RoundHalfAway_P4_N3 =  Dict-_test_Rem_RoundHalfAway_P4_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 3) ~ P 1)-_test_Rem_RoundHalfAway_P4_N3 =  Dict-_test_Div_RoundHalfAway_P4_N4 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 4) ~ N 1)-_test_Div_RoundHalfAway_P4_N4 =  Dict-_test_Rem_RoundHalfAway_P4_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 4) ~ P 0)-_test_Rem_RoundHalfAway_P4_N4 =  Dict-_test_Div_RoundHalfAway_P4_P1 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 1) ~ P 4)-_test_Div_RoundHalfAway_P4_P1 =  Dict-_test_Rem_RoundHalfAway_P4_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 1) ~ P 0)-_test_Rem_RoundHalfAway_P4_P1 =  Dict-_test_Div_RoundHalfAway_P4_P2 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 2) ~ P 2)-_test_Div_RoundHalfAway_P4_P2 =  Dict-_test_Rem_RoundHalfAway_P4_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 2) ~ P 0)-_test_Rem_RoundHalfAway_P4_P2 =  Dict-_test_Div_RoundHalfAway_P4_P3 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 3) ~ P 1)-_test_Div_RoundHalfAway_P4_P3 =  Dict-_test_Rem_RoundHalfAway_P4_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 3) ~ P 1)-_test_Rem_RoundHalfAway_P4_P3 =  Dict-_test_Div_RoundHalfAway_P4_P4 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 4) ~ P 1)-_test_Div_RoundHalfAway_P4_P4 =  Dict-_test_Rem_RoundHalfAway_P4_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 4) ~ P 0)-_test_Rem_RoundHalfAway_P4_P4 =  Dict-_test_Div_RoundHalfDown_N1_N1 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 1) ~ P 1)-_test_Div_RoundHalfDown_N1_N1 =  Dict-_test_Rem_RoundHalfDown_N1_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_N1_N1 =  Dict-_test_Div_RoundHalfDown_N1_N2 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 2) ~ P 0)-_test_Div_RoundHalfDown_N1_N2 =  Dict-_test_Rem_RoundHalfDown_N1_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 2) ~ N 1)-_test_Rem_RoundHalfDown_N1_N2 =  Dict-_test_Div_RoundHalfDown_N1_N3 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 3) ~ P 0)-_test_Div_RoundHalfDown_N1_N3 =  Dict-_test_Rem_RoundHalfDown_N1_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 3) ~ N 1)-_test_Rem_RoundHalfDown_N1_N3 =  Dict-_test_Div_RoundHalfDown_N1_N4 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 4) ~ P 0)-_test_Div_RoundHalfDown_N1_N4 =  Dict-_test_Rem_RoundHalfDown_N1_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 4) ~ N 1)-_test_Rem_RoundHalfDown_N1_N4 =  Dict-_test_Div_RoundHalfDown_N1_P1 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 1) ~ N 1)-_test_Div_RoundHalfDown_N1_P1 =  Dict-_test_Rem_RoundHalfDown_N1_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_N1_P1 =  Dict-_test_Div_RoundHalfDown_N1_P2 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 2) ~ N 1)-_test_Div_RoundHalfDown_N1_P2 =  Dict-_test_Rem_RoundHalfDown_N1_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 2) ~ P 1)-_test_Rem_RoundHalfDown_N1_P2 =  Dict-_test_Div_RoundHalfDown_N1_P3 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 3) ~ P 0)-_test_Div_RoundHalfDown_N1_P3 =  Dict-_test_Rem_RoundHalfDown_N1_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 3) ~ N 1)-_test_Rem_RoundHalfDown_N1_P3 =  Dict-_test_Div_RoundHalfDown_N1_P4 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 4) ~ P 0)-_test_Div_RoundHalfDown_N1_P4 =  Dict-_test_Rem_RoundHalfDown_N1_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 4) ~ N 1)-_test_Rem_RoundHalfDown_N1_P4 =  Dict-_test_Div_RoundHalfDown_N2_N1 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 1) ~ P 2)-_test_Div_RoundHalfDown_N2_N1 =  Dict-_test_Rem_RoundHalfDown_N2_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_N2_N1 =  Dict-_test_Div_RoundHalfDown_N2_N2 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 2) ~ P 1)-_test_Div_RoundHalfDown_N2_N2 =  Dict-_test_Rem_RoundHalfDown_N2_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 2) ~ P 0)-_test_Rem_RoundHalfDown_N2_N2 =  Dict-_test_Div_RoundHalfDown_N2_N3 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 3) ~ P 1)-_test_Div_RoundHalfDown_N2_N3 =  Dict-_test_Rem_RoundHalfDown_N2_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 3) ~ P 1)-_test_Rem_RoundHalfDown_N2_N3 =  Dict-_test_Div_RoundHalfDown_N2_N4 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 4) ~ P 0)-_test_Div_RoundHalfDown_N2_N4 =  Dict-_test_Rem_RoundHalfDown_N2_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 4) ~ N 2)-_test_Rem_RoundHalfDown_N2_N4 =  Dict-_test_Div_RoundHalfDown_N2_P1 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 1) ~ N 2)-_test_Div_RoundHalfDown_N2_P1 =  Dict-_test_Rem_RoundHalfDown_N2_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_N2_P1 =  Dict-_test_Div_RoundHalfDown_N2_P2 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 2) ~ N 1)-_test_Div_RoundHalfDown_N2_P2 =  Dict-_test_Rem_RoundHalfDown_N2_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 2) ~ P 0)-_test_Rem_RoundHalfDown_N2_P2 =  Dict-_test_Div_RoundHalfDown_N2_P3 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 3) ~ N 1)-_test_Div_RoundHalfDown_N2_P3 =  Dict-_test_Rem_RoundHalfDown_N2_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 3) ~ P 1)-_test_Rem_RoundHalfDown_N2_P3 =  Dict-_test_Div_RoundHalfDown_N2_P4 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 4) ~ N 1)-_test_Div_RoundHalfDown_N2_P4 =  Dict-_test_Rem_RoundHalfDown_N2_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 4) ~ P 2)-_test_Rem_RoundHalfDown_N2_P4 =  Dict-_test_Div_RoundHalfDown_N3_N1 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 1) ~ P 3)-_test_Div_RoundHalfDown_N3_N1 =  Dict-_test_Rem_RoundHalfDown_N3_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_N3_N1 =  Dict-_test_Div_RoundHalfDown_N3_N2 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 2) ~ P 1)-_test_Div_RoundHalfDown_N3_N2 =  Dict-_test_Rem_RoundHalfDown_N3_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 2) ~ N 1)-_test_Rem_RoundHalfDown_N3_N2 =  Dict-_test_Div_RoundHalfDown_N3_N3 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 3) ~ P 1)-_test_Div_RoundHalfDown_N3_N3 =  Dict-_test_Rem_RoundHalfDown_N3_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 3) ~ P 0)-_test_Rem_RoundHalfDown_N3_N3 =  Dict-_test_Div_RoundHalfDown_N3_N4 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 4) ~ P 1)-_test_Div_RoundHalfDown_N3_N4 =  Dict-_test_Rem_RoundHalfDown_N3_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 4) ~ P 1)-_test_Rem_RoundHalfDown_N3_N4 =  Dict-_test_Div_RoundHalfDown_N3_P1 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 1) ~ N 3)-_test_Div_RoundHalfDown_N3_P1 =  Dict-_test_Rem_RoundHalfDown_N3_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_N3_P1 =  Dict-_test_Div_RoundHalfDown_N3_P2 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 2) ~ N 2)-_test_Div_RoundHalfDown_N3_P2 =  Dict-_test_Rem_RoundHalfDown_N3_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 2) ~ P 1)-_test_Rem_RoundHalfDown_N3_P2 =  Dict-_test_Div_RoundHalfDown_N3_P3 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 3) ~ N 1)-_test_Div_RoundHalfDown_N3_P3 =  Dict-_test_Rem_RoundHalfDown_N3_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 3) ~ P 0)-_test_Rem_RoundHalfDown_N3_P3 =  Dict-_test_Div_RoundHalfDown_N3_P4 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 4) ~ N 1)-_test_Div_RoundHalfDown_N3_P4 =  Dict-_test_Rem_RoundHalfDown_N3_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 4) ~ P 1)-_test_Rem_RoundHalfDown_N3_P4 =  Dict-_test_Div_RoundHalfDown_N4_N1 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 1) ~ P 4)-_test_Div_RoundHalfDown_N4_N1 =  Dict-_test_Rem_RoundHalfDown_N4_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_N4_N1 =  Dict-_test_Div_RoundHalfDown_N4_N2 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 2) ~ P 2)-_test_Div_RoundHalfDown_N4_N2 =  Dict-_test_Rem_RoundHalfDown_N4_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 2) ~ P 0)-_test_Rem_RoundHalfDown_N4_N2 =  Dict-_test_Div_RoundHalfDown_N4_N3 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 3) ~ P 1)-_test_Div_RoundHalfDown_N4_N3 =  Dict-_test_Rem_RoundHalfDown_N4_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 3) ~ N 1)-_test_Rem_RoundHalfDown_N4_N3 =  Dict-_test_Div_RoundHalfDown_N4_N4 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 4) ~ P 1)-_test_Div_RoundHalfDown_N4_N4 =  Dict-_test_Rem_RoundHalfDown_N4_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 4) ~ P 0)-_test_Rem_RoundHalfDown_N4_N4 =  Dict-_test_Div_RoundHalfDown_N4_P1 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 1) ~ N 4)-_test_Div_RoundHalfDown_N4_P1 =  Dict-_test_Rem_RoundHalfDown_N4_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_N4_P1 =  Dict-_test_Div_RoundHalfDown_N4_P2 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 2) ~ N 2)-_test_Div_RoundHalfDown_N4_P2 =  Dict-_test_Rem_RoundHalfDown_N4_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 2) ~ P 0)-_test_Rem_RoundHalfDown_N4_P2 =  Dict-_test_Div_RoundHalfDown_N4_P3 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 3) ~ N 1)-_test_Div_RoundHalfDown_N4_P3 =  Dict-_test_Rem_RoundHalfDown_N4_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 3) ~ N 1)-_test_Rem_RoundHalfDown_N4_P3 =  Dict-_test_Div_RoundHalfDown_N4_P4 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 4) ~ N 1)-_test_Div_RoundHalfDown_N4_P4 =  Dict-_test_Rem_RoundHalfDown_N4_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 4) ~ P 0)-_test_Rem_RoundHalfDown_N4_P4 =  Dict-_test_Div_RoundHalfDown_P0_N1 :: Dict (K.Div 'K.RoundHalfDown (P 0) (N 1) ~ P 0)-_test_Div_RoundHalfDown_P0_N1 =  Dict-_test_Rem_RoundHalfDown_P0_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_P0_N1 =  Dict-_test_Div_RoundHalfDown_P0_N2 :: Dict (K.Div 'K.RoundHalfDown (P 0) (N 2) ~ P 0)-_test_Div_RoundHalfDown_P0_N2 =  Dict-_test_Rem_RoundHalfDown_P0_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (N 2) ~ P 0)-_test_Rem_RoundHalfDown_P0_N2 =  Dict-_test_Div_RoundHalfDown_P0_N3 :: Dict (K.Div 'K.RoundHalfDown (P 0) (N 3) ~ P 0)-_test_Div_RoundHalfDown_P0_N3 =  Dict-_test_Rem_RoundHalfDown_P0_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (N 3) ~ P 0)-_test_Rem_RoundHalfDown_P0_N3 =  Dict-_test_Div_RoundHalfDown_P0_N4 :: Dict (K.Div 'K.RoundHalfDown (P 0) (N 4) ~ P 0)-_test_Div_RoundHalfDown_P0_N4 =  Dict-_test_Rem_RoundHalfDown_P0_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (N 4) ~ P 0)-_test_Rem_RoundHalfDown_P0_N4 =  Dict-_test_Div_RoundHalfDown_P0_P1 :: Dict (K.Div 'K.RoundHalfDown (P 0) (P 1) ~ P 0)-_test_Div_RoundHalfDown_P0_P1 =  Dict-_test_Rem_RoundHalfDown_P0_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_P0_P1 =  Dict-_test_Div_RoundHalfDown_P0_P2 :: Dict (K.Div 'K.RoundHalfDown (P 0) (P 2) ~ P 0)-_test_Div_RoundHalfDown_P0_P2 =  Dict-_test_Rem_RoundHalfDown_P0_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (P 2) ~ P 0)-_test_Rem_RoundHalfDown_P0_P2 =  Dict-_test_Div_RoundHalfDown_P0_P3 :: Dict (K.Div 'K.RoundHalfDown (P 0) (P 3) ~ P 0)-_test_Div_RoundHalfDown_P0_P3 =  Dict-_test_Rem_RoundHalfDown_P0_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (P 3) ~ P 0)-_test_Rem_RoundHalfDown_P0_P3 =  Dict-_test_Div_RoundHalfDown_P0_P4 :: Dict (K.Div 'K.RoundHalfDown (P 0) (P 4) ~ P 0)-_test_Div_RoundHalfDown_P0_P4 =  Dict-_test_Rem_RoundHalfDown_P0_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 0) (P 4) ~ P 0)-_test_Rem_RoundHalfDown_P0_P4 =  Dict-_test_Div_RoundHalfDown_P1_N1 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 1) ~ N 1)-_test_Div_RoundHalfDown_P1_N1 =  Dict-_test_Rem_RoundHalfDown_P1_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_P1_N1 =  Dict-_test_Div_RoundHalfDown_P1_N2 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 2) ~ N 1)-_test_Div_RoundHalfDown_P1_N2 =  Dict-_test_Rem_RoundHalfDown_P1_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 2) ~ N 1)-_test_Rem_RoundHalfDown_P1_N2 =  Dict-_test_Div_RoundHalfDown_P1_N3 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 3) ~ P 0)-_test_Div_RoundHalfDown_P1_N3 =  Dict-_test_Rem_RoundHalfDown_P1_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 3) ~ P 1)-_test_Rem_RoundHalfDown_P1_N3 =  Dict-_test_Div_RoundHalfDown_P1_N4 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 4) ~ P 0)-_test_Div_RoundHalfDown_P1_N4 =  Dict-_test_Rem_RoundHalfDown_P1_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 4) ~ P 1)-_test_Rem_RoundHalfDown_P1_N4 =  Dict-_test_Div_RoundHalfDown_P1_P1 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 1) ~ P 1)-_test_Div_RoundHalfDown_P1_P1 =  Dict-_test_Rem_RoundHalfDown_P1_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_P1_P1 =  Dict-_test_Div_RoundHalfDown_P1_P2 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 2) ~ P 0)-_test_Div_RoundHalfDown_P1_P2 =  Dict-_test_Rem_RoundHalfDown_P1_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 2) ~ P 1)-_test_Rem_RoundHalfDown_P1_P2 =  Dict-_test_Div_RoundHalfDown_P1_P3 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 3) ~ P 0)-_test_Div_RoundHalfDown_P1_P3 =  Dict-_test_Rem_RoundHalfDown_P1_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 3) ~ P 1)-_test_Rem_RoundHalfDown_P1_P3 =  Dict-_test_Div_RoundHalfDown_P1_P4 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 4) ~ P 0)-_test_Div_RoundHalfDown_P1_P4 =  Dict-_test_Rem_RoundHalfDown_P1_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 4) ~ P 1)-_test_Rem_RoundHalfDown_P1_P4 =  Dict-_test_Div_RoundHalfDown_P2_N1 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 1) ~ N 2)-_test_Div_RoundHalfDown_P2_N1 =  Dict-_test_Rem_RoundHalfDown_P2_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_P2_N1 =  Dict-_test_Div_RoundHalfDown_P2_N2 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 2) ~ N 1)-_test_Div_RoundHalfDown_P2_N2 =  Dict-_test_Rem_RoundHalfDown_P2_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 2) ~ P 0)-_test_Rem_RoundHalfDown_P2_N2 =  Dict-_test_Div_RoundHalfDown_P2_N3 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 3) ~ N 1)-_test_Div_RoundHalfDown_P2_N3 =  Dict-_test_Rem_RoundHalfDown_P2_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 3) ~ N 1)-_test_Rem_RoundHalfDown_P2_N3 =  Dict-_test_Div_RoundHalfDown_P2_N4 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 4) ~ N 1)-_test_Div_RoundHalfDown_P2_N4 =  Dict-_test_Rem_RoundHalfDown_P2_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 4) ~ N 2)-_test_Rem_RoundHalfDown_P2_N4 =  Dict-_test_Div_RoundHalfDown_P2_P1 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 1) ~ P 2)-_test_Div_RoundHalfDown_P2_P1 =  Dict-_test_Rem_RoundHalfDown_P2_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_P2_P1 =  Dict-_test_Div_RoundHalfDown_P2_P2 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 2) ~ P 1)-_test_Div_RoundHalfDown_P2_P2 =  Dict-_test_Rem_RoundHalfDown_P2_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 2) ~ P 0)-_test_Rem_RoundHalfDown_P2_P2 =  Dict-_test_Div_RoundHalfDown_P2_P3 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 3) ~ P 1)-_test_Div_RoundHalfDown_P2_P3 =  Dict-_test_Rem_RoundHalfDown_P2_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 3) ~ N 1)-_test_Rem_RoundHalfDown_P2_P3 =  Dict-_test_Div_RoundHalfDown_P2_P4 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 4) ~ P 0)-_test_Div_RoundHalfDown_P2_P4 =  Dict-_test_Rem_RoundHalfDown_P2_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 4) ~ P 2)-_test_Rem_RoundHalfDown_P2_P4 =  Dict-_test_Div_RoundHalfDown_P3_N1 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 1) ~ N 3)-_test_Div_RoundHalfDown_P3_N1 =  Dict-_test_Rem_RoundHalfDown_P3_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_P3_N1 =  Dict-_test_Div_RoundHalfDown_P3_N2 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 2) ~ N 2)-_test_Div_RoundHalfDown_P3_N2 =  Dict-_test_Rem_RoundHalfDown_P3_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 2) ~ N 1)-_test_Rem_RoundHalfDown_P3_N2 =  Dict-_test_Div_RoundHalfDown_P3_N3 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 3) ~ N 1)-_test_Div_RoundHalfDown_P3_N3 =  Dict-_test_Rem_RoundHalfDown_P3_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 3) ~ P 0)-_test_Rem_RoundHalfDown_P3_N3 =  Dict-_test_Div_RoundHalfDown_P3_N4 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 4) ~ N 1)-_test_Div_RoundHalfDown_P3_N4 =  Dict-_test_Rem_RoundHalfDown_P3_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 4) ~ N 1)-_test_Rem_RoundHalfDown_P3_N4 =  Dict-_test_Div_RoundHalfDown_P3_P1 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 1) ~ P 3)-_test_Div_RoundHalfDown_P3_P1 =  Dict-_test_Rem_RoundHalfDown_P3_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_P3_P1 =  Dict-_test_Div_RoundHalfDown_P3_P2 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 2) ~ P 1)-_test_Div_RoundHalfDown_P3_P2 =  Dict-_test_Rem_RoundHalfDown_P3_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 2) ~ P 1)-_test_Rem_RoundHalfDown_P3_P2 =  Dict-_test_Div_RoundHalfDown_P3_P3 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 3) ~ P 1)-_test_Div_RoundHalfDown_P3_P3 =  Dict-_test_Rem_RoundHalfDown_P3_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 3) ~ P 0)-_test_Rem_RoundHalfDown_P3_P3 =  Dict-_test_Div_RoundHalfDown_P3_P4 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 4) ~ P 1)-_test_Div_RoundHalfDown_P3_P4 =  Dict-_test_Rem_RoundHalfDown_P3_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 4) ~ N 1)-_test_Rem_RoundHalfDown_P3_P4 =  Dict-_test_Div_RoundHalfDown_P4_N1 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 1) ~ N 4)-_test_Div_RoundHalfDown_P4_N1 =  Dict-_test_Rem_RoundHalfDown_P4_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 1) ~ P 0)-_test_Rem_RoundHalfDown_P4_N1 =  Dict-_test_Div_RoundHalfDown_P4_N2 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 2) ~ N 2)-_test_Div_RoundHalfDown_P4_N2 =  Dict-_test_Rem_RoundHalfDown_P4_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 2) ~ P 0)-_test_Rem_RoundHalfDown_P4_N2 =  Dict-_test_Div_RoundHalfDown_P4_N3 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 3) ~ N 1)-_test_Div_RoundHalfDown_P4_N3 =  Dict-_test_Rem_RoundHalfDown_P4_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 3) ~ P 1)-_test_Rem_RoundHalfDown_P4_N3 =  Dict-_test_Div_RoundHalfDown_P4_N4 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 4) ~ N 1)-_test_Div_RoundHalfDown_P4_N4 =  Dict-_test_Rem_RoundHalfDown_P4_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 4) ~ P 0)-_test_Rem_RoundHalfDown_P4_N4 =  Dict-_test_Div_RoundHalfDown_P4_P1 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 1) ~ P 4)-_test_Div_RoundHalfDown_P4_P1 =  Dict-_test_Rem_RoundHalfDown_P4_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 1) ~ P 0)-_test_Rem_RoundHalfDown_P4_P1 =  Dict-_test_Div_RoundHalfDown_P4_P2 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 2) ~ P 2)-_test_Div_RoundHalfDown_P4_P2 =  Dict-_test_Rem_RoundHalfDown_P4_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 2) ~ P 0)-_test_Rem_RoundHalfDown_P4_P2 =  Dict-_test_Div_RoundHalfDown_P4_P3 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 3) ~ P 1)-_test_Div_RoundHalfDown_P4_P3 =  Dict-_test_Rem_RoundHalfDown_P4_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 3) ~ P 1)-_test_Rem_RoundHalfDown_P4_P3 =  Dict-_test_Div_RoundHalfDown_P4_P4 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 4) ~ P 1)-_test_Div_RoundHalfDown_P4_P4 =  Dict-_test_Rem_RoundHalfDown_P4_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 4) ~ P 0)-_test_Rem_RoundHalfDown_P4_P4 =  Dict-_test_Div_RoundHalfEven_N1_N1 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 1) ~ P 1)-_test_Div_RoundHalfEven_N1_N1 =  Dict-_test_Rem_RoundHalfEven_N1_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_N1_N1 =  Dict-_test_Div_RoundHalfEven_N1_N2 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 2) ~ P 0)-_test_Div_RoundHalfEven_N1_N2 =  Dict-_test_Rem_RoundHalfEven_N1_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 2) ~ N 1)-_test_Rem_RoundHalfEven_N1_N2 =  Dict-_test_Div_RoundHalfEven_N1_N3 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 3) ~ P 0)-_test_Div_RoundHalfEven_N1_N3 =  Dict-_test_Rem_RoundHalfEven_N1_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 3) ~ N 1)-_test_Rem_RoundHalfEven_N1_N3 =  Dict-_test_Div_RoundHalfEven_N1_N4 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 4) ~ P 0)-_test_Div_RoundHalfEven_N1_N4 =  Dict-_test_Rem_RoundHalfEven_N1_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 4) ~ N 1)-_test_Rem_RoundHalfEven_N1_N4 =  Dict-_test_Div_RoundHalfEven_N1_P1 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 1) ~ N 1)-_test_Div_RoundHalfEven_N1_P1 =  Dict-_test_Rem_RoundHalfEven_N1_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_N1_P1 =  Dict-_test_Div_RoundHalfEven_N1_P2 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 2) ~ P 0)-_test_Div_RoundHalfEven_N1_P2 =  Dict-_test_Rem_RoundHalfEven_N1_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 2) ~ N 1)-_test_Rem_RoundHalfEven_N1_P2 =  Dict-_test_Div_RoundHalfEven_N1_P3 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 3) ~ P 0)-_test_Div_RoundHalfEven_N1_P3 =  Dict-_test_Rem_RoundHalfEven_N1_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 3) ~ N 1)-_test_Rem_RoundHalfEven_N1_P3 =  Dict-_test_Div_RoundHalfEven_N1_P4 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 4) ~ P 0)-_test_Div_RoundHalfEven_N1_P4 =  Dict-_test_Rem_RoundHalfEven_N1_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 4) ~ N 1)-_test_Rem_RoundHalfEven_N1_P4 =  Dict-_test_Div_RoundHalfEven_N2_N1 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 1) ~ P 2)-_test_Div_RoundHalfEven_N2_N1 =  Dict-_test_Rem_RoundHalfEven_N2_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_N2_N1 =  Dict-_test_Div_RoundHalfEven_N2_N2 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 2) ~ P 1)-_test_Div_RoundHalfEven_N2_N2 =  Dict-_test_Rem_RoundHalfEven_N2_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 2) ~ P 0)-_test_Rem_RoundHalfEven_N2_N2 =  Dict-_test_Div_RoundHalfEven_N2_N3 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 3) ~ P 1)-_test_Div_RoundHalfEven_N2_N3 =  Dict-_test_Rem_RoundHalfEven_N2_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 3) ~ P 1)-_test_Rem_RoundHalfEven_N2_N3 =  Dict-_test_Div_RoundHalfEven_N2_N4 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 4) ~ P 0)-_test_Div_RoundHalfEven_N2_N4 =  Dict-_test_Rem_RoundHalfEven_N2_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 4) ~ N 2)-_test_Rem_RoundHalfEven_N2_N4 =  Dict-_test_Div_RoundHalfEven_N2_P1 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 1) ~ N 2)-_test_Div_RoundHalfEven_N2_P1 =  Dict-_test_Rem_RoundHalfEven_N2_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_N2_P1 =  Dict-_test_Div_RoundHalfEven_N2_P2 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 2) ~ N 1)-_test_Div_RoundHalfEven_N2_P2 =  Dict-_test_Rem_RoundHalfEven_N2_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 2) ~ P 0)-_test_Rem_RoundHalfEven_N2_P2 =  Dict-_test_Div_RoundHalfEven_N2_P3 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 3) ~ N 1)-_test_Div_RoundHalfEven_N2_P3 =  Dict-_test_Rem_RoundHalfEven_N2_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 3) ~ P 1)-_test_Rem_RoundHalfEven_N2_P3 =  Dict-_test_Div_RoundHalfEven_N2_P4 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 4) ~ P 0)-_test_Div_RoundHalfEven_N2_P4 =  Dict-_test_Rem_RoundHalfEven_N2_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 4) ~ N 2)-_test_Rem_RoundHalfEven_N2_P4 =  Dict-_test_Div_RoundHalfEven_N3_N1 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 1) ~ P 3)-_test_Div_RoundHalfEven_N3_N1 =  Dict-_test_Rem_RoundHalfEven_N3_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_N3_N1 =  Dict-_test_Div_RoundHalfEven_N3_N2 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 2) ~ P 2)-_test_Div_RoundHalfEven_N3_N2 =  Dict-_test_Rem_RoundHalfEven_N3_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 2) ~ P 1)-_test_Rem_RoundHalfEven_N3_N2 =  Dict-_test_Div_RoundHalfEven_N3_N3 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 3) ~ P 1)-_test_Div_RoundHalfEven_N3_N3 =  Dict-_test_Rem_RoundHalfEven_N3_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 3) ~ P 0)-_test_Rem_RoundHalfEven_N3_N3 =  Dict-_test_Div_RoundHalfEven_N3_N4 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 4) ~ P 1)-_test_Div_RoundHalfEven_N3_N4 =  Dict-_test_Rem_RoundHalfEven_N3_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 4) ~ P 1)-_test_Rem_RoundHalfEven_N3_N4 =  Dict-_test_Div_RoundHalfEven_N3_P1 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 1) ~ N 3)-_test_Div_RoundHalfEven_N3_P1 =  Dict-_test_Rem_RoundHalfEven_N3_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_N3_P1 =  Dict-_test_Div_RoundHalfEven_N3_P2 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 2) ~ N 2)-_test_Div_RoundHalfEven_N3_P2 =  Dict-_test_Rem_RoundHalfEven_N3_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 2) ~ P 1)-_test_Rem_RoundHalfEven_N3_P2 =  Dict-_test_Div_RoundHalfEven_N3_P3 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 3) ~ N 1)-_test_Div_RoundHalfEven_N3_P3 =  Dict-_test_Rem_RoundHalfEven_N3_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 3) ~ P 0)-_test_Rem_RoundHalfEven_N3_P3 =  Dict-_test_Div_RoundHalfEven_N3_P4 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 4) ~ N 1)-_test_Div_RoundHalfEven_N3_P4 =  Dict-_test_Rem_RoundHalfEven_N3_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 4) ~ P 1)-_test_Rem_RoundHalfEven_N3_P4 =  Dict-_test_Div_RoundHalfEven_N4_N1 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 1) ~ P 4)-_test_Div_RoundHalfEven_N4_N1 =  Dict-_test_Rem_RoundHalfEven_N4_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_N4_N1 =  Dict-_test_Div_RoundHalfEven_N4_N2 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 2) ~ P 2)-_test_Div_RoundHalfEven_N4_N2 =  Dict-_test_Rem_RoundHalfEven_N4_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 2) ~ P 0)-_test_Rem_RoundHalfEven_N4_N2 =  Dict-_test_Div_RoundHalfEven_N4_N3 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 3) ~ P 1)-_test_Div_RoundHalfEven_N4_N3 =  Dict-_test_Rem_RoundHalfEven_N4_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 3) ~ N 1)-_test_Rem_RoundHalfEven_N4_N3 =  Dict-_test_Div_RoundHalfEven_N4_N4 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 4) ~ P 1)-_test_Div_RoundHalfEven_N4_N4 =  Dict-_test_Rem_RoundHalfEven_N4_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 4) ~ P 0)-_test_Rem_RoundHalfEven_N4_N4 =  Dict-_test_Div_RoundHalfEven_N4_P1 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 1) ~ N 4)-_test_Div_RoundHalfEven_N4_P1 =  Dict-_test_Rem_RoundHalfEven_N4_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_N4_P1 =  Dict-_test_Div_RoundHalfEven_N4_P2 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 2) ~ N 2)-_test_Div_RoundHalfEven_N4_P2 =  Dict-_test_Rem_RoundHalfEven_N4_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 2) ~ P 0)-_test_Rem_RoundHalfEven_N4_P2 =  Dict-_test_Div_RoundHalfEven_N4_P3 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 3) ~ N 1)-_test_Div_RoundHalfEven_N4_P3 =  Dict-_test_Rem_RoundHalfEven_N4_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 3) ~ N 1)-_test_Rem_RoundHalfEven_N4_P3 =  Dict-_test_Div_RoundHalfEven_N4_P4 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 4) ~ N 1)-_test_Div_RoundHalfEven_N4_P4 =  Dict-_test_Rem_RoundHalfEven_N4_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 4) ~ P 0)-_test_Rem_RoundHalfEven_N4_P4 =  Dict-_test_Div_RoundHalfEven_P0_N1 :: Dict (K.Div 'K.RoundHalfEven (P 0) (N 1) ~ P 0)-_test_Div_RoundHalfEven_P0_N1 =  Dict-_test_Rem_RoundHalfEven_P0_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_P0_N1 =  Dict-_test_Div_RoundHalfEven_P0_N2 :: Dict (K.Div 'K.RoundHalfEven (P 0) (N 2) ~ P 0)-_test_Div_RoundHalfEven_P0_N2 =  Dict-_test_Rem_RoundHalfEven_P0_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (N 2) ~ P 0)-_test_Rem_RoundHalfEven_P0_N2 =  Dict-_test_Div_RoundHalfEven_P0_N3 :: Dict (K.Div 'K.RoundHalfEven (P 0) (N 3) ~ P 0)-_test_Div_RoundHalfEven_P0_N3 =  Dict-_test_Rem_RoundHalfEven_P0_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (N 3) ~ P 0)-_test_Rem_RoundHalfEven_P0_N3 =  Dict-_test_Div_RoundHalfEven_P0_N4 :: Dict (K.Div 'K.RoundHalfEven (P 0) (N 4) ~ P 0)-_test_Div_RoundHalfEven_P0_N4 =  Dict-_test_Rem_RoundHalfEven_P0_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (N 4) ~ P 0)-_test_Rem_RoundHalfEven_P0_N4 =  Dict-_test_Div_RoundHalfEven_P0_P1 :: Dict (K.Div 'K.RoundHalfEven (P 0) (P 1) ~ P 0)-_test_Div_RoundHalfEven_P0_P1 =  Dict-_test_Rem_RoundHalfEven_P0_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_P0_P1 =  Dict-_test_Div_RoundHalfEven_P0_P2 :: Dict (K.Div 'K.RoundHalfEven (P 0) (P 2) ~ P 0)-_test_Div_RoundHalfEven_P0_P2 =  Dict-_test_Rem_RoundHalfEven_P0_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (P 2) ~ P 0)-_test_Rem_RoundHalfEven_P0_P2 =  Dict-_test_Div_RoundHalfEven_P0_P3 :: Dict (K.Div 'K.RoundHalfEven (P 0) (P 3) ~ P 0)-_test_Div_RoundHalfEven_P0_P3 =  Dict-_test_Rem_RoundHalfEven_P0_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (P 3) ~ P 0)-_test_Rem_RoundHalfEven_P0_P3 =  Dict-_test_Div_RoundHalfEven_P0_P4 :: Dict (K.Div 'K.RoundHalfEven (P 0) (P 4) ~ P 0)-_test_Div_RoundHalfEven_P0_P4 =  Dict-_test_Rem_RoundHalfEven_P0_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 0) (P 4) ~ P 0)-_test_Rem_RoundHalfEven_P0_P4 =  Dict-_test_Div_RoundHalfEven_P1_N1 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 1) ~ N 1)-_test_Div_RoundHalfEven_P1_N1 =  Dict-_test_Rem_RoundHalfEven_P1_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_P1_N1 =  Dict-_test_Div_RoundHalfEven_P1_N2 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 2) ~ P 0)-_test_Div_RoundHalfEven_P1_N2 =  Dict-_test_Rem_RoundHalfEven_P1_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 2) ~ P 1)-_test_Rem_RoundHalfEven_P1_N2 =  Dict-_test_Div_RoundHalfEven_P1_N3 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 3) ~ P 0)-_test_Div_RoundHalfEven_P1_N3 =  Dict-_test_Rem_RoundHalfEven_P1_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 3) ~ P 1)-_test_Rem_RoundHalfEven_P1_N3 =  Dict-_test_Div_RoundHalfEven_P1_N4 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 4) ~ P 0)-_test_Div_RoundHalfEven_P1_N4 =  Dict-_test_Rem_RoundHalfEven_P1_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 4) ~ P 1)-_test_Rem_RoundHalfEven_P1_N4 =  Dict-_test_Div_RoundHalfEven_P1_P1 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 1) ~ P 1)-_test_Div_RoundHalfEven_P1_P1 =  Dict-_test_Rem_RoundHalfEven_P1_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_P1_P1 =  Dict-_test_Div_RoundHalfEven_P1_P2 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 2) ~ P 0)-_test_Div_RoundHalfEven_P1_P2 =  Dict-_test_Rem_RoundHalfEven_P1_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 2) ~ P 1)-_test_Rem_RoundHalfEven_P1_P2 =  Dict-_test_Div_RoundHalfEven_P1_P3 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 3) ~ P 0)-_test_Div_RoundHalfEven_P1_P3 =  Dict-_test_Rem_RoundHalfEven_P1_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 3) ~ P 1)-_test_Rem_RoundHalfEven_P1_P3 =  Dict-_test_Div_RoundHalfEven_P1_P4 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 4) ~ P 0)-_test_Div_RoundHalfEven_P1_P4 =  Dict-_test_Rem_RoundHalfEven_P1_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 4) ~ P 1)-_test_Rem_RoundHalfEven_P1_P4 =  Dict-_test_Div_RoundHalfEven_P2_N1 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 1) ~ N 2)-_test_Div_RoundHalfEven_P2_N1 =  Dict-_test_Rem_RoundHalfEven_P2_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_P2_N1 =  Dict-_test_Div_RoundHalfEven_P2_N2 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 2) ~ N 1)-_test_Div_RoundHalfEven_P2_N2 =  Dict-_test_Rem_RoundHalfEven_P2_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 2) ~ P 0)-_test_Rem_RoundHalfEven_P2_N2 =  Dict-_test_Div_RoundHalfEven_P2_N3 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 3) ~ N 1)-_test_Div_RoundHalfEven_P2_N3 =  Dict-_test_Rem_RoundHalfEven_P2_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 3) ~ N 1)-_test_Rem_RoundHalfEven_P2_N3 =  Dict-_test_Div_RoundHalfEven_P2_N4 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 4) ~ P 0)-_test_Div_RoundHalfEven_P2_N4 =  Dict-_test_Rem_RoundHalfEven_P2_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 4) ~ P 2)-_test_Rem_RoundHalfEven_P2_N4 =  Dict-_test_Div_RoundHalfEven_P2_P1 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 1) ~ P 2)-_test_Div_RoundHalfEven_P2_P1 =  Dict-_test_Rem_RoundHalfEven_P2_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_P2_P1 =  Dict-_test_Div_RoundHalfEven_P2_P2 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 2) ~ P 1)-_test_Div_RoundHalfEven_P2_P2 =  Dict-_test_Rem_RoundHalfEven_P2_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 2) ~ P 0)-_test_Rem_RoundHalfEven_P2_P2 =  Dict-_test_Div_RoundHalfEven_P2_P3 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 3) ~ P 1)-_test_Div_RoundHalfEven_P2_P3 =  Dict-_test_Rem_RoundHalfEven_P2_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 3) ~ N 1)-_test_Rem_RoundHalfEven_P2_P3 =  Dict-_test_Div_RoundHalfEven_P2_P4 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 4) ~ P 0)-_test_Div_RoundHalfEven_P2_P4 =  Dict-_test_Rem_RoundHalfEven_P2_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 4) ~ P 2)-_test_Rem_RoundHalfEven_P2_P4 =  Dict-_test_Div_RoundHalfEven_P3_N1 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 1) ~ N 3)-_test_Div_RoundHalfEven_P3_N1 =  Dict-_test_Rem_RoundHalfEven_P3_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_P3_N1 =  Dict-_test_Div_RoundHalfEven_P3_N2 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 2) ~ N 2)-_test_Div_RoundHalfEven_P3_N2 =  Dict-_test_Rem_RoundHalfEven_P3_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 2) ~ N 1)-_test_Rem_RoundHalfEven_P3_N2 =  Dict-_test_Div_RoundHalfEven_P3_N3 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 3) ~ N 1)-_test_Div_RoundHalfEven_P3_N3 =  Dict-_test_Rem_RoundHalfEven_P3_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 3) ~ P 0)-_test_Rem_RoundHalfEven_P3_N3 =  Dict-_test_Div_RoundHalfEven_P3_N4 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 4) ~ N 1)-_test_Div_RoundHalfEven_P3_N4 =  Dict-_test_Rem_RoundHalfEven_P3_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 4) ~ N 1)-_test_Rem_RoundHalfEven_P3_N4 =  Dict-_test_Div_RoundHalfEven_P3_P1 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 1) ~ P 3)-_test_Div_RoundHalfEven_P3_P1 =  Dict-_test_Rem_RoundHalfEven_P3_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_P3_P1 =  Dict-_test_Div_RoundHalfEven_P3_P2 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 2) ~ P 2)-_test_Div_RoundHalfEven_P3_P2 =  Dict-_test_Rem_RoundHalfEven_P3_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 2) ~ N 1)-_test_Rem_RoundHalfEven_P3_P2 =  Dict-_test_Div_RoundHalfEven_P3_P3 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 3) ~ P 1)-_test_Div_RoundHalfEven_P3_P3 =  Dict-_test_Rem_RoundHalfEven_P3_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 3) ~ P 0)-_test_Rem_RoundHalfEven_P3_P3 =  Dict-_test_Div_RoundHalfEven_P3_P4 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 4) ~ P 1)-_test_Div_RoundHalfEven_P3_P4 =  Dict-_test_Rem_RoundHalfEven_P3_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 4) ~ N 1)-_test_Rem_RoundHalfEven_P3_P4 =  Dict-_test_Div_RoundHalfEven_P4_N1 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 1) ~ N 4)-_test_Div_RoundHalfEven_P4_N1 =  Dict-_test_Rem_RoundHalfEven_P4_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 1) ~ P 0)-_test_Rem_RoundHalfEven_P4_N1 =  Dict-_test_Div_RoundHalfEven_P4_N2 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 2) ~ N 2)-_test_Div_RoundHalfEven_P4_N2 =  Dict-_test_Rem_RoundHalfEven_P4_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 2) ~ P 0)-_test_Rem_RoundHalfEven_P4_N2 =  Dict-_test_Div_RoundHalfEven_P4_N3 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 3) ~ N 1)-_test_Div_RoundHalfEven_P4_N3 =  Dict-_test_Rem_RoundHalfEven_P4_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 3) ~ P 1)-_test_Rem_RoundHalfEven_P4_N3 =  Dict-_test_Div_RoundHalfEven_P4_N4 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 4) ~ N 1)-_test_Div_RoundHalfEven_P4_N4 =  Dict-_test_Rem_RoundHalfEven_P4_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 4) ~ P 0)-_test_Rem_RoundHalfEven_P4_N4 =  Dict-_test_Div_RoundHalfEven_P4_P1 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 1) ~ P 4)-_test_Div_RoundHalfEven_P4_P1 =  Dict-_test_Rem_RoundHalfEven_P4_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 1) ~ P 0)-_test_Rem_RoundHalfEven_P4_P1 =  Dict-_test_Div_RoundHalfEven_P4_P2 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 2) ~ P 2)-_test_Div_RoundHalfEven_P4_P2 =  Dict-_test_Rem_RoundHalfEven_P4_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 2) ~ P 0)-_test_Rem_RoundHalfEven_P4_P2 =  Dict-_test_Div_RoundHalfEven_P4_P3 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 3) ~ P 1)-_test_Div_RoundHalfEven_P4_P3 =  Dict-_test_Rem_RoundHalfEven_P4_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 3) ~ P 1)-_test_Rem_RoundHalfEven_P4_P3 =  Dict-_test_Div_RoundHalfEven_P4_P4 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 4) ~ P 1)-_test_Div_RoundHalfEven_P4_P4 =  Dict-_test_Rem_RoundHalfEven_P4_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 4) ~ P 0)-_test_Rem_RoundHalfEven_P4_P4 =  Dict-_test_Div_RoundHalfOdd_N1_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 1) ~ P 1)-_test_Div_RoundHalfOdd_N1_N1 =  Dict-_test_Rem_RoundHalfOdd_N1_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_N1_N1 =  Dict-_test_Div_RoundHalfOdd_N1_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 2) ~ P 1)-_test_Div_RoundHalfOdd_N1_N2 =  Dict-_test_Rem_RoundHalfOdd_N1_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 2) ~ P 1)-_test_Rem_RoundHalfOdd_N1_N2 =  Dict-_test_Div_RoundHalfOdd_N1_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 3) ~ P 0)-_test_Div_RoundHalfOdd_N1_N3 =  Dict-_test_Rem_RoundHalfOdd_N1_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 3) ~ N 1)-_test_Rem_RoundHalfOdd_N1_N3 =  Dict-_test_Div_RoundHalfOdd_N1_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 4) ~ P 0)-_test_Div_RoundHalfOdd_N1_N4 =  Dict-_test_Rem_RoundHalfOdd_N1_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 4) ~ N 1)-_test_Rem_RoundHalfOdd_N1_N4 =  Dict-_test_Div_RoundHalfOdd_N1_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 1) ~ N 1)-_test_Div_RoundHalfOdd_N1_P1 =  Dict-_test_Rem_RoundHalfOdd_N1_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_N1_P1 =  Dict-_test_Div_RoundHalfOdd_N1_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 2) ~ N 1)-_test_Div_RoundHalfOdd_N1_P2 =  Dict-_test_Rem_RoundHalfOdd_N1_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 2) ~ P 1)-_test_Rem_RoundHalfOdd_N1_P2 =  Dict-_test_Div_RoundHalfOdd_N1_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 3) ~ P 0)-_test_Div_RoundHalfOdd_N1_P3 =  Dict-_test_Rem_RoundHalfOdd_N1_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 3) ~ N 1)-_test_Rem_RoundHalfOdd_N1_P3 =  Dict-_test_Div_RoundHalfOdd_N1_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 4) ~ P 0)-_test_Div_RoundHalfOdd_N1_P4 =  Dict-_test_Rem_RoundHalfOdd_N1_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 4) ~ N 1)-_test_Rem_RoundHalfOdd_N1_P4 =  Dict-_test_Div_RoundHalfOdd_N2_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 1) ~ P 2)-_test_Div_RoundHalfOdd_N2_N1 =  Dict-_test_Rem_RoundHalfOdd_N2_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_N2_N1 =  Dict-_test_Div_RoundHalfOdd_N2_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 2) ~ P 1)-_test_Div_RoundHalfOdd_N2_N2 =  Dict-_test_Rem_RoundHalfOdd_N2_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 2) ~ P 0)-_test_Rem_RoundHalfOdd_N2_N2 =  Dict-_test_Div_RoundHalfOdd_N2_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 3) ~ P 1)-_test_Div_RoundHalfOdd_N2_N3 =  Dict-_test_Rem_RoundHalfOdd_N2_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 3) ~ P 1)-_test_Rem_RoundHalfOdd_N2_N3 =  Dict-_test_Div_RoundHalfOdd_N2_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 4) ~ P 1)-_test_Div_RoundHalfOdd_N2_N4 =  Dict-_test_Rem_RoundHalfOdd_N2_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 4) ~ P 2)-_test_Rem_RoundHalfOdd_N2_N4 =  Dict-_test_Div_RoundHalfOdd_N2_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 1) ~ N 2)-_test_Div_RoundHalfOdd_N2_P1 =  Dict-_test_Rem_RoundHalfOdd_N2_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_N2_P1 =  Dict-_test_Div_RoundHalfOdd_N2_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 2) ~ N 1)-_test_Div_RoundHalfOdd_N2_P2 =  Dict-_test_Rem_RoundHalfOdd_N2_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 2) ~ P 0)-_test_Rem_RoundHalfOdd_N2_P2 =  Dict-_test_Div_RoundHalfOdd_N2_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 3) ~ N 1)-_test_Div_RoundHalfOdd_N2_P3 =  Dict-_test_Rem_RoundHalfOdd_N2_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 3) ~ P 1)-_test_Rem_RoundHalfOdd_N2_P3 =  Dict-_test_Div_RoundHalfOdd_N2_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 4) ~ N 1)-_test_Div_RoundHalfOdd_N2_P4 =  Dict-_test_Rem_RoundHalfOdd_N2_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 4) ~ P 2)-_test_Rem_RoundHalfOdd_N2_P4 =  Dict-_test_Div_RoundHalfOdd_N3_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 1) ~ P 3)-_test_Div_RoundHalfOdd_N3_N1 =  Dict-_test_Rem_RoundHalfOdd_N3_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_N3_N1 =  Dict-_test_Div_RoundHalfOdd_N3_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 2) ~ P 1)-_test_Div_RoundHalfOdd_N3_N2 =  Dict-_test_Rem_RoundHalfOdd_N3_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 2) ~ N 1)-_test_Rem_RoundHalfOdd_N3_N2 =  Dict-_test_Div_RoundHalfOdd_N3_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 3) ~ P 1)-_test_Div_RoundHalfOdd_N3_N3 =  Dict-_test_Rem_RoundHalfOdd_N3_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 3) ~ P 0)-_test_Rem_RoundHalfOdd_N3_N3 =  Dict-_test_Div_RoundHalfOdd_N3_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 4) ~ P 1)-_test_Div_RoundHalfOdd_N3_N4 =  Dict-_test_Rem_RoundHalfOdd_N3_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 4) ~ P 1)-_test_Rem_RoundHalfOdd_N3_N4 =  Dict-_test_Div_RoundHalfOdd_N3_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 1) ~ N 3)-_test_Div_RoundHalfOdd_N3_P1 =  Dict-_test_Rem_RoundHalfOdd_N3_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_N3_P1 =  Dict-_test_Div_RoundHalfOdd_N3_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 2) ~ N 1)-_test_Div_RoundHalfOdd_N3_P2 =  Dict-_test_Rem_RoundHalfOdd_N3_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 2) ~ N 1)-_test_Rem_RoundHalfOdd_N3_P2 =  Dict-_test_Div_RoundHalfOdd_N3_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 3) ~ N 1)-_test_Div_RoundHalfOdd_N3_P3 =  Dict-_test_Rem_RoundHalfOdd_N3_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 3) ~ P 0)-_test_Rem_RoundHalfOdd_N3_P3 =  Dict-_test_Div_RoundHalfOdd_N3_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 4) ~ N 1)-_test_Div_RoundHalfOdd_N3_P4 =  Dict-_test_Rem_RoundHalfOdd_N3_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 4) ~ P 1)-_test_Rem_RoundHalfOdd_N3_P4 =  Dict-_test_Div_RoundHalfOdd_N4_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 1) ~ P 4)-_test_Div_RoundHalfOdd_N4_N1 =  Dict-_test_Rem_RoundHalfOdd_N4_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_N4_N1 =  Dict-_test_Div_RoundHalfOdd_N4_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 2) ~ P 2)-_test_Div_RoundHalfOdd_N4_N2 =  Dict-_test_Rem_RoundHalfOdd_N4_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 2) ~ P 0)-_test_Rem_RoundHalfOdd_N4_N2 =  Dict-_test_Div_RoundHalfOdd_N4_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 3) ~ P 1)-_test_Div_RoundHalfOdd_N4_N3 =  Dict-_test_Rem_RoundHalfOdd_N4_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 3) ~ N 1)-_test_Rem_RoundHalfOdd_N4_N3 =  Dict-_test_Div_RoundHalfOdd_N4_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 4) ~ P 1)-_test_Div_RoundHalfOdd_N4_N4 =  Dict-_test_Rem_RoundHalfOdd_N4_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 4) ~ P 0)-_test_Rem_RoundHalfOdd_N4_N4 =  Dict-_test_Div_RoundHalfOdd_N4_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 1) ~ N 4)-_test_Div_RoundHalfOdd_N4_P1 =  Dict-_test_Rem_RoundHalfOdd_N4_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_N4_P1 =  Dict-_test_Div_RoundHalfOdd_N4_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 2) ~ N 2)-_test_Div_RoundHalfOdd_N4_P2 =  Dict-_test_Rem_RoundHalfOdd_N4_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 2) ~ P 0)-_test_Rem_RoundHalfOdd_N4_P2 =  Dict-_test_Div_RoundHalfOdd_N4_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 3) ~ N 1)-_test_Div_RoundHalfOdd_N4_P3 =  Dict-_test_Rem_RoundHalfOdd_N4_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 3) ~ N 1)-_test_Rem_RoundHalfOdd_N4_P3 =  Dict-_test_Div_RoundHalfOdd_N4_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 4) ~ N 1)-_test_Div_RoundHalfOdd_N4_P4 =  Dict-_test_Rem_RoundHalfOdd_N4_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 4) ~ P 0)-_test_Rem_RoundHalfOdd_N4_P4 =  Dict-_test_Div_RoundHalfOdd_P0_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (N 1) ~ P 0)-_test_Div_RoundHalfOdd_P0_N1 =  Dict-_test_Rem_RoundHalfOdd_P0_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_P0_N1 =  Dict-_test_Div_RoundHalfOdd_P0_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (N 2) ~ P 0)-_test_Div_RoundHalfOdd_P0_N2 =  Dict-_test_Rem_RoundHalfOdd_P0_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (N 2) ~ P 0)-_test_Rem_RoundHalfOdd_P0_N2 =  Dict-_test_Div_RoundHalfOdd_P0_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (N 3) ~ P 0)-_test_Div_RoundHalfOdd_P0_N3 =  Dict-_test_Rem_RoundHalfOdd_P0_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (N 3) ~ P 0)-_test_Rem_RoundHalfOdd_P0_N3 =  Dict-_test_Div_RoundHalfOdd_P0_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (N 4) ~ P 0)-_test_Div_RoundHalfOdd_P0_N4 =  Dict-_test_Rem_RoundHalfOdd_P0_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (N 4) ~ P 0)-_test_Rem_RoundHalfOdd_P0_N4 =  Dict-_test_Div_RoundHalfOdd_P0_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (P 1) ~ P 0)-_test_Div_RoundHalfOdd_P0_P1 =  Dict-_test_Rem_RoundHalfOdd_P0_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_P0_P1 =  Dict-_test_Div_RoundHalfOdd_P0_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (P 2) ~ P 0)-_test_Div_RoundHalfOdd_P0_P2 =  Dict-_test_Rem_RoundHalfOdd_P0_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (P 2) ~ P 0)-_test_Rem_RoundHalfOdd_P0_P2 =  Dict-_test_Div_RoundHalfOdd_P0_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (P 3) ~ P 0)-_test_Div_RoundHalfOdd_P0_P3 =  Dict-_test_Rem_RoundHalfOdd_P0_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (P 3) ~ P 0)-_test_Rem_RoundHalfOdd_P0_P3 =  Dict-_test_Div_RoundHalfOdd_P0_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 0) (P 4) ~ P 0)-_test_Div_RoundHalfOdd_P0_P4 =  Dict-_test_Rem_RoundHalfOdd_P0_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 0) (P 4) ~ P 0)-_test_Rem_RoundHalfOdd_P0_P4 =  Dict-_test_Div_RoundHalfOdd_P1_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 1) ~ N 1)-_test_Div_RoundHalfOdd_P1_N1 =  Dict-_test_Rem_RoundHalfOdd_P1_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_P1_N1 =  Dict-_test_Div_RoundHalfOdd_P1_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 2) ~ N 1)-_test_Div_RoundHalfOdd_P1_N2 =  Dict-_test_Rem_RoundHalfOdd_P1_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 2) ~ N 1)-_test_Rem_RoundHalfOdd_P1_N2 =  Dict-_test_Div_RoundHalfOdd_P1_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 3) ~ P 0)-_test_Div_RoundHalfOdd_P1_N3 =  Dict-_test_Rem_RoundHalfOdd_P1_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 3) ~ P 1)-_test_Rem_RoundHalfOdd_P1_N3 =  Dict-_test_Div_RoundHalfOdd_P1_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 4) ~ P 0)-_test_Div_RoundHalfOdd_P1_N4 =  Dict-_test_Rem_RoundHalfOdd_P1_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 4) ~ P 1)-_test_Rem_RoundHalfOdd_P1_N4 =  Dict-_test_Div_RoundHalfOdd_P1_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 1) ~ P 1)-_test_Div_RoundHalfOdd_P1_P1 =  Dict-_test_Rem_RoundHalfOdd_P1_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_P1_P1 =  Dict-_test_Div_RoundHalfOdd_P1_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 2) ~ P 1)-_test_Div_RoundHalfOdd_P1_P2 =  Dict-_test_Rem_RoundHalfOdd_P1_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 2) ~ N 1)-_test_Rem_RoundHalfOdd_P1_P2 =  Dict-_test_Div_RoundHalfOdd_P1_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 3) ~ P 0)-_test_Div_RoundHalfOdd_P1_P3 =  Dict-_test_Rem_RoundHalfOdd_P1_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 3) ~ P 1)-_test_Rem_RoundHalfOdd_P1_P3 =  Dict-_test_Div_RoundHalfOdd_P1_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 4) ~ P 0)-_test_Div_RoundHalfOdd_P1_P4 =  Dict-_test_Rem_RoundHalfOdd_P1_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 4) ~ P 1)-_test_Rem_RoundHalfOdd_P1_P4 =  Dict-_test_Div_RoundHalfOdd_P2_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 1) ~ N 2)-_test_Div_RoundHalfOdd_P2_N1 =  Dict-_test_Rem_RoundHalfOdd_P2_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_P2_N1 =  Dict-_test_Div_RoundHalfOdd_P2_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 2) ~ N 1)-_test_Div_RoundHalfOdd_P2_N2 =  Dict-_test_Rem_RoundHalfOdd_P2_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 2) ~ P 0)-_test_Rem_RoundHalfOdd_P2_N2 =  Dict-_test_Div_RoundHalfOdd_P2_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 3) ~ N 1)-_test_Div_RoundHalfOdd_P2_N3 =  Dict-_test_Rem_RoundHalfOdd_P2_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 3) ~ N 1)-_test_Rem_RoundHalfOdd_P2_N3 =  Dict-_test_Div_RoundHalfOdd_P2_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 4) ~ N 1)-_test_Div_RoundHalfOdd_P2_N4 =  Dict-_test_Rem_RoundHalfOdd_P2_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 4) ~ N 2)-_test_Rem_RoundHalfOdd_P2_N4 =  Dict-_test_Div_RoundHalfOdd_P2_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 1) ~ P 2)-_test_Div_RoundHalfOdd_P2_P1 =  Dict-_test_Rem_RoundHalfOdd_P2_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_P2_P1 =  Dict-_test_Div_RoundHalfOdd_P2_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 2) ~ P 1)-_test_Div_RoundHalfOdd_P2_P2 =  Dict-_test_Rem_RoundHalfOdd_P2_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 2) ~ P 0)-_test_Rem_RoundHalfOdd_P2_P2 =  Dict-_test_Div_RoundHalfOdd_P2_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 3) ~ P 1)-_test_Div_RoundHalfOdd_P2_P3 =  Dict-_test_Rem_RoundHalfOdd_P2_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 3) ~ N 1)-_test_Rem_RoundHalfOdd_P2_P3 =  Dict-_test_Div_RoundHalfOdd_P2_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 4) ~ P 1)-_test_Div_RoundHalfOdd_P2_P4 =  Dict-_test_Rem_RoundHalfOdd_P2_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 4) ~ N 2)-_test_Rem_RoundHalfOdd_P2_P4 =  Dict-_test_Div_RoundHalfOdd_P3_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 1) ~ N 3)-_test_Div_RoundHalfOdd_P3_N1 =  Dict-_test_Rem_RoundHalfOdd_P3_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_P3_N1 =  Dict-_test_Div_RoundHalfOdd_P3_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 2) ~ N 1)-_test_Div_RoundHalfOdd_P3_N2 =  Dict-_test_Rem_RoundHalfOdd_P3_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 2) ~ P 1)-_test_Rem_RoundHalfOdd_P3_N2 =  Dict-_test_Div_RoundHalfOdd_P3_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 3) ~ N 1)-_test_Div_RoundHalfOdd_P3_N3 =  Dict-_test_Rem_RoundHalfOdd_P3_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 3) ~ P 0)-_test_Rem_RoundHalfOdd_P3_N3 =  Dict-_test_Div_RoundHalfOdd_P3_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 4) ~ N 1)-_test_Div_RoundHalfOdd_P3_N4 =  Dict-_test_Rem_RoundHalfOdd_P3_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 4) ~ N 1)-_test_Rem_RoundHalfOdd_P3_N4 =  Dict-_test_Div_RoundHalfOdd_P3_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 1) ~ P 3)-_test_Div_RoundHalfOdd_P3_P1 =  Dict-_test_Rem_RoundHalfOdd_P3_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_P3_P1 =  Dict-_test_Div_RoundHalfOdd_P3_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 2) ~ P 1)-_test_Div_RoundHalfOdd_P3_P2 =  Dict-_test_Rem_RoundHalfOdd_P3_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 2) ~ P 1)-_test_Rem_RoundHalfOdd_P3_P2 =  Dict-_test_Div_RoundHalfOdd_P3_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 3) ~ P 1)-_test_Div_RoundHalfOdd_P3_P3 =  Dict-_test_Rem_RoundHalfOdd_P3_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 3) ~ P 0)-_test_Rem_RoundHalfOdd_P3_P3 =  Dict-_test_Div_RoundHalfOdd_P3_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 4) ~ P 1)-_test_Div_RoundHalfOdd_P3_P4 =  Dict-_test_Rem_RoundHalfOdd_P3_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 4) ~ N 1)-_test_Rem_RoundHalfOdd_P3_P4 =  Dict-_test_Div_RoundHalfOdd_P4_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 1) ~ N 4)-_test_Div_RoundHalfOdd_P4_N1 =  Dict-_test_Rem_RoundHalfOdd_P4_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 1) ~ P 0)-_test_Rem_RoundHalfOdd_P4_N1 =  Dict-_test_Div_RoundHalfOdd_P4_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 2) ~ N 2)-_test_Div_RoundHalfOdd_P4_N2 =  Dict-_test_Rem_RoundHalfOdd_P4_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 2) ~ P 0)-_test_Rem_RoundHalfOdd_P4_N2 =  Dict-_test_Div_RoundHalfOdd_P4_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 3) ~ N 1)-_test_Div_RoundHalfOdd_P4_N3 =  Dict-_test_Rem_RoundHalfOdd_P4_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 3) ~ P 1)-_test_Rem_RoundHalfOdd_P4_N3 =  Dict-_test_Div_RoundHalfOdd_P4_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 4) ~ N 1)-_test_Div_RoundHalfOdd_P4_N4 =  Dict-_test_Rem_RoundHalfOdd_P4_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 4) ~ P 0)-_test_Rem_RoundHalfOdd_P4_N4 =  Dict-_test_Div_RoundHalfOdd_P4_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 1) ~ P 4)-_test_Div_RoundHalfOdd_P4_P1 =  Dict-_test_Rem_RoundHalfOdd_P4_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 1) ~ P 0)-_test_Rem_RoundHalfOdd_P4_P1 =  Dict-_test_Div_RoundHalfOdd_P4_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 2) ~ P 2)-_test_Div_RoundHalfOdd_P4_P2 =  Dict-_test_Rem_RoundHalfOdd_P4_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 2) ~ P 0)-_test_Rem_RoundHalfOdd_P4_P2 =  Dict-_test_Div_RoundHalfOdd_P4_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 3) ~ P 1)-_test_Div_RoundHalfOdd_P4_P3 =  Dict-_test_Rem_RoundHalfOdd_P4_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 3) ~ P 1)-_test_Rem_RoundHalfOdd_P4_P3 =  Dict-_test_Div_RoundHalfOdd_P4_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 4) ~ P 1)-_test_Div_RoundHalfOdd_P4_P4 =  Dict-_test_Rem_RoundHalfOdd_P4_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 4) ~ P 0)-_test_Rem_RoundHalfOdd_P4_P4 =  Dict-_test_Div_RoundHalfUp_N1_N1 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 1) ~ P 1)-_test_Div_RoundHalfUp_N1_N1 =  Dict-_test_Rem_RoundHalfUp_N1_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_N1_N1 =  Dict-_test_Div_RoundHalfUp_N1_N2 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 2) ~ P 1)-_test_Div_RoundHalfUp_N1_N2 =  Dict-_test_Rem_RoundHalfUp_N1_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 2) ~ P 1)-_test_Rem_RoundHalfUp_N1_N2 =  Dict-_test_Div_RoundHalfUp_N1_N3 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 3) ~ P 0)-_test_Div_RoundHalfUp_N1_N3 =  Dict-_test_Rem_RoundHalfUp_N1_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 3) ~ N 1)-_test_Rem_RoundHalfUp_N1_N3 =  Dict-_test_Div_RoundHalfUp_N1_N4 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 4) ~ P 0)-_test_Div_RoundHalfUp_N1_N4 =  Dict-_test_Rem_RoundHalfUp_N1_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 4) ~ N 1)-_test_Rem_RoundHalfUp_N1_N4 =  Dict-_test_Div_RoundHalfUp_N1_P1 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 1) ~ N 1)-_test_Div_RoundHalfUp_N1_P1 =  Dict-_test_Rem_RoundHalfUp_N1_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_N1_P1 =  Dict-_test_Div_RoundHalfUp_N1_P2 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 2) ~ P 0)-_test_Div_RoundHalfUp_N1_P2 =  Dict-_test_Rem_RoundHalfUp_N1_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 2) ~ N 1)-_test_Rem_RoundHalfUp_N1_P2 =  Dict-_test_Div_RoundHalfUp_N1_P3 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 3) ~ P 0)-_test_Div_RoundHalfUp_N1_P3 =  Dict-_test_Rem_RoundHalfUp_N1_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 3) ~ N 1)-_test_Rem_RoundHalfUp_N1_P3 =  Dict-_test_Div_RoundHalfUp_N1_P4 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 4) ~ P 0)-_test_Div_RoundHalfUp_N1_P4 =  Dict-_test_Rem_RoundHalfUp_N1_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 4) ~ N 1)-_test_Rem_RoundHalfUp_N1_P4 =  Dict-_test_Div_RoundHalfUp_N2_N1 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 1) ~ P 2)-_test_Div_RoundHalfUp_N2_N1 =  Dict-_test_Rem_RoundHalfUp_N2_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_N2_N1 =  Dict-_test_Div_RoundHalfUp_N2_N2 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 2) ~ P 1)-_test_Div_RoundHalfUp_N2_N2 =  Dict-_test_Rem_RoundHalfUp_N2_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 2) ~ P 0)-_test_Rem_RoundHalfUp_N2_N2 =  Dict-_test_Div_RoundHalfUp_N2_N3 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 3) ~ P 1)-_test_Div_RoundHalfUp_N2_N3 =  Dict-_test_Rem_RoundHalfUp_N2_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 3) ~ P 1)-_test_Rem_RoundHalfUp_N2_N3 =  Dict-_test_Div_RoundHalfUp_N2_N4 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 4) ~ P 1)-_test_Div_RoundHalfUp_N2_N4 =  Dict-_test_Rem_RoundHalfUp_N2_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 4) ~ P 2)-_test_Rem_RoundHalfUp_N2_N4 =  Dict-_test_Div_RoundHalfUp_N2_P1 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 1) ~ N 2)-_test_Div_RoundHalfUp_N2_P1 =  Dict-_test_Rem_RoundHalfUp_N2_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_N2_P1 =  Dict-_test_Div_RoundHalfUp_N2_P2 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 2) ~ N 1)-_test_Div_RoundHalfUp_N2_P2 =  Dict-_test_Rem_RoundHalfUp_N2_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 2) ~ P 0)-_test_Rem_RoundHalfUp_N2_P2 =  Dict-_test_Div_RoundHalfUp_N2_P3 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 3) ~ N 1)-_test_Div_RoundHalfUp_N2_P3 =  Dict-_test_Rem_RoundHalfUp_N2_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 3) ~ P 1)-_test_Rem_RoundHalfUp_N2_P3 =  Dict-_test_Div_RoundHalfUp_N2_P4 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 4) ~ P 0)-_test_Div_RoundHalfUp_N2_P4 =  Dict-_test_Rem_RoundHalfUp_N2_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 4) ~ N 2)-_test_Rem_RoundHalfUp_N2_P4 =  Dict-_test_Div_RoundHalfUp_N3_N1 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 1) ~ P 3)-_test_Div_RoundHalfUp_N3_N1 =  Dict-_test_Rem_RoundHalfUp_N3_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_N3_N1 =  Dict-_test_Div_RoundHalfUp_N3_N2 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 2) ~ P 2)-_test_Div_RoundHalfUp_N3_N2 =  Dict-_test_Rem_RoundHalfUp_N3_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 2) ~ P 1)-_test_Rem_RoundHalfUp_N3_N2 =  Dict-_test_Div_RoundHalfUp_N3_N3 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 3) ~ P 1)-_test_Div_RoundHalfUp_N3_N3 =  Dict-_test_Rem_RoundHalfUp_N3_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 3) ~ P 0)-_test_Rem_RoundHalfUp_N3_N3 =  Dict-_test_Div_RoundHalfUp_N3_N4 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 4) ~ P 1)-_test_Div_RoundHalfUp_N3_N4 =  Dict-_test_Rem_RoundHalfUp_N3_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 4) ~ P 1)-_test_Rem_RoundHalfUp_N3_N4 =  Dict-_test_Div_RoundHalfUp_N3_P1 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 1) ~ N 3)-_test_Div_RoundHalfUp_N3_P1 =  Dict-_test_Rem_RoundHalfUp_N3_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_N3_P1 =  Dict-_test_Div_RoundHalfUp_N3_P2 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 2) ~ N 1)-_test_Div_RoundHalfUp_N3_P2 =  Dict-_test_Rem_RoundHalfUp_N3_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 2) ~ N 1)-_test_Rem_RoundHalfUp_N3_P2 =  Dict-_test_Div_RoundHalfUp_N3_P3 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 3) ~ N 1)-_test_Div_RoundHalfUp_N3_P3 =  Dict-_test_Rem_RoundHalfUp_N3_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 3) ~ P 0)-_test_Rem_RoundHalfUp_N3_P3 =  Dict-_test_Div_RoundHalfUp_N3_P4 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 4) ~ N 1)-_test_Div_RoundHalfUp_N3_P4 =  Dict-_test_Rem_RoundHalfUp_N3_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 4) ~ P 1)-_test_Rem_RoundHalfUp_N3_P4 =  Dict-_test_Div_RoundHalfUp_N4_N1 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 1) ~ P 4)-_test_Div_RoundHalfUp_N4_N1 =  Dict-_test_Rem_RoundHalfUp_N4_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_N4_N1 =  Dict-_test_Div_RoundHalfUp_N4_N2 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 2) ~ P 2)-_test_Div_RoundHalfUp_N4_N2 =  Dict-_test_Rem_RoundHalfUp_N4_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 2) ~ P 0)-_test_Rem_RoundHalfUp_N4_N2 =  Dict-_test_Div_RoundHalfUp_N4_N3 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 3) ~ P 1)-_test_Div_RoundHalfUp_N4_N3 =  Dict-_test_Rem_RoundHalfUp_N4_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 3) ~ N 1)-_test_Rem_RoundHalfUp_N4_N3 =  Dict-_test_Div_RoundHalfUp_N4_N4 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 4) ~ P 1)-_test_Div_RoundHalfUp_N4_N4 =  Dict-_test_Rem_RoundHalfUp_N4_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 4) ~ P 0)-_test_Rem_RoundHalfUp_N4_N4 =  Dict-_test_Div_RoundHalfUp_N4_P1 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 1) ~ N 4)-_test_Div_RoundHalfUp_N4_P1 =  Dict-_test_Rem_RoundHalfUp_N4_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_N4_P1 =  Dict-_test_Div_RoundHalfUp_N4_P2 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 2) ~ N 2)-_test_Div_RoundHalfUp_N4_P2 =  Dict-_test_Rem_RoundHalfUp_N4_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 2) ~ P 0)-_test_Rem_RoundHalfUp_N4_P2 =  Dict-_test_Div_RoundHalfUp_N4_P3 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 3) ~ N 1)-_test_Div_RoundHalfUp_N4_P3 =  Dict-_test_Rem_RoundHalfUp_N4_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 3) ~ N 1)-_test_Rem_RoundHalfUp_N4_P3 =  Dict-_test_Div_RoundHalfUp_N4_P4 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 4) ~ N 1)-_test_Div_RoundHalfUp_N4_P4 =  Dict-_test_Rem_RoundHalfUp_N4_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 4) ~ P 0)-_test_Rem_RoundHalfUp_N4_P4 =  Dict-_test_Div_RoundHalfUp_P0_N1 :: Dict (K.Div 'K.RoundHalfUp (P 0) (N 1) ~ P 0)-_test_Div_RoundHalfUp_P0_N1 =  Dict-_test_Rem_RoundHalfUp_P0_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_P0_N1 =  Dict-_test_Div_RoundHalfUp_P0_N2 :: Dict (K.Div 'K.RoundHalfUp (P 0) (N 2) ~ P 0)-_test_Div_RoundHalfUp_P0_N2 =  Dict-_test_Rem_RoundHalfUp_P0_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (N 2) ~ P 0)-_test_Rem_RoundHalfUp_P0_N2 =  Dict-_test_Div_RoundHalfUp_P0_N3 :: Dict (K.Div 'K.RoundHalfUp (P 0) (N 3) ~ P 0)-_test_Div_RoundHalfUp_P0_N3 =  Dict-_test_Rem_RoundHalfUp_P0_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (N 3) ~ P 0)-_test_Rem_RoundHalfUp_P0_N3 =  Dict-_test_Div_RoundHalfUp_P0_N4 :: Dict (K.Div 'K.RoundHalfUp (P 0) (N 4) ~ P 0)-_test_Div_RoundHalfUp_P0_N4 =  Dict-_test_Rem_RoundHalfUp_P0_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (N 4) ~ P 0)-_test_Rem_RoundHalfUp_P0_N4 =  Dict-_test_Div_RoundHalfUp_P0_P1 :: Dict (K.Div 'K.RoundHalfUp (P 0) (P 1) ~ P 0)-_test_Div_RoundHalfUp_P0_P1 =  Dict-_test_Rem_RoundHalfUp_P0_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_P0_P1 =  Dict-_test_Div_RoundHalfUp_P0_P2 :: Dict (K.Div 'K.RoundHalfUp (P 0) (P 2) ~ P 0)-_test_Div_RoundHalfUp_P0_P2 =  Dict-_test_Rem_RoundHalfUp_P0_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (P 2) ~ P 0)-_test_Rem_RoundHalfUp_P0_P2 =  Dict-_test_Div_RoundHalfUp_P0_P3 :: Dict (K.Div 'K.RoundHalfUp (P 0) (P 3) ~ P 0)-_test_Div_RoundHalfUp_P0_P3 =  Dict-_test_Rem_RoundHalfUp_P0_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (P 3) ~ P 0)-_test_Rem_RoundHalfUp_P0_P3 =  Dict-_test_Div_RoundHalfUp_P0_P4 :: Dict (K.Div 'K.RoundHalfUp (P 0) (P 4) ~ P 0)-_test_Div_RoundHalfUp_P0_P4 =  Dict-_test_Rem_RoundHalfUp_P0_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 0) (P 4) ~ P 0)-_test_Rem_RoundHalfUp_P0_P4 =  Dict-_test_Div_RoundHalfUp_P1_N1 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 1) ~ N 1)-_test_Div_RoundHalfUp_P1_N1 =  Dict-_test_Rem_RoundHalfUp_P1_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_P1_N1 =  Dict-_test_Div_RoundHalfUp_P1_N2 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 2) ~ P 0)-_test_Div_RoundHalfUp_P1_N2 =  Dict-_test_Rem_RoundHalfUp_P1_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 2) ~ P 1)-_test_Rem_RoundHalfUp_P1_N2 =  Dict-_test_Div_RoundHalfUp_P1_N3 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 3) ~ P 0)-_test_Div_RoundHalfUp_P1_N3 =  Dict-_test_Rem_RoundHalfUp_P1_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 3) ~ P 1)-_test_Rem_RoundHalfUp_P1_N3 =  Dict-_test_Div_RoundHalfUp_P1_N4 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 4) ~ P 0)-_test_Div_RoundHalfUp_P1_N4 =  Dict-_test_Rem_RoundHalfUp_P1_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 4) ~ P 1)-_test_Rem_RoundHalfUp_P1_N4 =  Dict-_test_Div_RoundHalfUp_P1_P1 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 1) ~ P 1)-_test_Div_RoundHalfUp_P1_P1 =  Dict-_test_Rem_RoundHalfUp_P1_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_P1_P1 =  Dict-_test_Div_RoundHalfUp_P1_P2 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 2) ~ P 1)-_test_Div_RoundHalfUp_P1_P2 =  Dict-_test_Rem_RoundHalfUp_P1_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 2) ~ N 1)-_test_Rem_RoundHalfUp_P1_P2 =  Dict-_test_Div_RoundHalfUp_P1_P3 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 3) ~ P 0)-_test_Div_RoundHalfUp_P1_P3 =  Dict-_test_Rem_RoundHalfUp_P1_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 3) ~ P 1)-_test_Rem_RoundHalfUp_P1_P3 =  Dict-_test_Div_RoundHalfUp_P1_P4 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 4) ~ P 0)-_test_Div_RoundHalfUp_P1_P4 =  Dict-_test_Rem_RoundHalfUp_P1_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 4) ~ P 1)-_test_Rem_RoundHalfUp_P1_P4 =  Dict-_test_Div_RoundHalfUp_P2_N1 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 1) ~ N 2)-_test_Div_RoundHalfUp_P2_N1 =  Dict-_test_Rem_RoundHalfUp_P2_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_P2_N1 =  Dict-_test_Div_RoundHalfUp_P2_N2 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 2) ~ N 1)-_test_Div_RoundHalfUp_P2_N2 =  Dict-_test_Rem_RoundHalfUp_P2_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 2) ~ P 0)-_test_Rem_RoundHalfUp_P2_N2 =  Dict-_test_Div_RoundHalfUp_P2_N3 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 3) ~ N 1)-_test_Div_RoundHalfUp_P2_N3 =  Dict-_test_Rem_RoundHalfUp_P2_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 3) ~ N 1)-_test_Rem_RoundHalfUp_P2_N3 =  Dict-_test_Div_RoundHalfUp_P2_N4 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 4) ~ P 0)-_test_Div_RoundHalfUp_P2_N4 =  Dict-_test_Rem_RoundHalfUp_P2_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 4) ~ P 2)-_test_Rem_RoundHalfUp_P2_N4 =  Dict-_test_Div_RoundHalfUp_P2_P1 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 1) ~ P 2)-_test_Div_RoundHalfUp_P2_P1 =  Dict-_test_Rem_RoundHalfUp_P2_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_P2_P1 =  Dict-_test_Div_RoundHalfUp_P2_P2 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 2) ~ P 1)-_test_Div_RoundHalfUp_P2_P2 =  Dict-_test_Rem_RoundHalfUp_P2_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 2) ~ P 0)-_test_Rem_RoundHalfUp_P2_P2 =  Dict-_test_Div_RoundHalfUp_P2_P3 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 3) ~ P 1)-_test_Div_RoundHalfUp_P2_P3 =  Dict-_test_Rem_RoundHalfUp_P2_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 3) ~ N 1)-_test_Rem_RoundHalfUp_P2_P3 =  Dict-_test_Div_RoundHalfUp_P2_P4 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 4) ~ P 1)-_test_Div_RoundHalfUp_P2_P4 =  Dict-_test_Rem_RoundHalfUp_P2_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 4) ~ N 2)-_test_Rem_RoundHalfUp_P2_P4 =  Dict-_test_Div_RoundHalfUp_P3_N1 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 1) ~ N 3)-_test_Div_RoundHalfUp_P3_N1 =  Dict-_test_Rem_RoundHalfUp_P3_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_P3_N1 =  Dict-_test_Div_RoundHalfUp_P3_N2 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 2) ~ N 1)-_test_Div_RoundHalfUp_P3_N2 =  Dict-_test_Rem_RoundHalfUp_P3_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 2) ~ P 1)-_test_Rem_RoundHalfUp_P3_N2 =  Dict-_test_Div_RoundHalfUp_P3_N3 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 3) ~ N 1)-_test_Div_RoundHalfUp_P3_N3 =  Dict-_test_Rem_RoundHalfUp_P3_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 3) ~ P 0)-_test_Rem_RoundHalfUp_P3_N3 =  Dict-_test_Div_RoundHalfUp_P3_N4 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 4) ~ N 1)-_test_Div_RoundHalfUp_P3_N4 =  Dict-_test_Rem_RoundHalfUp_P3_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 4) ~ N 1)-_test_Rem_RoundHalfUp_P3_N4 =  Dict-_test_Div_RoundHalfUp_P3_P1 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 1) ~ P 3)-_test_Div_RoundHalfUp_P3_P1 =  Dict-_test_Rem_RoundHalfUp_P3_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_P3_P1 =  Dict-_test_Div_RoundHalfUp_P3_P2 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 2) ~ P 2)-_test_Div_RoundHalfUp_P3_P2 =  Dict-_test_Rem_RoundHalfUp_P3_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 2) ~ N 1)-_test_Rem_RoundHalfUp_P3_P2 =  Dict-_test_Div_RoundHalfUp_P3_P3 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 3) ~ P 1)-_test_Div_RoundHalfUp_P3_P3 =  Dict-_test_Rem_RoundHalfUp_P3_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 3) ~ P 0)-_test_Rem_RoundHalfUp_P3_P3 =  Dict-_test_Div_RoundHalfUp_P3_P4 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 4) ~ P 1)-_test_Div_RoundHalfUp_P3_P4 =  Dict-_test_Rem_RoundHalfUp_P3_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 4) ~ N 1)-_test_Rem_RoundHalfUp_P3_P4 =  Dict-_test_Div_RoundHalfUp_P4_N1 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 1) ~ N 4)-_test_Div_RoundHalfUp_P4_N1 =  Dict-_test_Rem_RoundHalfUp_P4_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 1) ~ P 0)-_test_Rem_RoundHalfUp_P4_N1 =  Dict-_test_Div_RoundHalfUp_P4_N2 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 2) ~ N 2)-_test_Div_RoundHalfUp_P4_N2 =  Dict-_test_Rem_RoundHalfUp_P4_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 2) ~ P 0)-_test_Rem_RoundHalfUp_P4_N2 =  Dict-_test_Div_RoundHalfUp_P4_N3 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 3) ~ N 1)-_test_Div_RoundHalfUp_P4_N3 =  Dict-_test_Rem_RoundHalfUp_P4_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 3) ~ P 1)-_test_Rem_RoundHalfUp_P4_N3 =  Dict-_test_Div_RoundHalfUp_P4_N4 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 4) ~ N 1)-_test_Div_RoundHalfUp_P4_N4 =  Dict-_test_Rem_RoundHalfUp_P4_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 4) ~ P 0)-_test_Rem_RoundHalfUp_P4_N4 =  Dict-_test_Div_RoundHalfUp_P4_P1 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 1) ~ P 4)-_test_Div_RoundHalfUp_P4_P1 =  Dict-_test_Rem_RoundHalfUp_P4_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 1) ~ P 0)-_test_Rem_RoundHalfUp_P4_P1 =  Dict-_test_Div_RoundHalfUp_P4_P2 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 2) ~ P 2)-_test_Div_RoundHalfUp_P4_P2 =  Dict-_test_Rem_RoundHalfUp_P4_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 2) ~ P 0)-_test_Rem_RoundHalfUp_P4_P2 =  Dict-_test_Div_RoundHalfUp_P4_P3 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 3) ~ P 1)-_test_Div_RoundHalfUp_P4_P3 =  Dict-_test_Rem_RoundHalfUp_P4_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 3) ~ P 1)-_test_Rem_RoundHalfUp_P4_P3 =  Dict-_test_Div_RoundHalfUp_P4_P4 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 4) ~ P 1)-_test_Div_RoundHalfUp_P4_P4 =  Dict-_test_Rem_RoundHalfUp_P4_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 4) ~ P 0)-_test_Rem_RoundHalfUp_P4_P4 =  Dict-_test_Div_RoundHalfZero_N1_N1 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 1) ~ P 1)-_test_Div_RoundHalfZero_N1_N1 =  Dict-_test_Rem_RoundHalfZero_N1_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_N1_N1 =  Dict-_test_Div_RoundHalfZero_N1_N2 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 2) ~ P 0)-_test_Div_RoundHalfZero_N1_N2 =  Dict-_test_Rem_RoundHalfZero_N1_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 2) ~ N 1)-_test_Rem_RoundHalfZero_N1_N2 =  Dict-_test_Div_RoundHalfZero_N1_N3 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 3) ~ P 0)-_test_Div_RoundHalfZero_N1_N3 =  Dict-_test_Rem_RoundHalfZero_N1_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 3) ~ N 1)-_test_Rem_RoundHalfZero_N1_N3 =  Dict-_test_Div_RoundHalfZero_N1_N4 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 4) ~ P 0)-_test_Div_RoundHalfZero_N1_N4 =  Dict-_test_Rem_RoundHalfZero_N1_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 4) ~ N 1)-_test_Rem_RoundHalfZero_N1_N4 =  Dict-_test_Div_RoundHalfZero_N1_P1 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 1) ~ N 1)-_test_Div_RoundHalfZero_N1_P1 =  Dict-_test_Rem_RoundHalfZero_N1_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_N1_P1 =  Dict-_test_Div_RoundHalfZero_N1_P2 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 2) ~ P 0)-_test_Div_RoundHalfZero_N1_P2 =  Dict-_test_Rem_RoundHalfZero_N1_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 2) ~ N 1)-_test_Rem_RoundHalfZero_N1_P2 =  Dict-_test_Div_RoundHalfZero_N1_P3 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 3) ~ P 0)-_test_Div_RoundHalfZero_N1_P3 =  Dict-_test_Rem_RoundHalfZero_N1_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 3) ~ N 1)-_test_Rem_RoundHalfZero_N1_P3 =  Dict-_test_Div_RoundHalfZero_N1_P4 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 4) ~ P 0)-_test_Div_RoundHalfZero_N1_P4 =  Dict-_test_Rem_RoundHalfZero_N1_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 4) ~ N 1)-_test_Rem_RoundHalfZero_N1_P4 =  Dict-_test_Div_RoundHalfZero_N2_N1 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 1) ~ P 2)-_test_Div_RoundHalfZero_N2_N1 =  Dict-_test_Rem_RoundHalfZero_N2_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_N2_N1 =  Dict-_test_Div_RoundHalfZero_N2_N2 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 2) ~ P 1)-_test_Div_RoundHalfZero_N2_N2 =  Dict-_test_Rem_RoundHalfZero_N2_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 2) ~ P 0)-_test_Rem_RoundHalfZero_N2_N2 =  Dict-_test_Div_RoundHalfZero_N2_N3 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 3) ~ P 1)-_test_Div_RoundHalfZero_N2_N3 =  Dict-_test_Rem_RoundHalfZero_N2_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 3) ~ P 1)-_test_Rem_RoundHalfZero_N2_N3 =  Dict-_test_Div_RoundHalfZero_N2_N4 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 4) ~ P 0)-_test_Div_RoundHalfZero_N2_N4 =  Dict-_test_Rem_RoundHalfZero_N2_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 4) ~ N 2)-_test_Rem_RoundHalfZero_N2_N4 =  Dict-_test_Div_RoundHalfZero_N2_P1 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 1) ~ N 2)-_test_Div_RoundHalfZero_N2_P1 =  Dict-_test_Rem_RoundHalfZero_N2_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_N2_P1 =  Dict-_test_Div_RoundHalfZero_N2_P2 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 2) ~ N 1)-_test_Div_RoundHalfZero_N2_P2 =  Dict-_test_Rem_RoundHalfZero_N2_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 2) ~ P 0)-_test_Rem_RoundHalfZero_N2_P2 =  Dict-_test_Div_RoundHalfZero_N2_P3 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 3) ~ N 1)-_test_Div_RoundHalfZero_N2_P3 =  Dict-_test_Rem_RoundHalfZero_N2_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 3) ~ P 1)-_test_Rem_RoundHalfZero_N2_P3 =  Dict-_test_Div_RoundHalfZero_N2_P4 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 4) ~ P 0)-_test_Div_RoundHalfZero_N2_P4 =  Dict-_test_Rem_RoundHalfZero_N2_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 4) ~ N 2)-_test_Rem_RoundHalfZero_N2_P4 =  Dict-_test_Div_RoundHalfZero_N3_N1 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 1) ~ P 3)-_test_Div_RoundHalfZero_N3_N1 =  Dict-_test_Rem_RoundHalfZero_N3_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_N3_N1 =  Dict-_test_Div_RoundHalfZero_N3_N2 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 2) ~ P 1)-_test_Div_RoundHalfZero_N3_N2 =  Dict-_test_Rem_RoundHalfZero_N3_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 2) ~ N 1)-_test_Rem_RoundHalfZero_N3_N2 =  Dict-_test_Div_RoundHalfZero_N3_N3 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 3) ~ P 1)-_test_Div_RoundHalfZero_N3_N3 =  Dict-_test_Rem_RoundHalfZero_N3_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 3) ~ P 0)-_test_Rem_RoundHalfZero_N3_N3 =  Dict-_test_Div_RoundHalfZero_N3_N4 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 4) ~ P 1)-_test_Div_RoundHalfZero_N3_N4 =  Dict-_test_Rem_RoundHalfZero_N3_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 4) ~ P 1)-_test_Rem_RoundHalfZero_N3_N4 =  Dict-_test_Div_RoundHalfZero_N3_P1 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 1) ~ N 3)-_test_Div_RoundHalfZero_N3_P1 =  Dict-_test_Rem_RoundHalfZero_N3_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_N3_P1 =  Dict-_test_Div_RoundHalfZero_N3_P2 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 2) ~ N 1)-_test_Div_RoundHalfZero_N3_P2 =  Dict-_test_Rem_RoundHalfZero_N3_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 2) ~ N 1)-_test_Rem_RoundHalfZero_N3_P2 =  Dict-_test_Div_RoundHalfZero_N3_P3 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 3) ~ N 1)-_test_Div_RoundHalfZero_N3_P3 =  Dict-_test_Rem_RoundHalfZero_N3_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 3) ~ P 0)-_test_Rem_RoundHalfZero_N3_P3 =  Dict-_test_Div_RoundHalfZero_N3_P4 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 4) ~ N 1)-_test_Div_RoundHalfZero_N3_P4 =  Dict-_test_Rem_RoundHalfZero_N3_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 4) ~ P 1)-_test_Rem_RoundHalfZero_N3_P4 =  Dict-_test_Div_RoundHalfZero_N4_N1 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 1) ~ P 4)-_test_Div_RoundHalfZero_N4_N1 =  Dict-_test_Rem_RoundHalfZero_N4_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_N4_N1 =  Dict-_test_Div_RoundHalfZero_N4_N2 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 2) ~ P 2)-_test_Div_RoundHalfZero_N4_N2 =  Dict-_test_Rem_RoundHalfZero_N4_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 2) ~ P 0)-_test_Rem_RoundHalfZero_N4_N2 =  Dict-_test_Div_RoundHalfZero_N4_N3 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 3) ~ P 1)-_test_Div_RoundHalfZero_N4_N3 =  Dict-_test_Rem_RoundHalfZero_N4_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 3) ~ N 1)-_test_Rem_RoundHalfZero_N4_N3 =  Dict-_test_Div_RoundHalfZero_N4_N4 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 4) ~ P 1)-_test_Div_RoundHalfZero_N4_N4 =  Dict-_test_Rem_RoundHalfZero_N4_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 4) ~ P 0)-_test_Rem_RoundHalfZero_N4_N4 =  Dict-_test_Div_RoundHalfZero_N4_P1 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 1) ~ N 4)-_test_Div_RoundHalfZero_N4_P1 =  Dict-_test_Rem_RoundHalfZero_N4_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_N4_P1 =  Dict-_test_Div_RoundHalfZero_N4_P2 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 2) ~ N 2)-_test_Div_RoundHalfZero_N4_P2 =  Dict-_test_Rem_RoundHalfZero_N4_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 2) ~ P 0)-_test_Rem_RoundHalfZero_N4_P2 =  Dict-_test_Div_RoundHalfZero_N4_P3 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 3) ~ N 1)-_test_Div_RoundHalfZero_N4_P3 =  Dict-_test_Rem_RoundHalfZero_N4_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 3) ~ N 1)-_test_Rem_RoundHalfZero_N4_P3 =  Dict-_test_Div_RoundHalfZero_N4_P4 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 4) ~ N 1)-_test_Div_RoundHalfZero_N4_P4 =  Dict-_test_Rem_RoundHalfZero_N4_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 4) ~ P 0)-_test_Rem_RoundHalfZero_N4_P4 =  Dict-_test_Div_RoundHalfZero_P0_N1 :: Dict (K.Div 'K.RoundHalfZero (P 0) (N 1) ~ P 0)-_test_Div_RoundHalfZero_P0_N1 =  Dict-_test_Rem_RoundHalfZero_P0_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_P0_N1 =  Dict-_test_Div_RoundHalfZero_P0_N2 :: Dict (K.Div 'K.RoundHalfZero (P 0) (N 2) ~ P 0)-_test_Div_RoundHalfZero_P0_N2 =  Dict-_test_Rem_RoundHalfZero_P0_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (N 2) ~ P 0)-_test_Rem_RoundHalfZero_P0_N2 =  Dict-_test_Div_RoundHalfZero_P0_N3 :: Dict (K.Div 'K.RoundHalfZero (P 0) (N 3) ~ P 0)-_test_Div_RoundHalfZero_P0_N3 =  Dict-_test_Rem_RoundHalfZero_P0_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (N 3) ~ P 0)-_test_Rem_RoundHalfZero_P0_N3 =  Dict-_test_Div_RoundHalfZero_P0_N4 :: Dict (K.Div 'K.RoundHalfZero (P 0) (N 4) ~ P 0)-_test_Div_RoundHalfZero_P0_N4 =  Dict-_test_Rem_RoundHalfZero_P0_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (N 4) ~ P 0)-_test_Rem_RoundHalfZero_P0_N4 =  Dict-_test_Div_RoundHalfZero_P0_P1 :: Dict (K.Div 'K.RoundHalfZero (P 0) (P 1) ~ P 0)-_test_Div_RoundHalfZero_P0_P1 =  Dict-_test_Rem_RoundHalfZero_P0_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_P0_P1 =  Dict-_test_Div_RoundHalfZero_P0_P2 :: Dict (K.Div 'K.RoundHalfZero (P 0) (P 2) ~ P 0)-_test_Div_RoundHalfZero_P0_P2 =  Dict-_test_Rem_RoundHalfZero_P0_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (P 2) ~ P 0)-_test_Rem_RoundHalfZero_P0_P2 =  Dict-_test_Div_RoundHalfZero_P0_P3 :: Dict (K.Div 'K.RoundHalfZero (P 0) (P 3) ~ P 0)-_test_Div_RoundHalfZero_P0_P3 =  Dict-_test_Rem_RoundHalfZero_P0_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (P 3) ~ P 0)-_test_Rem_RoundHalfZero_P0_P3 =  Dict-_test_Div_RoundHalfZero_P0_P4 :: Dict (K.Div 'K.RoundHalfZero (P 0) (P 4) ~ P 0)-_test_Div_RoundHalfZero_P0_P4 =  Dict-_test_Rem_RoundHalfZero_P0_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 0) (P 4) ~ P 0)-_test_Rem_RoundHalfZero_P0_P4 =  Dict-_test_Div_RoundHalfZero_P1_N1 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 1) ~ N 1)-_test_Div_RoundHalfZero_P1_N1 =  Dict-_test_Rem_RoundHalfZero_P1_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_P1_N1 =  Dict-_test_Div_RoundHalfZero_P1_N2 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 2) ~ P 0)-_test_Div_RoundHalfZero_P1_N2 =  Dict-_test_Rem_RoundHalfZero_P1_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 2) ~ P 1)-_test_Rem_RoundHalfZero_P1_N2 =  Dict-_test_Div_RoundHalfZero_P1_N3 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 3) ~ P 0)-_test_Div_RoundHalfZero_P1_N3 =  Dict-_test_Rem_RoundHalfZero_P1_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 3) ~ P 1)-_test_Rem_RoundHalfZero_P1_N3 =  Dict-_test_Div_RoundHalfZero_P1_N4 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 4) ~ P 0)-_test_Div_RoundHalfZero_P1_N4 =  Dict-_test_Rem_RoundHalfZero_P1_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 4) ~ P 1)-_test_Rem_RoundHalfZero_P1_N4 =  Dict-_test_Div_RoundHalfZero_P1_P1 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 1) ~ P 1)-_test_Div_RoundHalfZero_P1_P1 =  Dict-_test_Rem_RoundHalfZero_P1_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_P1_P1 =  Dict-_test_Div_RoundHalfZero_P1_P2 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 2) ~ P 0)-_test_Div_RoundHalfZero_P1_P2 =  Dict-_test_Rem_RoundHalfZero_P1_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 2) ~ P 1)-_test_Rem_RoundHalfZero_P1_P2 =  Dict-_test_Div_RoundHalfZero_P1_P3 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 3) ~ P 0)-_test_Div_RoundHalfZero_P1_P3 =  Dict-_test_Rem_RoundHalfZero_P1_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 3) ~ P 1)-_test_Rem_RoundHalfZero_P1_P3 =  Dict-_test_Div_RoundHalfZero_P1_P4 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 4) ~ P 0)-_test_Div_RoundHalfZero_P1_P4 =  Dict-_test_Rem_RoundHalfZero_P1_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 4) ~ P 1)-_test_Rem_RoundHalfZero_P1_P4 =  Dict-_test_Div_RoundHalfZero_P2_N1 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 1) ~ N 2)-_test_Div_RoundHalfZero_P2_N1 =  Dict-_test_Rem_RoundHalfZero_P2_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_P2_N1 =  Dict-_test_Div_RoundHalfZero_P2_N2 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 2) ~ N 1)-_test_Div_RoundHalfZero_P2_N2 =  Dict-_test_Rem_RoundHalfZero_P2_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 2) ~ P 0)-_test_Rem_RoundHalfZero_P2_N2 =  Dict-_test_Div_RoundHalfZero_P2_N3 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 3) ~ N 1)-_test_Div_RoundHalfZero_P2_N3 =  Dict-_test_Rem_RoundHalfZero_P2_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 3) ~ N 1)-_test_Rem_RoundHalfZero_P2_N3 =  Dict-_test_Div_RoundHalfZero_P2_N4 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 4) ~ P 0)-_test_Div_RoundHalfZero_P2_N4 =  Dict-_test_Rem_RoundHalfZero_P2_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 4) ~ P 2)-_test_Rem_RoundHalfZero_P2_N4 =  Dict-_test_Div_RoundHalfZero_P2_P1 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 1) ~ P 2)-_test_Div_RoundHalfZero_P2_P1 =  Dict-_test_Rem_RoundHalfZero_P2_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_P2_P1 =  Dict-_test_Div_RoundHalfZero_P2_P2 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 2) ~ P 1)-_test_Div_RoundHalfZero_P2_P2 =  Dict-_test_Rem_RoundHalfZero_P2_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 2) ~ P 0)-_test_Rem_RoundHalfZero_P2_P2 =  Dict-_test_Div_RoundHalfZero_P2_P3 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 3) ~ P 1)-_test_Div_RoundHalfZero_P2_P3 =  Dict-_test_Rem_RoundHalfZero_P2_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 3) ~ N 1)-_test_Rem_RoundHalfZero_P2_P3 =  Dict-_test_Div_RoundHalfZero_P2_P4 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 4) ~ P 0)-_test_Div_RoundHalfZero_P2_P4 =  Dict-_test_Rem_RoundHalfZero_P2_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 4) ~ P 2)-_test_Rem_RoundHalfZero_P2_P4 =  Dict-_test_Div_RoundHalfZero_P3_N1 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 1) ~ N 3)-_test_Div_RoundHalfZero_P3_N1 =  Dict-_test_Rem_RoundHalfZero_P3_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_P3_N1 =  Dict-_test_Div_RoundHalfZero_P3_N2 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 2) ~ N 1)-_test_Div_RoundHalfZero_P3_N2 =  Dict-_test_Rem_RoundHalfZero_P3_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 2) ~ P 1)-_test_Rem_RoundHalfZero_P3_N2 =  Dict-_test_Div_RoundHalfZero_P3_N3 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 3) ~ N 1)-_test_Div_RoundHalfZero_P3_N3 =  Dict-_test_Rem_RoundHalfZero_P3_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 3) ~ P 0)-_test_Rem_RoundHalfZero_P3_N3 =  Dict-_test_Div_RoundHalfZero_P3_N4 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 4) ~ N 1)-_test_Div_RoundHalfZero_P3_N4 =  Dict-_test_Rem_RoundHalfZero_P3_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 4) ~ N 1)-_test_Rem_RoundHalfZero_P3_N4 =  Dict-_test_Div_RoundHalfZero_P3_P1 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 1) ~ P 3)-_test_Div_RoundHalfZero_P3_P1 =  Dict-_test_Rem_RoundHalfZero_P3_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_P3_P1 =  Dict-_test_Div_RoundHalfZero_P3_P2 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 2) ~ P 1)-_test_Div_RoundHalfZero_P3_P2 =  Dict-_test_Rem_RoundHalfZero_P3_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 2) ~ P 1)-_test_Rem_RoundHalfZero_P3_P2 =  Dict-_test_Div_RoundHalfZero_P3_P3 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 3) ~ P 1)-_test_Div_RoundHalfZero_P3_P3 =  Dict-_test_Rem_RoundHalfZero_P3_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 3) ~ P 0)-_test_Rem_RoundHalfZero_P3_P3 =  Dict-_test_Div_RoundHalfZero_P3_P4 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 4) ~ P 1)-_test_Div_RoundHalfZero_P3_P4 =  Dict-_test_Rem_RoundHalfZero_P3_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 4) ~ N 1)-_test_Rem_RoundHalfZero_P3_P4 =  Dict-_test_Div_RoundHalfZero_P4_N1 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 1) ~ N 4)-_test_Div_RoundHalfZero_P4_N1 =  Dict-_test_Rem_RoundHalfZero_P4_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 1) ~ P 0)-_test_Rem_RoundHalfZero_P4_N1 =  Dict-_test_Div_RoundHalfZero_P4_N2 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 2) ~ N 2)-_test_Div_RoundHalfZero_P4_N2 =  Dict-_test_Rem_RoundHalfZero_P4_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 2) ~ P 0)-_test_Rem_RoundHalfZero_P4_N2 =  Dict-_test_Div_RoundHalfZero_P4_N3 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 3) ~ N 1)-_test_Div_RoundHalfZero_P4_N3 =  Dict-_test_Rem_RoundHalfZero_P4_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 3) ~ P 1)-_test_Rem_RoundHalfZero_P4_N3 =  Dict-_test_Div_RoundHalfZero_P4_N4 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 4) ~ N 1)-_test_Div_RoundHalfZero_P4_N4 =  Dict-_test_Rem_RoundHalfZero_P4_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 4) ~ P 0)-_test_Rem_RoundHalfZero_P4_N4 =  Dict-_test_Div_RoundHalfZero_P4_P1 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 1) ~ P 4)-_test_Div_RoundHalfZero_P4_P1 =  Dict-_test_Rem_RoundHalfZero_P4_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 1) ~ P 0)-_test_Rem_RoundHalfZero_P4_P1 =  Dict-_test_Div_RoundHalfZero_P4_P2 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 2) ~ P 2)-_test_Div_RoundHalfZero_P4_P2 =  Dict-_test_Rem_RoundHalfZero_P4_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 2) ~ P 0)-_test_Rem_RoundHalfZero_P4_P2 =  Dict-_test_Div_RoundHalfZero_P4_P3 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 3) ~ P 1)-_test_Div_RoundHalfZero_P4_P3 =  Dict-_test_Rem_RoundHalfZero_P4_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 3) ~ P 1)-_test_Rem_RoundHalfZero_P4_P3 =  Dict-_test_Div_RoundHalfZero_P4_P4 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 4) ~ P 1)-_test_Div_RoundHalfZero_P4_P4 =  Dict-_test_Rem_RoundHalfZero_P4_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 4) ~ P 0)-_test_Rem_RoundHalfZero_P4_P4 =  Dict-_test_Div_RoundUp_N1_N1 :: Dict (K.Div 'K.RoundUp (N 1) (N 1) ~ P 1)-_test_Div_RoundUp_N1_N1 =  Dict-_test_Rem_RoundUp_N1_N1 :: Dict (K.Rem 'K.RoundUp (N 1) (N 1) ~ P 0)-_test_Rem_RoundUp_N1_N1 =  Dict-_test_Div_RoundUp_N1_N2 :: Dict (K.Div 'K.RoundUp (N 1) (N 2) ~ P 1)-_test_Div_RoundUp_N1_N2 =  Dict-_test_Rem_RoundUp_N1_N2 :: Dict (K.Rem 'K.RoundUp (N 1) (N 2) ~ P 1)-_test_Rem_RoundUp_N1_N2 =  Dict-_test_Div_RoundUp_N1_N3 :: Dict (K.Div 'K.RoundUp (N 1) (N 3) ~ P 1)-_test_Div_RoundUp_N1_N3 =  Dict-_test_Rem_RoundUp_N1_N3 :: Dict (K.Rem 'K.RoundUp (N 1) (N 3) ~ P 2)-_test_Rem_RoundUp_N1_N3 =  Dict-_test_Div_RoundUp_N1_N4 :: Dict (K.Div 'K.RoundUp (N 1) (N 4) ~ P 1)-_test_Div_RoundUp_N1_N4 =  Dict-_test_Rem_RoundUp_N1_N4 :: Dict (K.Rem 'K.RoundUp (N 1) (N 4) ~ P 3)-_test_Rem_RoundUp_N1_N4 =  Dict-_test_Div_RoundUp_N1_P1 :: Dict (K.Div 'K.RoundUp (N 1) (P 1) ~ N 1)-_test_Div_RoundUp_N1_P1 =  Dict-_test_Rem_RoundUp_N1_P1 :: Dict (K.Rem 'K.RoundUp (N 1) (P 1) ~ P 0)-_test_Rem_RoundUp_N1_P1 =  Dict-_test_Div_RoundUp_N1_P2 :: Dict (K.Div 'K.RoundUp (N 1) (P 2) ~ P 0)-_test_Div_RoundUp_N1_P2 =  Dict-_test_Rem_RoundUp_N1_P2 :: Dict (K.Rem 'K.RoundUp (N 1) (P 2) ~ N 1)-_test_Rem_RoundUp_N1_P2 =  Dict-_test_Div_RoundUp_N1_P3 :: Dict (K.Div 'K.RoundUp (N 1) (P 3) ~ P 0)-_test_Div_RoundUp_N1_P3 =  Dict-_test_Rem_RoundUp_N1_P3 :: Dict (K.Rem 'K.RoundUp (N 1) (P 3) ~ N 1)-_test_Rem_RoundUp_N1_P3 =  Dict-_test_Div_RoundUp_N1_P4 :: Dict (K.Div 'K.RoundUp (N 1) (P 4) ~ P 0)-_test_Div_RoundUp_N1_P4 =  Dict-_test_Rem_RoundUp_N1_P4 :: Dict (K.Rem 'K.RoundUp (N 1) (P 4) ~ N 1)-_test_Rem_RoundUp_N1_P4 =  Dict-_test_Div_RoundUp_N2_N1 :: Dict (K.Div 'K.RoundUp (N 2) (N 1) ~ P 2)-_test_Div_RoundUp_N2_N1 =  Dict-_test_Rem_RoundUp_N2_N1 :: Dict (K.Rem 'K.RoundUp (N 2) (N 1) ~ P 0)-_test_Rem_RoundUp_N2_N1 =  Dict-_test_Div_RoundUp_N2_N2 :: Dict (K.Div 'K.RoundUp (N 2) (N 2) ~ P 1)-_test_Div_RoundUp_N2_N2 =  Dict-_test_Rem_RoundUp_N2_N2 :: Dict (K.Rem 'K.RoundUp (N 2) (N 2) ~ P 0)-_test_Rem_RoundUp_N2_N2 =  Dict-_test_Div_RoundUp_N2_N3 :: Dict (K.Div 'K.RoundUp (N 2) (N 3) ~ P 1)-_test_Div_RoundUp_N2_N3 =  Dict-_test_Rem_RoundUp_N2_N3 :: Dict (K.Rem 'K.RoundUp (N 2) (N 3) ~ P 1)-_test_Rem_RoundUp_N2_N3 =  Dict-_test_Div_RoundUp_N2_N4 :: Dict (K.Div 'K.RoundUp (N 2) (N 4) ~ P 1)-_test_Div_RoundUp_N2_N4 =  Dict-_test_Rem_RoundUp_N2_N4 :: Dict (K.Rem 'K.RoundUp (N 2) (N 4) ~ P 2)-_test_Rem_RoundUp_N2_N4 =  Dict-_test_Div_RoundUp_N2_P1 :: Dict (K.Div 'K.RoundUp (N 2) (P 1) ~ N 2)-_test_Div_RoundUp_N2_P1 =  Dict-_test_Rem_RoundUp_N2_P1 :: Dict (K.Rem 'K.RoundUp (N 2) (P 1) ~ P 0)-_test_Rem_RoundUp_N2_P1 =  Dict-_test_Div_RoundUp_N2_P2 :: Dict (K.Div 'K.RoundUp (N 2) (P 2) ~ N 1)-_test_Div_RoundUp_N2_P2 =  Dict-_test_Rem_RoundUp_N2_P2 :: Dict (K.Rem 'K.RoundUp (N 2) (P 2) ~ P 0)-_test_Rem_RoundUp_N2_P2 =  Dict-_test_Div_RoundUp_N2_P3 :: Dict (K.Div 'K.RoundUp (N 2) (P 3) ~ P 0)-_test_Div_RoundUp_N2_P3 =  Dict-_test_Rem_RoundUp_N2_P3 :: Dict (K.Rem 'K.RoundUp (N 2) (P 3) ~ N 2)-_test_Rem_RoundUp_N2_P3 =  Dict-_test_Div_RoundUp_N2_P4 :: Dict (K.Div 'K.RoundUp (N 2) (P 4) ~ P 0)-_test_Div_RoundUp_N2_P4 =  Dict-_test_Rem_RoundUp_N2_P4 :: Dict (K.Rem 'K.RoundUp (N 2) (P 4) ~ N 2)-_test_Rem_RoundUp_N2_P4 =  Dict-_test_Div_RoundUp_N3_N1 :: Dict (K.Div 'K.RoundUp (N 3) (N 1) ~ P 3)-_test_Div_RoundUp_N3_N1 =  Dict-_test_Rem_RoundUp_N3_N1 :: Dict (K.Rem 'K.RoundUp (N 3) (N 1) ~ P 0)-_test_Rem_RoundUp_N3_N1 =  Dict-_test_Div_RoundUp_N3_N2 :: Dict (K.Div 'K.RoundUp (N 3) (N 2) ~ P 2)-_test_Div_RoundUp_N3_N2 =  Dict-_test_Rem_RoundUp_N3_N2 :: Dict (K.Rem 'K.RoundUp (N 3) (N 2) ~ P 1)-_test_Rem_RoundUp_N3_N2 =  Dict-_test_Div_RoundUp_N3_N3 :: Dict (K.Div 'K.RoundUp (N 3) (N 3) ~ P 1)-_test_Div_RoundUp_N3_N3 =  Dict-_test_Rem_RoundUp_N3_N3 :: Dict (K.Rem 'K.RoundUp (N 3) (N 3) ~ P 0)-_test_Rem_RoundUp_N3_N3 =  Dict-_test_Div_RoundUp_N3_N4 :: Dict (K.Div 'K.RoundUp (N 3) (N 4) ~ P 1)-_test_Div_RoundUp_N3_N4 =  Dict-_test_Rem_RoundUp_N3_N4 :: Dict (K.Rem 'K.RoundUp (N 3) (N 4) ~ P 1)-_test_Rem_RoundUp_N3_N4 =  Dict-_test_Div_RoundUp_N3_P1 :: Dict (K.Div 'K.RoundUp (N 3) (P 1) ~ N 3)-_test_Div_RoundUp_N3_P1 =  Dict-_test_Rem_RoundUp_N3_P1 :: Dict (K.Rem 'K.RoundUp (N 3) (P 1) ~ P 0)-_test_Rem_RoundUp_N3_P1 =  Dict-_test_Div_RoundUp_N3_P2 :: Dict (K.Div 'K.RoundUp (N 3) (P 2) ~ N 1)-_test_Div_RoundUp_N3_P2 =  Dict-_test_Rem_RoundUp_N3_P2 :: Dict (K.Rem 'K.RoundUp (N 3) (P 2) ~ N 1)-_test_Rem_RoundUp_N3_P2 =  Dict-_test_Div_RoundUp_N3_P3 :: Dict (K.Div 'K.RoundUp (N 3) (P 3) ~ N 1)-_test_Div_RoundUp_N3_P3 =  Dict-_test_Rem_RoundUp_N3_P3 :: Dict (K.Rem 'K.RoundUp (N 3) (P 3) ~ P 0)-_test_Rem_RoundUp_N3_P3 =  Dict-_test_Div_RoundUp_N3_P4 :: Dict (K.Div 'K.RoundUp (N 3) (P 4) ~ P 0)-_test_Div_RoundUp_N3_P4 =  Dict-_test_Rem_RoundUp_N3_P4 :: Dict (K.Rem 'K.RoundUp (N 3) (P 4) ~ N 3)-_test_Rem_RoundUp_N3_P4 =  Dict-_test_Div_RoundUp_N4_N1 :: Dict (K.Div 'K.RoundUp (N 4) (N 1) ~ P 4)-_test_Div_RoundUp_N4_N1 =  Dict-_test_Rem_RoundUp_N4_N1 :: Dict (K.Rem 'K.RoundUp (N 4) (N 1) ~ P 0)-_test_Rem_RoundUp_N4_N1 =  Dict-_test_Div_RoundUp_N4_N2 :: Dict (K.Div 'K.RoundUp (N 4) (N 2) ~ P 2)-_test_Div_RoundUp_N4_N2 =  Dict-_test_Rem_RoundUp_N4_N2 :: Dict (K.Rem 'K.RoundUp (N 4) (N 2) ~ P 0)-_test_Rem_RoundUp_N4_N2 =  Dict-_test_Div_RoundUp_N4_N3 :: Dict (K.Div 'K.RoundUp (N 4) (N 3) ~ P 2)-_test_Div_RoundUp_N4_N3 =  Dict-_test_Rem_RoundUp_N4_N3 :: Dict (K.Rem 'K.RoundUp (N 4) (N 3) ~ P 2)-_test_Rem_RoundUp_N4_N3 =  Dict-_test_Div_RoundUp_N4_N4 :: Dict (K.Div 'K.RoundUp (N 4) (N 4) ~ P 1)-_test_Div_RoundUp_N4_N4 =  Dict-_test_Rem_RoundUp_N4_N4 :: Dict (K.Rem 'K.RoundUp (N 4) (N 4) ~ P 0)-_test_Rem_RoundUp_N4_N4 =  Dict-_test_Div_RoundUp_N4_P1 :: Dict (K.Div 'K.RoundUp (N 4) (P 1) ~ N 4)-_test_Div_RoundUp_N4_P1 =  Dict-_test_Rem_RoundUp_N4_P1 :: Dict (K.Rem 'K.RoundUp (N 4) (P 1) ~ P 0)-_test_Rem_RoundUp_N4_P1 =  Dict-_test_Div_RoundUp_N4_P2 :: Dict (K.Div 'K.RoundUp (N 4) (P 2) ~ N 2)-_test_Div_RoundUp_N4_P2 =  Dict-_test_Rem_RoundUp_N4_P2 :: Dict (K.Rem 'K.RoundUp (N 4) (P 2) ~ P 0)-_test_Rem_RoundUp_N4_P2 =  Dict-_test_Div_RoundUp_N4_P3 :: Dict (K.Div 'K.RoundUp (N 4) (P 3) ~ N 1)-_test_Div_RoundUp_N4_P3 =  Dict-_test_Rem_RoundUp_N4_P3 :: Dict (K.Rem 'K.RoundUp (N 4) (P 3) ~ N 1)-_test_Rem_RoundUp_N4_P3 =  Dict-_test_Div_RoundUp_N4_P4 :: Dict (K.Div 'K.RoundUp (N 4) (P 4) ~ N 1)-_test_Div_RoundUp_N4_P4 =  Dict-_test_Rem_RoundUp_N4_P4 :: Dict (K.Rem 'K.RoundUp (N 4) (P 4) ~ P 0)-_test_Rem_RoundUp_N4_P4 =  Dict-_test_Div_RoundUp_P0_N1 :: Dict (K.Div 'K.RoundUp (P 0) (N 1) ~ P 0)-_test_Div_RoundUp_P0_N1 =  Dict-_test_Rem_RoundUp_P0_N1 :: Dict (K.Rem 'K.RoundUp (P 0) (N 1) ~ P 0)-_test_Rem_RoundUp_P0_N1 =  Dict-_test_Div_RoundUp_P0_N2 :: Dict (K.Div 'K.RoundUp (P 0) (N 2) ~ P 0)-_test_Div_RoundUp_P0_N2 =  Dict-_test_Rem_RoundUp_P0_N2 :: Dict (K.Rem 'K.RoundUp (P 0) (N 2) ~ P 0)-_test_Rem_RoundUp_P0_N2 =  Dict-_test_Div_RoundUp_P0_N3 :: Dict (K.Div 'K.RoundUp (P 0) (N 3) ~ P 0)-_test_Div_RoundUp_P0_N3 =  Dict-_test_Rem_RoundUp_P0_N3 :: Dict (K.Rem 'K.RoundUp (P 0) (N 3) ~ P 0)-_test_Rem_RoundUp_P0_N3 =  Dict-_test_Div_RoundUp_P0_N4 :: Dict (K.Div 'K.RoundUp (P 0) (N 4) ~ P 0)-_test_Div_RoundUp_P0_N4 =  Dict-_test_Rem_RoundUp_P0_N4 :: Dict (K.Rem 'K.RoundUp (P 0) (N 4) ~ P 0)-_test_Rem_RoundUp_P0_N4 =  Dict-_test_Div_RoundUp_P0_P1 :: Dict (K.Div 'K.RoundUp (P 0) (P 1) ~ P 0)-_test_Div_RoundUp_P0_P1 =  Dict-_test_Rem_RoundUp_P0_P1 :: Dict (K.Rem 'K.RoundUp (P 0) (P 1) ~ P 0)-_test_Rem_RoundUp_P0_P1 =  Dict-_test_Div_RoundUp_P0_P2 :: Dict (K.Div 'K.RoundUp (P 0) (P 2) ~ P 0)-_test_Div_RoundUp_P0_P2 =  Dict-_test_Rem_RoundUp_P0_P2 :: Dict (K.Rem 'K.RoundUp (P 0) (P 2) ~ P 0)-_test_Rem_RoundUp_P0_P2 =  Dict-_test_Div_RoundUp_P0_P3 :: Dict (K.Div 'K.RoundUp (P 0) (P 3) ~ P 0)-_test_Div_RoundUp_P0_P3 =  Dict-_test_Rem_RoundUp_P0_P3 :: Dict (K.Rem 'K.RoundUp (P 0) (P 3) ~ P 0)-_test_Rem_RoundUp_P0_P3 =  Dict-_test_Div_RoundUp_P0_P4 :: Dict (K.Div 'K.RoundUp (P 0) (P 4) ~ P 0)-_test_Div_RoundUp_P0_P4 =  Dict-_test_Rem_RoundUp_P0_P4 :: Dict (K.Rem 'K.RoundUp (P 0) (P 4) ~ P 0)-_test_Rem_RoundUp_P0_P4 =  Dict-_test_Div_RoundUp_P1_N1 :: Dict (K.Div 'K.RoundUp (P 1) (N 1) ~ N 1)-_test_Div_RoundUp_P1_N1 =  Dict-_test_Rem_RoundUp_P1_N1 :: Dict (K.Rem 'K.RoundUp (P 1) (N 1) ~ P 0)-_test_Rem_RoundUp_P1_N1 =  Dict-_test_Div_RoundUp_P1_N2 :: Dict (K.Div 'K.RoundUp (P 1) (N 2) ~ P 0)-_test_Div_RoundUp_P1_N2 =  Dict-_test_Rem_RoundUp_P1_N2 :: Dict (K.Rem 'K.RoundUp (P 1) (N 2) ~ P 1)-_test_Rem_RoundUp_P1_N2 =  Dict-_test_Div_RoundUp_P1_N3 :: Dict (K.Div 'K.RoundUp (P 1) (N 3) ~ P 0)-_test_Div_RoundUp_P1_N3 =  Dict-_test_Rem_RoundUp_P1_N3 :: Dict (K.Rem 'K.RoundUp (P 1) (N 3) ~ P 1)-_test_Rem_RoundUp_P1_N3 =  Dict-_test_Div_RoundUp_P1_N4 :: Dict (K.Div 'K.RoundUp (P 1) (N 4) ~ P 0)-_test_Div_RoundUp_P1_N4 =  Dict-_test_Rem_RoundUp_P1_N4 :: Dict (K.Rem 'K.RoundUp (P 1) (N 4) ~ P 1)-_test_Rem_RoundUp_P1_N4 =  Dict-_test_Div_RoundUp_P1_P1 :: Dict (K.Div 'K.RoundUp (P 1) (P 1) ~ P 1)-_test_Div_RoundUp_P1_P1 =  Dict-_test_Rem_RoundUp_P1_P1 :: Dict (K.Rem 'K.RoundUp (P 1) (P 1) ~ P 0)-_test_Rem_RoundUp_P1_P1 =  Dict-_test_Div_RoundUp_P1_P2 :: Dict (K.Div 'K.RoundUp (P 1) (P 2) ~ P 1)-_test_Div_RoundUp_P1_P2 =  Dict-_test_Rem_RoundUp_P1_P2 :: Dict (K.Rem 'K.RoundUp (P 1) (P 2) ~ N 1)-_test_Rem_RoundUp_P1_P2 =  Dict-_test_Div_RoundUp_P1_P3 :: Dict (K.Div 'K.RoundUp (P 1) (P 3) ~ P 1)-_test_Div_RoundUp_P1_P3 =  Dict-_test_Rem_RoundUp_P1_P3 :: Dict (K.Rem 'K.RoundUp (P 1) (P 3) ~ N 2)-_test_Rem_RoundUp_P1_P3 =  Dict-_test_Div_RoundUp_P1_P4 :: Dict (K.Div 'K.RoundUp (P 1) (P 4) ~ P 1)-_test_Div_RoundUp_P1_P4 =  Dict-_test_Rem_RoundUp_P1_P4 :: Dict (K.Rem 'K.RoundUp (P 1) (P 4) ~ N 3)-_test_Rem_RoundUp_P1_P4 =  Dict-_test_Div_RoundUp_P2_N1 :: Dict (K.Div 'K.RoundUp (P 2) (N 1) ~ N 2)-_test_Div_RoundUp_P2_N1 =  Dict-_test_Rem_RoundUp_P2_N1 :: Dict (K.Rem 'K.RoundUp (P 2) (N 1) ~ P 0)-_test_Rem_RoundUp_P2_N1 =  Dict-_test_Div_RoundUp_P2_N2 :: Dict (K.Div 'K.RoundUp (P 2) (N 2) ~ N 1)-_test_Div_RoundUp_P2_N2 =  Dict-_test_Rem_RoundUp_P2_N2 :: Dict (K.Rem 'K.RoundUp (P 2) (N 2) ~ P 0)-_test_Rem_RoundUp_P2_N2 =  Dict-_test_Div_RoundUp_P2_N3 :: Dict (K.Div 'K.RoundUp (P 2) (N 3) ~ P 0)-_test_Div_RoundUp_P2_N3 =  Dict-_test_Rem_RoundUp_P2_N3 :: Dict (K.Rem 'K.RoundUp (P 2) (N 3) ~ P 2)-_test_Rem_RoundUp_P2_N3 =  Dict-_test_Div_RoundUp_P2_N4 :: Dict (K.Div 'K.RoundUp (P 2) (N 4) ~ P 0)-_test_Div_RoundUp_P2_N4 =  Dict-_test_Rem_RoundUp_P2_N4 :: Dict (K.Rem 'K.RoundUp (P 2) (N 4) ~ P 2)-_test_Rem_RoundUp_P2_N4 =  Dict-_test_Div_RoundUp_P2_P1 :: Dict (K.Div 'K.RoundUp (P 2) (P 1) ~ P 2)-_test_Div_RoundUp_P2_P1 =  Dict-_test_Rem_RoundUp_P2_P1 :: Dict (K.Rem 'K.RoundUp (P 2) (P 1) ~ P 0)-_test_Rem_RoundUp_P2_P1 =  Dict-_test_Div_RoundUp_P2_P2 :: Dict (K.Div 'K.RoundUp (P 2) (P 2) ~ P 1)-_test_Div_RoundUp_P2_P2 =  Dict-_test_Rem_RoundUp_P2_P2 :: Dict (K.Rem 'K.RoundUp (P 2) (P 2) ~ P 0)-_test_Rem_RoundUp_P2_P2 =  Dict-_test_Div_RoundUp_P2_P3 :: Dict (K.Div 'K.RoundUp (P 2) (P 3) ~ P 1)-_test_Div_RoundUp_P2_P3 =  Dict-_test_Rem_RoundUp_P2_P3 :: Dict (K.Rem 'K.RoundUp (P 2) (P 3) ~ N 1)-_test_Rem_RoundUp_P2_P3 =  Dict-_test_Div_RoundUp_P2_P4 :: Dict (K.Div 'K.RoundUp (P 2) (P 4) ~ P 1)-_test_Div_RoundUp_P2_P4 =  Dict-_test_Rem_RoundUp_P2_P4 :: Dict (K.Rem 'K.RoundUp (P 2) (P 4) ~ N 2)-_test_Rem_RoundUp_P2_P4 =  Dict-_test_Div_RoundUp_P3_N1 :: Dict (K.Div 'K.RoundUp (P 3) (N 1) ~ N 3)-_test_Div_RoundUp_P3_N1 =  Dict-_test_Rem_RoundUp_P3_N1 :: Dict (K.Rem 'K.RoundUp (P 3) (N 1) ~ P 0)-_test_Rem_RoundUp_P3_N1 =  Dict-_test_Div_RoundUp_P3_N2 :: Dict (K.Div 'K.RoundUp (P 3) (N 2) ~ N 1)-_test_Div_RoundUp_P3_N2 =  Dict-_test_Rem_RoundUp_P3_N2 :: Dict (K.Rem 'K.RoundUp (P 3) (N 2) ~ P 1)-_test_Rem_RoundUp_P3_N2 =  Dict-_test_Div_RoundUp_P3_N3 :: Dict (K.Div 'K.RoundUp (P 3) (N 3) ~ N 1)-_test_Div_RoundUp_P3_N3 =  Dict-_test_Rem_RoundUp_P3_N3 :: Dict (K.Rem 'K.RoundUp (P 3) (N 3) ~ P 0)-_test_Rem_RoundUp_P3_N3 =  Dict-_test_Div_RoundUp_P3_N4 :: Dict (K.Div 'K.RoundUp (P 3) (N 4) ~ P 0)-_test_Div_RoundUp_P3_N4 =  Dict-_test_Rem_RoundUp_P3_N4 :: Dict (K.Rem 'K.RoundUp (P 3) (N 4) ~ P 3)-_test_Rem_RoundUp_P3_N4 =  Dict-_test_Div_RoundUp_P3_P1 :: Dict (K.Div 'K.RoundUp (P 3) (P 1) ~ P 3)-_test_Div_RoundUp_P3_P1 =  Dict-_test_Rem_RoundUp_P3_P1 :: Dict (K.Rem 'K.RoundUp (P 3) (P 1) ~ P 0)-_test_Rem_RoundUp_P3_P1 =  Dict-_test_Div_RoundUp_P3_P2 :: Dict (K.Div 'K.RoundUp (P 3) (P 2) ~ P 2)-_test_Div_RoundUp_P3_P2 =  Dict-_test_Rem_RoundUp_P3_P2 :: Dict (K.Rem 'K.RoundUp (P 3) (P 2) ~ N 1)-_test_Rem_RoundUp_P3_P2 =  Dict-_test_Div_RoundUp_P3_P3 :: Dict (K.Div 'K.RoundUp (P 3) (P 3) ~ P 1)-_test_Div_RoundUp_P3_P3 =  Dict-_test_Rem_RoundUp_P3_P3 :: Dict (K.Rem 'K.RoundUp (P 3) (P 3) ~ P 0)-_test_Rem_RoundUp_P3_P3 =  Dict-_test_Div_RoundUp_P3_P4 :: Dict (K.Div 'K.RoundUp (P 3) (P 4) ~ P 1)-_test_Div_RoundUp_P3_P4 =  Dict-_test_Rem_RoundUp_P3_P4 :: Dict (K.Rem 'K.RoundUp (P 3) (P 4) ~ N 1)-_test_Rem_RoundUp_P3_P4 =  Dict-_test_Div_RoundUp_P4_N1 :: Dict (K.Div 'K.RoundUp (P 4) (N 1) ~ N 4)-_test_Div_RoundUp_P4_N1 =  Dict-_test_Rem_RoundUp_P4_N1 :: Dict (K.Rem 'K.RoundUp (P 4) (N 1) ~ P 0)-_test_Rem_RoundUp_P4_N1 =  Dict-_test_Div_RoundUp_P4_N2 :: Dict (K.Div 'K.RoundUp (P 4) (N 2) ~ N 2)-_test_Div_RoundUp_P4_N2 =  Dict-_test_Rem_RoundUp_P4_N2 :: Dict (K.Rem 'K.RoundUp (P 4) (N 2) ~ P 0)-_test_Rem_RoundUp_P4_N2 =  Dict-_test_Div_RoundUp_P4_N3 :: Dict (K.Div 'K.RoundUp (P 4) (N 3) ~ N 1)-_test_Div_RoundUp_P4_N3 =  Dict-_test_Rem_RoundUp_P4_N3 :: Dict (K.Rem 'K.RoundUp (P 4) (N 3) ~ P 1)-_test_Rem_RoundUp_P4_N3 =  Dict-_test_Div_RoundUp_P4_N4 :: Dict (K.Div 'K.RoundUp (P 4) (N 4) ~ N 1)-_test_Div_RoundUp_P4_N4 =  Dict-_test_Rem_RoundUp_P4_N4 :: Dict (K.Rem 'K.RoundUp (P 4) (N 4) ~ P 0)-_test_Rem_RoundUp_P4_N4 =  Dict-_test_Div_RoundUp_P4_P1 :: Dict (K.Div 'K.RoundUp (P 4) (P 1) ~ P 4)-_test_Div_RoundUp_P4_P1 =  Dict-_test_Rem_RoundUp_P4_P1 :: Dict (K.Rem 'K.RoundUp (P 4) (P 1) ~ P 0)-_test_Rem_RoundUp_P4_P1 =  Dict-_test_Div_RoundUp_P4_P2 :: Dict (K.Div 'K.RoundUp (P 4) (P 2) ~ P 2)-_test_Div_RoundUp_P4_P2 =  Dict-_test_Rem_RoundUp_P4_P2 :: Dict (K.Rem 'K.RoundUp (P 4) (P 2) ~ P 0)-_test_Rem_RoundUp_P4_P2 =  Dict-_test_Div_RoundUp_P4_P3 :: Dict (K.Div 'K.RoundUp (P 4) (P 3) ~ P 2)-_test_Div_RoundUp_P4_P3 =  Dict-_test_Rem_RoundUp_P4_P3 :: Dict (K.Rem 'K.RoundUp (P 4) (P 3) ~ N 2)-_test_Rem_RoundUp_P4_P3 =  Dict-_test_Div_RoundUp_P4_P4 :: Dict (K.Div 'K.RoundUp (P 4) (P 4) ~ P 1)-_test_Div_RoundUp_P4_P4 =  Dict-_test_Rem_RoundUp_P4_P4 :: Dict (K.Rem 'K.RoundUp (P 4) (P 4) ~ P 0)-_test_Rem_RoundUp_P4_P4 =  Dict-_test_Div_RoundZero_N1_N1 :: Dict (K.Div 'K.RoundZero (N 1) (N 1) ~ P 1)-_test_Div_RoundZero_N1_N1 =  Dict-_test_Rem_RoundZero_N1_N1 :: Dict (K.Rem 'K.RoundZero (N 1) (N 1) ~ P 0)-_test_Rem_RoundZero_N1_N1 =  Dict-_test_Div_RoundZero_N1_N2 :: Dict (K.Div 'K.RoundZero (N 1) (N 2) ~ P 0)-_test_Div_RoundZero_N1_N2 =  Dict-_test_Rem_RoundZero_N1_N2 :: Dict (K.Rem 'K.RoundZero (N 1) (N 2) ~ N 1)-_test_Rem_RoundZero_N1_N2 =  Dict-_test_Div_RoundZero_N1_N3 :: Dict (K.Div 'K.RoundZero (N 1) (N 3) ~ P 0)-_test_Div_RoundZero_N1_N3 =  Dict-_test_Rem_RoundZero_N1_N3 :: Dict (K.Rem 'K.RoundZero (N 1) (N 3) ~ N 1)-_test_Rem_RoundZero_N1_N3 =  Dict-_test_Div_RoundZero_N1_N4 :: Dict (K.Div 'K.RoundZero (N 1) (N 4) ~ P 0)-_test_Div_RoundZero_N1_N4 =  Dict-_test_Rem_RoundZero_N1_N4 :: Dict (K.Rem 'K.RoundZero (N 1) (N 4) ~ N 1)-_test_Rem_RoundZero_N1_N4 =  Dict-_test_Div_RoundZero_N1_P1 :: Dict (K.Div 'K.RoundZero (N 1) (P 1) ~ N 1)-_test_Div_RoundZero_N1_P1 =  Dict-_test_Rem_RoundZero_N1_P1 :: Dict (K.Rem 'K.RoundZero (N 1) (P 1) ~ P 0)-_test_Rem_RoundZero_N1_P1 =  Dict-_test_Div_RoundZero_N1_P2 :: Dict (K.Div 'K.RoundZero (N 1) (P 2) ~ P 0)-_test_Div_RoundZero_N1_P2 =  Dict-_test_Rem_RoundZero_N1_P2 :: Dict (K.Rem 'K.RoundZero (N 1) (P 2) ~ N 1)-_test_Rem_RoundZero_N1_P2 =  Dict-_test_Div_RoundZero_N1_P3 :: Dict (K.Div 'K.RoundZero (N 1) (P 3) ~ P 0)-_test_Div_RoundZero_N1_P3 =  Dict-_test_Rem_RoundZero_N1_P3 :: Dict (K.Rem 'K.RoundZero (N 1) (P 3) ~ N 1)-_test_Rem_RoundZero_N1_P3 =  Dict-_test_Div_RoundZero_N1_P4 :: Dict (K.Div 'K.RoundZero (N 1) (P 4) ~ P 0)-_test_Div_RoundZero_N1_P4 =  Dict-_test_Rem_RoundZero_N1_P4 :: Dict (K.Rem 'K.RoundZero (N 1) (P 4) ~ N 1)-_test_Rem_RoundZero_N1_P4 =  Dict-_test_Div_RoundZero_N2_N1 :: Dict (K.Div 'K.RoundZero (N 2) (N 1) ~ P 2)-_test_Div_RoundZero_N2_N1 =  Dict-_test_Rem_RoundZero_N2_N1 :: Dict (K.Rem 'K.RoundZero (N 2) (N 1) ~ P 0)-_test_Rem_RoundZero_N2_N1 =  Dict-_test_Div_RoundZero_N2_N2 :: Dict (K.Div 'K.RoundZero (N 2) (N 2) ~ P 1)-_test_Div_RoundZero_N2_N2 =  Dict-_test_Rem_RoundZero_N2_N2 :: Dict (K.Rem 'K.RoundZero (N 2) (N 2) ~ P 0)-_test_Rem_RoundZero_N2_N2 =  Dict-_test_Div_RoundZero_N2_N3 :: Dict (K.Div 'K.RoundZero (N 2) (N 3) ~ P 0)-_test_Div_RoundZero_N2_N3 =  Dict-_test_Rem_RoundZero_N2_N3 :: Dict (K.Rem 'K.RoundZero (N 2) (N 3) ~ N 2)-_test_Rem_RoundZero_N2_N3 =  Dict-_test_Div_RoundZero_N2_N4 :: Dict (K.Div 'K.RoundZero (N 2) (N 4) ~ P 0)-_test_Div_RoundZero_N2_N4 =  Dict-_test_Rem_RoundZero_N2_N4 :: Dict (K.Rem 'K.RoundZero (N 2) (N 4) ~ N 2)-_test_Rem_RoundZero_N2_N4 =  Dict-_test_Div_RoundZero_N2_P1 :: Dict (K.Div 'K.RoundZero (N 2) (P 1) ~ N 2)-_test_Div_RoundZero_N2_P1 =  Dict-_test_Rem_RoundZero_N2_P1 :: Dict (K.Rem 'K.RoundZero (N 2) (P 1) ~ P 0)-_test_Rem_RoundZero_N2_P1 =  Dict-_test_Div_RoundZero_N2_P2 :: Dict (K.Div 'K.RoundZero (N 2) (P 2) ~ N 1)-_test_Div_RoundZero_N2_P2 =  Dict-_test_Rem_RoundZero_N2_P2 :: Dict (K.Rem 'K.RoundZero (N 2) (P 2) ~ P 0)-_test_Rem_RoundZero_N2_P2 =  Dict-_test_Div_RoundZero_N2_P3 :: Dict (K.Div 'K.RoundZero (N 2) (P 3) ~ P 0)-_test_Div_RoundZero_N2_P3 =  Dict-_test_Rem_RoundZero_N2_P3 :: Dict (K.Rem 'K.RoundZero (N 2) (P 3) ~ N 2)-_test_Rem_RoundZero_N2_P3 =  Dict-_test_Div_RoundZero_N2_P4 :: Dict (K.Div 'K.RoundZero (N 2) (P 4) ~ P 0)-_test_Div_RoundZero_N2_P4 =  Dict-_test_Rem_RoundZero_N2_P4 :: Dict (K.Rem 'K.RoundZero (N 2) (P 4) ~ N 2)-_test_Rem_RoundZero_N2_P4 =  Dict-_test_Div_RoundZero_N3_N1 :: Dict (K.Div 'K.RoundZero (N 3) (N 1) ~ P 3)-_test_Div_RoundZero_N3_N1 =  Dict-_test_Rem_RoundZero_N3_N1 :: Dict (K.Rem 'K.RoundZero (N 3) (N 1) ~ P 0)-_test_Rem_RoundZero_N3_N1 =  Dict-_test_Div_RoundZero_N3_N2 :: Dict (K.Div 'K.RoundZero (N 3) (N 2) ~ P 1)-_test_Div_RoundZero_N3_N2 =  Dict-_test_Rem_RoundZero_N3_N2 :: Dict (K.Rem 'K.RoundZero (N 3) (N 2) ~ N 1)-_test_Rem_RoundZero_N3_N2 =  Dict-_test_Div_RoundZero_N3_N3 :: Dict (K.Div 'K.RoundZero (N 3) (N 3) ~ P 1)-_test_Div_RoundZero_N3_N3 =  Dict-_test_Rem_RoundZero_N3_N3 :: Dict (K.Rem 'K.RoundZero (N 3) (N 3) ~ P 0)-_test_Rem_RoundZero_N3_N3 =  Dict-_test_Div_RoundZero_N3_N4 :: Dict (K.Div 'K.RoundZero (N 3) (N 4) ~ P 0)-_test_Div_RoundZero_N3_N4 =  Dict-_test_Rem_RoundZero_N3_N4 :: Dict (K.Rem 'K.RoundZero (N 3) (N 4) ~ N 3)-_test_Rem_RoundZero_N3_N4 =  Dict-_test_Div_RoundZero_N3_P1 :: Dict (K.Div 'K.RoundZero (N 3) (P 1) ~ N 3)-_test_Div_RoundZero_N3_P1 =  Dict-_test_Rem_RoundZero_N3_P1 :: Dict (K.Rem 'K.RoundZero (N 3) (P 1) ~ P 0)-_test_Rem_RoundZero_N3_P1 =  Dict-_test_Div_RoundZero_N3_P2 :: Dict (K.Div 'K.RoundZero (N 3) (P 2) ~ N 1)-_test_Div_RoundZero_N3_P2 =  Dict-_test_Rem_RoundZero_N3_P2 :: Dict (K.Rem 'K.RoundZero (N 3) (P 2) ~ N 1)-_test_Rem_RoundZero_N3_P2 =  Dict-_test_Div_RoundZero_N3_P3 :: Dict (K.Div 'K.RoundZero (N 3) (P 3) ~ N 1)-_test_Div_RoundZero_N3_P3 =  Dict-_test_Rem_RoundZero_N3_P3 :: Dict (K.Rem 'K.RoundZero (N 3) (P 3) ~ P 0)-_test_Rem_RoundZero_N3_P3 =  Dict-_test_Div_RoundZero_N3_P4 :: Dict (K.Div 'K.RoundZero (N 3) (P 4) ~ P 0)-_test_Div_RoundZero_N3_P4 =  Dict-_test_Rem_RoundZero_N3_P4 :: Dict (K.Rem 'K.RoundZero (N 3) (P 4) ~ N 3)-_test_Rem_RoundZero_N3_P4 =  Dict-_test_Div_RoundZero_N4_N1 :: Dict (K.Div 'K.RoundZero (N 4) (N 1) ~ P 4)-_test_Div_RoundZero_N4_N1 =  Dict-_test_Rem_RoundZero_N4_N1 :: Dict (K.Rem 'K.RoundZero (N 4) (N 1) ~ P 0)-_test_Rem_RoundZero_N4_N1 =  Dict-_test_Div_RoundZero_N4_N2 :: Dict (K.Div 'K.RoundZero (N 4) (N 2) ~ P 2)-_test_Div_RoundZero_N4_N2 =  Dict-_test_Rem_RoundZero_N4_N2 :: Dict (K.Rem 'K.RoundZero (N 4) (N 2) ~ P 0)-_test_Rem_RoundZero_N4_N2 =  Dict-_test_Div_RoundZero_N4_N3 :: Dict (K.Div 'K.RoundZero (N 4) (N 3) ~ P 1)-_test_Div_RoundZero_N4_N3 =  Dict-_test_Rem_RoundZero_N4_N3 :: Dict (K.Rem 'K.RoundZero (N 4) (N 3) ~ N 1)-_test_Rem_RoundZero_N4_N3 =  Dict-_test_Div_RoundZero_N4_N4 :: Dict (K.Div 'K.RoundZero (N 4) (N 4) ~ P 1)-_test_Div_RoundZero_N4_N4 =  Dict-_test_Rem_RoundZero_N4_N4 :: Dict (K.Rem 'K.RoundZero (N 4) (N 4) ~ P 0)-_test_Rem_RoundZero_N4_N4 =  Dict-_test_Div_RoundZero_N4_P1 :: Dict (K.Div 'K.RoundZero (N 4) (P 1) ~ N 4)-_test_Div_RoundZero_N4_P1 =  Dict-_test_Rem_RoundZero_N4_P1 :: Dict (K.Rem 'K.RoundZero (N 4) (P 1) ~ P 0)-_test_Rem_RoundZero_N4_P1 =  Dict-_test_Div_RoundZero_N4_P2 :: Dict (K.Div 'K.RoundZero (N 4) (P 2) ~ N 2)-_test_Div_RoundZero_N4_P2 =  Dict-_test_Rem_RoundZero_N4_P2 :: Dict (K.Rem 'K.RoundZero (N 4) (P 2) ~ P 0)-_test_Rem_RoundZero_N4_P2 =  Dict-_test_Div_RoundZero_N4_P3 :: Dict (K.Div 'K.RoundZero (N 4) (P 3) ~ N 1)-_test_Div_RoundZero_N4_P3 =  Dict-_test_Rem_RoundZero_N4_P3 :: Dict (K.Rem 'K.RoundZero (N 4) (P 3) ~ N 1)-_test_Rem_RoundZero_N4_P3 =  Dict-_test_Div_RoundZero_N4_P4 :: Dict (K.Div 'K.RoundZero (N 4) (P 4) ~ N 1)-_test_Div_RoundZero_N4_P4 =  Dict-_test_Rem_RoundZero_N4_P4 :: Dict (K.Rem 'K.RoundZero (N 4) (P 4) ~ P 0)-_test_Rem_RoundZero_N4_P4 =  Dict-_test_Div_RoundZero_P0_N1 :: Dict (K.Div 'K.RoundZero (P 0) (N 1) ~ P 0)-_test_Div_RoundZero_P0_N1 =  Dict-_test_Rem_RoundZero_P0_N1 :: Dict (K.Rem 'K.RoundZero (P 0) (N 1) ~ P 0)-_test_Rem_RoundZero_P0_N1 =  Dict-_test_Div_RoundZero_P0_N2 :: Dict (K.Div 'K.RoundZero (P 0) (N 2) ~ P 0)-_test_Div_RoundZero_P0_N2 =  Dict-_test_Rem_RoundZero_P0_N2 :: Dict (K.Rem 'K.RoundZero (P 0) (N 2) ~ P 0)-_test_Rem_RoundZero_P0_N2 =  Dict-_test_Div_RoundZero_P0_N3 :: Dict (K.Div 'K.RoundZero (P 0) (N 3) ~ P 0)-_test_Div_RoundZero_P0_N3 =  Dict-_test_Rem_RoundZero_P0_N3 :: Dict (K.Rem 'K.RoundZero (P 0) (N 3) ~ P 0)-_test_Rem_RoundZero_P0_N3 =  Dict-_test_Div_RoundZero_P0_N4 :: Dict (K.Div 'K.RoundZero (P 0) (N 4) ~ P 0)-_test_Div_RoundZero_P0_N4 =  Dict-_test_Rem_RoundZero_P0_N4 :: Dict (K.Rem 'K.RoundZero (P 0) (N 4) ~ P 0)-_test_Rem_RoundZero_P0_N4 =  Dict-_test_Div_RoundZero_P0_P1 :: Dict (K.Div 'K.RoundZero (P 0) (P 1) ~ P 0)-_test_Div_RoundZero_P0_P1 =  Dict-_test_Rem_RoundZero_P0_P1 :: Dict (K.Rem 'K.RoundZero (P 0) (P 1) ~ P 0)-_test_Rem_RoundZero_P0_P1 =  Dict-_test_Div_RoundZero_P0_P2 :: Dict (K.Div 'K.RoundZero (P 0) (P 2) ~ P 0)-_test_Div_RoundZero_P0_P2 =  Dict-_test_Rem_RoundZero_P0_P2 :: Dict (K.Rem 'K.RoundZero (P 0) (P 2) ~ P 0)-_test_Rem_RoundZero_P0_P2 =  Dict-_test_Div_RoundZero_P0_P3 :: Dict (K.Div 'K.RoundZero (P 0) (P 3) ~ P 0)-_test_Div_RoundZero_P0_P3 =  Dict-_test_Rem_RoundZero_P0_P3 :: Dict (K.Rem 'K.RoundZero (P 0) (P 3) ~ P 0)-_test_Rem_RoundZero_P0_P3 =  Dict-_test_Div_RoundZero_P0_P4 :: Dict (K.Div 'K.RoundZero (P 0) (P 4) ~ P 0)-_test_Div_RoundZero_P0_P4 =  Dict-_test_Rem_RoundZero_P0_P4 :: Dict (K.Rem 'K.RoundZero (P 0) (P 4) ~ P 0)-_test_Rem_RoundZero_P0_P4 =  Dict-_test_Div_RoundZero_P1_N1 :: Dict (K.Div 'K.RoundZero (P 1) (N 1) ~ N 1)-_test_Div_RoundZero_P1_N1 =  Dict-_test_Rem_RoundZero_P1_N1 :: Dict (K.Rem 'K.RoundZero (P 1) (N 1) ~ P 0)-_test_Rem_RoundZero_P1_N1 =  Dict-_test_Div_RoundZero_P1_N2 :: Dict (K.Div 'K.RoundZero (P 1) (N 2) ~ P 0)-_test_Div_RoundZero_P1_N2 =  Dict-_test_Rem_RoundZero_P1_N2 :: Dict (K.Rem 'K.RoundZero (P 1) (N 2) ~ P 1)-_test_Rem_RoundZero_P1_N2 =  Dict-_test_Div_RoundZero_P1_N3 :: Dict (K.Div 'K.RoundZero (P 1) (N 3) ~ P 0)-_test_Div_RoundZero_P1_N3 =  Dict-_test_Rem_RoundZero_P1_N3 :: Dict (K.Rem 'K.RoundZero (P 1) (N 3) ~ P 1)-_test_Rem_RoundZero_P1_N3 =  Dict-_test_Div_RoundZero_P1_N4 :: Dict (K.Div 'K.RoundZero (P 1) (N 4) ~ P 0)-_test_Div_RoundZero_P1_N4 =  Dict-_test_Rem_RoundZero_P1_N4 :: Dict (K.Rem 'K.RoundZero (P 1) (N 4) ~ P 1)-_test_Rem_RoundZero_P1_N4 =  Dict-_test_Div_RoundZero_P1_P1 :: Dict (K.Div 'K.RoundZero (P 1) (P 1) ~ P 1)-_test_Div_RoundZero_P1_P1 =  Dict-_test_Rem_RoundZero_P1_P1 :: Dict (K.Rem 'K.RoundZero (P 1) (P 1) ~ P 0)-_test_Rem_RoundZero_P1_P1 =  Dict-_test_Div_RoundZero_P1_P2 :: Dict (K.Div 'K.RoundZero (P 1) (P 2) ~ P 0)-_test_Div_RoundZero_P1_P2 =  Dict-_test_Rem_RoundZero_P1_P2 :: Dict (K.Rem 'K.RoundZero (P 1) (P 2) ~ P 1)-_test_Rem_RoundZero_P1_P2 =  Dict-_test_Div_RoundZero_P1_P3 :: Dict (K.Div 'K.RoundZero (P 1) (P 3) ~ P 0)-_test_Div_RoundZero_P1_P3 =  Dict-_test_Rem_RoundZero_P1_P3 :: Dict (K.Rem 'K.RoundZero (P 1) (P 3) ~ P 1)-_test_Rem_RoundZero_P1_P3 =  Dict-_test_Div_RoundZero_P1_P4 :: Dict (K.Div 'K.RoundZero (P 1) (P 4) ~ P 0)-_test_Div_RoundZero_P1_P4 =  Dict-_test_Rem_RoundZero_P1_P4 :: Dict (K.Rem 'K.RoundZero (P 1) (P 4) ~ P 1)-_test_Rem_RoundZero_P1_P4 =  Dict-_test_Div_RoundZero_P2_N1 :: Dict (K.Div 'K.RoundZero (P 2) (N 1) ~ N 2)-_test_Div_RoundZero_P2_N1 =  Dict-_test_Rem_RoundZero_P2_N1 :: Dict (K.Rem 'K.RoundZero (P 2) (N 1) ~ P 0)-_test_Rem_RoundZero_P2_N1 =  Dict-_test_Div_RoundZero_P2_N2 :: Dict (K.Div 'K.RoundZero (P 2) (N 2) ~ N 1)-_test_Div_RoundZero_P2_N2 =  Dict-_test_Rem_RoundZero_P2_N2 :: Dict (K.Rem 'K.RoundZero (P 2) (N 2) ~ P 0)-_test_Rem_RoundZero_P2_N2 =  Dict-_test_Div_RoundZero_P2_N3 :: Dict (K.Div 'K.RoundZero (P 2) (N 3) ~ P 0)-_test_Div_RoundZero_P2_N3 =  Dict-_test_Rem_RoundZero_P2_N3 :: Dict (K.Rem 'K.RoundZero (P 2) (N 3) ~ P 2)-_test_Rem_RoundZero_P2_N3 =  Dict-_test_Div_RoundZero_P2_N4 :: Dict (K.Div 'K.RoundZero (P 2) (N 4) ~ P 0)-_test_Div_RoundZero_P2_N4 =  Dict-_test_Rem_RoundZero_P2_N4 :: Dict (K.Rem 'K.RoundZero (P 2) (N 4) ~ P 2)-_test_Rem_RoundZero_P2_N4 =  Dict-_test_Div_RoundZero_P2_P1 :: Dict (K.Div 'K.RoundZero (P 2) (P 1) ~ P 2)-_test_Div_RoundZero_P2_P1 =  Dict-_test_Rem_RoundZero_P2_P1 :: Dict (K.Rem 'K.RoundZero (P 2) (P 1) ~ P 0)-_test_Rem_RoundZero_P2_P1 =  Dict-_test_Div_RoundZero_P2_P2 :: Dict (K.Div 'K.RoundZero (P 2) (P 2) ~ P 1)-_test_Div_RoundZero_P2_P2 =  Dict-_test_Rem_RoundZero_P2_P2 :: Dict (K.Rem 'K.RoundZero (P 2) (P 2) ~ P 0)-_test_Rem_RoundZero_P2_P2 =  Dict-_test_Div_RoundZero_P2_P3 :: Dict (K.Div 'K.RoundZero (P 2) (P 3) ~ P 0)-_test_Div_RoundZero_P2_P3 =  Dict-_test_Rem_RoundZero_P2_P3 :: Dict (K.Rem 'K.RoundZero (P 2) (P 3) ~ P 2)-_test_Rem_RoundZero_P2_P3 =  Dict-_test_Div_RoundZero_P2_P4 :: Dict (K.Div 'K.RoundZero (P 2) (P 4) ~ P 0)-_test_Div_RoundZero_P2_P4 =  Dict-_test_Rem_RoundZero_P2_P4 :: Dict (K.Rem 'K.RoundZero (P 2) (P 4) ~ P 2)-_test_Rem_RoundZero_P2_P4 =  Dict-_test_Div_RoundZero_P3_N1 :: Dict (K.Div 'K.RoundZero (P 3) (N 1) ~ N 3)-_test_Div_RoundZero_P3_N1 =  Dict-_test_Rem_RoundZero_P3_N1 :: Dict (K.Rem 'K.RoundZero (P 3) (N 1) ~ P 0)-_test_Rem_RoundZero_P3_N1 =  Dict-_test_Div_RoundZero_P3_N2 :: Dict (K.Div 'K.RoundZero (P 3) (N 2) ~ N 1)-_test_Div_RoundZero_P3_N2 =  Dict-_test_Rem_RoundZero_P3_N2 :: Dict (K.Rem 'K.RoundZero (P 3) (N 2) ~ P 1)-_test_Rem_RoundZero_P3_N2 =  Dict-_test_Div_RoundZero_P3_N3 :: Dict (K.Div 'K.RoundZero (P 3) (N 3) ~ N 1)-_test_Div_RoundZero_P3_N3 =  Dict-_test_Rem_RoundZero_P3_N3 :: Dict (K.Rem 'K.RoundZero (P 3) (N 3) ~ P 0)-_test_Rem_RoundZero_P3_N3 =  Dict-_test_Div_RoundZero_P3_N4 :: Dict (K.Div 'K.RoundZero (P 3) (N 4) ~ P 0)-_test_Div_RoundZero_P3_N4 =  Dict-_test_Rem_RoundZero_P3_N4 :: Dict (K.Rem 'K.RoundZero (P 3) (N 4) ~ P 3)-_test_Rem_RoundZero_P3_N4 =  Dict-_test_Div_RoundZero_P3_P1 :: Dict (K.Div 'K.RoundZero (P 3) (P 1) ~ P 3)-_test_Div_RoundZero_P3_P1 =  Dict-_test_Rem_RoundZero_P3_P1 :: Dict (K.Rem 'K.RoundZero (P 3) (P 1) ~ P 0)-_test_Rem_RoundZero_P3_P1 =  Dict-_test_Div_RoundZero_P3_P2 :: Dict (K.Div 'K.RoundZero (P 3) (P 2) ~ P 1)-_test_Div_RoundZero_P3_P2 =  Dict-_test_Rem_RoundZero_P3_P2 :: Dict (K.Rem 'K.RoundZero (P 3) (P 2) ~ P 1)-_test_Rem_RoundZero_P3_P2 =  Dict-_test_Div_RoundZero_P3_P3 :: Dict (K.Div 'K.RoundZero (P 3) (P 3) ~ P 1)-_test_Div_RoundZero_P3_P3 =  Dict-_test_Rem_RoundZero_P3_P3 :: Dict (K.Rem 'K.RoundZero (P 3) (P 3) ~ P 0)-_test_Rem_RoundZero_P3_P3 =  Dict-_test_Div_RoundZero_P3_P4 :: Dict (K.Div 'K.RoundZero (P 3) (P 4) ~ P 0)-_test_Div_RoundZero_P3_P4 =  Dict-_test_Rem_RoundZero_P3_P4 :: Dict (K.Rem 'K.RoundZero (P 3) (P 4) ~ P 3)-_test_Rem_RoundZero_P3_P4 =  Dict-_test_Div_RoundZero_P4_N1 :: Dict (K.Div 'K.RoundZero (P 4) (N 1) ~ N 4)-_test_Div_RoundZero_P4_N1 =  Dict-_test_Rem_RoundZero_P4_N1 :: Dict (K.Rem 'K.RoundZero (P 4) (N 1) ~ P 0)-_test_Rem_RoundZero_P4_N1 =  Dict-_test_Div_RoundZero_P4_N2 :: Dict (K.Div 'K.RoundZero (P 4) (N 2) ~ N 2)-_test_Div_RoundZero_P4_N2 =  Dict-_test_Rem_RoundZero_P4_N2 :: Dict (K.Rem 'K.RoundZero (P 4) (N 2) ~ P 0)-_test_Rem_RoundZero_P4_N2 =  Dict-_test_Div_RoundZero_P4_N3 :: Dict (K.Div 'K.RoundZero (P 4) (N 3) ~ N 1)-_test_Div_RoundZero_P4_N3 =  Dict-_test_Rem_RoundZero_P4_N3 :: Dict (K.Rem 'K.RoundZero (P 4) (N 3) ~ P 1)-_test_Rem_RoundZero_P4_N3 =  Dict-_test_Div_RoundZero_P4_N4 :: Dict (K.Div 'K.RoundZero (P 4) (N 4) ~ N 1)-_test_Div_RoundZero_P4_N4 =  Dict-_test_Rem_RoundZero_P4_N4 :: Dict (K.Rem 'K.RoundZero (P 4) (N 4) ~ P 0)-_test_Rem_RoundZero_P4_N4 =  Dict-_test_Div_RoundZero_P4_P1 :: Dict (K.Div 'K.RoundZero (P 4) (P 1) ~ P 4)-_test_Div_RoundZero_P4_P1 =  Dict-_test_Rem_RoundZero_P4_P1 :: Dict (K.Rem 'K.RoundZero (P 4) (P 1) ~ P 0)-_test_Rem_RoundZero_P4_P1 =  Dict-_test_Div_RoundZero_P4_P2 :: Dict (K.Div 'K.RoundZero (P 4) (P 2) ~ P 2)-_test_Div_RoundZero_P4_P2 =  Dict-_test_Rem_RoundZero_P4_P2 :: Dict (K.Rem 'K.RoundZero (P 4) (P 2) ~ P 0)-_test_Rem_RoundZero_P4_P2 =  Dict-_test_Div_RoundZero_P4_P3 :: Dict (K.Div 'K.RoundZero (P 4) (P 3) ~ P 1)-_test_Div_RoundZero_P4_P3 =  Dict-_test_Rem_RoundZero_P4_P3 :: Dict (K.Rem 'K.RoundZero (P 4) (P 3) ~ P 1)-_test_Rem_RoundZero_P4_P3 =  Dict-_test_Div_RoundZero_P4_P4 :: Dict (K.Div 'K.RoundZero (P 4) (P 4) ~ P 1)-_test_Div_RoundZero_P4_P4 =  Dict-_test_Rem_RoundZero_P4_P4 :: Dict (K.Rem 'K.RoundZero (P 4) (P 4) ~ P 0)-_test_Rem_RoundZero_P4_P4 =  Dict+import Data.Singletons+import Data.String+import GHC.Exts (Constraint)+import GHC.TypeLits qualified as L+import Prelude hiding (Integer)+import Prelude qualified as P+import Prelude.Singletons qualified as P+import System.Exit+import Text.Read+import Text.ParserCombinators.ReadP qualified as ReadP+import Text.ParserCombinators.ReadPrec qualified as ReadPrec+import Text.Show.Singletons++import KindInteger (P, N, Z, pattern SP, pattern SN, pattern SZ,+  SInteger, pattern SInteger)+import KindInteger qualified as K++--------------------------------------------------------------------------------++data Dict (c :: Constraint) where+  Dict :: c => Dict c++readPrecMaybe :: ReadPrec a -> String -> Maybe a+readPrecMaybe p s =+  case readPrec_to_S (p <* ReadPrec.lift ReadP.skipSpaces) 0 s of+    [(x, "")] -> Just x+    _         -> Nothing++--------------------------------------------------------------------------------++_testShow =  Dict+_testShow :: Dict+  ( P.Show_ Z ~ "0"+  , P.Show_ (P 1) ~ "1"+  , P.Show_ (N 2) ~ "-2"+  , P.ShowsPrec AppPrec (N 2) "x" ~ "-2x"+  , P.ShowsPrec AppPrec1 (N 2) "x" ~ "(-2)x"+  , P.ShowsPrec AppPrec1 (P 2) "x" ~ "2x"+  )++_testShowLit =  Dict+_testShowLit :: Dict+  ( K.ShowLit Z ~ "Z"+  , K.ShowLit (P 1) ~ "P 1"+  , K.ShowLit (N 2) ~ "N 2"+  , K.ShowsPrecLit AppPrec (N 2) "x" ~ "N 2x"+  , K.ShowsPrecLit AppPrec1 (N 2) "x" ~ "(N 2)x"+  , K.ShowsPrecLit AppPrec1 (P 2) "x" ~ "(P 2)x"+  )++_testEq =  Dict+_testEq :: Dict+  ( 'True ~ (Z P.== Z)+  , 'True ~ (Z P.== Z)+  , 'True ~ (Z P.== Z)+  , 'True ~ (Z P.== Z)++  , 'True ~ (Z P./= P 1)+  , 'True ~ (Z P./= N 1)++  , 'True ~ (Z P./= N 1)+  , 'True ~ (Z P./= N 1)++  , 'True ~ (P 1 P./= Z)+  , 'True ~ (P 1 P./= Z)++  , 'True ~ (N 1 P./= Z)+  , 'True ~ (N 1 P./= Z)+  )++_testCmp =  Dict+_testCmp :: Dict+  ( Z <= Z+  , Z <= Z+  , Z <= Z+  , Z <= Z++  , N 2 <= N 1+  , N 1 <= Z+  , Z <= P 1++  , Z <= P 1+  , P 1 <= P 2+  )++_testAdd  = Dict+_testAdd :: Dict+  ( Z ~ Z P.+ Z+  , Z ~ Z P.+ Z+  , Z ~ Z P.+ Z+  , Z ~ Z P.+ Z++  , P 1 ~ P 1 P.+ Z+  , N 1 ~ N 1 P.+ Z+  , P 1 ~ P 1 P.+ Z+  , N 1 ~ N 1 P.+ Z++  , P 1 ~ Z P.+ P 1+  , N 1 ~ Z P.+ N 1+  , N 1 ~ Z P.+ N 1+  , P 1 ~ Z P.+ P 1++  , P 2 ~ P 1 P.+ P 1+  , N 2 ~ N 1 P.+ N 1+  , Z ~ P 1 P.+ N 1+  , Z ~ N 1 P.+ P 1+  )++_testMul  = Dict+_testMul :: Dict+  ( Z ~ Z P.* Z+  , Z ~ Z P.* Z+  , Z ~ Z P.* Z+  , Z ~ Z P.* Z++  , Z ~ P 1 P.* Z+  , Z ~ N 1 P.* Z+  , Z ~ P 1 P.* Z+  , Z ~ N 1 P.* Z++  , Z ~ Z P.* P 1+  , Z ~ Z P.* N 1+  , Z ~ Z P.* N 1+  , Z ~ Z P.* P 1++  , P 1 ~ P 1 P.* P 1+  , P 1 ~ N 1 P.* N 1+  , N 1 ~ P 1 P.* N 1+  , N 1 ~ N 1 P.* P 1++  , P 2 ~ P 2 P.* P 1+  , P 2 ~ N 2 P.* N 1+  , N 2 ~ P 2 P.* N 1+  , N 2 ~ N 2 P.* P 1++  , P 6 ~ P 2 P.* P 3+  , P 6 ~ N 2 P.* N 3+  , N 6 ~ P 2 P.* N 3+  , N 6 ~ N 2 P.* P 3+  )++_testLog2 =  Dict+_testLog2 :: Dict+  ( 0 ~ K.Log2 (P 1)+  , 1 ~ K.Log2 (P 2)+  , 1 ~ K.Log2 (P 3)+  , 2 ~ K.Log2 (P 4)+  , 2 ~ K.Log2 (P 5)+  , 2 ~ K.Log2 (P 6)+  , 2 ~ K.Log2 (P 7)+  , 3 ~ K.Log2 (P 8)+  , 3 ~ K.Log2 (P 9)+  , 3 ~ K.Log2 (P 10)+  , 3 ~ K.Log2 (P 11)+  , 3 ~ K.Log2 (P 12)+  , 3 ~ K.Log2 (P 13)+  , 3 ~ K.Log2 (P 14)+  , 3 ~ K.Log2 (P 15)+  , 4 ~ K.Log2 (P 16)+  , 4 ~ K.Log2 (P 17)+  , 4 ~ K.Log2 (P 18)+  , 4 ~ K.Log2 (P 19)+  , 4 ~ K.Log2 (P 20)+  , 4 ~ K.Log2 (P 21)+  , 4 ~ K.Log2 (P 22)+  , 4 ~ K.Log2 (P 23)+  , 4 ~ K.Log2 (P 24)+  , 4 ~ K.Log2 (P 25)+  , 4 ~ K.Log2 (P 26)+  , 4 ~ K.Log2 (P 27)+  , 4 ~ K.Log2 (P 28)+  , 4 ~ K.Log2 (P 29)+  , 4 ~ K.Log2 (P 30)+  , 4 ~ K.Log2 (P 31)+  , 5 ~ K.Log2 (P 32)+  )++_testNegate =  Dict+_testNegate :: Dict+  ( Z ~ P.Negate Z+  , Z ~ P.Negate Z+  , N 1 ~ P.Negate (P 1)+  , P 1 ~ P.Negate (N 1)+  , N 2 ~ P.Negate (P 2)+  , P 2 ~ P.Negate (N 2)+  )++_testSign =  Dict+_testSign :: Dict+  ( Z ~ P.Signum Z+  , Z ~ P.Signum Z+  , P 1 ~ P.Signum (P 1)+  , N 1 ~ P.Signum (N 1)+  , P 1 ~ P.Signum (P 2)+  , N 1 ~ P.Signum (N 2)+  )++_testAbs =  Dict+_testAbs :: Dict+  ( 0 ~ K.Abs Z+  , 0 ~ K.Abs Z+  , 1 ~ K.Abs (P 1)+  , 1 ~ K.Abs (N 1)+  , 2 ~ K.Abs (P 2)+  , 2 ~ K.Abs (N 2)+  )++_testEven =  Dict+_testEven :: Dict+  ( 'True  ~ K.Even Z+  , 'True  ~ K.Even Z+  , 'False ~ K.Even (P 1)+  , 'False ~ K.Even (N 1)+  , 'True  ~ K.Even (P 2)+  , 'True  ~ K.Even (N 2)+  )++_testOdd =  Dict+_testOdd :: Dict+  ( 'False  ~ K.Odd Z+  , 'False  ~ K.Odd Z+  , 'True   ~ K.Odd (P 1)+  , 'True   ~ K.Odd (N 1)+  , 'False  ~ K.Odd (P 2)+  , 'False  ~ K.Odd (N 2)+  )++_testGCD =  Dict+_testGCD :: Dict+  ( 0 ~ K.GCD Z Z+  , 0 ~ K.GCD Z Z+  , 0 ~ K.GCD Z Z+  , 0 ~ K.GCD Z Z++  , 1 ~ K.GCD (P 1) Z+  , 1 ~ K.GCD (P 1) Z+  , 1 ~ K.GCD (N 1) Z+  , 1 ~ K.GCD (N 1) Z++  , 1 ~ K.GCD Z (P 1)+  , 1 ~ K.GCD Z (N 1)+  , 1 ~ K.GCD Z (P 1)+  , 1 ~ K.GCD Z (N 1)++  , 1 ~ K.GCD (P 1) (P 2)+  , 1 ~ K.GCD (P 1) (N 2)+  , 1 ~ K.GCD (N 1) (P 2)+  , 1 ~ K.GCD (N 1) (N 2)++  , 1 ~ K.GCD (P 2) (P 1)+  , 1 ~ K.GCD (P 2) (N 1)+  , 1 ~ K.GCD (N 2) (P 1)+  , 1 ~ K.GCD (N 2) (N 1)++  , 3 ~ K.GCD (P 6) (P 9)+  , 3 ~ K.GCD (P 6) (N 9)+  , 3 ~ K.GCD (N 6) (P 9)+  , 3 ~ K.GCD (N 6) (N 9)++  , 3 ~ K.GCD (P 9) (P 6)+  , 3 ~ K.GCD (P 9) (N 6)+  , 3 ~ K.GCD (N 9) (P 6)+  , 3 ~ K.GCD (N 9) (N 6)+  )++_testLCM =  Dict+_testLCM :: Dict+  ( 0 ~ K.LCM Z Z+  , 0 ~ K.LCM Z Z+  , 0 ~ K.LCM Z Z+  , 0 ~ K.LCM Z Z++  , 0 ~ K.LCM (P 1) Z+  , 0 ~ K.LCM (P 1) Z+  , 0 ~ K.LCM (N 1) Z+  , 0 ~ K.LCM (N 1) Z++  , 0 ~ K.LCM Z (P 1)+  , 0 ~ K.LCM Z (N 1)+  , 0 ~ K.LCM Z (P 1)+  , 0 ~ K.LCM Z (N 1)++  , 2 ~ K.LCM (P 1) (P 2)+  , 2 ~ K.LCM (P 1) (N 2)+  , 2 ~ K.LCM (N 1) (P 2)+  , 2 ~ K.LCM (N 1) (N 2)++  , 2 ~ K.LCM (P 2) (P 1)+  , 2 ~ K.LCM (P 2) (N 1)+  , 2 ~ K.LCM (N 2) (P 1)+  , 2 ~ K.LCM (N 2) (N 1)++  , 18 ~ K.LCM (P 6) (P 9)+  , 18 ~ K.LCM (P 6) (N 9)+  , 18 ~ K.LCM (N 6) (P 9)+  , 18 ~ K.LCM (N 6) (N 9)++  , 18 ~ K.LCM (P 9) (P 6)+  , 18 ~ K.LCM (P 9) (N 6)+  , 18 ~ K.LCM (N 9) (P 6)+  , 18 ~ K.LCM (N 9) (N 6)+  )++--------------------------------------------------------------------------------++assert+  :: String  -- ^ Test name+  -> Bool    -- ^ Successful is true+  -> IO Bool -- ^ Return the same 'Bool' given as input.+assert n x = do+  putStrLn ((if x then "[OK] " else "[FAIL] ") <> n)+  pure x++testsMain :: [IO Bool] -> IO a+testsMain xs = do+  res <- sequence xs+  let (oks, bads) = List.partition id res+  putStrLn ("[TOTAL] OK: " <> show (length oks) <>+            ". FAIL: " <> show (length bads) <> ".")+  case bads of+    [] -> exitSuccess+    _  -> exitFailure++sn1, sz, sp1 :: K.SomeInteger+sn1 = K.SomeInteger (Proxy @(N 1))+sz = K.SomeInteger (Proxy @Z)+sp1 = K.SomeInteger (Proxy @(P 1))+++main :: IO ()+main = testsMain $+  [ assert "Prelude % throws RatioZeroDenominator" =<< do+      ea <- Ex.try (Ex.evaluate (1 P.% 0 :: P.Rational))+      pure (ea == Left Ex.RatioZeroDenominator)++  , assert "integerVal . someIntegerVal == id" $+    flip all [-5 .. 5] $ \a ->+      case K.someIntegerVal a of+        K.SomeInteger pa ->+          a == K.integerVal pa++  , assert "sameIntegerVal a a" $+    flip all [-5 .. 5] $ \a ->+      case K.someIntegerVal a of+        K.SomeInteger pa ->+          isJust (K.sameInteger pa pa)++  , assert "sameIntegerVal a a'" $+    flip all [-5 .. 5] $ \a ->+      case (K.someIntegerVal a, K.someIntegerVal a) of+        (K.SomeInteger pa1, K.SomeInteger pa2) ->+          isJust (K.sameInteger pa1 pa2)++  , assert "sameIntegerVal a b" $+    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->+      case (K.someIntegerVal a, K.someIntegerVal b) of+        (K.SomeInteger pa, K.SomeInteger pb)+          | a == b    -> isJust    (K.sameInteger pa pb)+          | otherwise -> isNothing (K.sameInteger pa pb)++  , assert "demote @Z" $ demote @Z == (0 :: P.Integer)+  , assert "demote @(P 1)" $ demote @(P 1) == (1 :: P.Integer)+  , assert "demote @(N 1)" $ demote @(N 1) == ((-1) :: P.Integer)++  , assert "Eq SomeInteger" $+    flip all (liftA2 (,) [(-2)..2] [(-2)..2]) $ \(a, b) ->+      (==) (K.someIntegerVal a) (K.someIntegerVal b)+        == (==) a b++  , assert "Ord SomeInteger" $+    flip all (liftA2 (,) [(-2)..2] [(-2)..2]) $ \(a, b) ->+      compare (K.someIntegerVal a) (K.someIntegerVal b)+        == compare a b++  , assert "Show SomeInteger" $+    and [ show sn1 == "-1"+        , show sz == "0"+        , show sp1 == "1" ]++  , assert "Read SomeInteger" $+    and [ readMaybe "-1" == Just sn1+        , readMaybe "0" == Just sz+        , readMaybe "1" == Just sp1 ]++  , assert "TestEquality 0 0" $+     isJust (testEquality (SInteger @Z) (SInteger @Z))+  , assert "TestEquality 0 +1" $+     isNothing (testEquality (SInteger @Z) (SInteger @(P 1)))+  , assert "TestEquality 0 -1" $+     isNothing (testEquality (SInteger @Z) (SInteger @(N 1)))+  , assert "TestEquality +1 0" $+     isNothing (testEquality (SInteger @(P 1)) (SInteger @Z))+  , assert "TestEquality -1 0" $+     isNothing (testEquality (SInteger @(N 1)) (SInteger @Z))++  , assert "show SInteger 0" $+     "SInteger @Z" == show (SInteger @Z)+  , assert "show SInteger +1" $+     "SInteger @(P 1)" == show (SInteger @(P 1))+  , assert "show SInteger -1" $+     "SInteger @(N 1)" == show (SInteger @(N 1))++  , assert "sShow SInteger 0" $+     fromString "0" == fromSing (P.sShow_ (SInteger @Z))+  , assert "sShow SInteger +1" $+     fromString "1" == fromSing (P.sShow_ (SInteger @(P 1)))+  , assert "sShow SInteger -1" $+     fromString "-1" == fromSing (P.sShow_ (SInteger @(N 1)))++  , assert "sShowsPrec appPrec SInteger 0" $+     fromString "0y" == fromSing (P.sShowsPrec sAppPrec (SInteger @Z) (sing @"y"))+  , assert "sShowsPrec appPrec SInteger +1" $+     fromString "1y" == fromSing (P.sShowsPrec sAppPrec (SInteger @(P 1)) (sing @"y"))+  , assert "sShowPrec appPrec SInteger -1" $+     fromString "-1y" == fromSing (P.sShowsPrec sAppPrec (SInteger @(N 1)) (sing @"y"))++  , assert "sShowsPrec appPrec1 SInteger 0" $+     fromString "0y" == fromSing (P.sShowsPrec sAppPrec1 (SInteger @Z) (sing @"y"))+  , assert "sShowsPrec appPrec1 SInteger +1" $+     fromString "1y" == fromSing (P.sShowsPrec sAppPrec1 (SInteger @(P 1)) (sing @"y"))+  , assert "sShowPrec appPrec1 SInteger -1" $+     fromString "-1y" == fromSing (P.sShowsPrec sAppPrec1 (SInteger @(N 1)) (sing @"y"))++  , assert "sShowLit SInteger 0" $+     fromString "Z" == fromSing (K.sShowLit (SInteger @Z))+  , assert "sShowLit SInteger +1" $+     fromString "P 1" == fromSing (K.sShowLit (SInteger @(P 1)))+  , assert "sShowLit SInteger -1" $+     fromString "N 1" == fromSing (K.sShowLit (SInteger @(N 1)))++  , assert "sShowsPrecLit appPrec SInteger 0" $+     fromString "Zy" == fromSing (K.sShowsPrecLit sAppPrec (SInteger @Z) (sing @"y"))+  , assert "sShowsPrecLit appPrec SInteger +1" $+     fromString "P 1y" == fromSing (K.sShowsPrecLit sAppPrec (SInteger @(P 1)) (sing @"y"))+  , assert "sShowPrec appPrec SInteger -1" $+     fromString "N 1y" == fromSing (K.sShowsPrecLit sAppPrec (SInteger @(N 1)) (sing @"y"))++  , assert "sShowsPrecLit appPrec1 SInteger 0" $+     fromString "Zy" == fromSing (K.sShowsPrecLit sAppPrec1 (SInteger @Z) (sing @"y"))+  , assert "sShowsPrecLit appPrec1 SInteger +1" $+     fromString "(P 1)y" == fromSing (K.sShowsPrecLit sAppPrec1 (SInteger @(P 1)) (sing @"y"))+  , assert "sShowPrec appPrec1 SInteger -1" $+     fromString "(N 1)y" == fromSing (K.sShowsPrecLit sAppPrec1 (SInteger @(N 1)) (sing @"y"))++  , assert "readPrecLit Z" $+     readPrecMaybe K.readPrecLit "Z" == Just 0+  , assert "readPrecLit P" $+     readPrecMaybe K.readPrecLit "P 0" == Nothing &&+     readPrecMaybe K.readPrecLit "P 1" == Just 1+  , assert "readPrecLit N" $+     readPrecMaybe K.readPrecLit "N 0" == Nothing &&+     readPrecMaybe K.readPrecLit "N 1" == Just (-1)++  , assert "Read SInteger 0" $+     readMaybe @(SInteger Z) "SInteger @Z" == Just (SInteger @Z)+  , assert "Read SInteger +1" $+     readMaybe @(SInteger (P 1)) "SInteger @(P 1)" == Just (SInteger @(P 1))+  , assert "Read SInteger -1" $+     readMaybe @(SInteger (N 1)) "SInteger @(N 1)" == Just (SInteger @(N 1))++  , assert "SZ == SInteger @Z" $+    case SInteger @Z of+      SZ -> SZ == SInteger @Z++  , assert "SN (sing @1) == SInteger @(N 1)" $+    case SInteger @(N 1) of+      SN s1 -> (fromSing @L.Natural s1 == 1) &&+               (SN s1 == SInteger @(N 1))++  , assert "SP (sing @1) == SInteger @(P 1)" $+    case SInteger @(P 1) of+      SP s1 -> (fromSing @L.Natural s1 == 1) &&+               (SP s1 == SInteger @(P 1))++  , assert "KnownInteger i ==> KnownNat (Abs i)" $+    let fabs :: forall i. SInteger i -> P.Integer+        fabs si = K.withKnownInteger si (L.natVal (Proxy @(K.Abs i)))+    in and [ 1 == fabs (sing @(N 1))+           , 0 == fabs (sing @Z)+           , 1 == fabs (sing @(P 1)) ]++  , assert "sNegate" $+    flip all [-5 .. 5] $ \(a :: P.Integer) ->+      negate a == withSomeSing a (fromSing . P.sNegate)++  , assert "%+" $+    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->+      a + b == (withSomeSing (a :: P.Integer) $ \sa ->+                withSomeSing (b :: P.Integer) $ \sb ->+                fromSing $ sa P.%+ sb)++  , assert "%-" $+    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->+      a - b == (withSomeSing (a :: P.Integer) $ \sa ->+                withSomeSing (b :: P.Integer) $ \sb ->+                fromSing $ sa P.%- sb)++  , assert "%*" $+    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->+      a * b == (withSomeSing (a :: P.Integer) $ \sa ->+                withSomeSing (b :: P.Integer) $ \sb ->+                fromSing $ sa P.%* sb)++  , assert "%^" $+    flip all (liftA2 (,) [-5 .. 5] [0 .. 5])$ \(a, b) ->+      a ^ b == (withSomeSing (a :: P.Integer) $ \sa ->+                withSomeSing (b :: L.Natural) $ \sb ->+                fromSing $ sa K.%^ sb)++  , assert "sOdd" $+    flip all [-5 .. 5] $ \(a :: P.Integer) ->+      odd a == withSomeSing a (fromSing . K.sOdd)++  , assert "sEven" $+    flip all [-5 .. 5] $ \(a :: P.Integer) ->+      even a == withSomeSing a (fromSing . K.sEven)++  , assert "sAbs" $+    flip all [-5 .. 5] $ \(a :: P.Integer) ->+      fromInteger @L.Natural (abs a)+        == withSomeSing a (fromSing . K.sAbs)++  , assert "sSignum" $+    flip all [-5 .. 5] $ \(a :: P.Integer) ->+      signum a == withSomeSing a (fromSing . P.sSignum)++  , assert "sGCD" $+    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->+      fromInteger @L.Natural (gcd a b)+        == (withSomeSing (a :: P.Integer) $ \sa ->+            withSomeSing (b :: P.Integer) $ \sb ->+            fromSing $ K.sGCD sa sb)++  , assert "sLCM" $+    flip all (liftA2 (,) [-5 .. 5] [-5 .. 5])$ \(a, b) ->+      fromInteger @L.Natural (lcm a b)+        == (withSomeSing (a :: P.Integer) $ \sa ->+            withSomeSing (b :: P.Integer) $ \sb ->+            fromSing $ K.sLCM sa sb)++  , assert "sSign" $+    flip all [-5 .. 5] $ \(a :: P.Integer) ->+      signum a == withSomeSing a (fromSing . P.sSignum)++  , fmap and $ sequence $ do+     r :: K.Round <- [minBound .. maxBound]+     a :: P.Integer <- [-5 .. 5]+     b :: P.Integer <- filter (/= 0) [-5 .. 5]+     pure $ assert (mconcat ["sDivRem ", show r, " ", show a, " ", show b]) $+       K.divRem r a b == (withSomeSing r $ \sr ->+                          withSomeSing a $ \sa ->+                          withSomeSing b $ \sb ->+                          let (q, m) = K.sDivRem sr sa sb+                           in (fromSing q, fromSing m))++  , fmap and $ sequence $ do+     r :: K.Round <- [minBound .. maxBound]+     a :: P.Integer <- [-5 .. 5]+     b :: P.Integer <- filter (/= 0) [-5 .. 5]+     pure $ assert (mconcat ["sDiv ", show r, " ", show a, " ", show b]) $+       K.div r a b == (withSomeSing r $ \sr ->+                       withSomeSing a $ \sa ->+                       withSomeSing b $ \sb ->+                       fromSing (K.sDiv sr sa sb))++  , fmap and $ sequence $ do+     r :: K.Round <- [minBound .. maxBound]+     a :: P.Integer <- [-5 .. 5]+     b :: P.Integer <- filter (/= 0) [-5 .. 5]+     pure $ assert (mconcat ["sRem ", show r, " ", show a, " ", show b]) $+       K.rem r a b == (withSomeSing r $ \sr ->+                       withSomeSing a $ \sa ->+                       withSomeSing b $ \sb ->+                       fromSing (K.sRem sr sa sb))++  , fmap and $ sequence $ do+      n :: L.Natural <- [0..5]+      pure $ assert (mconcat ["sFromNatural ", show n]) $+        toInteger n == withSomeSing n (fromSing . K.sFromNatural)++  ] <> testsDivRem++++testsDivRem :: [IO Bool]+testsDivRem = do+  b :: P.Integer <- [-5 .. 5]+  guard (b P./= 0)+  a :: P.Integer <- [-5 .. 5]+  r :: K.Round <- [minBound .. maxBound]+  let tname :: String -> ShowS+      tname t = showString t . showChar ' ' . shows r . showChar ' '+              . shows a . showChar ' ' . shows b+  [ assert (tname "divRem" "") $ case K.divRem r a b of+                                   (q, m) -> m == a - b * q+    , assert (tname "div" "") $ fst (K.divRem r a b) == K.div r a b+    , assert (tname "rem" "") $ snd (K.divRem r a b) == K.rem r a b+    ]+++--------------------------------------------------------------------------------++-- _divRemTestCode :: String+-- _divRemTestCode = unlines $ List.sort $ do+--   b <- [-4 .. 4]+--   guard (b P./= 0)+--   a <- [-4 .. 4]+--   r <- [minBound..maxBound]+--   let (q, m) = K.divRem r a b+--       sname :: String -> ShowS+--       sname t = showString "_test_"+--               . showString t+--               . showChar '_'+--               . showsPrec 0 r+--               . showChar '_'+--               . showChar (if a < 0 then 'N' else 'P')+--               . shows (abs a)+--               . showChar '_'+--               . showChar (if b < 0 then 'N' else 'P')+--               . shows (abs b)+--       sDiv :: ShowS+--       sDiv = sname "Div"+--            . showString " :: Dict (K.Div 'K."+--            . shows r+--            . showChar ' '+--            . showsPrec appPrec1 (K.fromPrelude a)+--            . showChar ' '+--            . showsPrec appPrec1 (K.fromPrelude b)+--            . showString " ~ "+--            . showsPrec appPrec (K.fromPrelude q)+--            . showString ")\n"+--            . sname "Div"+--            . showString " =  Dict"+--       sRem :: ShowS+--       sRem = sname "Rem"+--            . showString " :: Dict (K.Rem 'K."+--            . shows r+--            . showChar ' '+--            . showsPrec appPrec1 (K.fromPrelude a)+--            . showChar ' '+--            . showsPrec appPrec1 (K.fromPrelude b)+--            . showString " ~ "+--            . showsPrec appPrec (K.fromPrelude m)+--            . showString ")\n"+--            . sname "Rem"+--            . showString " =  Dict"+--       ss :: ShowS+--       ss = sDiv . showChar '\n' . sRem+--   pure (ss "")+++-- The following tests are generated by `_divRemTestCode` in this remule.+-- Copy and paste by hand.+_test_Div_RoundAway_N1_N1 :: Dict (K.Div 'K.RoundAway (N 1) (N 1) ~ P 1)+_test_Div_RoundAway_N1_N1 =  Dict+_test_Rem_RoundAway_N1_N1 :: Dict (K.Rem 'K.RoundAway (N 1) (N 1) ~ Z)+_test_Rem_RoundAway_N1_N1 =  Dict+_test_Div_RoundAway_N1_N2 :: Dict (K.Div 'K.RoundAway (N 1) (N 2) ~ P 1)+_test_Div_RoundAway_N1_N2 =  Dict+_test_Rem_RoundAway_N1_N2 :: Dict (K.Rem 'K.RoundAway (N 1) (N 2) ~ P 1)+_test_Rem_RoundAway_N1_N2 =  Dict+_test_Div_RoundAway_N1_N3 :: Dict (K.Div 'K.RoundAway (N 1) (N 3) ~ P 1)+_test_Div_RoundAway_N1_N3 =  Dict+_test_Rem_RoundAway_N1_N3 :: Dict (K.Rem 'K.RoundAway (N 1) (N 3) ~ P 2)+_test_Rem_RoundAway_N1_N3 =  Dict+_test_Div_RoundAway_N1_N4 :: Dict (K.Div 'K.RoundAway (N 1) (N 4) ~ P 1)+_test_Div_RoundAway_N1_N4 =  Dict+_test_Rem_RoundAway_N1_N4 :: Dict (K.Rem 'K.RoundAway (N 1) (N 4) ~ P 3)+_test_Rem_RoundAway_N1_N4 =  Dict+_test_Div_RoundAway_N1_P1 :: Dict (K.Div 'K.RoundAway (N 1) (P 1) ~ N 1)+_test_Div_RoundAway_N1_P1 =  Dict+_test_Rem_RoundAway_N1_P1 :: Dict (K.Rem 'K.RoundAway (N 1) (P 1) ~ Z)+_test_Rem_RoundAway_N1_P1 =  Dict+_test_Div_RoundAway_N1_P2 :: Dict (K.Div 'K.RoundAway (N 1) (P 2) ~ N 1)+_test_Div_RoundAway_N1_P2 =  Dict+_test_Rem_RoundAway_N1_P2 :: Dict (K.Rem 'K.RoundAway (N 1) (P 2) ~ P 1)+_test_Rem_RoundAway_N1_P2 =  Dict+_test_Div_RoundAway_N1_P3 :: Dict (K.Div 'K.RoundAway (N 1) (P 3) ~ N 1)+_test_Div_RoundAway_N1_P3 =  Dict+_test_Rem_RoundAway_N1_P3 :: Dict (K.Rem 'K.RoundAway (N 1) (P 3) ~ P 2)+_test_Rem_RoundAway_N1_P3 =  Dict+_test_Div_RoundAway_N1_P4 :: Dict (K.Div 'K.RoundAway (N 1) (P 4) ~ N 1)+_test_Div_RoundAway_N1_P4 =  Dict+_test_Rem_RoundAway_N1_P4 :: Dict (K.Rem 'K.RoundAway (N 1) (P 4) ~ P 3)+_test_Rem_RoundAway_N1_P4 =  Dict+_test_Div_RoundAway_N2_N1 :: Dict (K.Div 'K.RoundAway (N 2) (N 1) ~ P 2)+_test_Div_RoundAway_N2_N1 =  Dict+_test_Rem_RoundAway_N2_N1 :: Dict (K.Rem 'K.RoundAway (N 2) (N 1) ~ Z)+_test_Rem_RoundAway_N2_N1 =  Dict+_test_Div_RoundAway_N2_N2 :: Dict (K.Div 'K.RoundAway (N 2) (N 2) ~ P 1)+_test_Div_RoundAway_N2_N2 =  Dict+_test_Rem_RoundAway_N2_N2 :: Dict (K.Rem 'K.RoundAway (N 2) (N 2) ~ Z)+_test_Rem_RoundAway_N2_N2 =  Dict+_test_Div_RoundAway_N2_N3 :: Dict (K.Div 'K.RoundAway (N 2) (N 3) ~ P 1)+_test_Div_RoundAway_N2_N3 =  Dict+_test_Rem_RoundAway_N2_N3 :: Dict (K.Rem 'K.RoundAway (N 2) (N 3) ~ P 1)+_test_Rem_RoundAway_N2_N3 =  Dict+_test_Div_RoundAway_N2_N4 :: Dict (K.Div 'K.RoundAway (N 2) (N 4) ~ P 1)+_test_Div_RoundAway_N2_N4 =  Dict+_test_Rem_RoundAway_N2_N4 :: Dict (K.Rem 'K.RoundAway (N 2) (N 4) ~ P 2)+_test_Rem_RoundAway_N2_N4 =  Dict+_test_Div_RoundAway_N2_P1 :: Dict (K.Div 'K.RoundAway (N 2) (P 1) ~ N 2)+_test_Div_RoundAway_N2_P1 =  Dict+_test_Rem_RoundAway_N2_P1 :: Dict (K.Rem 'K.RoundAway (N 2) (P 1) ~ Z)+_test_Rem_RoundAway_N2_P1 =  Dict+_test_Div_RoundAway_N2_P2 :: Dict (K.Div 'K.RoundAway (N 2) (P 2) ~ N 1)+_test_Div_RoundAway_N2_P2 =  Dict+_test_Rem_RoundAway_N2_P2 :: Dict (K.Rem 'K.RoundAway (N 2) (P 2) ~ Z)+_test_Rem_RoundAway_N2_P2 =  Dict+_test_Div_RoundAway_N2_P3 :: Dict (K.Div 'K.RoundAway (N 2) (P 3) ~ N 1)+_test_Div_RoundAway_N2_P3 =  Dict+_test_Rem_RoundAway_N2_P3 :: Dict (K.Rem 'K.RoundAway (N 2) (P 3) ~ P 1)+_test_Rem_RoundAway_N2_P3 =  Dict+_test_Div_RoundAway_N2_P4 :: Dict (K.Div 'K.RoundAway (N 2) (P 4) ~ N 1)+_test_Div_RoundAway_N2_P4 =  Dict+_test_Rem_RoundAway_N2_P4 :: Dict (K.Rem 'K.RoundAway (N 2) (P 4) ~ P 2)+_test_Rem_RoundAway_N2_P4 =  Dict+_test_Div_RoundAway_N3_N1 :: Dict (K.Div 'K.RoundAway (N 3) (N 1) ~ P 3)+_test_Div_RoundAway_N3_N1 =  Dict+_test_Rem_RoundAway_N3_N1 :: Dict (K.Rem 'K.RoundAway (N 3) (N 1) ~ Z)+_test_Rem_RoundAway_N3_N1 =  Dict+_test_Div_RoundAway_N3_N2 :: Dict (K.Div 'K.RoundAway (N 3) (N 2) ~ P 2)+_test_Div_RoundAway_N3_N2 =  Dict+_test_Rem_RoundAway_N3_N2 :: Dict (K.Rem 'K.RoundAway (N 3) (N 2) ~ P 1)+_test_Rem_RoundAway_N3_N2 =  Dict+_test_Div_RoundAway_N3_N3 :: Dict (K.Div 'K.RoundAway (N 3) (N 3) ~ P 1)+_test_Div_RoundAway_N3_N3 =  Dict+_test_Rem_RoundAway_N3_N3 :: Dict (K.Rem 'K.RoundAway (N 3) (N 3) ~ Z)+_test_Rem_RoundAway_N3_N3 =  Dict+_test_Div_RoundAway_N3_N4 :: Dict (K.Div 'K.RoundAway (N 3) (N 4) ~ P 1)+_test_Div_RoundAway_N3_N4 =  Dict+_test_Rem_RoundAway_N3_N4 :: Dict (K.Rem 'K.RoundAway (N 3) (N 4) ~ P 1)+_test_Rem_RoundAway_N3_N4 =  Dict+_test_Div_RoundAway_N3_P1 :: Dict (K.Div 'K.RoundAway (N 3) (P 1) ~ N 3)+_test_Div_RoundAway_N3_P1 =  Dict+_test_Rem_RoundAway_N3_P1 :: Dict (K.Rem 'K.RoundAway (N 3) (P 1) ~ Z)+_test_Rem_RoundAway_N3_P1 =  Dict+_test_Div_RoundAway_N3_P2 :: Dict (K.Div 'K.RoundAway (N 3) (P 2) ~ N 2)+_test_Div_RoundAway_N3_P2 =  Dict+_test_Rem_RoundAway_N3_P2 :: Dict (K.Rem 'K.RoundAway (N 3) (P 2) ~ P 1)+_test_Rem_RoundAway_N3_P2 =  Dict+_test_Div_RoundAway_N3_P3 :: Dict (K.Div 'K.RoundAway (N 3) (P 3) ~ N 1)+_test_Div_RoundAway_N3_P3 =  Dict+_test_Rem_RoundAway_N3_P3 :: Dict (K.Rem 'K.RoundAway (N 3) (P 3) ~ Z)+_test_Rem_RoundAway_N3_P3 =  Dict+_test_Div_RoundAway_N3_P4 :: Dict (K.Div 'K.RoundAway (N 3) (P 4) ~ N 1)+_test_Div_RoundAway_N3_P4 =  Dict+_test_Rem_RoundAway_N3_P4 :: Dict (K.Rem 'K.RoundAway (N 3) (P 4) ~ P 1)+_test_Rem_RoundAway_N3_P4 =  Dict+_test_Div_RoundAway_N4_N1 :: Dict (K.Div 'K.RoundAway (N 4) (N 1) ~ P 4)+_test_Div_RoundAway_N4_N1 =  Dict+_test_Rem_RoundAway_N4_N1 :: Dict (K.Rem 'K.RoundAway (N 4) (N 1) ~ Z)+_test_Rem_RoundAway_N4_N1 =  Dict+_test_Div_RoundAway_N4_N2 :: Dict (K.Div 'K.RoundAway (N 4) (N 2) ~ P 2)+_test_Div_RoundAway_N4_N2 =  Dict+_test_Rem_RoundAway_N4_N2 :: Dict (K.Rem 'K.RoundAway (N 4) (N 2) ~ Z)+_test_Rem_RoundAway_N4_N2 =  Dict+_test_Div_RoundAway_N4_N3 :: Dict (K.Div 'K.RoundAway (N 4) (N 3) ~ P 2)+_test_Div_RoundAway_N4_N3 =  Dict+_test_Rem_RoundAway_N4_N3 :: Dict (K.Rem 'K.RoundAway (N 4) (N 3) ~ P 2)+_test_Rem_RoundAway_N4_N3 =  Dict+_test_Div_RoundAway_N4_N4 :: Dict (K.Div 'K.RoundAway (N 4) (N 4) ~ P 1)+_test_Div_RoundAway_N4_N4 =  Dict+_test_Rem_RoundAway_N4_N4 :: Dict (K.Rem 'K.RoundAway (N 4) (N 4) ~ Z)+_test_Rem_RoundAway_N4_N4 =  Dict+_test_Div_RoundAway_N4_P1 :: Dict (K.Div 'K.RoundAway (N 4) (P 1) ~ N 4)+_test_Div_RoundAway_N4_P1 =  Dict+_test_Rem_RoundAway_N4_P1 :: Dict (K.Rem 'K.RoundAway (N 4) (P 1) ~ Z)+_test_Rem_RoundAway_N4_P1 =  Dict+_test_Div_RoundAway_N4_P2 :: Dict (K.Div 'K.RoundAway (N 4) (P 2) ~ N 2)+_test_Div_RoundAway_N4_P2 =  Dict+_test_Rem_RoundAway_N4_P2 :: Dict (K.Rem 'K.RoundAway (N 4) (P 2) ~ Z)+_test_Rem_RoundAway_N4_P2 =  Dict+_test_Div_RoundAway_N4_P3 :: Dict (K.Div 'K.RoundAway (N 4) (P 3) ~ N 2)+_test_Div_RoundAway_N4_P3 =  Dict+_test_Rem_RoundAway_N4_P3 :: Dict (K.Rem 'K.RoundAway (N 4) (P 3) ~ P 2)+_test_Rem_RoundAway_N4_P3 =  Dict+_test_Div_RoundAway_N4_P4 :: Dict (K.Div 'K.RoundAway (N 4) (P 4) ~ N 1)+_test_Div_RoundAway_N4_P4 =  Dict+_test_Rem_RoundAway_N4_P4 :: Dict (K.Rem 'K.RoundAway (N 4) (P 4) ~ Z)+_test_Rem_RoundAway_N4_P4 =  Dict+_test_Rem_RoundAway_Z_N1 :: Dict (K.Rem 'K.RoundAway Z (N 1) ~ Z)+_test_Rem_RoundAway_Z_N1 =  Dict+_test_Rem_RoundAway_Z_N2 :: Dict (K.Rem 'K.RoundAway Z (N 2) ~ Z)+_test_Rem_RoundAway_Z_N2 =  Dict+_test_Rem_RoundAway_Z_N3 :: Dict (K.Rem 'K.RoundAway Z (N 3) ~ Z)+_test_Rem_RoundAway_Z_N3 =  Dict+_test_Rem_RoundAway_Z_N4 :: Dict (K.Rem 'K.RoundAway Z (N 4) ~ Z)+_test_Rem_RoundAway_Z_N4 =  Dict+_test_Rem_RoundAway_Z_P1 :: Dict (K.Rem 'K.RoundAway Z (P 1) ~ Z)+_test_Rem_RoundAway_Z_P1 =  Dict+_test_Rem_RoundAway_Z_P2 :: Dict (K.Rem 'K.RoundAway Z (P 2) ~ Z)+_test_Rem_RoundAway_Z_P2 =  Dict+_test_Rem_RoundAway_Z_P3 :: Dict (K.Rem 'K.RoundAway Z (P 3) ~ Z)+_test_Rem_RoundAway_Z_P3 =  Dict+_test_Rem_RoundAway_Z_P4 :: Dict (K.Rem 'K.RoundAway Z (P 4) ~ Z)+_test_Rem_RoundAway_Z_P4 =  Dict+_test_Div_RoundAway_P1_N1 :: Dict (K.Div 'K.RoundAway (P 1) (N 1) ~ N 1)+_test_Div_RoundAway_P1_N1 =  Dict+_test_Rem_RoundAway_P1_N1 :: Dict (K.Rem 'K.RoundAway (P 1) (N 1) ~ Z)+_test_Rem_RoundAway_P1_N1 =  Dict+_test_Div_RoundAway_P1_N2 :: Dict (K.Div 'K.RoundAway (P 1) (N 2) ~ N 1)+_test_Div_RoundAway_P1_N2 =  Dict+_test_Rem_RoundAway_P1_N2 :: Dict (K.Rem 'K.RoundAway (P 1) (N 2) ~ N 1)+_test_Rem_RoundAway_P1_N2 =  Dict+_test_Div_RoundAway_P1_N3 :: Dict (K.Div 'K.RoundAway (P 1) (N 3) ~ N 1)+_test_Div_RoundAway_P1_N3 =  Dict+_test_Rem_RoundAway_P1_N3 :: Dict (K.Rem 'K.RoundAway (P 1) (N 3) ~ N 2)+_test_Rem_RoundAway_P1_N3 =  Dict+_test_Div_RoundAway_P1_N4 :: Dict (K.Div 'K.RoundAway (P 1) (N 4) ~ N 1)+_test_Div_RoundAway_P1_N4 =  Dict+_test_Rem_RoundAway_P1_N4 :: Dict (K.Rem 'K.RoundAway (P 1) (N 4) ~ N 3)+_test_Rem_RoundAway_P1_N4 =  Dict+_test_Div_RoundAway_P1_P1 :: Dict (K.Div 'K.RoundAway (P 1) (P 1) ~ P 1)+_test_Div_RoundAway_P1_P1 =  Dict+_test_Rem_RoundAway_P1_P1 :: Dict (K.Rem 'K.RoundAway (P 1) (P 1) ~ Z)+_test_Rem_RoundAway_P1_P1 =  Dict+_test_Div_RoundAway_P1_P2 :: Dict (K.Div 'K.RoundAway (P 1) (P 2) ~ P 1)+_test_Div_RoundAway_P1_P2 =  Dict+_test_Rem_RoundAway_P1_P2 :: Dict (K.Rem 'K.RoundAway (P 1) (P 2) ~ N 1)+_test_Rem_RoundAway_P1_P2 =  Dict+_test_Div_RoundAway_P1_P3 :: Dict (K.Div 'K.RoundAway (P 1) (P 3) ~ P 1)+_test_Div_RoundAway_P1_P3 =  Dict+_test_Rem_RoundAway_P1_P3 :: Dict (K.Rem 'K.RoundAway (P 1) (P 3) ~ N 2)+_test_Rem_RoundAway_P1_P3 =  Dict+_test_Div_RoundAway_P1_P4 :: Dict (K.Div 'K.RoundAway (P 1) (P 4) ~ P 1)+_test_Div_RoundAway_P1_P4 =  Dict+_test_Rem_RoundAway_P1_P4 :: Dict (K.Rem 'K.RoundAway (P 1) (P 4) ~ N 3)+_test_Rem_RoundAway_P1_P4 =  Dict+_test_Div_RoundAway_P2_N1 :: Dict (K.Div 'K.RoundAway (P 2) (N 1) ~ N 2)+_test_Div_RoundAway_P2_N1 =  Dict+_test_Rem_RoundAway_P2_N1 :: Dict (K.Rem 'K.RoundAway (P 2) (N 1) ~ Z)+_test_Rem_RoundAway_P2_N1 =  Dict+_test_Div_RoundAway_P2_N2 :: Dict (K.Div 'K.RoundAway (P 2) (N 2) ~ N 1)+_test_Div_RoundAway_P2_N2 =  Dict+_test_Rem_RoundAway_P2_N2 :: Dict (K.Rem 'K.RoundAway (P 2) (N 2) ~ Z)+_test_Rem_RoundAway_P2_N2 =  Dict+_test_Div_RoundAway_P2_N3 :: Dict (K.Div 'K.RoundAway (P 2) (N 3) ~ N 1)+_test_Div_RoundAway_P2_N3 =  Dict+_test_Rem_RoundAway_P2_N3 :: Dict (K.Rem 'K.RoundAway (P 2) (N 3) ~ N 1)+_test_Rem_RoundAway_P2_N3 =  Dict+_test_Div_RoundAway_P2_N4 :: Dict (K.Div 'K.RoundAway (P 2) (N 4) ~ N 1)+_test_Div_RoundAway_P2_N4 =  Dict+_test_Rem_RoundAway_P2_N4 :: Dict (K.Rem 'K.RoundAway (P 2) (N 4) ~ N 2)+_test_Rem_RoundAway_P2_N4 =  Dict+_test_Div_RoundAway_P2_P1 :: Dict (K.Div 'K.RoundAway (P 2) (P 1) ~ P 2)+_test_Div_RoundAway_P2_P1 =  Dict+_test_Rem_RoundAway_P2_P1 :: Dict (K.Rem 'K.RoundAway (P 2) (P 1) ~ Z)+_test_Rem_RoundAway_P2_P1 =  Dict+_test_Div_RoundAway_P2_P2 :: Dict (K.Div 'K.RoundAway (P 2) (P 2) ~ P 1)+_test_Div_RoundAway_P2_P2 =  Dict+_test_Rem_RoundAway_P2_P2 :: Dict (K.Rem 'K.RoundAway (P 2) (P 2) ~ Z)+_test_Rem_RoundAway_P2_P2 =  Dict+_test_Div_RoundAway_P2_P3 :: Dict (K.Div 'K.RoundAway (P 2) (P 3) ~ P 1)+_test_Div_RoundAway_P2_P3 =  Dict+_test_Rem_RoundAway_P2_P3 :: Dict (K.Rem 'K.RoundAway (P 2) (P 3) ~ N 1)+_test_Rem_RoundAway_P2_P3 =  Dict+_test_Div_RoundAway_P2_P4 :: Dict (K.Div 'K.RoundAway (P 2) (P 4) ~ P 1)+_test_Div_RoundAway_P2_P4 =  Dict+_test_Rem_RoundAway_P2_P4 :: Dict (K.Rem 'K.RoundAway (P 2) (P 4) ~ N 2)+_test_Rem_RoundAway_P2_P4 =  Dict+_test_Div_RoundAway_P3_N1 :: Dict (K.Div 'K.RoundAway (P 3) (N 1) ~ N 3)+_test_Div_RoundAway_P3_N1 =  Dict+_test_Rem_RoundAway_P3_N1 :: Dict (K.Rem 'K.RoundAway (P 3) (N 1) ~ Z)+_test_Rem_RoundAway_P3_N1 =  Dict+_test_Div_RoundAway_P3_N2 :: Dict (K.Div 'K.RoundAway (P 3) (N 2) ~ N 2)+_test_Div_RoundAway_P3_N2 =  Dict+_test_Rem_RoundAway_P3_N2 :: Dict (K.Rem 'K.RoundAway (P 3) (N 2) ~ N 1)+_test_Rem_RoundAway_P3_N2 =  Dict+_test_Div_RoundAway_P3_N3 :: Dict (K.Div 'K.RoundAway (P 3) (N 3) ~ N 1)+_test_Div_RoundAway_P3_N3 =  Dict+_test_Rem_RoundAway_P3_N3 :: Dict (K.Rem 'K.RoundAway (P 3) (N 3) ~ Z)+_test_Rem_RoundAway_P3_N3 =  Dict+_test_Div_RoundAway_P3_N4 :: Dict (K.Div 'K.RoundAway (P 3) (N 4) ~ N 1)+_test_Div_RoundAway_P3_N4 =  Dict+_test_Rem_RoundAway_P3_N4 :: Dict (K.Rem 'K.RoundAway (P 3) (N 4) ~ N 1)+_test_Rem_RoundAway_P3_N4 =  Dict+_test_Div_RoundAway_P3_P1 :: Dict (K.Div 'K.RoundAway (P 3) (P 1) ~ P 3)+_test_Div_RoundAway_P3_P1 =  Dict+_test_Rem_RoundAway_P3_P1 :: Dict (K.Rem 'K.RoundAway (P 3) (P 1) ~ Z)+_test_Rem_RoundAway_P3_P1 =  Dict+_test_Div_RoundAway_P3_P2 :: Dict (K.Div 'K.RoundAway (P 3) (P 2) ~ P 2)+_test_Div_RoundAway_P3_P2 =  Dict+_test_Rem_RoundAway_P3_P2 :: Dict (K.Rem 'K.RoundAway (P 3) (P 2) ~ N 1)+_test_Rem_RoundAway_P3_P2 =  Dict+_test_Div_RoundAway_P3_P3 :: Dict (K.Div 'K.RoundAway (P 3) (P 3) ~ P 1)+_test_Div_RoundAway_P3_P3 =  Dict+_test_Rem_RoundAway_P3_P3 :: Dict (K.Rem 'K.RoundAway (P 3) (P 3) ~ Z)+_test_Rem_RoundAway_P3_P3 =  Dict+_test_Div_RoundAway_P3_P4 :: Dict (K.Div 'K.RoundAway (P 3) (P 4) ~ P 1)+_test_Div_RoundAway_P3_P4 =  Dict+_test_Rem_RoundAway_P3_P4 :: Dict (K.Rem 'K.RoundAway (P 3) (P 4) ~ N 1)+_test_Rem_RoundAway_P3_P4 =  Dict+_test_Div_RoundAway_P4_N1 :: Dict (K.Div 'K.RoundAway (P 4) (N 1) ~ N 4)+_test_Div_RoundAway_P4_N1 =  Dict+_test_Rem_RoundAway_P4_N1 :: Dict (K.Rem 'K.RoundAway (P 4) (N 1) ~ Z)+_test_Rem_RoundAway_P4_N1 =  Dict+_test_Div_RoundAway_P4_N2 :: Dict (K.Div 'K.RoundAway (P 4) (N 2) ~ N 2)+_test_Div_RoundAway_P4_N2 =  Dict+_test_Rem_RoundAway_P4_N2 :: Dict (K.Rem 'K.RoundAway (P 4) (N 2) ~ Z)+_test_Rem_RoundAway_P4_N2 =  Dict+_test_Div_RoundAway_P4_N3 :: Dict (K.Div 'K.RoundAway (P 4) (N 3) ~ N 2)+_test_Div_RoundAway_P4_N3 =  Dict+_test_Rem_RoundAway_P4_N3 :: Dict (K.Rem 'K.RoundAway (P 4) (N 3) ~ N 2)+_test_Rem_RoundAway_P4_N3 =  Dict+_test_Div_RoundAway_P4_N4 :: Dict (K.Div 'K.RoundAway (P 4) (N 4) ~ N 1)+_test_Div_RoundAway_P4_N4 =  Dict+_test_Rem_RoundAway_P4_N4 :: Dict (K.Rem 'K.RoundAway (P 4) (N 4) ~ Z)+_test_Rem_RoundAway_P4_N4 =  Dict+_test_Div_RoundAway_P4_P1 :: Dict (K.Div 'K.RoundAway (P 4) (P 1) ~ P 4)+_test_Div_RoundAway_P4_P1 =  Dict+_test_Rem_RoundAway_P4_P1 :: Dict (K.Rem 'K.RoundAway (P 4) (P 1) ~ Z)+_test_Rem_RoundAway_P4_P1 =  Dict+_test_Div_RoundAway_P4_P2 :: Dict (K.Div 'K.RoundAway (P 4) (P 2) ~ P 2)+_test_Div_RoundAway_P4_P2 =  Dict+_test_Rem_RoundAway_P4_P2 :: Dict (K.Rem 'K.RoundAway (P 4) (P 2) ~ Z)+_test_Rem_RoundAway_P4_P2 =  Dict+_test_Div_RoundAway_P4_P3 :: Dict (K.Div 'K.RoundAway (P 4) (P 3) ~ P 2)+_test_Div_RoundAway_P4_P3 =  Dict+_test_Rem_RoundAway_P4_P3 :: Dict (K.Rem 'K.RoundAway (P 4) (P 3) ~ N 2)+_test_Rem_RoundAway_P4_P3 =  Dict+_test_Div_RoundAway_P4_P4 :: Dict (K.Div 'K.RoundAway (P 4) (P 4) ~ P 1)+_test_Div_RoundAway_P4_P4 =  Dict+_test_Rem_RoundAway_P4_P4 :: Dict (K.Rem 'K.RoundAway (P 4) (P 4) ~ Z)+_test_Rem_RoundAway_P4_P4 =  Dict+_test_Div_RoundDown_N1_N1 :: Dict (K.Div 'K.RoundDown (N 1) (N 1) ~ P 1)+_test_Div_RoundDown_N1_N1 =  Dict+_test_Rem_RoundDown_N1_N1 :: Dict (K.Rem 'K.RoundDown (N 1) (N 1) ~ Z)+_test_Rem_RoundDown_N1_N1 =  Dict+_test_Div_RoundDown_N1_N2 :: Dict (K.Div 'K.RoundDown (N 1) (N 2) ~ Z)+_test_Div_RoundDown_N1_N2 =  Dict+_test_Rem_RoundDown_N1_N2 :: Dict (K.Rem 'K.RoundDown (N 1) (N 2) ~ N 1)+_test_Rem_RoundDown_N1_N2 =  Dict+_test_Div_RoundDown_N1_N3 :: Dict (K.Div 'K.RoundDown (N 1) (N 3) ~ Z)+_test_Div_RoundDown_N1_N3 =  Dict+_test_Rem_RoundDown_N1_N3 :: Dict (K.Rem 'K.RoundDown (N 1) (N 3) ~ N 1)+_test_Rem_RoundDown_N1_N3 =  Dict+_test_Div_RoundDown_N1_N4 :: Dict (K.Div 'K.RoundDown (N 1) (N 4) ~ Z)+_test_Div_RoundDown_N1_N4 =  Dict+_test_Rem_RoundDown_N1_N4 :: Dict (K.Rem 'K.RoundDown (N 1) (N 4) ~ N 1)+_test_Rem_RoundDown_N1_N4 =  Dict+_test_Div_RoundDown_N1_P1 :: Dict (K.Div 'K.RoundDown (N 1) (P 1) ~ N 1)+_test_Div_RoundDown_N1_P1 =  Dict+_test_Rem_RoundDown_N1_P1 :: Dict (K.Rem 'K.RoundDown (N 1) (P 1) ~ Z)+_test_Rem_RoundDown_N1_P1 =  Dict+_test_Div_RoundDown_N1_P2 :: Dict (K.Div 'K.RoundDown (N 1) (P 2) ~ N 1)+_test_Div_RoundDown_N1_P2 =  Dict+_test_Rem_RoundDown_N1_P2 :: Dict (K.Rem 'K.RoundDown (N 1) (P 2) ~ P 1)+_test_Rem_RoundDown_N1_P2 =  Dict+_test_Div_RoundDown_N1_P3 :: Dict (K.Div 'K.RoundDown (N 1) (P 3) ~ N 1)+_test_Div_RoundDown_N1_P3 =  Dict+_test_Rem_RoundDown_N1_P3 :: Dict (K.Rem 'K.RoundDown (N 1) (P 3) ~ P 2)+_test_Rem_RoundDown_N1_P3 =  Dict+_test_Div_RoundDown_N1_P4 :: Dict (K.Div 'K.RoundDown (N 1) (P 4) ~ N 1)+_test_Div_RoundDown_N1_P4 =  Dict+_test_Rem_RoundDown_N1_P4 :: Dict (K.Rem 'K.RoundDown (N 1) (P 4) ~ P 3)+_test_Rem_RoundDown_N1_P4 =  Dict+_test_Div_RoundDown_N2_N1 :: Dict (K.Div 'K.RoundDown (N 2) (N 1) ~ P 2)+_test_Div_RoundDown_N2_N1 =  Dict+_test_Rem_RoundDown_N2_N1 :: Dict (K.Rem 'K.RoundDown (N 2) (N 1) ~ Z)+_test_Rem_RoundDown_N2_N1 =  Dict+_test_Div_RoundDown_N2_N2 :: Dict (K.Div 'K.RoundDown (N 2) (N 2) ~ P 1)+_test_Div_RoundDown_N2_N2 =  Dict+_test_Rem_RoundDown_N2_N2 :: Dict (K.Rem 'K.RoundDown (N 2) (N 2) ~ Z)+_test_Rem_RoundDown_N2_N2 =  Dict+_test_Div_RoundDown_N2_N3 :: Dict (K.Div 'K.RoundDown (N 2) (N 3) ~ Z)+_test_Div_RoundDown_N2_N3 =  Dict+_test_Rem_RoundDown_N2_N3 :: Dict (K.Rem 'K.RoundDown (N 2) (N 3) ~ N 2)+_test_Rem_RoundDown_N2_N3 =  Dict+_test_Div_RoundDown_N2_N4 :: Dict (K.Div 'K.RoundDown (N 2) (N 4) ~ Z)+_test_Div_RoundDown_N2_N4 =  Dict+_test_Rem_RoundDown_N2_N4 :: Dict (K.Rem 'K.RoundDown (N 2) (N 4) ~ N 2)+_test_Rem_RoundDown_N2_N4 =  Dict+_test_Div_RoundDown_N2_P1 :: Dict (K.Div 'K.RoundDown (N 2) (P 1) ~ N 2)+_test_Div_RoundDown_N2_P1 =  Dict+_test_Rem_RoundDown_N2_P1 :: Dict (K.Rem 'K.RoundDown (N 2) (P 1) ~ Z)+_test_Rem_RoundDown_N2_P1 =  Dict+_test_Div_RoundDown_N2_P2 :: Dict (K.Div 'K.RoundDown (N 2) (P 2) ~ N 1)+_test_Div_RoundDown_N2_P2 =  Dict+_test_Rem_RoundDown_N2_P2 :: Dict (K.Rem 'K.RoundDown (N 2) (P 2) ~ Z)+_test_Rem_RoundDown_N2_P2 =  Dict+_test_Div_RoundDown_N2_P3 :: Dict (K.Div 'K.RoundDown (N 2) (P 3) ~ N 1)+_test_Div_RoundDown_N2_P3 =  Dict+_test_Rem_RoundDown_N2_P3 :: Dict (K.Rem 'K.RoundDown (N 2) (P 3) ~ P 1)+_test_Rem_RoundDown_N2_P3 =  Dict+_test_Div_RoundDown_N2_P4 :: Dict (K.Div 'K.RoundDown (N 2) (P 4) ~ N 1)+_test_Div_RoundDown_N2_P4 =  Dict+_test_Rem_RoundDown_N2_P4 :: Dict (K.Rem 'K.RoundDown (N 2) (P 4) ~ P 2)+_test_Rem_RoundDown_N2_P4 =  Dict+_test_Div_RoundDown_N3_N1 :: Dict (K.Div 'K.RoundDown (N 3) (N 1) ~ P 3)+_test_Div_RoundDown_N3_N1 =  Dict+_test_Rem_RoundDown_N3_N1 :: Dict (K.Rem 'K.RoundDown (N 3) (N 1) ~ Z)+_test_Rem_RoundDown_N3_N1 =  Dict+_test_Div_RoundDown_N3_N2 :: Dict (K.Div 'K.RoundDown (N 3) (N 2) ~ P 1)+_test_Div_RoundDown_N3_N2 =  Dict+_test_Rem_RoundDown_N3_N2 :: Dict (K.Rem 'K.RoundDown (N 3) (N 2) ~ N 1)+_test_Rem_RoundDown_N3_N2 =  Dict+_test_Div_RoundDown_N3_N3 :: Dict (K.Div 'K.RoundDown (N 3) (N 3) ~ P 1)+_test_Div_RoundDown_N3_N3 =  Dict+_test_Rem_RoundDown_N3_N3 :: Dict (K.Rem 'K.RoundDown (N 3) (N 3) ~ Z)+_test_Rem_RoundDown_N3_N3 =  Dict+_test_Div_RoundDown_N3_N4 :: Dict (K.Div 'K.RoundDown (N 3) (N 4) ~ Z)+_test_Div_RoundDown_N3_N4 =  Dict+_test_Rem_RoundDown_N3_N4 :: Dict (K.Rem 'K.RoundDown (N 3) (N 4) ~ N 3)+_test_Rem_RoundDown_N3_N4 =  Dict+_test_Div_RoundDown_N3_P1 :: Dict (K.Div 'K.RoundDown (N 3) (P 1) ~ N 3)+_test_Div_RoundDown_N3_P1 =  Dict+_test_Rem_RoundDown_N3_P1 :: Dict (K.Rem 'K.RoundDown (N 3) (P 1) ~ Z)+_test_Rem_RoundDown_N3_P1 =  Dict+_test_Div_RoundDown_N3_P2 :: Dict (K.Div 'K.RoundDown (N 3) (P 2) ~ N 2)+_test_Div_RoundDown_N3_P2 =  Dict+_test_Rem_RoundDown_N3_P2 :: Dict (K.Rem 'K.RoundDown (N 3) (P 2) ~ P 1)+_test_Rem_RoundDown_N3_P2 =  Dict+_test_Div_RoundDown_N3_P3 :: Dict (K.Div 'K.RoundDown (N 3) (P 3) ~ N 1)+_test_Div_RoundDown_N3_P3 =  Dict+_test_Rem_RoundDown_N3_P3 :: Dict (K.Rem 'K.RoundDown (N 3) (P 3) ~ Z)+_test_Rem_RoundDown_N3_P3 =  Dict+_test_Div_RoundDown_N3_P4 :: Dict (K.Div 'K.RoundDown (N 3) (P 4) ~ N 1)+_test_Div_RoundDown_N3_P4 =  Dict+_test_Rem_RoundDown_N3_P4 :: Dict (K.Rem 'K.RoundDown (N 3) (P 4) ~ P 1)+_test_Rem_RoundDown_N3_P4 =  Dict+_test_Div_RoundDown_N4_N1 :: Dict (K.Div 'K.RoundDown (N 4) (N 1) ~ P 4)+_test_Div_RoundDown_N4_N1 =  Dict+_test_Rem_RoundDown_N4_N1 :: Dict (K.Rem 'K.RoundDown (N 4) (N 1) ~ Z)+_test_Rem_RoundDown_N4_N1 =  Dict+_test_Div_RoundDown_N4_N2 :: Dict (K.Div 'K.RoundDown (N 4) (N 2) ~ P 2)+_test_Div_RoundDown_N4_N2 =  Dict+_test_Rem_RoundDown_N4_N2 :: Dict (K.Rem 'K.RoundDown (N 4) (N 2) ~ Z)+_test_Rem_RoundDown_N4_N2 =  Dict+_test_Div_RoundDown_N4_N3 :: Dict (K.Div 'K.RoundDown (N 4) (N 3) ~ P 1)+_test_Div_RoundDown_N4_N3 =  Dict+_test_Rem_RoundDown_N4_N3 :: Dict (K.Rem 'K.RoundDown (N 4) (N 3) ~ N 1)+_test_Rem_RoundDown_N4_N3 =  Dict+_test_Div_RoundDown_N4_N4 :: Dict (K.Div 'K.RoundDown (N 4) (N 4) ~ P 1)+_test_Div_RoundDown_N4_N4 =  Dict+_test_Rem_RoundDown_N4_N4 :: Dict (K.Rem 'K.RoundDown (N 4) (N 4) ~ Z)+_test_Rem_RoundDown_N4_N4 =  Dict+_test_Div_RoundDown_N4_P1 :: Dict (K.Div 'K.RoundDown (N 4) (P 1) ~ N 4)+_test_Div_RoundDown_N4_P1 =  Dict+_test_Rem_RoundDown_N4_P1 :: Dict (K.Rem 'K.RoundDown (N 4) (P 1) ~ Z)+_test_Rem_RoundDown_N4_P1 =  Dict+_test_Div_RoundDown_N4_P2 :: Dict (K.Div 'K.RoundDown (N 4) (P 2) ~ N 2)+_test_Div_RoundDown_N4_P2 =  Dict+_test_Rem_RoundDown_N4_P2 :: Dict (K.Rem 'K.RoundDown (N 4) (P 2) ~ Z)+_test_Rem_RoundDown_N4_P2 =  Dict+_test_Div_RoundDown_N4_P3 :: Dict (K.Div 'K.RoundDown (N 4) (P 3) ~ N 2)+_test_Div_RoundDown_N4_P3 =  Dict+_test_Rem_RoundDown_N4_P3 :: Dict (K.Rem 'K.RoundDown (N 4) (P 3) ~ P 2)+_test_Rem_RoundDown_N4_P3 =  Dict+_test_Div_RoundDown_N4_P4 :: Dict (K.Div 'K.RoundDown (N 4) (P 4) ~ N 1)+_test_Div_RoundDown_N4_P4 =  Dict+_test_Rem_RoundDown_N4_P4 :: Dict (K.Rem 'K.RoundDown (N 4) (P 4) ~ Z)+_test_Rem_RoundDown_N4_P4 =  Dict+_test_Rem_RoundDown_Z_N1 :: Dict (K.Rem 'K.RoundDown Z (N 1) ~ Z)+_test_Rem_RoundDown_Z_N1 =  Dict+_test_Rem_RoundDown_Z_N2 :: Dict (K.Rem 'K.RoundDown Z (N 2) ~ Z)+_test_Rem_RoundDown_Z_N2 =  Dict+_test_Rem_RoundDown_Z_N3 :: Dict (K.Rem 'K.RoundDown Z (N 3) ~ Z)+_test_Rem_RoundDown_Z_N3 =  Dict+_test_Rem_RoundDown_Z_N4 :: Dict (K.Rem 'K.RoundDown Z (N 4) ~ Z)+_test_Rem_RoundDown_Z_N4 =  Dict+_test_Rem_RoundDown_Z_P1 :: Dict (K.Rem 'K.RoundDown Z (P 1) ~ Z)+_test_Rem_RoundDown_Z_P1 =  Dict+_test_Rem_RoundDown_Z_P2 :: Dict (K.Rem 'K.RoundDown Z (P 2) ~ Z)+_test_Rem_RoundDown_Z_P2 =  Dict+_test_Rem_RoundDown_Z_P3 :: Dict (K.Rem 'K.RoundDown Z (P 3) ~ Z)+_test_Rem_RoundDown_Z_P3 =  Dict+_test_Rem_RoundDown_Z_P4 :: Dict (K.Rem 'K.RoundDown Z (P 4) ~ Z)+_test_Rem_RoundDown_Z_P4 =  Dict+_test_Rem_RoundDown_P1_N1 :: Dict (K.Rem 'K.RoundDown (P 1) (N 1) ~ Z)+_test_Rem_RoundDown_P1_N1 =  Dict+_test_Rem_RoundDown_P1_N2 :: Dict (K.Rem 'K.RoundDown (P 1) (N 2) ~ N 1)+_test_Rem_RoundDown_P1_N2 =  Dict+_test_Rem_RoundDown_P1_N3 :: Dict (K.Rem 'K.RoundDown (P 1) (N 3) ~ N 2)+_test_Rem_RoundDown_P1_N3 =  Dict+_test_Rem_RoundDown_P1_N4 :: Dict (K.Rem 'K.RoundDown (P 1) (N 4) ~ N 3)+_test_Rem_RoundDown_P1_N4 =  Dict+_test_Div_RoundDown_P1_P1 :: Dict (K.Div 'K.RoundDown (P 1) (P 1) ~ P 1)+_test_Div_RoundDown_P1_P1 =  Dict+_test_Rem_RoundDown_P1_P1 :: Dict (K.Rem 'K.RoundDown (P 1) (P 1) ~ Z)+_test_Rem_RoundDown_P1_P1 =  Dict+_test_Div_RoundDown_P1_P2 :: Dict (K.Div 'K.RoundDown (P 1) (P 2) ~ Z)+_test_Div_RoundDown_P1_P2 =  Dict+_test_Rem_RoundDown_P1_P2 :: Dict (K.Rem 'K.RoundDown (P 1) (P 2) ~ P 1)+_test_Rem_RoundDown_P1_P2 =  Dict+_test_Div_RoundDown_P1_P3 :: Dict (K.Div 'K.RoundDown (P 1) (P 3) ~ Z)+_test_Div_RoundDown_P1_P3 =  Dict+_test_Rem_RoundDown_P1_P3 :: Dict (K.Rem 'K.RoundDown (P 1) (P 3) ~ P 1)+_test_Rem_RoundDown_P1_P3 =  Dict+_test_Div_RoundDown_P1_P4 :: Dict (K.Div 'K.RoundDown (P 1) (P 4) ~ Z)+_test_Div_RoundDown_P1_P4 =  Dict+_test_Rem_RoundDown_P1_P4 :: Dict (K.Rem 'K.RoundDown (P 1) (P 4) ~ P 1)+_test_Rem_RoundDown_P1_P4 =  Dict+_test_Div_RoundDown_P2_N1 :: Dict (K.Div 'K.RoundDown (P 2) (N 1) ~ N 2)+_test_Div_RoundDown_P2_N1 =  Dict+_test_Rem_RoundDown_P2_N1 :: Dict (K.Rem 'K.RoundDown (P 2) (N 1) ~ Z)+_test_Rem_RoundDown_P2_N1 =  Dict+_test_Div_RoundDown_P2_N2 :: Dict (K.Div 'K.RoundDown (P 2) (N 2) ~ N 1)+_test_Div_RoundDown_P2_N2 =  Dict+_test_Rem_RoundDown_P2_N2 :: Dict (K.Rem 'K.RoundDown (P 2) (N 2) ~ Z)+_test_Rem_RoundDown_P2_N2 =  Dict+_test_Div_RoundDown_P2_N3 :: Dict (K.Div 'K.RoundDown (P 2) (N 3) ~ N 1)+_test_Div_RoundDown_P2_N3 =  Dict+_test_Rem_RoundDown_P2_N3 :: Dict (K.Rem 'K.RoundDown (P 2) (N 3) ~ N 1)+_test_Rem_RoundDown_P2_N3 =  Dict+_test_Div_RoundDown_P2_N4 :: Dict (K.Div 'K.RoundDown (P 2) (N 4) ~ N 1)+_test_Div_RoundDown_P2_N4 =  Dict+_test_Rem_RoundDown_P2_N4 :: Dict (K.Rem 'K.RoundDown (P 2) (N 4) ~ N 2)+_test_Rem_RoundDown_P2_N4 =  Dict+_test_Div_RoundDown_P2_P1 :: Dict (K.Div 'K.RoundDown (P 2) (P 1) ~ P 2)+_test_Div_RoundDown_P2_P1 =  Dict+_test_Rem_RoundDown_P2_P1 :: Dict (K.Rem 'K.RoundDown (P 2) (P 1) ~ Z)+_test_Rem_RoundDown_P2_P1 =  Dict+_test_Div_RoundDown_P2_P2 :: Dict (K.Div 'K.RoundDown (P 2) (P 2) ~ P 1)+_test_Div_RoundDown_P2_P2 =  Dict+_test_Rem_RoundDown_P2_P2 :: Dict (K.Rem 'K.RoundDown (P 2) (P 2) ~ Z)+_test_Rem_RoundDown_P2_P2 =  Dict+_test_Div_RoundDown_P2_P3 :: Dict (K.Div 'K.RoundDown (P 2) (P 3) ~ Z)+_test_Div_RoundDown_P2_P3 =  Dict+_test_Rem_RoundDown_P2_P3 :: Dict (K.Rem 'K.RoundDown (P 2) (P 3) ~ P 2)+_test_Rem_RoundDown_P2_P3 =  Dict+_test_Div_RoundDown_P2_P4 :: Dict (K.Div 'K.RoundDown (P 2) (P 4) ~ Z)+_test_Div_RoundDown_P2_P4 =  Dict+_test_Rem_RoundDown_P2_P4 :: Dict (K.Rem 'K.RoundDown (P 2) (P 4) ~ P 2)+_test_Rem_RoundDown_P2_P4 =  Dict+_test_Div_RoundDown_P3_N1 :: Dict (K.Div 'K.RoundDown (P 3) (N 1) ~ N 3)+_test_Div_RoundDown_P3_N1 =  Dict+_test_Rem_RoundDown_P3_N1 :: Dict (K.Rem 'K.RoundDown (P 3) (N 1) ~ Z)+_test_Rem_RoundDown_P3_N1 =  Dict+_test_Div_RoundDown_P3_N2 :: Dict (K.Div 'K.RoundDown (P 3) (N 2) ~ N 2)+_test_Div_RoundDown_P3_N2 =  Dict+_test_Rem_RoundDown_P3_N2 :: Dict (K.Rem 'K.RoundDown (P 3) (N 2) ~ N 1)+_test_Rem_RoundDown_P3_N2 =  Dict+_test_Div_RoundDown_P3_N3 :: Dict (K.Div 'K.RoundDown (P 3) (N 3) ~ N 1)+_test_Div_RoundDown_P3_N3 =  Dict+_test_Rem_RoundDown_P3_N3 :: Dict (K.Rem 'K.RoundDown (P 3) (N 3) ~ Z)+_test_Rem_RoundDown_P3_N3 =  Dict+_test_Div_RoundDown_P3_N4 :: Dict (K.Div 'K.RoundDown (P 3) (N 4) ~ N 1)+_test_Div_RoundDown_P3_N4 =  Dict+_test_Rem_RoundDown_P3_N4 :: Dict (K.Rem 'K.RoundDown (P 3) (N 4) ~ N 1)+_test_Rem_RoundDown_P3_N4 =  Dict+_test_Div_RoundDown_P3_P1 :: Dict (K.Div 'K.RoundDown (P 3) (P 1) ~ P 3)+_test_Div_RoundDown_P3_P1 =  Dict+_test_Rem_RoundDown_P3_P1 :: Dict (K.Rem 'K.RoundDown (P 3) (P 1) ~ Z)+_test_Rem_RoundDown_P3_P1 =  Dict+_test_Div_RoundDown_P3_P2 :: Dict (K.Div 'K.RoundDown (P 3) (P 2) ~ P 1)+_test_Div_RoundDown_P3_P2 =  Dict+_test_Rem_RoundDown_P3_P2 :: Dict (K.Rem 'K.RoundDown (P 3) (P 2) ~ P 1)+_test_Rem_RoundDown_P3_P2 =  Dict+_test_Div_RoundDown_P3_P3 :: Dict (K.Div 'K.RoundDown (P 3) (P 3) ~ P 1)+_test_Div_RoundDown_P3_P3 =  Dict+_test_Rem_RoundDown_P3_P3 :: Dict (K.Rem 'K.RoundDown (P 3) (P 3) ~ Z)+_test_Rem_RoundDown_P3_P3 =  Dict+_test_Div_RoundDown_P3_P4 :: Dict (K.Div 'K.RoundDown (P 3) (P 4) ~ Z)+_test_Div_RoundDown_P3_P4 =  Dict+_test_Rem_RoundDown_P3_P4 :: Dict (K.Rem 'K.RoundDown (P 3) (P 4) ~ P 3)+_test_Rem_RoundDown_P3_P4 =  Dict+_test_Div_RoundDown_P4_N1 :: Dict (K.Div 'K.RoundDown (P 4) (N 1) ~ N 4)+_test_Div_RoundDown_P4_N1 =  Dict+_test_Rem_RoundDown_P4_N1 :: Dict (K.Rem 'K.RoundDown (P 4) (N 1) ~ Z)+_test_Rem_RoundDown_P4_N1 =  Dict+_test_Div_RoundDown_P4_N2 :: Dict (K.Div 'K.RoundDown (P 4) (N 2) ~ N 2)+_test_Div_RoundDown_P4_N2 =  Dict+_test_Rem_RoundDown_P4_N2 :: Dict (K.Rem 'K.RoundDown (P 4) (N 2) ~ Z)+_test_Rem_RoundDown_P4_N2 =  Dict+_test_Div_RoundDown_P4_N3 :: Dict (K.Div 'K.RoundDown (P 4) (N 3) ~ N 2)+_test_Div_RoundDown_P4_N3 =  Dict+_test_Rem_RoundDown_P4_N3 :: Dict (K.Rem 'K.RoundDown (P 4) (N 3) ~ N 2)+_test_Rem_RoundDown_P4_N3 =  Dict+_test_Div_RoundDown_P4_N4 :: Dict (K.Div 'K.RoundDown (P 4) (N 4) ~ N 1)+_test_Div_RoundDown_P4_N4 =  Dict+_test_Rem_RoundDown_P4_N4 :: Dict (K.Rem 'K.RoundDown (P 4) (N 4) ~ Z)+_test_Rem_RoundDown_P4_N4 =  Dict+_test_Div_RoundDown_P4_P1 :: Dict (K.Div 'K.RoundDown (P 4) (P 1) ~ P 4)+_test_Div_RoundDown_P4_P1 =  Dict+_test_Rem_RoundDown_P4_P1 :: Dict (K.Rem 'K.RoundDown (P 4) (P 1) ~ Z)+_test_Rem_RoundDown_P4_P1 =  Dict+_test_Div_RoundDown_P4_P2 :: Dict (K.Div 'K.RoundDown (P 4) (P 2) ~ P 2)+_test_Div_RoundDown_P4_P2 =  Dict+_test_Rem_RoundDown_P4_P2 :: Dict (K.Rem 'K.RoundDown (P 4) (P 2) ~ Z)+_test_Rem_RoundDown_P4_P2 =  Dict+_test_Div_RoundDown_P4_P3 :: Dict (K.Div 'K.RoundDown (P 4) (P 3) ~ P 1)+_test_Div_RoundDown_P4_P3 =  Dict+_test_Rem_RoundDown_P4_P3 :: Dict (K.Rem 'K.RoundDown (P 4) (P 3) ~ P 1)+_test_Rem_RoundDown_P4_P3 =  Dict+_test_Div_RoundDown_P4_P4 :: Dict (K.Div 'K.RoundDown (P 4) (P 4) ~ P 1)+_test_Div_RoundDown_P4_P4 =  Dict+_test_Rem_RoundDown_P4_P4 :: Dict (K.Rem 'K.RoundDown (P 4) (P 4) ~ Z)+_test_Rem_RoundDown_P4_P4 =  Dict+_test_Div_RoundHalfAway_N1_N1 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 1) ~ P 1)+_test_Div_RoundHalfAway_N1_N1 =  Dict+_test_Rem_RoundHalfAway_N1_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 1) ~ Z)+_test_Rem_RoundHalfAway_N1_N1 =  Dict+_test_Div_RoundHalfAway_N1_N2 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 2) ~ P 1)+_test_Div_RoundHalfAway_N1_N2 =  Dict+_test_Rem_RoundHalfAway_N1_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 2) ~ P 1)+_test_Rem_RoundHalfAway_N1_N2 =  Dict+_test_Div_RoundHalfAway_N1_N3 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 3) ~ Z)+_test_Div_RoundHalfAway_N1_N3 =  Dict+_test_Rem_RoundHalfAway_N1_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 3) ~ N 1)+_test_Rem_RoundHalfAway_N1_N3 =  Dict+_test_Div_RoundHalfAway_N1_N4 :: Dict (K.Div 'K.RoundHalfAway (N 1) (N 4) ~ Z)+_test_Div_RoundHalfAway_N1_N4 =  Dict+_test_Rem_RoundHalfAway_N1_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (N 4) ~ N 1)+_test_Rem_RoundHalfAway_N1_N4 =  Dict+_test_Div_RoundHalfAway_N1_P1 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 1) ~ N 1)+_test_Div_RoundHalfAway_N1_P1 =  Dict+_test_Rem_RoundHalfAway_N1_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 1) ~ Z)+_test_Rem_RoundHalfAway_N1_P1 =  Dict+_test_Div_RoundHalfAway_N1_P2 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 2) ~ N 1)+_test_Div_RoundHalfAway_N1_P2 =  Dict+_test_Rem_RoundHalfAway_N1_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 2) ~ P 1)+_test_Rem_RoundHalfAway_N1_P2 =  Dict+_test_Div_RoundHalfAway_N1_P3 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 3) ~ Z)+_test_Div_RoundHalfAway_N1_P3 =  Dict+_test_Rem_RoundHalfAway_N1_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 3) ~ N 1)+_test_Rem_RoundHalfAway_N1_P3 =  Dict+_test_Div_RoundHalfAway_N1_P4 :: Dict (K.Div 'K.RoundHalfAway (N 1) (P 4) ~ Z)+_test_Div_RoundHalfAway_N1_P4 =  Dict+_test_Rem_RoundHalfAway_N1_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 1) (P 4) ~ N 1)+_test_Rem_RoundHalfAway_N1_P4 =  Dict+_test_Div_RoundHalfAway_N2_N1 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 1) ~ P 2)+_test_Div_RoundHalfAway_N2_N1 =  Dict+_test_Rem_RoundHalfAway_N2_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 1) ~ Z)+_test_Rem_RoundHalfAway_N2_N1 =  Dict+_test_Div_RoundHalfAway_N2_N2 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 2) ~ P 1)+_test_Div_RoundHalfAway_N2_N2 =  Dict+_test_Rem_RoundHalfAway_N2_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 2) ~ Z)+_test_Rem_RoundHalfAway_N2_N2 =  Dict+_test_Div_RoundHalfAway_N2_N3 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 3) ~ P 1)+_test_Div_RoundHalfAway_N2_N3 =  Dict+_test_Rem_RoundHalfAway_N2_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 3) ~ P 1)+_test_Rem_RoundHalfAway_N2_N3 =  Dict+_test_Div_RoundHalfAway_N2_N4 :: Dict (K.Div 'K.RoundHalfAway (N 2) (N 4) ~ P 1)+_test_Div_RoundHalfAway_N2_N4 =  Dict+_test_Rem_RoundHalfAway_N2_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (N 4) ~ P 2)+_test_Rem_RoundHalfAway_N2_N4 =  Dict+_test_Div_RoundHalfAway_N2_P1 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 1) ~ N 2)+_test_Div_RoundHalfAway_N2_P1 =  Dict+_test_Rem_RoundHalfAway_N2_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 1) ~ Z)+_test_Rem_RoundHalfAway_N2_P1 =  Dict+_test_Div_RoundHalfAway_N2_P2 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 2) ~ N 1)+_test_Div_RoundHalfAway_N2_P2 =  Dict+_test_Rem_RoundHalfAway_N2_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 2) ~ Z)+_test_Rem_RoundHalfAway_N2_P2 =  Dict+_test_Div_RoundHalfAway_N2_P3 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 3) ~ N 1)+_test_Div_RoundHalfAway_N2_P3 =  Dict+_test_Rem_RoundHalfAway_N2_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 3) ~ P 1)+_test_Rem_RoundHalfAway_N2_P3 =  Dict+_test_Div_RoundHalfAway_N2_P4 :: Dict (K.Div 'K.RoundHalfAway (N 2) (P 4) ~ N 1)+_test_Div_RoundHalfAway_N2_P4 =  Dict+_test_Rem_RoundHalfAway_N2_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 2) (P 4) ~ P 2)+_test_Rem_RoundHalfAway_N2_P4 =  Dict+_test_Div_RoundHalfAway_N3_N1 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 1) ~ P 3)+_test_Div_RoundHalfAway_N3_N1 =  Dict+_test_Rem_RoundHalfAway_N3_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 1) ~ Z)+_test_Rem_RoundHalfAway_N3_N1 =  Dict+_test_Div_RoundHalfAway_N3_N2 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 2) ~ P 2)+_test_Div_RoundHalfAway_N3_N2 =  Dict+_test_Rem_RoundHalfAway_N3_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 2) ~ P 1)+_test_Rem_RoundHalfAway_N3_N2 =  Dict+_test_Div_RoundHalfAway_N3_N3 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 3) ~ P 1)+_test_Div_RoundHalfAway_N3_N3 =  Dict+_test_Rem_RoundHalfAway_N3_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 3) ~ Z)+_test_Rem_RoundHalfAway_N3_N3 =  Dict+_test_Div_RoundHalfAway_N3_N4 :: Dict (K.Div 'K.RoundHalfAway (N 3) (N 4) ~ P 1)+_test_Div_RoundHalfAway_N3_N4 =  Dict+_test_Rem_RoundHalfAway_N3_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (N 4) ~ P 1)+_test_Rem_RoundHalfAway_N3_N4 =  Dict+_test_Div_RoundHalfAway_N3_P1 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 1) ~ N 3)+_test_Div_RoundHalfAway_N3_P1 =  Dict+_test_Rem_RoundHalfAway_N3_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 1) ~ Z)+_test_Rem_RoundHalfAway_N3_P1 =  Dict+_test_Div_RoundHalfAway_N3_P2 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 2) ~ N 2)+_test_Div_RoundHalfAway_N3_P2 =  Dict+_test_Rem_RoundHalfAway_N3_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 2) ~ P 1)+_test_Rem_RoundHalfAway_N3_P2 =  Dict+_test_Div_RoundHalfAway_N3_P3 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 3) ~ N 1)+_test_Div_RoundHalfAway_N3_P3 =  Dict+_test_Rem_RoundHalfAway_N3_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 3) ~ Z)+_test_Rem_RoundHalfAway_N3_P3 =  Dict+_test_Div_RoundHalfAway_N3_P4 :: Dict (K.Div 'K.RoundHalfAway (N 3) (P 4) ~ N 1)+_test_Div_RoundHalfAway_N3_P4 =  Dict+_test_Rem_RoundHalfAway_N3_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 3) (P 4) ~ P 1)+_test_Rem_RoundHalfAway_N3_P4 =  Dict+_test_Div_RoundHalfAway_N4_N1 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 1) ~ P 4)+_test_Div_RoundHalfAway_N4_N1 =  Dict+_test_Rem_RoundHalfAway_N4_N1 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 1) ~ Z)+_test_Rem_RoundHalfAway_N4_N1 =  Dict+_test_Div_RoundHalfAway_N4_N2 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 2) ~ P 2)+_test_Div_RoundHalfAway_N4_N2 =  Dict+_test_Rem_RoundHalfAway_N4_N2 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 2) ~ Z)+_test_Rem_RoundHalfAway_N4_N2 =  Dict+_test_Div_RoundHalfAway_N4_N3 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 3) ~ P 1)+_test_Div_RoundHalfAway_N4_N3 =  Dict+_test_Rem_RoundHalfAway_N4_N3 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 3) ~ N 1)+_test_Rem_RoundHalfAway_N4_N3 =  Dict+_test_Div_RoundHalfAway_N4_N4 :: Dict (K.Div 'K.RoundHalfAway (N 4) (N 4) ~ P 1)+_test_Div_RoundHalfAway_N4_N4 =  Dict+_test_Rem_RoundHalfAway_N4_N4 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (N 4) ~ Z)+_test_Rem_RoundHalfAway_N4_N4 =  Dict+_test_Div_RoundHalfAway_N4_P1 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 1) ~ N 4)+_test_Div_RoundHalfAway_N4_P1 =  Dict+_test_Rem_RoundHalfAway_N4_P1 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 1) ~ Z)+_test_Rem_RoundHalfAway_N4_P1 =  Dict+_test_Div_RoundHalfAway_N4_P2 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 2) ~ N 2)+_test_Div_RoundHalfAway_N4_P2 =  Dict+_test_Rem_RoundHalfAway_N4_P2 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 2) ~ Z)+_test_Rem_RoundHalfAway_N4_P2 =  Dict+_test_Div_RoundHalfAway_N4_P3 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 3) ~ N 1)+_test_Div_RoundHalfAway_N4_P3 =  Dict+_test_Rem_RoundHalfAway_N4_P3 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 3) ~ N 1)+_test_Rem_RoundHalfAway_N4_P3 =  Dict+_test_Div_RoundHalfAway_N4_P4 :: Dict (K.Div 'K.RoundHalfAway (N 4) (P 4) ~ N 1)+_test_Div_RoundHalfAway_N4_P4 =  Dict+_test_Rem_RoundHalfAway_N4_P4 :: Dict (K.Rem 'K.RoundHalfAway (N 4) (P 4) ~ Z)+_test_Rem_RoundHalfAway_N4_P4 =  Dict+_test_Rem_RoundHalfAway_Z_N1 :: Dict (K.Rem 'K.RoundHalfAway Z (N 1) ~ Z)+_test_Rem_RoundHalfAway_Z_N1 =  Dict+_test_Rem_RoundHalfAway_Z_N2 :: Dict (K.Rem 'K.RoundHalfAway Z (N 2) ~ Z)+_test_Rem_RoundHalfAway_Z_N2 =  Dict+_test_Rem_RoundHalfAway_Z_N3 :: Dict (K.Rem 'K.RoundHalfAway Z (N 3) ~ Z)+_test_Rem_RoundHalfAway_Z_N3 =  Dict+_test_Rem_RoundHalfAway_Z_N4 :: Dict (K.Rem 'K.RoundHalfAway Z (N 4) ~ Z)+_test_Rem_RoundHalfAway_Z_N4 =  Dict+_test_Rem_RoundHalfAway_Z_P1 :: Dict (K.Rem 'K.RoundHalfAway Z (P 1) ~ Z)+_test_Rem_RoundHalfAway_Z_P1 =  Dict+_test_Rem_RoundHalfAway_Z_P2 :: Dict (K.Rem 'K.RoundHalfAway Z (P 2) ~ Z)+_test_Rem_RoundHalfAway_Z_P2 =  Dict+_test_Rem_RoundHalfAway_Z_P3 :: Dict (K.Rem 'K.RoundHalfAway Z (P 3) ~ Z)+_test_Rem_RoundHalfAway_Z_P3 =  Dict+_test_Rem_RoundHalfAway_Z_P4 :: Dict (K.Rem 'K.RoundHalfAway Z (P 4) ~ Z)+_test_Rem_RoundHalfAway_Z_P4 =  Dict+_test_Div_RoundHalfAway_P1_N1 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 1) ~ N 1)+_test_Div_RoundHalfAway_P1_N1 =  Dict+_test_Rem_RoundHalfAway_P1_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 1) ~ Z)+_test_Rem_RoundHalfAway_P1_N1 =  Dict+_test_Div_RoundHalfAway_P1_N2 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 2) ~ N 1)+_test_Div_RoundHalfAway_P1_N2 =  Dict+_test_Rem_RoundHalfAway_P1_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 2) ~ N 1)+_test_Rem_RoundHalfAway_P1_N2 =  Dict+_test_Div_RoundHalfAway_P1_N3 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 3) ~ Z)+_test_Div_RoundHalfAway_P1_N3 =  Dict+_test_Rem_RoundHalfAway_P1_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 3) ~ P 1)+_test_Rem_RoundHalfAway_P1_N3 =  Dict+_test_Div_RoundHalfAway_P1_N4 :: Dict (K.Div 'K.RoundHalfAway (P 1) (N 4) ~ Z)+_test_Div_RoundHalfAway_P1_N4 =  Dict+_test_Rem_RoundHalfAway_P1_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (N 4) ~ P 1)+_test_Rem_RoundHalfAway_P1_N4 =  Dict+_test_Div_RoundHalfAway_P1_P1 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 1) ~ P 1)+_test_Div_RoundHalfAway_P1_P1 =  Dict+_test_Rem_RoundHalfAway_P1_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 1) ~ Z)+_test_Rem_RoundHalfAway_P1_P1 =  Dict+_test_Div_RoundHalfAway_P1_P2 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 2) ~ P 1)+_test_Div_RoundHalfAway_P1_P2 =  Dict+_test_Rem_RoundHalfAway_P1_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 2) ~ N 1)+_test_Rem_RoundHalfAway_P1_P2 =  Dict+_test_Div_RoundHalfAway_P1_P3 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 3) ~ Z)+_test_Div_RoundHalfAway_P1_P3 =  Dict+_test_Rem_RoundHalfAway_P1_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 3) ~ P 1)+_test_Rem_RoundHalfAway_P1_P3 =  Dict+_test_Div_RoundHalfAway_P1_P4 :: Dict (K.Div 'K.RoundHalfAway (P 1) (P 4) ~ Z)+_test_Div_RoundHalfAway_P1_P4 =  Dict+_test_Rem_RoundHalfAway_P1_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 1) (P 4) ~ P 1)+_test_Rem_RoundHalfAway_P1_P4 =  Dict+_test_Div_RoundHalfAway_P2_N1 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 1) ~ N 2)+_test_Div_RoundHalfAway_P2_N1 =  Dict+_test_Rem_RoundHalfAway_P2_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 1) ~ Z)+_test_Rem_RoundHalfAway_P2_N1 =  Dict+_test_Div_RoundHalfAway_P2_N2 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 2) ~ N 1)+_test_Div_RoundHalfAway_P2_N2 =  Dict+_test_Rem_RoundHalfAway_P2_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 2) ~ Z)+_test_Rem_RoundHalfAway_P2_N2 =  Dict+_test_Div_RoundHalfAway_P2_N3 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 3) ~ N 1)+_test_Div_RoundHalfAway_P2_N3 =  Dict+_test_Rem_RoundHalfAway_P2_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 3) ~ N 1)+_test_Rem_RoundHalfAway_P2_N3 =  Dict+_test_Div_RoundHalfAway_P2_N4 :: Dict (K.Div 'K.RoundHalfAway (P 2) (N 4) ~ N 1)+_test_Div_RoundHalfAway_P2_N4 =  Dict+_test_Rem_RoundHalfAway_P2_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (N 4) ~ N 2)+_test_Rem_RoundHalfAway_P2_N4 =  Dict+_test_Div_RoundHalfAway_P2_P1 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 1) ~ P 2)+_test_Div_RoundHalfAway_P2_P1 =  Dict+_test_Rem_RoundHalfAway_P2_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 1) ~ Z)+_test_Rem_RoundHalfAway_P2_P1 =  Dict+_test_Div_RoundHalfAway_P2_P2 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 2) ~ P 1)+_test_Div_RoundHalfAway_P2_P2 =  Dict+_test_Rem_RoundHalfAway_P2_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 2) ~ Z)+_test_Rem_RoundHalfAway_P2_P2 =  Dict+_test_Div_RoundHalfAway_P2_P3 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 3) ~ P 1)+_test_Div_RoundHalfAway_P2_P3 =  Dict+_test_Rem_RoundHalfAway_P2_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 3) ~ N 1)+_test_Rem_RoundHalfAway_P2_P3 =  Dict+_test_Div_RoundHalfAway_P2_P4 :: Dict (K.Div 'K.RoundHalfAway (P 2) (P 4) ~ P 1)+_test_Div_RoundHalfAway_P2_P4 =  Dict+_test_Rem_RoundHalfAway_P2_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 2) (P 4) ~ N 2)+_test_Rem_RoundHalfAway_P2_P4 =  Dict+_test_Div_RoundHalfAway_P3_N1 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 1) ~ N 3)+_test_Div_RoundHalfAway_P3_N1 =  Dict+_test_Rem_RoundHalfAway_P3_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 1) ~ Z)+_test_Rem_RoundHalfAway_P3_N1 =  Dict+_test_Div_RoundHalfAway_P3_N2 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 2) ~ N 2)+_test_Div_RoundHalfAway_P3_N2 =  Dict+_test_Rem_RoundHalfAway_P3_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 2) ~ N 1)+_test_Rem_RoundHalfAway_P3_N2 =  Dict+_test_Div_RoundHalfAway_P3_N3 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 3) ~ N 1)+_test_Div_RoundHalfAway_P3_N3 =  Dict+_test_Rem_RoundHalfAway_P3_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 3) ~ Z)+_test_Rem_RoundHalfAway_P3_N3 =  Dict+_test_Div_RoundHalfAway_P3_N4 :: Dict (K.Div 'K.RoundHalfAway (P 3) (N 4) ~ N 1)+_test_Div_RoundHalfAway_P3_N4 =  Dict+_test_Rem_RoundHalfAway_P3_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (N 4) ~ N 1)+_test_Rem_RoundHalfAway_P3_N4 =  Dict+_test_Div_RoundHalfAway_P3_P1 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 1) ~ P 3)+_test_Div_RoundHalfAway_P3_P1 =  Dict+_test_Rem_RoundHalfAway_P3_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 1) ~ Z)+_test_Rem_RoundHalfAway_P3_P1 =  Dict+_test_Div_RoundHalfAway_P3_P2 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 2) ~ P 2)+_test_Div_RoundHalfAway_P3_P2 =  Dict+_test_Rem_RoundHalfAway_P3_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 2) ~ N 1)+_test_Rem_RoundHalfAway_P3_P2 =  Dict+_test_Div_RoundHalfAway_P3_P3 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 3) ~ P 1)+_test_Div_RoundHalfAway_P3_P3 =  Dict+_test_Rem_RoundHalfAway_P3_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 3) ~ Z)+_test_Rem_RoundHalfAway_P3_P3 =  Dict+_test_Div_RoundHalfAway_P3_P4 :: Dict (K.Div 'K.RoundHalfAway (P 3) (P 4) ~ P 1)+_test_Div_RoundHalfAway_P3_P4 =  Dict+_test_Rem_RoundHalfAway_P3_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 3) (P 4) ~ N 1)+_test_Rem_RoundHalfAway_P3_P4 =  Dict+_test_Div_RoundHalfAway_P4_N1 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 1) ~ N 4)+_test_Div_RoundHalfAway_P4_N1 =  Dict+_test_Rem_RoundHalfAway_P4_N1 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 1) ~ Z)+_test_Rem_RoundHalfAway_P4_N1 =  Dict+_test_Div_RoundHalfAway_P4_N2 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 2) ~ N 2)+_test_Div_RoundHalfAway_P4_N2 =  Dict+_test_Rem_RoundHalfAway_P4_N2 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 2) ~ Z)+_test_Rem_RoundHalfAway_P4_N2 =  Dict+_test_Div_RoundHalfAway_P4_N3 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 3) ~ N 1)+_test_Div_RoundHalfAway_P4_N3 =  Dict+_test_Rem_RoundHalfAway_P4_N3 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 3) ~ P 1)+_test_Rem_RoundHalfAway_P4_N3 =  Dict+_test_Div_RoundHalfAway_P4_N4 :: Dict (K.Div 'K.RoundHalfAway (P 4) (N 4) ~ N 1)+_test_Div_RoundHalfAway_P4_N4 =  Dict+_test_Rem_RoundHalfAway_P4_N4 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (N 4) ~ Z)+_test_Rem_RoundHalfAway_P4_N4 =  Dict+_test_Div_RoundHalfAway_P4_P1 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 1) ~ P 4)+_test_Div_RoundHalfAway_P4_P1 =  Dict+_test_Rem_RoundHalfAway_P4_P1 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 1) ~ Z)+_test_Rem_RoundHalfAway_P4_P1 =  Dict+_test_Div_RoundHalfAway_P4_P2 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 2) ~ P 2)+_test_Div_RoundHalfAway_P4_P2 =  Dict+_test_Rem_RoundHalfAway_P4_P2 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 2) ~ Z)+_test_Rem_RoundHalfAway_P4_P2 =  Dict+_test_Div_RoundHalfAway_P4_P3 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 3) ~ P 1)+_test_Div_RoundHalfAway_P4_P3 =  Dict+_test_Rem_RoundHalfAway_P4_P3 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 3) ~ P 1)+_test_Rem_RoundHalfAway_P4_P3 =  Dict+_test_Div_RoundHalfAway_P4_P4 :: Dict (K.Div 'K.RoundHalfAway (P 4) (P 4) ~ P 1)+_test_Div_RoundHalfAway_P4_P4 =  Dict+_test_Rem_RoundHalfAway_P4_P4 :: Dict (K.Rem 'K.RoundHalfAway (P 4) (P 4) ~ Z)+_test_Rem_RoundHalfAway_P4_P4 =  Dict+_test_Div_RoundHalfDown_N1_N1 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 1) ~ P 1)+_test_Div_RoundHalfDown_N1_N1 =  Dict+_test_Rem_RoundHalfDown_N1_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 1) ~ Z)+_test_Rem_RoundHalfDown_N1_N1 =  Dict+_test_Div_RoundHalfDown_N1_N2 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 2) ~ Z)+_test_Div_RoundHalfDown_N1_N2 =  Dict+_test_Rem_RoundHalfDown_N1_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 2) ~ N 1)+_test_Rem_RoundHalfDown_N1_N2 =  Dict+_test_Div_RoundHalfDown_N1_N3 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 3) ~ Z)+_test_Div_RoundHalfDown_N1_N3 =  Dict+_test_Rem_RoundHalfDown_N1_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 3) ~ N 1)+_test_Rem_RoundHalfDown_N1_N3 =  Dict+_test_Div_RoundHalfDown_N1_N4 :: Dict (K.Div 'K.RoundHalfDown (N 1) (N 4) ~ Z)+_test_Div_RoundHalfDown_N1_N4 =  Dict+_test_Rem_RoundHalfDown_N1_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (N 4) ~ N 1)+_test_Rem_RoundHalfDown_N1_N4 =  Dict+_test_Div_RoundHalfDown_N1_P1 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 1) ~ N 1)+_test_Div_RoundHalfDown_N1_P1 =  Dict+_test_Rem_RoundHalfDown_N1_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 1) ~ Z)+_test_Rem_RoundHalfDown_N1_P1 =  Dict+_test_Div_RoundHalfDown_N1_P2 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 2) ~ N 1)+_test_Div_RoundHalfDown_N1_P2 =  Dict+_test_Rem_RoundHalfDown_N1_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 2) ~ P 1)+_test_Rem_RoundHalfDown_N1_P2 =  Dict+_test_Div_RoundHalfDown_N1_P3 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 3) ~ Z)+_test_Div_RoundHalfDown_N1_P3 =  Dict+_test_Rem_RoundHalfDown_N1_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 3) ~ N 1)+_test_Rem_RoundHalfDown_N1_P3 =  Dict+_test_Div_RoundHalfDown_N1_P4 :: Dict (K.Div 'K.RoundHalfDown (N 1) (P 4) ~ Z)+_test_Div_RoundHalfDown_N1_P4 =  Dict+_test_Rem_RoundHalfDown_N1_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 1) (P 4) ~ N 1)+_test_Rem_RoundHalfDown_N1_P4 =  Dict+_test_Div_RoundHalfDown_N2_N1 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 1) ~ P 2)+_test_Div_RoundHalfDown_N2_N1 =  Dict+_test_Rem_RoundHalfDown_N2_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 1) ~ Z)+_test_Rem_RoundHalfDown_N2_N1 =  Dict+_test_Div_RoundHalfDown_N2_N2 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 2) ~ P 1)+_test_Div_RoundHalfDown_N2_N2 =  Dict+_test_Rem_RoundHalfDown_N2_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 2) ~ Z)+_test_Rem_RoundHalfDown_N2_N2 =  Dict+_test_Div_RoundHalfDown_N2_N3 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 3) ~ P 1)+_test_Div_RoundHalfDown_N2_N3 =  Dict+_test_Rem_RoundHalfDown_N2_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 3) ~ P 1)+_test_Rem_RoundHalfDown_N2_N3 =  Dict+_test_Div_RoundHalfDown_N2_N4 :: Dict (K.Div 'K.RoundHalfDown (N 2) (N 4) ~ Z)+_test_Div_RoundHalfDown_N2_N4 =  Dict+_test_Rem_RoundHalfDown_N2_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (N 4) ~ N 2)+_test_Rem_RoundHalfDown_N2_N4 =  Dict+_test_Div_RoundHalfDown_N2_P1 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 1) ~ N 2)+_test_Div_RoundHalfDown_N2_P1 =  Dict+_test_Rem_RoundHalfDown_N2_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 1) ~ Z)+_test_Rem_RoundHalfDown_N2_P1 =  Dict+_test_Div_RoundHalfDown_N2_P2 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 2) ~ N 1)+_test_Div_RoundHalfDown_N2_P2 =  Dict+_test_Rem_RoundHalfDown_N2_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 2) ~ Z)+_test_Rem_RoundHalfDown_N2_P2 =  Dict+_test_Div_RoundHalfDown_N2_P3 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 3) ~ N 1)+_test_Div_RoundHalfDown_N2_P3 =  Dict+_test_Rem_RoundHalfDown_N2_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 3) ~ P 1)+_test_Rem_RoundHalfDown_N2_P3 =  Dict+_test_Div_RoundHalfDown_N2_P4 :: Dict (K.Div 'K.RoundHalfDown (N 2) (P 4) ~ N 1)+_test_Div_RoundHalfDown_N2_P4 =  Dict+_test_Rem_RoundHalfDown_N2_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 2) (P 4) ~ P 2)+_test_Rem_RoundHalfDown_N2_P4 =  Dict+_test_Div_RoundHalfDown_N3_N1 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 1) ~ P 3)+_test_Div_RoundHalfDown_N3_N1 =  Dict+_test_Rem_RoundHalfDown_N3_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 1) ~ Z)+_test_Rem_RoundHalfDown_N3_N1 =  Dict+_test_Div_RoundHalfDown_N3_N2 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 2) ~ P 1)+_test_Div_RoundHalfDown_N3_N2 =  Dict+_test_Rem_RoundHalfDown_N3_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 2) ~ N 1)+_test_Rem_RoundHalfDown_N3_N2 =  Dict+_test_Div_RoundHalfDown_N3_N3 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 3) ~ P 1)+_test_Div_RoundHalfDown_N3_N3 =  Dict+_test_Rem_RoundHalfDown_N3_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 3) ~ Z)+_test_Rem_RoundHalfDown_N3_N3 =  Dict+_test_Div_RoundHalfDown_N3_N4 :: Dict (K.Div 'K.RoundHalfDown (N 3) (N 4) ~ P 1)+_test_Div_RoundHalfDown_N3_N4 =  Dict+_test_Rem_RoundHalfDown_N3_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (N 4) ~ P 1)+_test_Rem_RoundHalfDown_N3_N4 =  Dict+_test_Div_RoundHalfDown_N3_P1 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 1) ~ N 3)+_test_Div_RoundHalfDown_N3_P1 =  Dict+_test_Rem_RoundHalfDown_N3_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 1) ~ Z)+_test_Rem_RoundHalfDown_N3_P1 =  Dict+_test_Div_RoundHalfDown_N3_P2 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 2) ~ N 2)+_test_Div_RoundHalfDown_N3_P2 =  Dict+_test_Rem_RoundHalfDown_N3_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 2) ~ P 1)+_test_Rem_RoundHalfDown_N3_P2 =  Dict+_test_Div_RoundHalfDown_N3_P3 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 3) ~ N 1)+_test_Div_RoundHalfDown_N3_P3 =  Dict+_test_Rem_RoundHalfDown_N3_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 3) ~ Z)+_test_Rem_RoundHalfDown_N3_P3 =  Dict+_test_Div_RoundHalfDown_N3_P4 :: Dict (K.Div 'K.RoundHalfDown (N 3) (P 4) ~ N 1)+_test_Div_RoundHalfDown_N3_P4 =  Dict+_test_Rem_RoundHalfDown_N3_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 3) (P 4) ~ P 1)+_test_Rem_RoundHalfDown_N3_P4 =  Dict+_test_Div_RoundHalfDown_N4_N1 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 1) ~ P 4)+_test_Div_RoundHalfDown_N4_N1 =  Dict+_test_Rem_RoundHalfDown_N4_N1 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 1) ~ Z)+_test_Rem_RoundHalfDown_N4_N1 =  Dict+_test_Div_RoundHalfDown_N4_N2 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 2) ~ P 2)+_test_Div_RoundHalfDown_N4_N2 =  Dict+_test_Rem_RoundHalfDown_N4_N2 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 2) ~ Z)+_test_Rem_RoundHalfDown_N4_N2 =  Dict+_test_Div_RoundHalfDown_N4_N3 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 3) ~ P 1)+_test_Div_RoundHalfDown_N4_N3 =  Dict+_test_Rem_RoundHalfDown_N4_N3 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 3) ~ N 1)+_test_Rem_RoundHalfDown_N4_N3 =  Dict+_test_Div_RoundHalfDown_N4_N4 :: Dict (K.Div 'K.RoundHalfDown (N 4) (N 4) ~ P 1)+_test_Div_RoundHalfDown_N4_N4 =  Dict+_test_Rem_RoundHalfDown_N4_N4 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (N 4) ~ Z)+_test_Rem_RoundHalfDown_N4_N4 =  Dict+_test_Div_RoundHalfDown_N4_P1 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 1) ~ N 4)+_test_Div_RoundHalfDown_N4_P1 =  Dict+_test_Rem_RoundHalfDown_N4_P1 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 1) ~ Z)+_test_Rem_RoundHalfDown_N4_P1 =  Dict+_test_Div_RoundHalfDown_N4_P2 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 2) ~ N 2)+_test_Div_RoundHalfDown_N4_P2 =  Dict+_test_Rem_RoundHalfDown_N4_P2 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 2) ~ Z)+_test_Rem_RoundHalfDown_N4_P2 =  Dict+_test_Div_RoundHalfDown_N4_P3 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 3) ~ N 1)+_test_Div_RoundHalfDown_N4_P3 =  Dict+_test_Rem_RoundHalfDown_N4_P3 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 3) ~ N 1)+_test_Rem_RoundHalfDown_N4_P3 =  Dict+_test_Div_RoundHalfDown_N4_P4 :: Dict (K.Div 'K.RoundHalfDown (N 4) (P 4) ~ N 1)+_test_Div_RoundHalfDown_N4_P4 =  Dict+_test_Rem_RoundHalfDown_N4_P4 :: Dict (K.Rem 'K.RoundHalfDown (N 4) (P 4) ~ Z)+_test_Rem_RoundHalfDown_N4_P4 =  Dict+_test_Rem_RoundHalfDown_Z_N1 :: Dict (K.Rem 'K.RoundHalfDown Z (N 1) ~ Z)+_test_Rem_RoundHalfDown_Z_N1 =  Dict+_test_Rem_RoundHalfDown_Z_N2 :: Dict (K.Rem 'K.RoundHalfDown Z (N 2) ~ Z)+_test_Rem_RoundHalfDown_Z_N2 =  Dict+_test_Rem_RoundHalfDown_Z_N3 :: Dict (K.Rem 'K.RoundHalfDown Z (N 3) ~ Z)+_test_Rem_RoundHalfDown_Z_N3 =  Dict+_test_Rem_RoundHalfDown_Z_N4 :: Dict (K.Rem 'K.RoundHalfDown Z (N 4) ~ Z)+_test_Rem_RoundHalfDown_Z_N4 =  Dict+_test_Rem_RoundHalfDown_Z_P1 :: Dict (K.Rem 'K.RoundHalfDown Z (P 1) ~ Z)+_test_Rem_RoundHalfDown_Z_P1 =  Dict+_test_Rem_RoundHalfDown_Z_P2 :: Dict (K.Rem 'K.RoundHalfDown Z (P 2) ~ Z)+_test_Rem_RoundHalfDown_Z_P2 =  Dict+_test_Rem_RoundHalfDown_Z_P3 :: Dict (K.Rem 'K.RoundHalfDown Z (P 3) ~ Z)+_test_Rem_RoundHalfDown_Z_P3 =  Dict+_test_Rem_RoundHalfDown_Z_P4 :: Dict (K.Rem 'K.RoundHalfDown Z (P 4) ~ Z)+_test_Rem_RoundHalfDown_Z_P4 =  Dict+_test_Div_RoundHalfDown_P1_N1 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 1) ~ N 1)+_test_Div_RoundHalfDown_P1_N1 =  Dict+_test_Rem_RoundHalfDown_P1_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 1) ~ Z)+_test_Rem_RoundHalfDown_P1_N1 =  Dict+_test_Div_RoundHalfDown_P1_N2 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 2) ~ N 1)+_test_Div_RoundHalfDown_P1_N2 =  Dict+_test_Rem_RoundHalfDown_P1_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 2) ~ N 1)+_test_Rem_RoundHalfDown_P1_N2 =  Dict+_test_Div_RoundHalfDown_P1_N3 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 3) ~ Z)+_test_Div_RoundHalfDown_P1_N3 =  Dict+_test_Rem_RoundHalfDown_P1_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 3) ~ P 1)+_test_Rem_RoundHalfDown_P1_N3 =  Dict+_test_Div_RoundHalfDown_P1_N4 :: Dict (K.Div 'K.RoundHalfDown (P 1) (N 4) ~ Z)+_test_Div_RoundHalfDown_P1_N4 =  Dict+_test_Rem_RoundHalfDown_P1_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (N 4) ~ P 1)+_test_Rem_RoundHalfDown_P1_N4 =  Dict+_test_Div_RoundHalfDown_P1_P1 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 1) ~ P 1)+_test_Div_RoundHalfDown_P1_P1 =  Dict+_test_Rem_RoundHalfDown_P1_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 1) ~ Z)+_test_Rem_RoundHalfDown_P1_P1 =  Dict+_test_Div_RoundHalfDown_P1_P2 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 2) ~ Z)+_test_Div_RoundHalfDown_P1_P2 =  Dict+_test_Rem_RoundHalfDown_P1_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 2) ~ P 1)+_test_Rem_RoundHalfDown_P1_P2 =  Dict+_test_Div_RoundHalfDown_P1_P3 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 3) ~ Z)+_test_Div_RoundHalfDown_P1_P3 =  Dict+_test_Rem_RoundHalfDown_P1_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 3) ~ P 1)+_test_Rem_RoundHalfDown_P1_P3 =  Dict+_test_Div_RoundHalfDown_P1_P4 :: Dict (K.Div 'K.RoundHalfDown (P 1) (P 4) ~ Z)+_test_Div_RoundHalfDown_P1_P4 =  Dict+_test_Rem_RoundHalfDown_P1_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 1) (P 4) ~ P 1)+_test_Rem_RoundHalfDown_P1_P4 =  Dict+_test_Div_RoundHalfDown_P2_N1 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 1) ~ N 2)+_test_Div_RoundHalfDown_P2_N1 =  Dict+_test_Rem_RoundHalfDown_P2_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 1) ~ Z)+_test_Rem_RoundHalfDown_P2_N1 =  Dict+_test_Div_RoundHalfDown_P2_N2 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 2) ~ N 1)+_test_Div_RoundHalfDown_P2_N2 =  Dict+_test_Rem_RoundHalfDown_P2_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 2) ~ Z)+_test_Rem_RoundHalfDown_P2_N2 =  Dict+_test_Div_RoundHalfDown_P2_N3 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 3) ~ N 1)+_test_Div_RoundHalfDown_P2_N3 =  Dict+_test_Rem_RoundHalfDown_P2_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 3) ~ N 1)+_test_Rem_RoundHalfDown_P2_N3 =  Dict+_test_Div_RoundHalfDown_P2_N4 :: Dict (K.Div 'K.RoundHalfDown (P 2) (N 4) ~ N 1)+_test_Div_RoundHalfDown_P2_N4 =  Dict+_test_Rem_RoundHalfDown_P2_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (N 4) ~ N 2)+_test_Rem_RoundHalfDown_P2_N4 =  Dict+_test_Div_RoundHalfDown_P2_P1 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 1) ~ P 2)+_test_Div_RoundHalfDown_P2_P1 =  Dict+_test_Rem_RoundHalfDown_P2_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 1) ~ Z)+_test_Rem_RoundHalfDown_P2_P1 =  Dict+_test_Div_RoundHalfDown_P2_P2 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 2) ~ P 1)+_test_Div_RoundHalfDown_P2_P2 =  Dict+_test_Rem_RoundHalfDown_P2_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 2) ~ Z)+_test_Rem_RoundHalfDown_P2_P2 =  Dict+_test_Div_RoundHalfDown_P2_P3 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 3) ~ P 1)+_test_Div_RoundHalfDown_P2_P3 =  Dict+_test_Rem_RoundHalfDown_P2_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 3) ~ N 1)+_test_Rem_RoundHalfDown_P2_P3 =  Dict+_test_Div_RoundHalfDown_P2_P4 :: Dict (K.Div 'K.RoundHalfDown (P 2) (P 4) ~ Z)+_test_Div_RoundHalfDown_P2_P4 =  Dict+_test_Rem_RoundHalfDown_P2_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 2) (P 4) ~ P 2)+_test_Rem_RoundHalfDown_P2_P4 =  Dict+_test_Div_RoundHalfDown_P3_N1 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 1) ~ N 3)+_test_Div_RoundHalfDown_P3_N1 =  Dict+_test_Rem_RoundHalfDown_P3_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 1) ~ Z)+_test_Rem_RoundHalfDown_P3_N1 =  Dict+_test_Div_RoundHalfDown_P3_N2 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 2) ~ N 2)+_test_Div_RoundHalfDown_P3_N2 =  Dict+_test_Rem_RoundHalfDown_P3_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 2) ~ N 1)+_test_Rem_RoundHalfDown_P3_N2 =  Dict+_test_Div_RoundHalfDown_P3_N3 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 3) ~ N 1)+_test_Div_RoundHalfDown_P3_N3 =  Dict+_test_Rem_RoundHalfDown_P3_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 3) ~ Z)+_test_Rem_RoundHalfDown_P3_N3 =  Dict+_test_Div_RoundHalfDown_P3_N4 :: Dict (K.Div 'K.RoundHalfDown (P 3) (N 4) ~ N 1)+_test_Div_RoundHalfDown_P3_N4 =  Dict+_test_Rem_RoundHalfDown_P3_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (N 4) ~ N 1)+_test_Rem_RoundHalfDown_P3_N4 =  Dict+_test_Div_RoundHalfDown_P3_P1 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 1) ~ P 3)+_test_Div_RoundHalfDown_P3_P1 =  Dict+_test_Rem_RoundHalfDown_P3_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 1) ~ Z)+_test_Rem_RoundHalfDown_P3_P1 =  Dict+_test_Div_RoundHalfDown_P3_P2 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 2) ~ P 1)+_test_Div_RoundHalfDown_P3_P2 =  Dict+_test_Rem_RoundHalfDown_P3_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 2) ~ P 1)+_test_Rem_RoundHalfDown_P3_P2 =  Dict+_test_Div_RoundHalfDown_P3_P3 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 3) ~ P 1)+_test_Div_RoundHalfDown_P3_P3 =  Dict+_test_Rem_RoundHalfDown_P3_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 3) ~ Z)+_test_Rem_RoundHalfDown_P3_P3 =  Dict+_test_Div_RoundHalfDown_P3_P4 :: Dict (K.Div 'K.RoundHalfDown (P 3) (P 4) ~ P 1)+_test_Div_RoundHalfDown_P3_P4 =  Dict+_test_Rem_RoundHalfDown_P3_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 3) (P 4) ~ N 1)+_test_Rem_RoundHalfDown_P3_P4 =  Dict+_test_Div_RoundHalfDown_P4_N1 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 1) ~ N 4)+_test_Div_RoundHalfDown_P4_N1 =  Dict+_test_Rem_RoundHalfDown_P4_N1 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 1) ~ Z)+_test_Rem_RoundHalfDown_P4_N1 =  Dict+_test_Div_RoundHalfDown_P4_N2 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 2) ~ N 2)+_test_Div_RoundHalfDown_P4_N2 =  Dict+_test_Rem_RoundHalfDown_P4_N2 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 2) ~ Z)+_test_Rem_RoundHalfDown_P4_N2 =  Dict+_test_Div_RoundHalfDown_P4_N3 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 3) ~ N 1)+_test_Div_RoundHalfDown_P4_N3 =  Dict+_test_Rem_RoundHalfDown_P4_N3 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 3) ~ P 1)+_test_Rem_RoundHalfDown_P4_N3 =  Dict+_test_Div_RoundHalfDown_P4_N4 :: Dict (K.Div 'K.RoundHalfDown (P 4) (N 4) ~ N 1)+_test_Div_RoundHalfDown_P4_N4 =  Dict+_test_Rem_RoundHalfDown_P4_N4 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (N 4) ~ Z)+_test_Rem_RoundHalfDown_P4_N4 =  Dict+_test_Div_RoundHalfDown_P4_P1 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 1) ~ P 4)+_test_Div_RoundHalfDown_P4_P1 =  Dict+_test_Rem_RoundHalfDown_P4_P1 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 1) ~ Z)+_test_Rem_RoundHalfDown_P4_P1 =  Dict+_test_Div_RoundHalfDown_P4_P2 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 2) ~ P 2)+_test_Div_RoundHalfDown_P4_P2 =  Dict+_test_Rem_RoundHalfDown_P4_P2 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 2) ~ Z)+_test_Rem_RoundHalfDown_P4_P2 =  Dict+_test_Div_RoundHalfDown_P4_P3 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 3) ~ P 1)+_test_Div_RoundHalfDown_P4_P3 =  Dict+_test_Rem_RoundHalfDown_P4_P3 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 3) ~ P 1)+_test_Rem_RoundHalfDown_P4_P3 =  Dict+_test_Div_RoundHalfDown_P4_P4 :: Dict (K.Div 'K.RoundHalfDown (P 4) (P 4) ~ P 1)+_test_Div_RoundHalfDown_P4_P4 =  Dict+_test_Rem_RoundHalfDown_P4_P4 :: Dict (K.Rem 'K.RoundHalfDown (P 4) (P 4) ~ Z)+_test_Rem_RoundHalfDown_P4_P4 =  Dict+_test_Div_RoundHalfEven_N1_N1 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 1) ~ P 1)+_test_Div_RoundHalfEven_N1_N1 =  Dict+_test_Rem_RoundHalfEven_N1_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 1) ~ Z)+_test_Rem_RoundHalfEven_N1_N1 =  Dict+_test_Div_RoundHalfEven_N1_N2 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 2) ~ Z)+_test_Div_RoundHalfEven_N1_N2 =  Dict+_test_Rem_RoundHalfEven_N1_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 2) ~ N 1)+_test_Rem_RoundHalfEven_N1_N2 =  Dict+_test_Div_RoundHalfEven_N1_N3 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 3) ~ Z)+_test_Div_RoundHalfEven_N1_N3 =  Dict+_test_Rem_RoundHalfEven_N1_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 3) ~ N 1)+_test_Rem_RoundHalfEven_N1_N3 =  Dict+_test_Div_RoundHalfEven_N1_N4 :: Dict (K.Div 'K.RoundHalfEven (N 1) (N 4) ~ Z)+_test_Div_RoundHalfEven_N1_N4 =  Dict+_test_Rem_RoundHalfEven_N1_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (N 4) ~ N 1)+_test_Rem_RoundHalfEven_N1_N4 =  Dict+_test_Div_RoundHalfEven_N1_P1 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 1) ~ N 1)+_test_Div_RoundHalfEven_N1_P1 =  Dict+_test_Rem_RoundHalfEven_N1_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 1) ~ Z)+_test_Rem_RoundHalfEven_N1_P1 =  Dict+_test_Div_RoundHalfEven_N1_P2 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 2) ~ Z)+_test_Div_RoundHalfEven_N1_P2 =  Dict+_test_Rem_RoundHalfEven_N1_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 2) ~ N 1)+_test_Rem_RoundHalfEven_N1_P2 =  Dict+_test_Div_RoundHalfEven_N1_P3 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 3) ~ Z)+_test_Div_RoundHalfEven_N1_P3 =  Dict+_test_Rem_RoundHalfEven_N1_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 3) ~ N 1)+_test_Rem_RoundHalfEven_N1_P3 =  Dict+_test_Div_RoundHalfEven_N1_P4 :: Dict (K.Div 'K.RoundHalfEven (N 1) (P 4) ~ Z)+_test_Div_RoundHalfEven_N1_P4 =  Dict+_test_Rem_RoundHalfEven_N1_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 1) (P 4) ~ N 1)+_test_Rem_RoundHalfEven_N1_P4 =  Dict+_test_Div_RoundHalfEven_N2_N1 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 1) ~ P 2)+_test_Div_RoundHalfEven_N2_N1 =  Dict+_test_Rem_RoundHalfEven_N2_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 1) ~ Z)+_test_Rem_RoundHalfEven_N2_N1 =  Dict+_test_Div_RoundHalfEven_N2_N2 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 2) ~ P 1)+_test_Div_RoundHalfEven_N2_N2 =  Dict+_test_Rem_RoundHalfEven_N2_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 2) ~ Z)+_test_Rem_RoundHalfEven_N2_N2 =  Dict+_test_Div_RoundHalfEven_N2_N3 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 3) ~ P 1)+_test_Div_RoundHalfEven_N2_N3 =  Dict+_test_Rem_RoundHalfEven_N2_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 3) ~ P 1)+_test_Rem_RoundHalfEven_N2_N3 =  Dict+_test_Div_RoundHalfEven_N2_N4 :: Dict (K.Div 'K.RoundHalfEven (N 2) (N 4) ~ Z)+_test_Div_RoundHalfEven_N2_N4 =  Dict+_test_Rem_RoundHalfEven_N2_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (N 4) ~ N 2)+_test_Rem_RoundHalfEven_N2_N4 =  Dict+_test_Div_RoundHalfEven_N2_P1 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 1) ~ N 2)+_test_Div_RoundHalfEven_N2_P1 =  Dict+_test_Rem_RoundHalfEven_N2_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 1) ~ Z)+_test_Rem_RoundHalfEven_N2_P1 =  Dict+_test_Div_RoundHalfEven_N2_P2 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 2) ~ N 1)+_test_Div_RoundHalfEven_N2_P2 =  Dict+_test_Rem_RoundHalfEven_N2_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 2) ~ Z)+_test_Rem_RoundHalfEven_N2_P2 =  Dict+_test_Div_RoundHalfEven_N2_P3 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 3) ~ N 1)+_test_Div_RoundHalfEven_N2_P3 =  Dict+_test_Rem_RoundHalfEven_N2_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 3) ~ P 1)+_test_Rem_RoundHalfEven_N2_P3 =  Dict+_test_Div_RoundHalfEven_N2_P4 :: Dict (K.Div 'K.RoundHalfEven (N 2) (P 4) ~ Z)+_test_Div_RoundHalfEven_N2_P4 =  Dict+_test_Rem_RoundHalfEven_N2_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 2) (P 4) ~ N 2)+_test_Rem_RoundHalfEven_N2_P4 =  Dict+_test_Div_RoundHalfEven_N3_N1 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 1) ~ P 3)+_test_Div_RoundHalfEven_N3_N1 =  Dict+_test_Rem_RoundHalfEven_N3_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 1) ~ Z)+_test_Rem_RoundHalfEven_N3_N1 =  Dict+_test_Div_RoundHalfEven_N3_N2 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 2) ~ P 2)+_test_Div_RoundHalfEven_N3_N2 =  Dict+_test_Rem_RoundHalfEven_N3_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 2) ~ P 1)+_test_Rem_RoundHalfEven_N3_N2 =  Dict+_test_Div_RoundHalfEven_N3_N3 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 3) ~ P 1)+_test_Div_RoundHalfEven_N3_N3 =  Dict+_test_Rem_RoundHalfEven_N3_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 3) ~ Z)+_test_Rem_RoundHalfEven_N3_N3 =  Dict+_test_Div_RoundHalfEven_N3_N4 :: Dict (K.Div 'K.RoundHalfEven (N 3) (N 4) ~ P 1)+_test_Div_RoundHalfEven_N3_N4 =  Dict+_test_Rem_RoundHalfEven_N3_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (N 4) ~ P 1)+_test_Rem_RoundHalfEven_N3_N4 =  Dict+_test_Div_RoundHalfEven_N3_P1 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 1) ~ N 3)+_test_Div_RoundHalfEven_N3_P1 =  Dict+_test_Rem_RoundHalfEven_N3_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 1) ~ Z)+_test_Rem_RoundHalfEven_N3_P1 =  Dict+_test_Div_RoundHalfEven_N3_P2 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 2) ~ N 2)+_test_Div_RoundHalfEven_N3_P2 =  Dict+_test_Rem_RoundHalfEven_N3_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 2) ~ P 1)+_test_Rem_RoundHalfEven_N3_P2 =  Dict+_test_Div_RoundHalfEven_N3_P3 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 3) ~ N 1)+_test_Div_RoundHalfEven_N3_P3 =  Dict+_test_Rem_RoundHalfEven_N3_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 3) ~ Z)+_test_Rem_RoundHalfEven_N3_P3 =  Dict+_test_Div_RoundHalfEven_N3_P4 :: Dict (K.Div 'K.RoundHalfEven (N 3) (P 4) ~ N 1)+_test_Div_RoundHalfEven_N3_P4 =  Dict+_test_Rem_RoundHalfEven_N3_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 3) (P 4) ~ P 1)+_test_Rem_RoundHalfEven_N3_P4 =  Dict+_test_Div_RoundHalfEven_N4_N1 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 1) ~ P 4)+_test_Div_RoundHalfEven_N4_N1 =  Dict+_test_Rem_RoundHalfEven_N4_N1 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 1) ~ Z)+_test_Rem_RoundHalfEven_N4_N1 =  Dict+_test_Div_RoundHalfEven_N4_N2 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 2) ~ P 2)+_test_Div_RoundHalfEven_N4_N2 =  Dict+_test_Rem_RoundHalfEven_N4_N2 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 2) ~ Z)+_test_Rem_RoundHalfEven_N4_N2 =  Dict+_test_Div_RoundHalfEven_N4_N3 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 3) ~ P 1)+_test_Div_RoundHalfEven_N4_N3 =  Dict+_test_Rem_RoundHalfEven_N4_N3 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 3) ~ N 1)+_test_Rem_RoundHalfEven_N4_N3 =  Dict+_test_Div_RoundHalfEven_N4_N4 :: Dict (K.Div 'K.RoundHalfEven (N 4) (N 4) ~ P 1)+_test_Div_RoundHalfEven_N4_N4 =  Dict+_test_Rem_RoundHalfEven_N4_N4 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (N 4) ~ Z)+_test_Rem_RoundHalfEven_N4_N4 =  Dict+_test_Div_RoundHalfEven_N4_P1 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 1) ~ N 4)+_test_Div_RoundHalfEven_N4_P1 =  Dict+_test_Rem_RoundHalfEven_N4_P1 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 1) ~ Z)+_test_Rem_RoundHalfEven_N4_P1 =  Dict+_test_Div_RoundHalfEven_N4_P2 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 2) ~ N 2)+_test_Div_RoundHalfEven_N4_P2 =  Dict+_test_Rem_RoundHalfEven_N4_P2 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 2) ~ Z)+_test_Rem_RoundHalfEven_N4_P2 =  Dict+_test_Div_RoundHalfEven_N4_P3 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 3) ~ N 1)+_test_Div_RoundHalfEven_N4_P3 =  Dict+_test_Rem_RoundHalfEven_N4_P3 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 3) ~ N 1)+_test_Rem_RoundHalfEven_N4_P3 =  Dict+_test_Div_RoundHalfEven_N4_P4 :: Dict (K.Div 'K.RoundHalfEven (N 4) (P 4) ~ N 1)+_test_Div_RoundHalfEven_N4_P4 =  Dict+_test_Rem_RoundHalfEven_N4_P4 :: Dict (K.Rem 'K.RoundHalfEven (N 4) (P 4) ~ Z)+_test_Rem_RoundHalfEven_N4_P4 =  Dict+_test_Rem_RoundHalfEven_Z_N1 :: Dict (K.Rem 'K.RoundHalfEven Z (N 1) ~ Z)+_test_Rem_RoundHalfEven_Z_N1 =  Dict+_test_Rem_RoundHalfEven_Z_N2 :: Dict (K.Rem 'K.RoundHalfEven Z (N 2) ~ Z)+_test_Rem_RoundHalfEven_Z_N2 =  Dict+_test_Rem_RoundHalfEven_Z_N3 :: Dict (K.Rem 'K.RoundHalfEven Z (N 3) ~ Z)+_test_Rem_RoundHalfEven_Z_N3 =  Dict+_test_Rem_RoundHalfEven_Z_N4 :: Dict (K.Rem 'K.RoundHalfEven Z (N 4) ~ Z)+_test_Rem_RoundHalfEven_Z_N4 =  Dict+_test_Rem_RoundHalfEven_Z_P1 :: Dict (K.Rem 'K.RoundHalfEven Z (P 1) ~ Z)+_test_Rem_RoundHalfEven_Z_P1 =  Dict+_test_Rem_RoundHalfEven_Z_P2 :: Dict (K.Rem 'K.RoundHalfEven Z (P 2) ~ Z)+_test_Rem_RoundHalfEven_Z_P2 =  Dict+_test_Rem_RoundHalfEven_Z_P3 :: Dict (K.Rem 'K.RoundHalfEven Z (P 3) ~ Z)+_test_Rem_RoundHalfEven_Z_P3 =  Dict+_test_Rem_RoundHalfEven_Z_P4 :: Dict (K.Rem 'K.RoundHalfEven Z (P 4) ~ Z)+_test_Rem_RoundHalfEven_Z_P4 =  Dict+_test_Div_RoundHalfEven_P1_N1 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 1) ~ N 1)+_test_Div_RoundHalfEven_P1_N1 =  Dict+_test_Rem_RoundHalfEven_P1_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 1) ~ Z)+_test_Rem_RoundHalfEven_P1_N1 =  Dict+_test_Div_RoundHalfEven_P1_N2 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 2) ~ Z)+_test_Div_RoundHalfEven_P1_N2 =  Dict+_test_Rem_RoundHalfEven_P1_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 2) ~ P 1)+_test_Rem_RoundHalfEven_P1_N2 =  Dict+_test_Div_RoundHalfEven_P1_N3 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 3) ~ Z)+_test_Div_RoundHalfEven_P1_N3 =  Dict+_test_Rem_RoundHalfEven_P1_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 3) ~ P 1)+_test_Rem_RoundHalfEven_P1_N3 =  Dict+_test_Div_RoundHalfEven_P1_N4 :: Dict (K.Div 'K.RoundHalfEven (P 1) (N 4) ~ Z)+_test_Div_RoundHalfEven_P1_N4 =  Dict+_test_Rem_RoundHalfEven_P1_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (N 4) ~ P 1)+_test_Rem_RoundHalfEven_P1_N4 =  Dict+_test_Div_RoundHalfEven_P1_P1 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 1) ~ P 1)+_test_Div_RoundHalfEven_P1_P1 =  Dict+_test_Rem_RoundHalfEven_P1_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 1) ~ Z)+_test_Rem_RoundHalfEven_P1_P1 =  Dict+_test_Div_RoundHalfEven_P1_P2 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 2) ~ Z)+_test_Div_RoundHalfEven_P1_P2 =  Dict+_test_Rem_RoundHalfEven_P1_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 2) ~ P 1)+_test_Rem_RoundHalfEven_P1_P2 =  Dict+_test_Div_RoundHalfEven_P1_P3 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 3) ~ Z)+_test_Div_RoundHalfEven_P1_P3 =  Dict+_test_Rem_RoundHalfEven_P1_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 3) ~ P 1)+_test_Rem_RoundHalfEven_P1_P3 =  Dict+_test_Div_RoundHalfEven_P1_P4 :: Dict (K.Div 'K.RoundHalfEven (P 1) (P 4) ~ Z)+_test_Div_RoundHalfEven_P1_P4 =  Dict+_test_Rem_RoundHalfEven_P1_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 1) (P 4) ~ P 1)+_test_Rem_RoundHalfEven_P1_P4 =  Dict+_test_Div_RoundHalfEven_P2_N1 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 1) ~ N 2)+_test_Div_RoundHalfEven_P2_N1 =  Dict+_test_Rem_RoundHalfEven_P2_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 1) ~ Z)+_test_Rem_RoundHalfEven_P2_N1 =  Dict+_test_Div_RoundHalfEven_P2_N2 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 2) ~ N 1)+_test_Div_RoundHalfEven_P2_N2 =  Dict+_test_Rem_RoundHalfEven_P2_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 2) ~ Z)+_test_Rem_RoundHalfEven_P2_N2 =  Dict+_test_Div_RoundHalfEven_P2_N3 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 3) ~ N 1)+_test_Div_RoundHalfEven_P2_N3 =  Dict+_test_Rem_RoundHalfEven_P2_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 3) ~ N 1)+_test_Rem_RoundHalfEven_P2_N3 =  Dict+_test_Div_RoundHalfEven_P2_N4 :: Dict (K.Div 'K.RoundHalfEven (P 2) (N 4) ~ Z)+_test_Div_RoundHalfEven_P2_N4 =  Dict+_test_Rem_RoundHalfEven_P2_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (N 4) ~ P 2)+_test_Rem_RoundHalfEven_P2_N4 =  Dict+_test_Div_RoundHalfEven_P2_P1 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 1) ~ P 2)+_test_Div_RoundHalfEven_P2_P1 =  Dict+_test_Rem_RoundHalfEven_P2_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 1) ~ Z)+_test_Rem_RoundHalfEven_P2_P1 =  Dict+_test_Div_RoundHalfEven_P2_P2 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 2) ~ P 1)+_test_Div_RoundHalfEven_P2_P2 =  Dict+_test_Rem_RoundHalfEven_P2_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 2) ~ Z)+_test_Rem_RoundHalfEven_P2_P2 =  Dict+_test_Div_RoundHalfEven_P2_P3 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 3) ~ P 1)+_test_Div_RoundHalfEven_P2_P3 =  Dict+_test_Rem_RoundHalfEven_P2_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 3) ~ N 1)+_test_Rem_RoundHalfEven_P2_P3 =  Dict+_test_Div_RoundHalfEven_P2_P4 :: Dict (K.Div 'K.RoundHalfEven (P 2) (P 4) ~ Z)+_test_Div_RoundHalfEven_P2_P4 =  Dict+_test_Rem_RoundHalfEven_P2_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 2) (P 4) ~ P 2)+_test_Rem_RoundHalfEven_P2_P4 =  Dict+_test_Div_RoundHalfEven_P3_N1 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 1) ~ N 3)+_test_Div_RoundHalfEven_P3_N1 =  Dict+_test_Rem_RoundHalfEven_P3_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 1) ~ Z)+_test_Rem_RoundHalfEven_P3_N1 =  Dict+_test_Div_RoundHalfEven_P3_N2 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 2) ~ N 2)+_test_Div_RoundHalfEven_P3_N2 =  Dict+_test_Rem_RoundHalfEven_P3_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 2) ~ N 1)+_test_Rem_RoundHalfEven_P3_N2 =  Dict+_test_Div_RoundHalfEven_P3_N3 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 3) ~ N 1)+_test_Div_RoundHalfEven_P3_N3 =  Dict+_test_Rem_RoundHalfEven_P3_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 3) ~ Z)+_test_Rem_RoundHalfEven_P3_N3 =  Dict+_test_Div_RoundHalfEven_P3_N4 :: Dict (K.Div 'K.RoundHalfEven (P 3) (N 4) ~ N 1)+_test_Div_RoundHalfEven_P3_N4 =  Dict+_test_Rem_RoundHalfEven_P3_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (N 4) ~ N 1)+_test_Rem_RoundHalfEven_P3_N4 =  Dict+_test_Div_RoundHalfEven_P3_P1 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 1) ~ P 3)+_test_Div_RoundHalfEven_P3_P1 =  Dict+_test_Rem_RoundHalfEven_P3_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 1) ~ Z)+_test_Rem_RoundHalfEven_P3_P1 =  Dict+_test_Div_RoundHalfEven_P3_P2 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 2) ~ P 2)+_test_Div_RoundHalfEven_P3_P2 =  Dict+_test_Rem_RoundHalfEven_P3_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 2) ~ N 1)+_test_Rem_RoundHalfEven_P3_P2 =  Dict+_test_Div_RoundHalfEven_P3_P3 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 3) ~ P 1)+_test_Div_RoundHalfEven_P3_P3 =  Dict+_test_Rem_RoundHalfEven_P3_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 3) ~ Z)+_test_Rem_RoundHalfEven_P3_P3 =  Dict+_test_Div_RoundHalfEven_P3_P4 :: Dict (K.Div 'K.RoundHalfEven (P 3) (P 4) ~ P 1)+_test_Div_RoundHalfEven_P3_P4 =  Dict+_test_Rem_RoundHalfEven_P3_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 3) (P 4) ~ N 1)+_test_Rem_RoundHalfEven_P3_P4 =  Dict+_test_Div_RoundHalfEven_P4_N1 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 1) ~ N 4)+_test_Div_RoundHalfEven_P4_N1 =  Dict+_test_Rem_RoundHalfEven_P4_N1 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 1) ~ Z)+_test_Rem_RoundHalfEven_P4_N1 =  Dict+_test_Div_RoundHalfEven_P4_N2 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 2) ~ N 2)+_test_Div_RoundHalfEven_P4_N2 =  Dict+_test_Rem_RoundHalfEven_P4_N2 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 2) ~ Z)+_test_Rem_RoundHalfEven_P4_N2 =  Dict+_test_Div_RoundHalfEven_P4_N3 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 3) ~ N 1)+_test_Div_RoundHalfEven_P4_N3 =  Dict+_test_Rem_RoundHalfEven_P4_N3 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 3) ~ P 1)+_test_Rem_RoundHalfEven_P4_N3 =  Dict+_test_Div_RoundHalfEven_P4_N4 :: Dict (K.Div 'K.RoundHalfEven (P 4) (N 4) ~ N 1)+_test_Div_RoundHalfEven_P4_N4 =  Dict+_test_Rem_RoundHalfEven_P4_N4 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (N 4) ~ Z)+_test_Rem_RoundHalfEven_P4_N4 =  Dict+_test_Div_RoundHalfEven_P4_P1 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 1) ~ P 4)+_test_Div_RoundHalfEven_P4_P1 =  Dict+_test_Rem_RoundHalfEven_P4_P1 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 1) ~ Z)+_test_Rem_RoundHalfEven_P4_P1 =  Dict+_test_Div_RoundHalfEven_P4_P2 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 2) ~ P 2)+_test_Div_RoundHalfEven_P4_P2 =  Dict+_test_Rem_RoundHalfEven_P4_P2 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 2) ~ Z)+_test_Rem_RoundHalfEven_P4_P2 =  Dict+_test_Div_RoundHalfEven_P4_P3 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 3) ~ P 1)+_test_Div_RoundHalfEven_P4_P3 =  Dict+_test_Rem_RoundHalfEven_P4_P3 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 3) ~ P 1)+_test_Rem_RoundHalfEven_P4_P3 =  Dict+_test_Div_RoundHalfEven_P4_P4 :: Dict (K.Div 'K.RoundHalfEven (P 4) (P 4) ~ P 1)+_test_Div_RoundHalfEven_P4_P4 =  Dict+_test_Rem_RoundHalfEven_P4_P4 :: Dict (K.Rem 'K.RoundHalfEven (P 4) (P 4) ~ Z)+_test_Rem_RoundHalfEven_P4_P4 =  Dict+_test_Div_RoundHalfOdd_N1_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 1) ~ P 1)+_test_Div_RoundHalfOdd_N1_N1 =  Dict+_test_Rem_RoundHalfOdd_N1_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_N1_N1 =  Dict+_test_Div_RoundHalfOdd_N1_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 2) ~ P 1)+_test_Div_RoundHalfOdd_N1_N2 =  Dict+_test_Rem_RoundHalfOdd_N1_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 2) ~ P 1)+_test_Rem_RoundHalfOdd_N1_N2 =  Dict+_test_Div_RoundHalfOdd_N1_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 3) ~ Z)+_test_Div_RoundHalfOdd_N1_N3 =  Dict+_test_Rem_RoundHalfOdd_N1_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 3) ~ N 1)+_test_Rem_RoundHalfOdd_N1_N3 =  Dict+_test_Div_RoundHalfOdd_N1_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (N 4) ~ Z)+_test_Div_RoundHalfOdd_N1_N4 =  Dict+_test_Rem_RoundHalfOdd_N1_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (N 4) ~ N 1)+_test_Rem_RoundHalfOdd_N1_N4 =  Dict+_test_Div_RoundHalfOdd_N1_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 1) ~ N 1)+_test_Div_RoundHalfOdd_N1_P1 =  Dict+_test_Rem_RoundHalfOdd_N1_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_N1_P1 =  Dict+_test_Div_RoundHalfOdd_N1_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 2) ~ N 1)+_test_Div_RoundHalfOdd_N1_P2 =  Dict+_test_Rem_RoundHalfOdd_N1_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 2) ~ P 1)+_test_Rem_RoundHalfOdd_N1_P2 =  Dict+_test_Div_RoundHalfOdd_N1_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 3) ~ Z)+_test_Div_RoundHalfOdd_N1_P3 =  Dict+_test_Rem_RoundHalfOdd_N1_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 3) ~ N 1)+_test_Rem_RoundHalfOdd_N1_P3 =  Dict+_test_Div_RoundHalfOdd_N1_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 1) (P 4) ~ Z)+_test_Div_RoundHalfOdd_N1_P4 =  Dict+_test_Rem_RoundHalfOdd_N1_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 1) (P 4) ~ N 1)+_test_Rem_RoundHalfOdd_N1_P4 =  Dict+_test_Div_RoundHalfOdd_N2_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 1) ~ P 2)+_test_Div_RoundHalfOdd_N2_N1 =  Dict+_test_Rem_RoundHalfOdd_N2_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_N2_N1 =  Dict+_test_Div_RoundHalfOdd_N2_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 2) ~ P 1)+_test_Div_RoundHalfOdd_N2_N2 =  Dict+_test_Rem_RoundHalfOdd_N2_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 2) ~ Z)+_test_Rem_RoundHalfOdd_N2_N2 =  Dict+_test_Div_RoundHalfOdd_N2_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 3) ~ P 1)+_test_Div_RoundHalfOdd_N2_N3 =  Dict+_test_Rem_RoundHalfOdd_N2_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 3) ~ P 1)+_test_Rem_RoundHalfOdd_N2_N3 =  Dict+_test_Div_RoundHalfOdd_N2_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (N 4) ~ P 1)+_test_Div_RoundHalfOdd_N2_N4 =  Dict+_test_Rem_RoundHalfOdd_N2_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (N 4) ~ P 2)+_test_Rem_RoundHalfOdd_N2_N4 =  Dict+_test_Div_RoundHalfOdd_N2_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 1) ~ N 2)+_test_Div_RoundHalfOdd_N2_P1 =  Dict+_test_Rem_RoundHalfOdd_N2_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_N2_P1 =  Dict+_test_Div_RoundHalfOdd_N2_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 2) ~ N 1)+_test_Div_RoundHalfOdd_N2_P2 =  Dict+_test_Rem_RoundHalfOdd_N2_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 2) ~ Z)+_test_Rem_RoundHalfOdd_N2_P2 =  Dict+_test_Div_RoundHalfOdd_N2_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 3) ~ N 1)+_test_Div_RoundHalfOdd_N2_P3 =  Dict+_test_Rem_RoundHalfOdd_N2_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 3) ~ P 1)+_test_Rem_RoundHalfOdd_N2_P3 =  Dict+_test_Div_RoundHalfOdd_N2_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 2) (P 4) ~ N 1)+_test_Div_RoundHalfOdd_N2_P4 =  Dict+_test_Rem_RoundHalfOdd_N2_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 2) (P 4) ~ P 2)+_test_Rem_RoundHalfOdd_N2_P4 =  Dict+_test_Div_RoundHalfOdd_N3_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 1) ~ P 3)+_test_Div_RoundHalfOdd_N3_N1 =  Dict+_test_Rem_RoundHalfOdd_N3_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_N3_N1 =  Dict+_test_Div_RoundHalfOdd_N3_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 2) ~ P 1)+_test_Div_RoundHalfOdd_N3_N2 =  Dict+_test_Rem_RoundHalfOdd_N3_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 2) ~ N 1)+_test_Rem_RoundHalfOdd_N3_N2 =  Dict+_test_Div_RoundHalfOdd_N3_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 3) ~ P 1)+_test_Div_RoundHalfOdd_N3_N3 =  Dict+_test_Rem_RoundHalfOdd_N3_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 3) ~ Z)+_test_Rem_RoundHalfOdd_N3_N3 =  Dict+_test_Div_RoundHalfOdd_N3_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (N 4) ~ P 1)+_test_Div_RoundHalfOdd_N3_N4 =  Dict+_test_Rem_RoundHalfOdd_N3_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (N 4) ~ P 1)+_test_Rem_RoundHalfOdd_N3_N4 =  Dict+_test_Div_RoundHalfOdd_N3_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 1) ~ N 3)+_test_Div_RoundHalfOdd_N3_P1 =  Dict+_test_Rem_RoundHalfOdd_N3_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_N3_P1 =  Dict+_test_Div_RoundHalfOdd_N3_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 2) ~ N 1)+_test_Div_RoundHalfOdd_N3_P2 =  Dict+_test_Rem_RoundHalfOdd_N3_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 2) ~ N 1)+_test_Rem_RoundHalfOdd_N3_P2 =  Dict+_test_Div_RoundHalfOdd_N3_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 3) ~ N 1)+_test_Div_RoundHalfOdd_N3_P3 =  Dict+_test_Rem_RoundHalfOdd_N3_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 3) ~ Z)+_test_Rem_RoundHalfOdd_N3_P3 =  Dict+_test_Div_RoundHalfOdd_N3_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 3) (P 4) ~ N 1)+_test_Div_RoundHalfOdd_N3_P4 =  Dict+_test_Rem_RoundHalfOdd_N3_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 3) (P 4) ~ P 1)+_test_Rem_RoundHalfOdd_N3_P4 =  Dict+_test_Div_RoundHalfOdd_N4_N1 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 1) ~ P 4)+_test_Div_RoundHalfOdd_N4_N1 =  Dict+_test_Rem_RoundHalfOdd_N4_N1 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_N4_N1 =  Dict+_test_Div_RoundHalfOdd_N4_N2 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 2) ~ P 2)+_test_Div_RoundHalfOdd_N4_N2 =  Dict+_test_Rem_RoundHalfOdd_N4_N2 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 2) ~ Z)+_test_Rem_RoundHalfOdd_N4_N2 =  Dict+_test_Div_RoundHalfOdd_N4_N3 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 3) ~ P 1)+_test_Div_RoundHalfOdd_N4_N3 =  Dict+_test_Rem_RoundHalfOdd_N4_N3 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 3) ~ N 1)+_test_Rem_RoundHalfOdd_N4_N3 =  Dict+_test_Div_RoundHalfOdd_N4_N4 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (N 4) ~ P 1)+_test_Div_RoundHalfOdd_N4_N4 =  Dict+_test_Rem_RoundHalfOdd_N4_N4 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (N 4) ~ Z)+_test_Rem_RoundHalfOdd_N4_N4 =  Dict+_test_Div_RoundHalfOdd_N4_P1 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 1) ~ N 4)+_test_Div_RoundHalfOdd_N4_P1 =  Dict+_test_Rem_RoundHalfOdd_N4_P1 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_N4_P1 =  Dict+_test_Div_RoundHalfOdd_N4_P2 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 2) ~ N 2)+_test_Div_RoundHalfOdd_N4_P2 =  Dict+_test_Rem_RoundHalfOdd_N4_P2 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 2) ~ Z)+_test_Rem_RoundHalfOdd_N4_P2 =  Dict+_test_Div_RoundHalfOdd_N4_P3 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 3) ~ N 1)+_test_Div_RoundHalfOdd_N4_P3 =  Dict+_test_Rem_RoundHalfOdd_N4_P3 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 3) ~ N 1)+_test_Rem_RoundHalfOdd_N4_P3 =  Dict+_test_Div_RoundHalfOdd_N4_P4 :: Dict (K.Div 'K.RoundHalfOdd (N 4) (P 4) ~ N 1)+_test_Div_RoundHalfOdd_N4_P4 =  Dict+_test_Rem_RoundHalfOdd_N4_P4 :: Dict (K.Rem 'K.RoundHalfOdd (N 4) (P 4) ~ Z)+_test_Rem_RoundHalfOdd_N4_P4 =  Dict+_test_Rem_RoundHalfOdd_Z_N1 :: Dict (K.Rem 'K.RoundHalfOdd Z (N 1) ~ Z)+_test_Rem_RoundHalfOdd_Z_N1 =  Dict+_test_Rem_RoundHalfOdd_Z_N2 :: Dict (K.Rem 'K.RoundHalfOdd Z (N 2) ~ Z)+_test_Rem_RoundHalfOdd_Z_N2 =  Dict+_test_Rem_RoundHalfOdd_Z_N3 :: Dict (K.Rem 'K.RoundHalfOdd Z (N 3) ~ Z)+_test_Rem_RoundHalfOdd_Z_N3 =  Dict+_test_Rem_RoundHalfOdd_Z_N4 :: Dict (K.Rem 'K.RoundHalfOdd Z (N 4) ~ Z)+_test_Rem_RoundHalfOdd_Z_N4 =  Dict+_test_Rem_RoundHalfOdd_Z_P1 :: Dict (K.Rem 'K.RoundHalfOdd Z (P 1) ~ Z)+_test_Rem_RoundHalfOdd_Z_P1 =  Dict+_test_Rem_RoundHalfOdd_Z_P2 :: Dict (K.Rem 'K.RoundHalfOdd Z (P 2) ~ Z)+_test_Rem_RoundHalfOdd_Z_P2 =  Dict+_test_Rem_RoundHalfOdd_Z_P3 :: Dict (K.Rem 'K.RoundHalfOdd Z (P 3) ~ Z)+_test_Rem_RoundHalfOdd_Z_P3 =  Dict+_test_Rem_RoundHalfOdd_Z_P4 :: Dict (K.Rem 'K.RoundHalfOdd Z (P 4) ~ Z)+_test_Rem_RoundHalfOdd_Z_P4 =  Dict+_test_Div_RoundHalfOdd_P1_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 1) ~ N 1)+_test_Div_RoundHalfOdd_P1_N1 =  Dict+_test_Rem_RoundHalfOdd_P1_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_P1_N1 =  Dict+_test_Div_RoundHalfOdd_P1_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 2) ~ N 1)+_test_Div_RoundHalfOdd_P1_N2 =  Dict+_test_Rem_RoundHalfOdd_P1_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 2) ~ N 1)+_test_Rem_RoundHalfOdd_P1_N2 =  Dict+_test_Div_RoundHalfOdd_P1_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 3) ~ Z)+_test_Div_RoundHalfOdd_P1_N3 =  Dict+_test_Rem_RoundHalfOdd_P1_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 3) ~ P 1)+_test_Rem_RoundHalfOdd_P1_N3 =  Dict+_test_Div_RoundHalfOdd_P1_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (N 4) ~ Z)+_test_Div_RoundHalfOdd_P1_N4 =  Dict+_test_Rem_RoundHalfOdd_P1_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (N 4) ~ P 1)+_test_Rem_RoundHalfOdd_P1_N4 =  Dict+_test_Div_RoundHalfOdd_P1_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 1) ~ P 1)+_test_Div_RoundHalfOdd_P1_P1 =  Dict+_test_Rem_RoundHalfOdd_P1_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_P1_P1 =  Dict+_test_Div_RoundHalfOdd_P1_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 2) ~ P 1)+_test_Div_RoundHalfOdd_P1_P2 =  Dict+_test_Rem_RoundHalfOdd_P1_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 2) ~ N 1)+_test_Rem_RoundHalfOdd_P1_P2 =  Dict+_test_Div_RoundHalfOdd_P1_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 3) ~ Z)+_test_Div_RoundHalfOdd_P1_P3 =  Dict+_test_Rem_RoundHalfOdd_P1_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 3) ~ P 1)+_test_Rem_RoundHalfOdd_P1_P3 =  Dict+_test_Div_RoundHalfOdd_P1_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 1) (P 4) ~ Z)+_test_Div_RoundHalfOdd_P1_P4 =  Dict+_test_Rem_RoundHalfOdd_P1_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 1) (P 4) ~ P 1)+_test_Rem_RoundHalfOdd_P1_P4 =  Dict+_test_Div_RoundHalfOdd_P2_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 1) ~ N 2)+_test_Div_RoundHalfOdd_P2_N1 =  Dict+_test_Rem_RoundHalfOdd_P2_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_P2_N1 =  Dict+_test_Div_RoundHalfOdd_P2_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 2) ~ N 1)+_test_Div_RoundHalfOdd_P2_N2 =  Dict+_test_Rem_RoundHalfOdd_P2_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 2) ~ Z)+_test_Rem_RoundHalfOdd_P2_N2 =  Dict+_test_Div_RoundHalfOdd_P2_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 3) ~ N 1)+_test_Div_RoundHalfOdd_P2_N3 =  Dict+_test_Rem_RoundHalfOdd_P2_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 3) ~ N 1)+_test_Rem_RoundHalfOdd_P2_N3 =  Dict+_test_Div_RoundHalfOdd_P2_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (N 4) ~ N 1)+_test_Div_RoundHalfOdd_P2_N4 =  Dict+_test_Rem_RoundHalfOdd_P2_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (N 4) ~ N 2)+_test_Rem_RoundHalfOdd_P2_N4 =  Dict+_test_Div_RoundHalfOdd_P2_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 1) ~ P 2)+_test_Div_RoundHalfOdd_P2_P1 =  Dict+_test_Rem_RoundHalfOdd_P2_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_P2_P1 =  Dict+_test_Div_RoundHalfOdd_P2_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 2) ~ P 1)+_test_Div_RoundHalfOdd_P2_P2 =  Dict+_test_Rem_RoundHalfOdd_P2_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 2) ~ Z)+_test_Rem_RoundHalfOdd_P2_P2 =  Dict+_test_Div_RoundHalfOdd_P2_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 3) ~ P 1)+_test_Div_RoundHalfOdd_P2_P3 =  Dict+_test_Rem_RoundHalfOdd_P2_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 3) ~ N 1)+_test_Rem_RoundHalfOdd_P2_P3 =  Dict+_test_Div_RoundHalfOdd_P2_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 2) (P 4) ~ P 1)+_test_Div_RoundHalfOdd_P2_P4 =  Dict+_test_Rem_RoundHalfOdd_P2_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 2) (P 4) ~ N 2)+_test_Rem_RoundHalfOdd_P2_P4 =  Dict+_test_Div_RoundHalfOdd_P3_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 1) ~ N 3)+_test_Div_RoundHalfOdd_P3_N1 =  Dict+_test_Rem_RoundHalfOdd_P3_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_P3_N1 =  Dict+_test_Div_RoundHalfOdd_P3_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 2) ~ N 1)+_test_Div_RoundHalfOdd_P3_N2 =  Dict+_test_Rem_RoundHalfOdd_P3_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 2) ~ P 1)+_test_Rem_RoundHalfOdd_P3_N2 =  Dict+_test_Div_RoundHalfOdd_P3_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 3) ~ N 1)+_test_Div_RoundHalfOdd_P3_N3 =  Dict+_test_Rem_RoundHalfOdd_P3_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 3) ~ Z)+_test_Rem_RoundHalfOdd_P3_N3 =  Dict+_test_Div_RoundHalfOdd_P3_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (N 4) ~ N 1)+_test_Div_RoundHalfOdd_P3_N4 =  Dict+_test_Rem_RoundHalfOdd_P3_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (N 4) ~ N 1)+_test_Rem_RoundHalfOdd_P3_N4 =  Dict+_test_Div_RoundHalfOdd_P3_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 1) ~ P 3)+_test_Div_RoundHalfOdd_P3_P1 =  Dict+_test_Rem_RoundHalfOdd_P3_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_P3_P1 =  Dict+_test_Div_RoundHalfOdd_P3_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 2) ~ P 1)+_test_Div_RoundHalfOdd_P3_P2 =  Dict+_test_Rem_RoundHalfOdd_P3_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 2) ~ P 1)+_test_Rem_RoundHalfOdd_P3_P2 =  Dict+_test_Div_RoundHalfOdd_P3_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 3) ~ P 1)+_test_Div_RoundHalfOdd_P3_P3 =  Dict+_test_Rem_RoundHalfOdd_P3_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 3) ~ Z)+_test_Rem_RoundHalfOdd_P3_P3 =  Dict+_test_Div_RoundHalfOdd_P3_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 3) (P 4) ~ P 1)+_test_Div_RoundHalfOdd_P3_P4 =  Dict+_test_Rem_RoundHalfOdd_P3_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 3) (P 4) ~ N 1)+_test_Rem_RoundHalfOdd_P3_P4 =  Dict+_test_Div_RoundHalfOdd_P4_N1 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 1) ~ N 4)+_test_Div_RoundHalfOdd_P4_N1 =  Dict+_test_Rem_RoundHalfOdd_P4_N1 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 1) ~ Z)+_test_Rem_RoundHalfOdd_P4_N1 =  Dict+_test_Div_RoundHalfOdd_P4_N2 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 2) ~ N 2)+_test_Div_RoundHalfOdd_P4_N2 =  Dict+_test_Rem_RoundHalfOdd_P4_N2 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 2) ~ Z)+_test_Rem_RoundHalfOdd_P4_N2 =  Dict+_test_Div_RoundHalfOdd_P4_N3 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 3) ~ N 1)+_test_Div_RoundHalfOdd_P4_N3 =  Dict+_test_Rem_RoundHalfOdd_P4_N3 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 3) ~ P 1)+_test_Rem_RoundHalfOdd_P4_N3 =  Dict+_test_Div_RoundHalfOdd_P4_N4 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (N 4) ~ N 1)+_test_Div_RoundHalfOdd_P4_N4 =  Dict+_test_Rem_RoundHalfOdd_P4_N4 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (N 4) ~ Z)+_test_Rem_RoundHalfOdd_P4_N4 =  Dict+_test_Div_RoundHalfOdd_P4_P1 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 1) ~ P 4)+_test_Div_RoundHalfOdd_P4_P1 =  Dict+_test_Rem_RoundHalfOdd_P4_P1 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 1) ~ Z)+_test_Rem_RoundHalfOdd_P4_P1 =  Dict+_test_Div_RoundHalfOdd_P4_P2 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 2) ~ P 2)+_test_Div_RoundHalfOdd_P4_P2 =  Dict+_test_Rem_RoundHalfOdd_P4_P2 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 2) ~ Z)+_test_Rem_RoundHalfOdd_P4_P2 =  Dict+_test_Div_RoundHalfOdd_P4_P3 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 3) ~ P 1)+_test_Div_RoundHalfOdd_P4_P3 =  Dict+_test_Rem_RoundHalfOdd_P4_P3 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 3) ~ P 1)+_test_Rem_RoundHalfOdd_P4_P3 =  Dict+_test_Div_RoundHalfOdd_P4_P4 :: Dict (K.Div 'K.RoundHalfOdd (P 4) (P 4) ~ P 1)+_test_Div_RoundHalfOdd_P4_P4 =  Dict+_test_Rem_RoundHalfOdd_P4_P4 :: Dict (K.Rem 'K.RoundHalfOdd (P 4) (P 4) ~ Z)+_test_Rem_RoundHalfOdd_P4_P4 =  Dict+_test_Div_RoundHalfUp_N1_N1 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 1) ~ P 1)+_test_Div_RoundHalfUp_N1_N1 =  Dict+_test_Rem_RoundHalfUp_N1_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 1) ~ Z)+_test_Rem_RoundHalfUp_N1_N1 =  Dict+_test_Div_RoundHalfUp_N1_N2 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 2) ~ P 1)+_test_Div_RoundHalfUp_N1_N2 =  Dict+_test_Rem_RoundHalfUp_N1_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 2) ~ P 1)+_test_Rem_RoundHalfUp_N1_N2 =  Dict+_test_Div_RoundHalfUp_N1_N3 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 3) ~ Z)+_test_Div_RoundHalfUp_N1_N3 =  Dict+_test_Rem_RoundHalfUp_N1_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 3) ~ N 1)+_test_Rem_RoundHalfUp_N1_N3 =  Dict+_test_Div_RoundHalfUp_N1_N4 :: Dict (K.Div 'K.RoundHalfUp (N 1) (N 4) ~ Z)+_test_Div_RoundHalfUp_N1_N4 =  Dict+_test_Rem_RoundHalfUp_N1_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (N 4) ~ N 1)+_test_Rem_RoundHalfUp_N1_N4 =  Dict+_test_Div_RoundHalfUp_N1_P1 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 1) ~ N 1)+_test_Div_RoundHalfUp_N1_P1 =  Dict+_test_Rem_RoundHalfUp_N1_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 1) ~ Z)+_test_Rem_RoundHalfUp_N1_P1 =  Dict+_test_Div_RoundHalfUp_N1_P2 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 2) ~ Z)+_test_Div_RoundHalfUp_N1_P2 =  Dict+_test_Rem_RoundHalfUp_N1_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 2) ~ N 1)+_test_Rem_RoundHalfUp_N1_P2 =  Dict+_test_Div_RoundHalfUp_N1_P3 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 3) ~ Z)+_test_Div_RoundHalfUp_N1_P3 =  Dict+_test_Rem_RoundHalfUp_N1_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 3) ~ N 1)+_test_Rem_RoundHalfUp_N1_P3 =  Dict+_test_Div_RoundHalfUp_N1_P4 :: Dict (K.Div 'K.RoundHalfUp (N 1) (P 4) ~ Z)+_test_Div_RoundHalfUp_N1_P4 =  Dict+_test_Rem_RoundHalfUp_N1_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 1) (P 4) ~ N 1)+_test_Rem_RoundHalfUp_N1_P4 =  Dict+_test_Div_RoundHalfUp_N2_N1 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 1) ~ P 2)+_test_Div_RoundHalfUp_N2_N1 =  Dict+_test_Rem_RoundHalfUp_N2_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 1) ~ Z)+_test_Rem_RoundHalfUp_N2_N1 =  Dict+_test_Div_RoundHalfUp_N2_N2 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 2) ~ P 1)+_test_Div_RoundHalfUp_N2_N2 =  Dict+_test_Rem_RoundHalfUp_N2_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 2) ~ Z)+_test_Rem_RoundHalfUp_N2_N2 =  Dict+_test_Div_RoundHalfUp_N2_N3 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 3) ~ P 1)+_test_Div_RoundHalfUp_N2_N3 =  Dict+_test_Rem_RoundHalfUp_N2_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 3) ~ P 1)+_test_Rem_RoundHalfUp_N2_N3 =  Dict+_test_Div_RoundHalfUp_N2_N4 :: Dict (K.Div 'K.RoundHalfUp (N 2) (N 4) ~ P 1)+_test_Div_RoundHalfUp_N2_N4 =  Dict+_test_Rem_RoundHalfUp_N2_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (N 4) ~ P 2)+_test_Rem_RoundHalfUp_N2_N4 =  Dict+_test_Div_RoundHalfUp_N2_P1 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 1) ~ N 2)+_test_Div_RoundHalfUp_N2_P1 =  Dict+_test_Rem_RoundHalfUp_N2_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 1) ~ Z)+_test_Rem_RoundHalfUp_N2_P1 =  Dict+_test_Div_RoundHalfUp_N2_P2 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 2) ~ N 1)+_test_Div_RoundHalfUp_N2_P2 =  Dict+_test_Rem_RoundHalfUp_N2_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 2) ~ Z)+_test_Rem_RoundHalfUp_N2_P2 =  Dict+_test_Div_RoundHalfUp_N2_P3 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 3) ~ N 1)+_test_Div_RoundHalfUp_N2_P3 =  Dict+_test_Rem_RoundHalfUp_N2_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 3) ~ P 1)+_test_Rem_RoundHalfUp_N2_P3 =  Dict+_test_Div_RoundHalfUp_N2_P4 :: Dict (K.Div 'K.RoundHalfUp (N 2) (P 4) ~ Z)+_test_Div_RoundHalfUp_N2_P4 =  Dict+_test_Rem_RoundHalfUp_N2_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 2) (P 4) ~ N 2)+_test_Rem_RoundHalfUp_N2_P4 =  Dict+_test_Div_RoundHalfUp_N3_N1 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 1) ~ P 3)+_test_Div_RoundHalfUp_N3_N1 =  Dict+_test_Rem_RoundHalfUp_N3_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 1) ~ Z)+_test_Rem_RoundHalfUp_N3_N1 =  Dict+_test_Div_RoundHalfUp_N3_N2 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 2) ~ P 2)+_test_Div_RoundHalfUp_N3_N2 =  Dict+_test_Rem_RoundHalfUp_N3_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 2) ~ P 1)+_test_Rem_RoundHalfUp_N3_N2 =  Dict+_test_Div_RoundHalfUp_N3_N3 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 3) ~ P 1)+_test_Div_RoundHalfUp_N3_N3 =  Dict+_test_Rem_RoundHalfUp_N3_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 3) ~ Z)+_test_Rem_RoundHalfUp_N3_N3 =  Dict+_test_Div_RoundHalfUp_N3_N4 :: Dict (K.Div 'K.RoundHalfUp (N 3) (N 4) ~ P 1)+_test_Div_RoundHalfUp_N3_N4 =  Dict+_test_Rem_RoundHalfUp_N3_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (N 4) ~ P 1)+_test_Rem_RoundHalfUp_N3_N4 =  Dict+_test_Div_RoundHalfUp_N3_P1 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 1) ~ N 3)+_test_Div_RoundHalfUp_N3_P1 =  Dict+_test_Rem_RoundHalfUp_N3_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 1) ~ Z)+_test_Rem_RoundHalfUp_N3_P1 =  Dict+_test_Div_RoundHalfUp_N3_P2 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 2) ~ N 1)+_test_Div_RoundHalfUp_N3_P2 =  Dict+_test_Rem_RoundHalfUp_N3_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 2) ~ N 1)+_test_Rem_RoundHalfUp_N3_P2 =  Dict+_test_Div_RoundHalfUp_N3_P3 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 3) ~ N 1)+_test_Div_RoundHalfUp_N3_P3 =  Dict+_test_Rem_RoundHalfUp_N3_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 3) ~ Z)+_test_Rem_RoundHalfUp_N3_P3 =  Dict+_test_Div_RoundHalfUp_N3_P4 :: Dict (K.Div 'K.RoundHalfUp (N 3) (P 4) ~ N 1)+_test_Div_RoundHalfUp_N3_P4 =  Dict+_test_Rem_RoundHalfUp_N3_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 3) (P 4) ~ P 1)+_test_Rem_RoundHalfUp_N3_P4 =  Dict+_test_Div_RoundHalfUp_N4_N1 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 1) ~ P 4)+_test_Div_RoundHalfUp_N4_N1 =  Dict+_test_Rem_RoundHalfUp_N4_N1 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 1) ~ Z)+_test_Rem_RoundHalfUp_N4_N1 =  Dict+_test_Div_RoundHalfUp_N4_N2 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 2) ~ P 2)+_test_Div_RoundHalfUp_N4_N2 =  Dict+_test_Rem_RoundHalfUp_N4_N2 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 2) ~ Z)+_test_Rem_RoundHalfUp_N4_N2 =  Dict+_test_Div_RoundHalfUp_N4_N3 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 3) ~ P 1)+_test_Div_RoundHalfUp_N4_N3 =  Dict+_test_Rem_RoundHalfUp_N4_N3 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 3) ~ N 1)+_test_Rem_RoundHalfUp_N4_N3 =  Dict+_test_Div_RoundHalfUp_N4_N4 :: Dict (K.Div 'K.RoundHalfUp (N 4) (N 4) ~ P 1)+_test_Div_RoundHalfUp_N4_N4 =  Dict+_test_Rem_RoundHalfUp_N4_N4 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (N 4) ~ Z)+_test_Rem_RoundHalfUp_N4_N4 =  Dict+_test_Div_RoundHalfUp_N4_P1 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 1) ~ N 4)+_test_Div_RoundHalfUp_N4_P1 =  Dict+_test_Rem_RoundHalfUp_N4_P1 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 1) ~ Z)+_test_Rem_RoundHalfUp_N4_P1 =  Dict+_test_Div_RoundHalfUp_N4_P2 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 2) ~ N 2)+_test_Div_RoundHalfUp_N4_P2 =  Dict+_test_Rem_RoundHalfUp_N4_P2 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 2) ~ Z)+_test_Rem_RoundHalfUp_N4_P2 =  Dict+_test_Div_RoundHalfUp_N4_P3 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 3) ~ N 1)+_test_Div_RoundHalfUp_N4_P3 =  Dict+_test_Rem_RoundHalfUp_N4_P3 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 3) ~ N 1)+_test_Rem_RoundHalfUp_N4_P3 =  Dict+_test_Div_RoundHalfUp_N4_P4 :: Dict (K.Div 'K.RoundHalfUp (N 4) (P 4) ~ N 1)+_test_Div_RoundHalfUp_N4_P4 =  Dict+_test_Rem_RoundHalfUp_N4_P4 :: Dict (K.Rem 'K.RoundHalfUp (N 4) (P 4) ~ Z)+_test_Rem_RoundHalfUp_N4_P4 =  Dict+_test_Rem_RoundHalfUp_Z_N1 :: Dict (K.Rem 'K.RoundHalfUp Z (N 1) ~ Z)+_test_Rem_RoundHalfUp_Z_N1 =  Dict+_test_Rem_RoundHalfUp_Z_N2 :: Dict (K.Rem 'K.RoundHalfUp Z (N 2) ~ Z)+_test_Rem_RoundHalfUp_Z_N2 =  Dict+_test_Rem_RoundHalfUp_Z_N3 :: Dict (K.Rem 'K.RoundHalfUp Z (N 3) ~ Z)+_test_Rem_RoundHalfUp_Z_N3 =  Dict+_test_Rem_RoundHalfUp_Z_N4 :: Dict (K.Rem 'K.RoundHalfUp Z (N 4) ~ Z)+_test_Rem_RoundHalfUp_Z_N4 =  Dict+_test_Rem_RoundHalfUp_Z_P1 :: Dict (K.Rem 'K.RoundHalfUp Z (P 1) ~ Z)+_test_Rem_RoundHalfUp_Z_P1 =  Dict+_test_Rem_RoundHalfUp_Z_P2 :: Dict (K.Rem 'K.RoundHalfUp Z (P 2) ~ Z)+_test_Rem_RoundHalfUp_Z_P2 =  Dict+_test_Rem_RoundHalfUp_Z_P3 :: Dict (K.Rem 'K.RoundHalfUp Z (P 3) ~ Z)+_test_Rem_RoundHalfUp_Z_P3 =  Dict+_test_Rem_RoundHalfUp_Z_P4 :: Dict (K.Rem 'K.RoundHalfUp Z (P 4) ~ Z)+_test_Rem_RoundHalfUp_Z_P4 =  Dict+_test_Div_RoundHalfUp_P1_N1 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 1) ~ N 1)+_test_Div_RoundHalfUp_P1_N1 =  Dict+_test_Rem_RoundHalfUp_P1_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 1) ~ Z)+_test_Rem_RoundHalfUp_P1_N1 =  Dict+_test_Div_RoundHalfUp_P1_N2 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 2) ~ Z)+_test_Div_RoundHalfUp_P1_N2 =  Dict+_test_Rem_RoundHalfUp_P1_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 2) ~ P 1)+_test_Rem_RoundHalfUp_P1_N2 =  Dict+_test_Div_RoundHalfUp_P1_N3 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 3) ~ Z)+_test_Div_RoundHalfUp_P1_N3 =  Dict+_test_Rem_RoundHalfUp_P1_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 3) ~ P 1)+_test_Rem_RoundHalfUp_P1_N3 =  Dict+_test_Div_RoundHalfUp_P1_N4 :: Dict (K.Div 'K.RoundHalfUp (P 1) (N 4) ~ Z)+_test_Div_RoundHalfUp_P1_N4 =  Dict+_test_Rem_RoundHalfUp_P1_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (N 4) ~ P 1)+_test_Rem_RoundHalfUp_P1_N4 =  Dict+_test_Div_RoundHalfUp_P1_P1 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 1) ~ P 1)+_test_Div_RoundHalfUp_P1_P1 =  Dict+_test_Rem_RoundHalfUp_P1_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 1) ~ Z)+_test_Rem_RoundHalfUp_P1_P1 =  Dict+_test_Div_RoundHalfUp_P1_P2 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 2) ~ P 1)+_test_Div_RoundHalfUp_P1_P2 =  Dict+_test_Rem_RoundHalfUp_P1_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 2) ~ N 1)+_test_Rem_RoundHalfUp_P1_P2 =  Dict+_test_Div_RoundHalfUp_P1_P3 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 3) ~ Z)+_test_Div_RoundHalfUp_P1_P3 =  Dict+_test_Rem_RoundHalfUp_P1_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 3) ~ P 1)+_test_Rem_RoundHalfUp_P1_P3 =  Dict+_test_Div_RoundHalfUp_P1_P4 :: Dict (K.Div 'K.RoundHalfUp (P 1) (P 4) ~ Z)+_test_Div_RoundHalfUp_P1_P4 =  Dict+_test_Rem_RoundHalfUp_P1_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 1) (P 4) ~ P 1)+_test_Rem_RoundHalfUp_P1_P4 =  Dict+_test_Div_RoundHalfUp_P2_N1 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 1) ~ N 2)+_test_Div_RoundHalfUp_P2_N1 =  Dict+_test_Rem_RoundHalfUp_P2_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 1) ~ Z)+_test_Rem_RoundHalfUp_P2_N1 =  Dict+_test_Div_RoundHalfUp_P2_N2 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 2) ~ N 1)+_test_Div_RoundHalfUp_P2_N2 =  Dict+_test_Rem_RoundHalfUp_P2_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 2) ~ Z)+_test_Rem_RoundHalfUp_P2_N2 =  Dict+_test_Div_RoundHalfUp_P2_N3 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 3) ~ N 1)+_test_Div_RoundHalfUp_P2_N3 =  Dict+_test_Rem_RoundHalfUp_P2_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 3) ~ N 1)+_test_Rem_RoundHalfUp_P2_N3 =  Dict+_test_Div_RoundHalfUp_P2_N4 :: Dict (K.Div 'K.RoundHalfUp (P 2) (N 4) ~ Z)+_test_Div_RoundHalfUp_P2_N4 =  Dict+_test_Rem_RoundHalfUp_P2_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (N 4) ~ P 2)+_test_Rem_RoundHalfUp_P2_N4 =  Dict+_test_Div_RoundHalfUp_P2_P1 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 1) ~ P 2)+_test_Div_RoundHalfUp_P2_P1 =  Dict+_test_Rem_RoundHalfUp_P2_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 1) ~ Z)+_test_Rem_RoundHalfUp_P2_P1 =  Dict+_test_Div_RoundHalfUp_P2_P2 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 2) ~ P 1)+_test_Div_RoundHalfUp_P2_P2 =  Dict+_test_Rem_RoundHalfUp_P2_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 2) ~ Z)+_test_Rem_RoundHalfUp_P2_P2 =  Dict+_test_Div_RoundHalfUp_P2_P3 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 3) ~ P 1)+_test_Div_RoundHalfUp_P2_P3 =  Dict+_test_Rem_RoundHalfUp_P2_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 3) ~ N 1)+_test_Rem_RoundHalfUp_P2_P3 =  Dict+_test_Div_RoundHalfUp_P2_P4 :: Dict (K.Div 'K.RoundHalfUp (P 2) (P 4) ~ P 1)+_test_Div_RoundHalfUp_P2_P4 =  Dict+_test_Rem_RoundHalfUp_P2_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 2) (P 4) ~ N 2)+_test_Rem_RoundHalfUp_P2_P4 =  Dict+_test_Div_RoundHalfUp_P3_N1 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 1) ~ N 3)+_test_Div_RoundHalfUp_P3_N1 =  Dict+_test_Rem_RoundHalfUp_P3_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 1) ~ Z)+_test_Rem_RoundHalfUp_P3_N1 =  Dict+_test_Div_RoundHalfUp_P3_N2 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 2) ~ N 1)+_test_Div_RoundHalfUp_P3_N2 =  Dict+_test_Rem_RoundHalfUp_P3_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 2) ~ P 1)+_test_Rem_RoundHalfUp_P3_N2 =  Dict+_test_Div_RoundHalfUp_P3_N3 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 3) ~ N 1)+_test_Div_RoundHalfUp_P3_N3 =  Dict+_test_Rem_RoundHalfUp_P3_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 3) ~ Z)+_test_Rem_RoundHalfUp_P3_N3 =  Dict+_test_Div_RoundHalfUp_P3_N4 :: Dict (K.Div 'K.RoundHalfUp (P 3) (N 4) ~ N 1)+_test_Div_RoundHalfUp_P3_N4 =  Dict+_test_Rem_RoundHalfUp_P3_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (N 4) ~ N 1)+_test_Rem_RoundHalfUp_P3_N4 =  Dict+_test_Div_RoundHalfUp_P3_P1 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 1) ~ P 3)+_test_Div_RoundHalfUp_P3_P1 =  Dict+_test_Rem_RoundHalfUp_P3_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 1) ~ Z)+_test_Rem_RoundHalfUp_P3_P1 =  Dict+_test_Div_RoundHalfUp_P3_P2 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 2) ~ P 2)+_test_Div_RoundHalfUp_P3_P2 =  Dict+_test_Rem_RoundHalfUp_P3_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 2) ~ N 1)+_test_Rem_RoundHalfUp_P3_P2 =  Dict+_test_Div_RoundHalfUp_P3_P3 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 3) ~ P 1)+_test_Div_RoundHalfUp_P3_P3 =  Dict+_test_Rem_RoundHalfUp_P3_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 3) ~ Z)+_test_Rem_RoundHalfUp_P3_P3 =  Dict+_test_Div_RoundHalfUp_P3_P4 :: Dict (K.Div 'K.RoundHalfUp (P 3) (P 4) ~ P 1)+_test_Div_RoundHalfUp_P3_P4 =  Dict+_test_Rem_RoundHalfUp_P3_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 3) (P 4) ~ N 1)+_test_Rem_RoundHalfUp_P3_P4 =  Dict+_test_Div_RoundHalfUp_P4_N1 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 1) ~ N 4)+_test_Div_RoundHalfUp_P4_N1 =  Dict+_test_Rem_RoundHalfUp_P4_N1 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 1) ~ Z)+_test_Rem_RoundHalfUp_P4_N1 =  Dict+_test_Div_RoundHalfUp_P4_N2 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 2) ~ N 2)+_test_Div_RoundHalfUp_P4_N2 =  Dict+_test_Rem_RoundHalfUp_P4_N2 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 2) ~ Z)+_test_Rem_RoundHalfUp_P4_N2 =  Dict+_test_Div_RoundHalfUp_P4_N3 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 3) ~ N 1)+_test_Div_RoundHalfUp_P4_N3 =  Dict+_test_Rem_RoundHalfUp_P4_N3 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 3) ~ P 1)+_test_Rem_RoundHalfUp_P4_N3 =  Dict+_test_Div_RoundHalfUp_P4_N4 :: Dict (K.Div 'K.RoundHalfUp (P 4) (N 4) ~ N 1)+_test_Div_RoundHalfUp_P4_N4 =  Dict+_test_Rem_RoundHalfUp_P4_N4 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (N 4) ~ Z)+_test_Rem_RoundHalfUp_P4_N4 =  Dict+_test_Div_RoundHalfUp_P4_P1 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 1) ~ P 4)+_test_Div_RoundHalfUp_P4_P1 =  Dict+_test_Rem_RoundHalfUp_P4_P1 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 1) ~ Z)+_test_Rem_RoundHalfUp_P4_P1 =  Dict+_test_Div_RoundHalfUp_P4_P2 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 2) ~ P 2)+_test_Div_RoundHalfUp_P4_P2 =  Dict+_test_Rem_RoundHalfUp_P4_P2 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 2) ~ Z)+_test_Rem_RoundHalfUp_P4_P2 =  Dict+_test_Div_RoundHalfUp_P4_P3 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 3) ~ P 1)+_test_Div_RoundHalfUp_P4_P3 =  Dict+_test_Rem_RoundHalfUp_P4_P3 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 3) ~ P 1)+_test_Rem_RoundHalfUp_P4_P3 =  Dict+_test_Div_RoundHalfUp_P4_P4 :: Dict (K.Div 'K.RoundHalfUp (P 4) (P 4) ~ P 1)+_test_Div_RoundHalfUp_P4_P4 =  Dict+_test_Rem_RoundHalfUp_P4_P4 :: Dict (K.Rem 'K.RoundHalfUp (P 4) (P 4) ~ Z)+_test_Rem_RoundHalfUp_P4_P4 =  Dict+_test_Div_RoundHalfZero_N1_N1 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 1) ~ P 1)+_test_Div_RoundHalfZero_N1_N1 =  Dict+_test_Rem_RoundHalfZero_N1_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 1) ~ Z)+_test_Rem_RoundHalfZero_N1_N1 =  Dict+_test_Div_RoundHalfZero_N1_N2 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 2) ~ Z)+_test_Div_RoundHalfZero_N1_N2 =  Dict+_test_Rem_RoundHalfZero_N1_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 2) ~ N 1)+_test_Rem_RoundHalfZero_N1_N2 =  Dict+_test_Div_RoundHalfZero_N1_N3 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 3) ~ Z)+_test_Div_RoundHalfZero_N1_N3 =  Dict+_test_Rem_RoundHalfZero_N1_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 3) ~ N 1)+_test_Rem_RoundHalfZero_N1_N3 =  Dict+_test_Div_RoundHalfZero_N1_N4 :: Dict (K.Div 'K.RoundHalfZero (N 1) (N 4) ~ Z)+_test_Div_RoundHalfZero_N1_N4 =  Dict+_test_Rem_RoundHalfZero_N1_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (N 4) ~ N 1)+_test_Rem_RoundHalfZero_N1_N4 =  Dict+_test_Div_RoundHalfZero_N1_P1 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 1) ~ N 1)+_test_Div_RoundHalfZero_N1_P1 =  Dict+_test_Rem_RoundHalfZero_N1_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 1) ~ Z)+_test_Rem_RoundHalfZero_N1_P1 =  Dict+_test_Div_RoundHalfZero_N1_P2 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 2) ~ Z)+_test_Div_RoundHalfZero_N1_P2 =  Dict+_test_Rem_RoundHalfZero_N1_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 2) ~ N 1)+_test_Rem_RoundHalfZero_N1_P2 =  Dict+_test_Div_RoundHalfZero_N1_P3 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 3) ~ Z)+_test_Div_RoundHalfZero_N1_P3 =  Dict+_test_Rem_RoundHalfZero_N1_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 3) ~ N 1)+_test_Rem_RoundHalfZero_N1_P3 =  Dict+_test_Div_RoundHalfZero_N1_P4 :: Dict (K.Div 'K.RoundHalfZero (N 1) (P 4) ~ Z)+_test_Div_RoundHalfZero_N1_P4 =  Dict+_test_Rem_RoundHalfZero_N1_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 1) (P 4) ~ N 1)+_test_Rem_RoundHalfZero_N1_P4 =  Dict+_test_Div_RoundHalfZero_N2_N1 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 1) ~ P 2)+_test_Div_RoundHalfZero_N2_N1 =  Dict+_test_Rem_RoundHalfZero_N2_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 1) ~ Z)+_test_Rem_RoundHalfZero_N2_N1 =  Dict+_test_Div_RoundHalfZero_N2_N2 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 2) ~ P 1)+_test_Div_RoundHalfZero_N2_N2 =  Dict+_test_Rem_RoundHalfZero_N2_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 2) ~ Z)+_test_Rem_RoundHalfZero_N2_N2 =  Dict+_test_Div_RoundHalfZero_N2_N3 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 3) ~ P 1)+_test_Div_RoundHalfZero_N2_N3 =  Dict+_test_Rem_RoundHalfZero_N2_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 3) ~ P 1)+_test_Rem_RoundHalfZero_N2_N3 =  Dict+_test_Div_RoundHalfZero_N2_N4 :: Dict (K.Div 'K.RoundHalfZero (N 2) (N 4) ~ Z)+_test_Div_RoundHalfZero_N2_N4 =  Dict+_test_Rem_RoundHalfZero_N2_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (N 4) ~ N 2)+_test_Rem_RoundHalfZero_N2_N4 =  Dict+_test_Div_RoundHalfZero_N2_P1 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 1) ~ N 2)+_test_Div_RoundHalfZero_N2_P1 =  Dict+_test_Rem_RoundHalfZero_N2_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 1) ~ Z)+_test_Rem_RoundHalfZero_N2_P1 =  Dict+_test_Div_RoundHalfZero_N2_P2 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 2) ~ N 1)+_test_Div_RoundHalfZero_N2_P2 =  Dict+_test_Rem_RoundHalfZero_N2_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 2) ~ Z)+_test_Rem_RoundHalfZero_N2_P2 =  Dict+_test_Div_RoundHalfZero_N2_P3 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 3) ~ N 1)+_test_Div_RoundHalfZero_N2_P3 =  Dict+_test_Rem_RoundHalfZero_N2_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 3) ~ P 1)+_test_Rem_RoundHalfZero_N2_P3 =  Dict+_test_Div_RoundHalfZero_N2_P4 :: Dict (K.Div 'K.RoundHalfZero (N 2) (P 4) ~ Z)+_test_Div_RoundHalfZero_N2_P4 =  Dict+_test_Rem_RoundHalfZero_N2_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 2) (P 4) ~ N 2)+_test_Rem_RoundHalfZero_N2_P4 =  Dict+_test_Div_RoundHalfZero_N3_N1 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 1) ~ P 3)+_test_Div_RoundHalfZero_N3_N1 =  Dict+_test_Rem_RoundHalfZero_N3_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 1) ~ Z)+_test_Rem_RoundHalfZero_N3_N1 =  Dict+_test_Div_RoundHalfZero_N3_N2 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 2) ~ P 1)+_test_Div_RoundHalfZero_N3_N2 =  Dict+_test_Rem_RoundHalfZero_N3_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 2) ~ N 1)+_test_Rem_RoundHalfZero_N3_N2 =  Dict+_test_Div_RoundHalfZero_N3_N3 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 3) ~ P 1)+_test_Div_RoundHalfZero_N3_N3 =  Dict+_test_Rem_RoundHalfZero_N3_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 3) ~ Z)+_test_Rem_RoundHalfZero_N3_N3 =  Dict+_test_Div_RoundHalfZero_N3_N4 :: Dict (K.Div 'K.RoundHalfZero (N 3) (N 4) ~ P 1)+_test_Div_RoundHalfZero_N3_N4 =  Dict+_test_Rem_RoundHalfZero_N3_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (N 4) ~ P 1)+_test_Rem_RoundHalfZero_N3_N4 =  Dict+_test_Div_RoundHalfZero_N3_P1 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 1) ~ N 3)+_test_Div_RoundHalfZero_N3_P1 =  Dict+_test_Rem_RoundHalfZero_N3_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 1) ~ Z)+_test_Rem_RoundHalfZero_N3_P1 =  Dict+_test_Div_RoundHalfZero_N3_P2 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 2) ~ N 1)+_test_Div_RoundHalfZero_N3_P2 =  Dict+_test_Rem_RoundHalfZero_N3_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 2) ~ N 1)+_test_Rem_RoundHalfZero_N3_P2 =  Dict+_test_Div_RoundHalfZero_N3_P3 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 3) ~ N 1)+_test_Div_RoundHalfZero_N3_P3 =  Dict+_test_Rem_RoundHalfZero_N3_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 3) ~ Z)+_test_Rem_RoundHalfZero_N3_P3 =  Dict+_test_Div_RoundHalfZero_N3_P4 :: Dict (K.Div 'K.RoundHalfZero (N 3) (P 4) ~ N 1)+_test_Div_RoundHalfZero_N3_P4 =  Dict+_test_Rem_RoundHalfZero_N3_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 3) (P 4) ~ P 1)+_test_Rem_RoundHalfZero_N3_P4 =  Dict+_test_Div_RoundHalfZero_N4_N1 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 1) ~ P 4)+_test_Div_RoundHalfZero_N4_N1 =  Dict+_test_Rem_RoundHalfZero_N4_N1 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 1) ~ Z)+_test_Rem_RoundHalfZero_N4_N1 =  Dict+_test_Div_RoundHalfZero_N4_N2 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 2) ~ P 2)+_test_Div_RoundHalfZero_N4_N2 =  Dict+_test_Rem_RoundHalfZero_N4_N2 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 2) ~ Z)+_test_Rem_RoundHalfZero_N4_N2 =  Dict+_test_Div_RoundHalfZero_N4_N3 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 3) ~ P 1)+_test_Div_RoundHalfZero_N4_N3 =  Dict+_test_Rem_RoundHalfZero_N4_N3 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 3) ~ N 1)+_test_Rem_RoundHalfZero_N4_N3 =  Dict+_test_Div_RoundHalfZero_N4_N4 :: Dict (K.Div 'K.RoundHalfZero (N 4) (N 4) ~ P 1)+_test_Div_RoundHalfZero_N4_N4 =  Dict+_test_Rem_RoundHalfZero_N4_N4 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (N 4) ~ Z)+_test_Rem_RoundHalfZero_N4_N4 =  Dict+_test_Div_RoundHalfZero_N4_P1 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 1) ~ N 4)+_test_Div_RoundHalfZero_N4_P1 =  Dict+_test_Rem_RoundHalfZero_N4_P1 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 1) ~ Z)+_test_Rem_RoundHalfZero_N4_P1 =  Dict+_test_Div_RoundHalfZero_N4_P2 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 2) ~ N 2)+_test_Div_RoundHalfZero_N4_P2 =  Dict+_test_Rem_RoundHalfZero_N4_P2 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 2) ~ Z)+_test_Rem_RoundHalfZero_N4_P2 =  Dict+_test_Div_RoundHalfZero_N4_P3 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 3) ~ N 1)+_test_Div_RoundHalfZero_N4_P3 =  Dict+_test_Rem_RoundHalfZero_N4_P3 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 3) ~ N 1)+_test_Rem_RoundHalfZero_N4_P3 =  Dict+_test_Div_RoundHalfZero_N4_P4 :: Dict (K.Div 'K.RoundHalfZero (N 4) (P 4) ~ N 1)+_test_Div_RoundHalfZero_N4_P4 =  Dict+_test_Rem_RoundHalfZero_N4_P4 :: Dict (K.Rem 'K.RoundHalfZero (N 4) (P 4) ~ Z)+_test_Rem_RoundHalfZero_N4_P4 =  Dict+_test_Rem_RoundHalfZero_Z_N1 :: Dict (K.Rem 'K.RoundHalfZero Z (N 1) ~ Z)+_test_Rem_RoundHalfZero_Z_N1 =  Dict+_test_Rem_RoundHalfZero_Z_N2 :: Dict (K.Rem 'K.RoundHalfZero Z (N 2) ~ Z)+_test_Rem_RoundHalfZero_Z_N2 =  Dict+_test_Rem_RoundHalfZero_Z_N3 :: Dict (K.Rem 'K.RoundHalfZero Z (N 3) ~ Z)+_test_Rem_RoundHalfZero_Z_N3 =  Dict+_test_Div_RoundHalfZero_Z_N4 :: Dict (K.Div 'K.RoundHalfZero Z (N 4) ~ Z)+_test_Div_RoundHalfZero_Z_N4 =  Dict+_test_Rem_RoundHalfZero_Z_P1 :: Dict (K.Rem 'K.RoundHalfZero Z (P 1) ~ Z)+_test_Rem_RoundHalfZero_Z_P1 =  Dict+_test_Div_RoundHalfZero_Z_P2 :: Dict (K.Div 'K.RoundHalfZero Z (P 2) ~ Z)+_test_Div_RoundHalfZero_Z_P2 =  Dict+_test_Rem_RoundHalfZero_Z_P3 :: Dict (K.Rem 'K.RoundHalfZero Z (P 3) ~ Z)+_test_Rem_RoundHalfZero_Z_P3 =  Dict+_test_Div_RoundHalfZero_Z_P4 :: Dict (K.Div 'K.RoundHalfZero Z (P 4) ~ Z)+_test_Div_RoundHalfZero_Z_P4 =  Dict+_test_Div_RoundHalfZero_P1_N1 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 1) ~ N 1)+_test_Div_RoundHalfZero_P1_N1 =  Dict+_test_Rem_RoundHalfZero_P1_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 1) ~ Z)+_test_Rem_RoundHalfZero_P1_N1 =  Dict+_test_Div_RoundHalfZero_P1_N2 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 2) ~ Z)+_test_Div_RoundHalfZero_P1_N2 =  Dict+_test_Rem_RoundHalfZero_P1_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 2) ~ P 1)+_test_Rem_RoundHalfZero_P1_N2 =  Dict+_test_Div_RoundHalfZero_P1_N3 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 3) ~ Z)+_test_Div_RoundHalfZero_P1_N3 =  Dict+_test_Rem_RoundHalfZero_P1_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 3) ~ P 1)+_test_Rem_RoundHalfZero_P1_N3 =  Dict+_test_Div_RoundHalfZero_P1_N4 :: Dict (K.Div 'K.RoundHalfZero (P 1) (N 4) ~ Z)+_test_Div_RoundHalfZero_P1_N4 =  Dict+_test_Rem_RoundHalfZero_P1_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (N 4) ~ P 1)+_test_Rem_RoundHalfZero_P1_N4 =  Dict+_test_Div_RoundHalfZero_P1_P1 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 1) ~ P 1)+_test_Div_RoundHalfZero_P1_P1 =  Dict+_test_Rem_RoundHalfZero_P1_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 1) ~ Z)+_test_Rem_RoundHalfZero_P1_P1 =  Dict+_test_Div_RoundHalfZero_P1_P2 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 2) ~ Z)+_test_Div_RoundHalfZero_P1_P2 =  Dict+_test_Rem_RoundHalfZero_P1_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 2) ~ P 1)+_test_Rem_RoundHalfZero_P1_P2 =  Dict+_test_Div_RoundHalfZero_P1_P3 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 3) ~ Z)+_test_Div_RoundHalfZero_P1_P3 =  Dict+_test_Rem_RoundHalfZero_P1_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 3) ~ P 1)+_test_Rem_RoundHalfZero_P1_P3 =  Dict+_test_Div_RoundHalfZero_P1_P4 :: Dict (K.Div 'K.RoundHalfZero (P 1) (P 4) ~ Z)+_test_Div_RoundHalfZero_P1_P4 =  Dict+_test_Rem_RoundHalfZero_P1_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 1) (P 4) ~ P 1)+_test_Rem_RoundHalfZero_P1_P4 =  Dict+_test_Div_RoundHalfZero_P2_N1 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 1) ~ N 2)+_test_Div_RoundHalfZero_P2_N1 =  Dict+_test_Rem_RoundHalfZero_P2_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 1) ~ Z)+_test_Rem_RoundHalfZero_P2_N1 =  Dict+_test_Div_RoundHalfZero_P2_N2 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 2) ~ N 1)+_test_Div_RoundHalfZero_P2_N2 =  Dict+_test_Rem_RoundHalfZero_P2_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 2) ~ Z)+_test_Rem_RoundHalfZero_P2_N2 =  Dict+_test_Div_RoundHalfZero_P2_N3 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 3) ~ N 1)+_test_Div_RoundHalfZero_P2_N3 =  Dict+_test_Rem_RoundHalfZero_P2_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 3) ~ N 1)+_test_Rem_RoundHalfZero_P2_N3 =  Dict+_test_Div_RoundHalfZero_P2_N4 :: Dict (K.Div 'K.RoundHalfZero (P 2) (N 4) ~ Z)+_test_Div_RoundHalfZero_P2_N4 =  Dict+_test_Rem_RoundHalfZero_P2_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (N 4) ~ P 2)+_test_Rem_RoundHalfZero_P2_N4 =  Dict+_test_Div_RoundHalfZero_P2_P1 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 1) ~ P 2)+_test_Div_RoundHalfZero_P2_P1 =  Dict+_test_Rem_RoundHalfZero_P2_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 1) ~ Z)+_test_Rem_RoundHalfZero_P2_P1 =  Dict+_test_Div_RoundHalfZero_P2_P2 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 2) ~ P 1)+_test_Div_RoundHalfZero_P2_P2 =  Dict+_test_Rem_RoundHalfZero_P2_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 2) ~ Z)+_test_Rem_RoundHalfZero_P2_P2 =  Dict+_test_Div_RoundHalfZero_P2_P3 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 3) ~ P 1)+_test_Div_RoundHalfZero_P2_P3 =  Dict+_test_Rem_RoundHalfZero_P2_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 3) ~ N 1)+_test_Rem_RoundHalfZero_P2_P3 =  Dict+_test_Div_RoundHalfZero_P2_P4 :: Dict (K.Div 'K.RoundHalfZero (P 2) (P 4) ~ Z)+_test_Div_RoundHalfZero_P2_P4 =  Dict+_test_Rem_RoundHalfZero_P2_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 2) (P 4) ~ P 2)+_test_Rem_RoundHalfZero_P2_P4 =  Dict+_test_Div_RoundHalfZero_P3_N1 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 1) ~ N 3)+_test_Div_RoundHalfZero_P3_N1 =  Dict+_test_Rem_RoundHalfZero_P3_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 1) ~ Z)+_test_Rem_RoundHalfZero_P3_N1 =  Dict+_test_Div_RoundHalfZero_P3_N2 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 2) ~ N 1)+_test_Div_RoundHalfZero_P3_N2 =  Dict+_test_Rem_RoundHalfZero_P3_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 2) ~ P 1)+_test_Rem_RoundHalfZero_P3_N2 =  Dict+_test_Div_RoundHalfZero_P3_N3 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 3) ~ N 1)+_test_Div_RoundHalfZero_P3_N3 =  Dict+_test_Rem_RoundHalfZero_P3_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 3) ~ Z)+_test_Rem_RoundHalfZero_P3_N3 =  Dict+_test_Div_RoundHalfZero_P3_N4 :: Dict (K.Div 'K.RoundHalfZero (P 3) (N 4) ~ N 1)+_test_Div_RoundHalfZero_P3_N4 =  Dict+_test_Rem_RoundHalfZero_P3_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (N 4) ~ N 1)+_test_Rem_RoundHalfZero_P3_N4 =  Dict+_test_Div_RoundHalfZero_P3_P1 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 1) ~ P 3)+_test_Div_RoundHalfZero_P3_P1 =  Dict+_test_Rem_RoundHalfZero_P3_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 1) ~ Z)+_test_Rem_RoundHalfZero_P3_P1 =  Dict+_test_Div_RoundHalfZero_P3_P2 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 2) ~ P 1)+_test_Div_RoundHalfZero_P3_P2 =  Dict+_test_Rem_RoundHalfZero_P3_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 2) ~ P 1)+_test_Rem_RoundHalfZero_P3_P2 =  Dict+_test_Div_RoundHalfZero_P3_P3 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 3) ~ P 1)+_test_Div_RoundHalfZero_P3_P3 =  Dict+_test_Rem_RoundHalfZero_P3_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 3) ~ Z)+_test_Rem_RoundHalfZero_P3_P3 =  Dict+_test_Div_RoundHalfZero_P3_P4 :: Dict (K.Div 'K.RoundHalfZero (P 3) (P 4) ~ P 1)+_test_Div_RoundHalfZero_P3_P4 =  Dict+_test_Rem_RoundHalfZero_P3_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 3) (P 4) ~ N 1)+_test_Rem_RoundHalfZero_P3_P4 =  Dict+_test_Div_RoundHalfZero_P4_N1 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 1) ~ N 4)+_test_Div_RoundHalfZero_P4_N1 =  Dict+_test_Rem_RoundHalfZero_P4_N1 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 1) ~ Z)+_test_Rem_RoundHalfZero_P4_N1 =  Dict+_test_Div_RoundHalfZero_P4_N2 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 2) ~ N 2)+_test_Div_RoundHalfZero_P4_N2 =  Dict+_test_Rem_RoundHalfZero_P4_N2 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 2) ~ Z)+_test_Rem_RoundHalfZero_P4_N2 =  Dict+_test_Div_RoundHalfZero_P4_N3 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 3) ~ N 1)+_test_Div_RoundHalfZero_P4_N3 =  Dict+_test_Rem_RoundHalfZero_P4_N3 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 3) ~ P 1)+_test_Rem_RoundHalfZero_P4_N3 =  Dict+_test_Div_RoundHalfZero_P4_N4 :: Dict (K.Div 'K.RoundHalfZero (P 4) (N 4) ~ N 1)+_test_Div_RoundHalfZero_P4_N4 =  Dict+_test_Rem_RoundHalfZero_P4_N4 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (N 4) ~ Z)+_test_Rem_RoundHalfZero_P4_N4 =  Dict+_test_Div_RoundHalfZero_P4_P1 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 1) ~ P 4)+_test_Div_RoundHalfZero_P4_P1 =  Dict+_test_Rem_RoundHalfZero_P4_P1 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 1) ~ Z)+_test_Rem_RoundHalfZero_P4_P1 =  Dict+_test_Div_RoundHalfZero_P4_P2 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 2) ~ P 2)+_test_Div_RoundHalfZero_P4_P2 =  Dict+_test_Rem_RoundHalfZero_P4_P2 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 2) ~ Z)+_test_Rem_RoundHalfZero_P4_P2 =  Dict+_test_Div_RoundHalfZero_P4_P3 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 3) ~ P 1)+_test_Div_RoundHalfZero_P4_P3 =  Dict+_test_Rem_RoundHalfZero_P4_P3 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 3) ~ P 1)+_test_Rem_RoundHalfZero_P4_P3 =  Dict+_test_Div_RoundHalfZero_P4_P4 :: Dict (K.Div 'K.RoundHalfZero (P 4) (P 4) ~ P 1)+_test_Div_RoundHalfZero_P4_P4 =  Dict+_test_Rem_RoundHalfZero_P4_P4 :: Dict (K.Rem 'K.RoundHalfZero (P 4) (P 4) ~ Z)+_test_Rem_RoundHalfZero_P4_P4 =  Dict+_test_Div_RoundUp_N1_N1 :: Dict (K.Div 'K.RoundUp (N 1) (N 1) ~ P 1)+_test_Div_RoundUp_N1_N1 =  Dict+_test_Rem_RoundUp_N1_N1 :: Dict (K.Rem 'K.RoundUp (N 1) (N 1) ~ Z)+_test_Rem_RoundUp_N1_N1 =  Dict+_test_Div_RoundUp_N1_N2 :: Dict (K.Div 'K.RoundUp (N 1) (N 2) ~ P 1)+_test_Div_RoundUp_N1_N2 =  Dict+_test_Rem_RoundUp_N1_N2 :: Dict (K.Rem 'K.RoundUp (N 1) (N 2) ~ P 1)+_test_Rem_RoundUp_N1_N2 =  Dict+_test_Div_RoundUp_N1_N3 :: Dict (K.Div 'K.RoundUp (N 1) (N 3) ~ P 1)+_test_Div_RoundUp_N1_N3 =  Dict+_test_Rem_RoundUp_N1_N3 :: Dict (K.Rem 'K.RoundUp (N 1) (N 3) ~ P 2)+_test_Rem_RoundUp_N1_N3 =  Dict+_test_Div_RoundUp_N1_N4 :: Dict (K.Div 'K.RoundUp (N 1) (N 4) ~ P 1)+_test_Div_RoundUp_N1_N4 =  Dict+_test_Rem_RoundUp_N1_N4 :: Dict (K.Rem 'K.RoundUp (N 1) (N 4) ~ P 3)+_test_Rem_RoundUp_N1_N4 =  Dict+_test_Div_RoundUp_N1_P1 :: Dict (K.Div 'K.RoundUp (N 1) (P 1) ~ N 1)+_test_Div_RoundUp_N1_P1 =  Dict+_test_Rem_RoundUp_N1_P1 :: Dict (K.Rem 'K.RoundUp (N 1) (P 1) ~ Z)+_test_Rem_RoundUp_N1_P1 =  Dict+_test_Div_RoundUp_N1_P2 :: Dict (K.Div 'K.RoundUp (N 1) (P 2) ~ Z)+_test_Div_RoundUp_N1_P2 =  Dict+_test_Rem_RoundUp_N1_P2 :: Dict (K.Rem 'K.RoundUp (N 1) (P 2) ~ N 1)+_test_Rem_RoundUp_N1_P2 =  Dict+_test_Div_RoundUp_N1_P3 :: Dict (K.Div 'K.RoundUp (N 1) (P 3) ~ Z)+_test_Div_RoundUp_N1_P3 =  Dict+_test_Rem_RoundUp_N1_P3 :: Dict (K.Rem 'K.RoundUp (N 1) (P 3) ~ N 1)+_test_Rem_RoundUp_N1_P3 =  Dict+_test_Div_RoundUp_N1_P4 :: Dict (K.Div 'K.RoundUp (N 1) (P 4) ~ Z)+_test_Div_RoundUp_N1_P4 =  Dict+_test_Rem_RoundUp_N1_P4 :: Dict (K.Rem 'K.RoundUp (N 1) (P 4) ~ N 1)+_test_Rem_RoundUp_N1_P4 =  Dict+_test_Div_RoundUp_N2_N1 :: Dict (K.Div 'K.RoundUp (N 2) (N 1) ~ P 2)+_test_Div_RoundUp_N2_N1 =  Dict+_test_Rem_RoundUp_N2_N1 :: Dict (K.Rem 'K.RoundUp (N 2) (N 1) ~ Z)+_test_Rem_RoundUp_N2_N1 =  Dict+_test_Div_RoundUp_N2_N2 :: Dict (K.Div 'K.RoundUp (N 2) (N 2) ~ P 1)+_test_Div_RoundUp_N2_N2 =  Dict+_test_Rem_RoundUp_N2_N2 :: Dict (K.Rem 'K.RoundUp (N 2) (N 2) ~ Z)+_test_Rem_RoundUp_N2_N2 =  Dict+_test_Div_RoundUp_N2_N3 :: Dict (K.Div 'K.RoundUp (N 2) (N 3) ~ P 1)+_test_Div_RoundUp_N2_N3 =  Dict+_test_Rem_RoundUp_N2_N3 :: Dict (K.Rem 'K.RoundUp (N 2) (N 3) ~ P 1)+_test_Rem_RoundUp_N2_N3 =  Dict+_test_Div_RoundUp_N2_N4 :: Dict (K.Div 'K.RoundUp (N 2) (N 4) ~ P 1)+_test_Div_RoundUp_N2_N4 =  Dict+_test_Rem_RoundUp_N2_N4 :: Dict (K.Rem 'K.RoundUp (N 2) (N 4) ~ P 2)+_test_Rem_RoundUp_N2_N4 =  Dict+_test_Div_RoundUp_N2_P1 :: Dict (K.Div 'K.RoundUp (N 2) (P 1) ~ N 2)+_test_Div_RoundUp_N2_P1 =  Dict+_test_Rem_RoundUp_N2_P1 :: Dict (K.Rem 'K.RoundUp (N 2) (P 1) ~ Z)+_test_Rem_RoundUp_N2_P1 =  Dict+_test_Div_RoundUp_N2_P2 :: Dict (K.Div 'K.RoundUp (N 2) (P 2) ~ N 1)+_test_Div_RoundUp_N2_P2 =  Dict+_test_Rem_RoundUp_N2_P2 :: Dict (K.Rem 'K.RoundUp (N 2) (P 2) ~ Z)+_test_Rem_RoundUp_N2_P2 =  Dict+_test_Div_RoundUp_N2_P3 :: Dict (K.Div 'K.RoundUp (N 2) (P 3) ~ Z)+_test_Div_RoundUp_N2_P3 =  Dict+_test_Rem_RoundUp_N2_P3 :: Dict (K.Rem 'K.RoundUp (N 2) (P 3) ~ N 2)+_test_Rem_RoundUp_N2_P3 =  Dict+_test_Div_RoundUp_N2_P4 :: Dict (K.Div 'K.RoundUp (N 2) (P 4) ~ Z)+_test_Div_RoundUp_N2_P4 =  Dict+_test_Rem_RoundUp_N2_P4 :: Dict (K.Rem 'K.RoundUp (N 2) (P 4) ~ N 2)+_test_Rem_RoundUp_N2_P4 =  Dict+_test_Div_RoundUp_N3_N1 :: Dict (K.Div 'K.RoundUp (N 3) (N 1) ~ P 3)+_test_Div_RoundUp_N3_N1 =  Dict+_test_Rem_RoundUp_N3_N1 :: Dict (K.Rem 'K.RoundUp (N 3) (N 1) ~ Z)+_test_Rem_RoundUp_N3_N1 =  Dict+_test_Div_RoundUp_N3_N2 :: Dict (K.Div 'K.RoundUp (N 3) (N 2) ~ P 2)+_test_Div_RoundUp_N3_N2 =  Dict+_test_Rem_RoundUp_N3_N2 :: Dict (K.Rem 'K.RoundUp (N 3) (N 2) ~ P 1)+_test_Rem_RoundUp_N3_N2 =  Dict+_test_Div_RoundUp_N3_N3 :: Dict (K.Div 'K.RoundUp (N 3) (N 3) ~ P 1)+_test_Div_RoundUp_N3_N3 =  Dict+_test_Rem_RoundUp_N3_N3 :: Dict (K.Rem 'K.RoundUp (N 3) (N 3) ~ Z)+_test_Rem_RoundUp_N3_N3 =  Dict+_test_Div_RoundUp_N3_N4 :: Dict (K.Div 'K.RoundUp (N 3) (N 4) ~ P 1)+_test_Div_RoundUp_N3_N4 =  Dict+_test_Rem_RoundUp_N3_N4 :: Dict (K.Rem 'K.RoundUp (N 3) (N 4) ~ P 1)+_test_Rem_RoundUp_N3_N4 =  Dict+_test_Div_RoundUp_N3_P1 :: Dict (K.Div 'K.RoundUp (N 3) (P 1) ~ N 3)+_test_Div_RoundUp_N3_P1 =  Dict+_test_Rem_RoundUp_N3_P1 :: Dict (K.Rem 'K.RoundUp (N 3) (P 1) ~ Z)+_test_Rem_RoundUp_N3_P1 =  Dict+_test_Div_RoundUp_N3_P2 :: Dict (K.Div 'K.RoundUp (N 3) (P 2) ~ N 1)+_test_Div_RoundUp_N3_P2 =  Dict+_test_Rem_RoundUp_N3_P2 :: Dict (K.Rem 'K.RoundUp (N 3) (P 2) ~ N 1)+_test_Rem_RoundUp_N3_P2 =  Dict+_test_Div_RoundUp_N3_P3 :: Dict (K.Div 'K.RoundUp (N 3) (P 3) ~ N 1)+_test_Div_RoundUp_N3_P3 =  Dict+_test_Rem_RoundUp_N3_P3 :: Dict (K.Rem 'K.RoundUp (N 3) (P 3) ~ Z)+_test_Rem_RoundUp_N3_P3 =  Dict+_test_Div_RoundUp_N3_P4 :: Dict (K.Div 'K.RoundUp (N 3) (P 4) ~ Z)+_test_Div_RoundUp_N3_P4 =  Dict+_test_Rem_RoundUp_N3_P4 :: Dict (K.Rem 'K.RoundUp (N 3) (P 4) ~ N 3)+_test_Rem_RoundUp_N3_P4 =  Dict+_test_Div_RoundUp_N4_N1 :: Dict (K.Div 'K.RoundUp (N 4) (N 1) ~ P 4)+_test_Div_RoundUp_N4_N1 =  Dict+_test_Rem_RoundUp_N4_N1 :: Dict (K.Rem 'K.RoundUp (N 4) (N 1) ~ Z)+_test_Rem_RoundUp_N4_N1 =  Dict+_test_Div_RoundUp_N4_N2 :: Dict (K.Div 'K.RoundUp (N 4) (N 2) ~ P 2)+_test_Div_RoundUp_N4_N2 =  Dict+_test_Rem_RoundUp_N4_N2 :: Dict (K.Rem 'K.RoundUp (N 4) (N 2) ~ Z)+_test_Rem_RoundUp_N4_N2 =  Dict+_test_Div_RoundUp_N4_N3 :: Dict (K.Div 'K.RoundUp (N 4) (N 3) ~ P 2)+_test_Div_RoundUp_N4_N3 =  Dict+_test_Rem_RoundUp_N4_N3 :: Dict (K.Rem 'K.RoundUp (N 4) (N 3) ~ P 2)+_test_Rem_RoundUp_N4_N3 =  Dict+_test_Div_RoundUp_N4_N4 :: Dict (K.Div 'K.RoundUp (N 4) (N 4) ~ P 1)+_test_Div_RoundUp_N4_N4 =  Dict+_test_Rem_RoundUp_N4_N4 :: Dict (K.Rem 'K.RoundUp (N 4) (N 4) ~ Z)+_test_Rem_RoundUp_N4_N4 =  Dict+_test_Div_RoundUp_N4_P1 :: Dict (K.Div 'K.RoundUp (N 4) (P 1) ~ N 4)+_test_Div_RoundUp_N4_P1 =  Dict+_test_Rem_RoundUp_N4_P1 :: Dict (K.Rem 'K.RoundUp (N 4) (P 1) ~ Z)+_test_Rem_RoundUp_N4_P1 =  Dict+_test_Div_RoundUp_N4_P2 :: Dict (K.Div 'K.RoundUp (N 4) (P 2) ~ N 2)+_test_Div_RoundUp_N4_P2 =  Dict+_test_Rem_RoundUp_N4_P2 :: Dict (K.Rem 'K.RoundUp (N 4) (P 2) ~ Z)+_test_Rem_RoundUp_N4_P2 =  Dict+_test_Div_RoundUp_N4_P3 :: Dict (K.Div 'K.RoundUp (N 4) (P 3) ~ N 1)+_test_Div_RoundUp_N4_P3 =  Dict+_test_Rem_RoundUp_N4_P3 :: Dict (K.Rem 'K.RoundUp (N 4) (P 3) ~ N 1)+_test_Rem_RoundUp_N4_P3 =  Dict+_test_Div_RoundUp_N4_P4 :: Dict (K.Div 'K.RoundUp (N 4) (P 4) ~ N 1)+_test_Div_RoundUp_N4_P4 =  Dict+_test_Rem_RoundUp_N4_P4 :: Dict (K.Rem 'K.RoundUp (N 4) (P 4) ~ Z)+_test_Rem_RoundUp_N4_P4 =  Dict+_test_Div_RoundUp_Z_N1 :: Dict (K.Div 'K.RoundUp Z (N 1) ~ Z)+_test_Div_RoundUp_Z_N1 =  Dict+_test_Rem_RoundUp_Z_N2 :: Dict (K.Rem 'K.RoundUp Z (N 2) ~ Z)+_test_Rem_RoundUp_Z_N2 =  Dict+_test_Div_RoundUp_Z_N3 :: Dict (K.Div 'K.RoundUp Z (N 3) ~ Z)+_test_Div_RoundUp_Z_N3 =  Dict+_test_Rem_RoundUp_Z_N4 :: Dict (K.Rem 'K.RoundUp Z (N 4) ~ Z)+_test_Rem_RoundUp_Z_N4 =  Dict+_test_Div_RoundUp_Z_P1 :: Dict (K.Div 'K.RoundUp Z (P 1) ~ Z)+_test_Div_RoundUp_Z_P1 =  Dict+_test_Rem_RoundUp_Z_P2 :: Dict (K.Rem 'K.RoundUp Z (P 2) ~ Z)+_test_Rem_RoundUp_Z_P2 =  Dict+_test_Div_RoundUp_Z_P3 :: Dict (K.Div 'K.RoundUp Z (P 3) ~ Z)+_test_Div_RoundUp_Z_P3 =  Dict+_test_Rem_RoundUp_Z_P4 :: Dict (K.Rem 'K.RoundUp Z (P 4) ~ Z)+_test_Rem_RoundUp_Z_P4 =  Dict+_test_Div_RoundUp_P1_N1 :: Dict (K.Div 'K.RoundUp (P 1) (N 1) ~ N 1)+_test_Div_RoundUp_P1_N1 =  Dict+_test_Rem_RoundUp_P1_N1 :: Dict (K.Rem 'K.RoundUp (P 1) (N 1) ~ Z)+_test_Rem_RoundUp_P1_N1 =  Dict+_test_Div_RoundUp_P1_N2 :: Dict (K.Div 'K.RoundUp (P 1) (N 2) ~ Z)+_test_Div_RoundUp_P1_N2 =  Dict+_test_Rem_RoundUp_P1_N2 :: Dict (K.Rem 'K.RoundUp (P 1) (N 2) ~ P 1)+_test_Rem_RoundUp_P1_N2 =  Dict+_test_Div_RoundUp_P1_N3 :: Dict (K.Div 'K.RoundUp (P 1) (N 3) ~ Z)+_test_Div_RoundUp_P1_N3 =  Dict+_test_Rem_RoundUp_P1_N3 :: Dict (K.Rem 'K.RoundUp (P 1) (N 3) ~ P 1)+_test_Rem_RoundUp_P1_N3 =  Dict+_test_Div_RoundUp_P1_N4 :: Dict (K.Div 'K.RoundUp (P 1) (N 4) ~ Z)+_test_Div_RoundUp_P1_N4 =  Dict+_test_Rem_RoundUp_P1_N4 :: Dict (K.Rem 'K.RoundUp (P 1) (N 4) ~ P 1)+_test_Rem_RoundUp_P1_N4 =  Dict+_test_Div_RoundUp_P1_P1 :: Dict (K.Div 'K.RoundUp (P 1) (P 1) ~ P 1)+_test_Div_RoundUp_P1_P1 =  Dict+_test_Rem_RoundUp_P1_P1 :: Dict (K.Rem 'K.RoundUp (P 1) (P 1) ~ Z)+_test_Rem_RoundUp_P1_P1 =  Dict+_test_Div_RoundUp_P1_P2 :: Dict (K.Div 'K.RoundUp (P 1) (P 2) ~ P 1)+_test_Div_RoundUp_P1_P2 =  Dict+_test_Rem_RoundUp_P1_P2 :: Dict (K.Rem 'K.RoundUp (P 1) (P 2) ~ N 1)+_test_Rem_RoundUp_P1_P2 =  Dict+_test_Div_RoundUp_P1_P3 :: Dict (K.Div 'K.RoundUp (P 1) (P 3) ~ P 1)+_test_Div_RoundUp_P1_P3 =  Dict+_test_Rem_RoundUp_P1_P3 :: Dict (K.Rem 'K.RoundUp (P 1) (P 3) ~ N 2)+_test_Rem_RoundUp_P1_P3 =  Dict+_test_Div_RoundUp_P1_P4 :: Dict (K.Div 'K.RoundUp (P 1) (P 4) ~ P 1)+_test_Div_RoundUp_P1_P4 =  Dict+_test_Rem_RoundUp_P1_P4 :: Dict (K.Rem 'K.RoundUp (P 1) (P 4) ~ N 3)+_test_Rem_RoundUp_P1_P4 =  Dict+_test_Div_RoundUp_P2_N1 :: Dict (K.Div 'K.RoundUp (P 2) (N 1) ~ N 2)+_test_Div_RoundUp_P2_N1 =  Dict+_test_Rem_RoundUp_P2_N1 :: Dict (K.Rem 'K.RoundUp (P 2) (N 1) ~ Z)+_test_Rem_RoundUp_P2_N1 =  Dict+_test_Div_RoundUp_P2_N2 :: Dict (K.Div 'K.RoundUp (P 2) (N 2) ~ N 1)+_test_Div_RoundUp_P2_N2 =  Dict+_test_Rem_RoundUp_P2_N2 :: Dict (K.Rem 'K.RoundUp (P 2) (N 2) ~ Z)+_test_Rem_RoundUp_P2_N2 =  Dict+_test_Div_RoundUp_P2_N3 :: Dict (K.Div 'K.RoundUp (P 2) (N 3) ~ Z)+_test_Div_RoundUp_P2_N3 =  Dict+_test_Rem_RoundUp_P2_N3 :: Dict (K.Rem 'K.RoundUp (P 2) (N 3) ~ P 2)+_test_Rem_RoundUp_P2_N3 =  Dict+_test_Div_RoundUp_P2_N4 :: Dict (K.Div 'K.RoundUp (P 2) (N 4) ~ Z)+_test_Div_RoundUp_P2_N4 =  Dict+_test_Rem_RoundUp_P2_N4 :: Dict (K.Rem 'K.RoundUp (P 2) (N 4) ~ P 2)+_test_Rem_RoundUp_P2_N4 =  Dict+_test_Div_RoundUp_P2_P1 :: Dict (K.Div 'K.RoundUp (P 2) (P 1) ~ P 2)+_test_Div_RoundUp_P2_P1 =  Dict+_test_Rem_RoundUp_P2_P1 :: Dict (K.Rem 'K.RoundUp (P 2) (P 1) ~ Z)+_test_Rem_RoundUp_P2_P1 =  Dict+_test_Div_RoundUp_P2_P2 :: Dict (K.Div 'K.RoundUp (P 2) (P 2) ~ P 1)+_test_Div_RoundUp_P2_P2 =  Dict+_test_Rem_RoundUp_P2_P2 :: Dict (K.Rem 'K.RoundUp (P 2) (P 2) ~ Z)+_test_Rem_RoundUp_P2_P2 =  Dict+_test_Div_RoundUp_P2_P3 :: Dict (K.Div 'K.RoundUp (P 2) (P 3) ~ P 1)+_test_Div_RoundUp_P2_P3 =  Dict+_test_Rem_RoundUp_P2_P3 :: Dict (K.Rem 'K.RoundUp (P 2) (P 3) ~ N 1)+_test_Rem_RoundUp_P2_P3 =  Dict+_test_Div_RoundUp_P2_P4 :: Dict (K.Div 'K.RoundUp (P 2) (P 4) ~ P 1)+_test_Div_RoundUp_P2_P4 =  Dict+_test_Rem_RoundUp_P2_P4 :: Dict (K.Rem 'K.RoundUp (P 2) (P 4) ~ N 2)+_test_Rem_RoundUp_P2_P4 =  Dict+_test_Div_RoundUp_P3_N1 :: Dict (K.Div 'K.RoundUp (P 3) (N 1) ~ N 3)+_test_Div_RoundUp_P3_N1 =  Dict+_test_Rem_RoundUp_P3_N1 :: Dict (K.Rem 'K.RoundUp (P 3) (N 1) ~ Z)+_test_Rem_RoundUp_P3_N1 =  Dict+_test_Div_RoundUp_P3_N2 :: Dict (K.Div 'K.RoundUp (P 3) (N 2) ~ N 1)+_test_Div_RoundUp_P3_N2 =  Dict+_test_Rem_RoundUp_P3_N2 :: Dict (K.Rem 'K.RoundUp (P 3) (N 2) ~ P 1)+_test_Rem_RoundUp_P3_N2 =  Dict+_test_Div_RoundUp_P3_N3 :: Dict (K.Div 'K.RoundUp (P 3) (N 3) ~ N 1)+_test_Div_RoundUp_P3_N3 =  Dict+_test_Rem_RoundUp_P3_N3 :: Dict (K.Rem 'K.RoundUp (P 3) (N 3) ~ Z)+_test_Rem_RoundUp_P3_N3 =  Dict+_test_Div_RoundUp_P3_N4 :: Dict (K.Div 'K.RoundUp (P 3) (N 4) ~ Z)+_test_Div_RoundUp_P3_N4 =  Dict+_test_Rem_RoundUp_P3_N4 :: Dict (K.Rem 'K.RoundUp (P 3) (N 4) ~ P 3)+_test_Rem_RoundUp_P3_N4 =  Dict+_test_Div_RoundUp_P3_P1 :: Dict (K.Div 'K.RoundUp (P 3) (P 1) ~ P 3)+_test_Div_RoundUp_P3_P1 =  Dict+_test_Rem_RoundUp_P3_P1 :: Dict (K.Rem 'K.RoundUp (P 3) (P 1) ~ Z)+_test_Rem_RoundUp_P3_P1 =  Dict+_test_Div_RoundUp_P3_P2 :: Dict (K.Div 'K.RoundUp (P 3) (P 2) ~ P 2)+_test_Div_RoundUp_P3_P2 =  Dict+_test_Rem_RoundUp_P3_P2 :: Dict (K.Rem 'K.RoundUp (P 3) (P 2) ~ N 1)+_test_Rem_RoundUp_P3_P2 =  Dict+_test_Div_RoundUp_P3_P3 :: Dict (K.Div 'K.RoundUp (P 3) (P 3) ~ P 1)+_test_Div_RoundUp_P3_P3 =  Dict+_test_Rem_RoundUp_P3_P3 :: Dict (K.Rem 'K.RoundUp (P 3) (P 3) ~ Z)+_test_Rem_RoundUp_P3_P3 =  Dict+_test_Div_RoundUp_P3_P4 :: Dict (K.Div 'K.RoundUp (P 3) (P 4) ~ P 1)+_test_Div_RoundUp_P3_P4 =  Dict+_test_Rem_RoundUp_P3_P4 :: Dict (K.Rem 'K.RoundUp (P 3) (P 4) ~ N 1)+_test_Rem_RoundUp_P3_P4 =  Dict+_test_Div_RoundUp_P4_N1 :: Dict (K.Div 'K.RoundUp (P 4) (N 1) ~ N 4)+_test_Div_RoundUp_P4_N1 =  Dict+_test_Rem_RoundUp_P4_N1 :: Dict (K.Rem 'K.RoundUp (P 4) (N 1) ~ Z)+_test_Rem_RoundUp_P4_N1 =  Dict+_test_Div_RoundUp_P4_N2 :: Dict (K.Div 'K.RoundUp (P 4) (N 2) ~ N 2)+_test_Div_RoundUp_P4_N2 =  Dict+_test_Rem_RoundUp_P4_N2 :: Dict (K.Rem 'K.RoundUp (P 4) (N 2) ~ Z)+_test_Rem_RoundUp_P4_N2 =  Dict+_test_Div_RoundUp_P4_N3 :: Dict (K.Div 'K.RoundUp (P 4) (N 3) ~ N 1)+_test_Div_RoundUp_P4_N3 =  Dict+_test_Rem_RoundUp_P4_N3 :: Dict (K.Rem 'K.RoundUp (P 4) (N 3) ~ P 1)+_test_Rem_RoundUp_P4_N3 =  Dict+_test_Div_RoundUp_P4_N4 :: Dict (K.Div 'K.RoundUp (P 4) (N 4) ~ N 1)+_test_Div_RoundUp_P4_N4 =  Dict+_test_Rem_RoundUp_P4_N4 :: Dict (K.Rem 'K.RoundUp (P 4) (N 4) ~ Z)+_test_Rem_RoundUp_P4_N4 =  Dict+_test_Div_RoundUp_P4_P1 :: Dict (K.Div 'K.RoundUp (P 4) (P 1) ~ P 4)+_test_Div_RoundUp_P4_P1 =  Dict+_test_Rem_RoundUp_P4_P1 :: Dict (K.Rem 'K.RoundUp (P 4) (P 1) ~ Z)+_test_Rem_RoundUp_P4_P1 =  Dict+_test_Div_RoundUp_P4_P2 :: Dict (K.Div 'K.RoundUp (P 4) (P 2) ~ P 2)+_test_Div_RoundUp_P4_P2 =  Dict+_test_Rem_RoundUp_P4_P2 :: Dict (K.Rem 'K.RoundUp (P 4) (P 2) ~ Z)+_test_Rem_RoundUp_P4_P2 =  Dict+_test_Div_RoundUp_P4_P3 :: Dict (K.Div 'K.RoundUp (P 4) (P 3) ~ P 2)+_test_Div_RoundUp_P4_P3 =  Dict+_test_Rem_RoundUp_P4_P3 :: Dict (K.Rem 'K.RoundUp (P 4) (P 3) ~ N 2)+_test_Rem_RoundUp_P4_P3 =  Dict+_test_Div_RoundUp_P4_P4 :: Dict (K.Div 'K.RoundUp (P 4) (P 4) ~ P 1)+_test_Div_RoundUp_P4_P4 =  Dict+_test_Rem_RoundUp_P4_P4 :: Dict (K.Rem 'K.RoundUp (P 4) (P 4) ~ Z)+_test_Rem_RoundUp_P4_P4 =  Dict+_test_Div_RoundZero_N1_N1 :: Dict (K.Div 'K.RoundZero (N 1) (N 1) ~ P 1)+_test_Div_RoundZero_N1_N1 =  Dict+_test_Rem_RoundZero_N1_N1 :: Dict (K.Rem 'K.RoundZero (N 1) (N 1) ~ Z)+_test_Rem_RoundZero_N1_N1 =  Dict+_test_Div_RoundZero_N1_N2 :: Dict (K.Div 'K.RoundZero (N 1) (N 2) ~ Z)+_test_Div_RoundZero_N1_N2 =  Dict+_test_Rem_RoundZero_N1_N2 :: Dict (K.Rem 'K.RoundZero (N 1) (N 2) ~ N 1)+_test_Rem_RoundZero_N1_N2 =  Dict+_test_Div_RoundZero_N1_N3 :: Dict (K.Div 'K.RoundZero (N 1) (N 3) ~ Z)+_test_Div_RoundZero_N1_N3 =  Dict+_test_Rem_RoundZero_N1_N3 :: Dict (K.Rem 'K.RoundZero (N 1) (N 3) ~ N 1)+_test_Rem_RoundZero_N1_N3 =  Dict+_test_Div_RoundZero_N1_N4 :: Dict (K.Div 'K.RoundZero (N 1) (N 4) ~ Z)+_test_Div_RoundZero_N1_N4 =  Dict+_test_Rem_RoundZero_N1_N4 :: Dict (K.Rem 'K.RoundZero (N 1) (N 4) ~ N 1)+_test_Rem_RoundZero_N1_N4 =  Dict+_test_Div_RoundZero_N1_P1 :: Dict (K.Div 'K.RoundZero (N 1) (P 1) ~ N 1)+_test_Div_RoundZero_N1_P1 =  Dict+_test_Rem_RoundZero_N1_P1 :: Dict (K.Rem 'K.RoundZero (N 1) (P 1) ~ Z)+_test_Rem_RoundZero_N1_P1 =  Dict+_test_Div_RoundZero_N1_P2 :: Dict (K.Div 'K.RoundZero (N 1) (P 2) ~ Z)+_test_Div_RoundZero_N1_P2 =  Dict+_test_Rem_RoundZero_N1_P2 :: Dict (K.Rem 'K.RoundZero (N 1) (P 2) ~ N 1)+_test_Rem_RoundZero_N1_P2 =  Dict+_test_Div_RoundZero_N1_P3 :: Dict (K.Div 'K.RoundZero (N 1) (P 3) ~ Z)+_test_Div_RoundZero_N1_P3 =  Dict+_test_Rem_RoundZero_N1_P3 :: Dict (K.Rem 'K.RoundZero (N 1) (P 3) ~ N 1)+_test_Rem_RoundZero_N1_P3 =  Dict+_test_Div_RoundZero_N1_P4 :: Dict (K.Div 'K.RoundZero (N 1) (P 4) ~ Z)+_test_Div_RoundZero_N1_P4 =  Dict+_test_Rem_RoundZero_N1_P4 :: Dict (K.Rem 'K.RoundZero (N 1) (P 4) ~ N 1)+_test_Rem_RoundZero_N1_P4 =  Dict+_test_Div_RoundZero_N2_N1 :: Dict (K.Div 'K.RoundZero (N 2) (N 1) ~ P 2)+_test_Div_RoundZero_N2_N1 =  Dict+_test_Rem_RoundZero_N2_N1 :: Dict (K.Rem 'K.RoundZero (N 2) (N 1) ~ Z)+_test_Rem_RoundZero_N2_N1 =  Dict+_test_Div_RoundZero_N2_N2 :: Dict (K.Div 'K.RoundZero (N 2) (N 2) ~ P 1)+_test_Div_RoundZero_N2_N2 =  Dict+_test_Rem_RoundZero_N2_N2 :: Dict (K.Rem 'K.RoundZero (N 2) (N 2) ~ Z)+_test_Rem_RoundZero_N2_N2 =  Dict+_test_Div_RoundZero_N2_N3 :: Dict (K.Div 'K.RoundZero (N 2) (N 3) ~ Z)+_test_Div_RoundZero_N2_N3 =  Dict+_test_Rem_RoundZero_N2_N3 :: Dict (K.Rem 'K.RoundZero (N 2) (N 3) ~ N 2)+_test_Rem_RoundZero_N2_N3 =  Dict+_test_Div_RoundZero_N2_N4 :: Dict (K.Div 'K.RoundZero (N 2) (N 4) ~ Z)+_test_Div_RoundZero_N2_N4 =  Dict+_test_Rem_RoundZero_N2_N4 :: Dict (K.Rem 'K.RoundZero (N 2) (N 4) ~ N 2)+_test_Rem_RoundZero_N2_N4 =  Dict+_test_Div_RoundZero_N2_P1 :: Dict (K.Div 'K.RoundZero (N 2) (P 1) ~ N 2)+_test_Div_RoundZero_N2_P1 =  Dict+_test_Rem_RoundZero_N2_P1 :: Dict (K.Rem 'K.RoundZero (N 2) (P 1) ~ Z)+_test_Rem_RoundZero_N2_P1 =  Dict+_test_Div_RoundZero_N2_P2 :: Dict (K.Div 'K.RoundZero (N 2) (P 2) ~ N 1)+_test_Div_RoundZero_N2_P2 =  Dict+_test_Rem_RoundZero_N2_P2 :: Dict (K.Rem 'K.RoundZero (N 2) (P 2) ~ Z)+_test_Rem_RoundZero_N2_P2 =  Dict+_test_Div_RoundZero_N2_P3 :: Dict (K.Div 'K.RoundZero (N 2) (P 3) ~ Z)+_test_Div_RoundZero_N2_P3 =  Dict+_test_Rem_RoundZero_N2_P3 :: Dict (K.Rem 'K.RoundZero (N 2) (P 3) ~ N 2)+_test_Rem_RoundZero_N2_P3 =  Dict+_test_Div_RoundZero_N2_P4 :: Dict (K.Div 'K.RoundZero (N 2) (P 4) ~ Z)+_test_Div_RoundZero_N2_P4 =  Dict+_test_Rem_RoundZero_N2_P4 :: Dict (K.Rem 'K.RoundZero (N 2) (P 4) ~ N 2)+_test_Rem_RoundZero_N2_P4 =  Dict+_test_Div_RoundZero_N3_N1 :: Dict (K.Div 'K.RoundZero (N 3) (N 1) ~ P 3)+_test_Div_RoundZero_N3_N1 =  Dict+_test_Rem_RoundZero_N3_N1 :: Dict (K.Rem 'K.RoundZero (N 3) (N 1) ~ Z)+_test_Rem_RoundZero_N3_N1 =  Dict+_test_Div_RoundZero_N3_N2 :: Dict (K.Div 'K.RoundZero (N 3) (N 2) ~ P 1)+_test_Div_RoundZero_N3_N2 =  Dict+_test_Rem_RoundZero_N3_N2 :: Dict (K.Rem 'K.RoundZero (N 3) (N 2) ~ N 1)+_test_Rem_RoundZero_N3_N2 =  Dict+_test_Div_RoundZero_N3_N3 :: Dict (K.Div 'K.RoundZero (N 3) (N 3) ~ P 1)+_test_Div_RoundZero_N3_N3 =  Dict+_test_Rem_RoundZero_N3_N3 :: Dict (K.Rem 'K.RoundZero (N 3) (N 3) ~ Z)+_test_Rem_RoundZero_N3_N3 =  Dict+_test_Div_RoundZero_N3_N4 :: Dict (K.Div 'K.RoundZero (N 3) (N 4) ~ Z)+_test_Div_RoundZero_N3_N4 =  Dict+_test_Rem_RoundZero_N3_N4 :: Dict (K.Rem 'K.RoundZero (N 3) (N 4) ~ N 3)+_test_Rem_RoundZero_N3_N4 =  Dict+_test_Div_RoundZero_N3_P1 :: Dict (K.Div 'K.RoundZero (N 3) (P 1) ~ N 3)+_test_Div_RoundZero_N3_P1 =  Dict+_test_Rem_RoundZero_N3_P1 :: Dict (K.Rem 'K.RoundZero (N 3) (P 1) ~ Z)+_test_Rem_RoundZero_N3_P1 =  Dict+_test_Div_RoundZero_N3_P2 :: Dict (K.Div 'K.RoundZero (N 3) (P 2) ~ N 1)+_test_Div_RoundZero_N3_P2 =  Dict+_test_Rem_RoundZero_N3_P2 :: Dict (K.Rem 'K.RoundZero (N 3) (P 2) ~ N 1)+_test_Rem_RoundZero_N3_P2 =  Dict+_test_Div_RoundZero_N3_P3 :: Dict (K.Div 'K.RoundZero (N 3) (P 3) ~ N 1)+_test_Div_RoundZero_N3_P3 =  Dict+_test_Rem_RoundZero_N3_P3 :: Dict (K.Rem 'K.RoundZero (N 3) (P 3) ~ Z)+_test_Rem_RoundZero_N3_P3 =  Dict+_test_Div_RoundZero_N3_P4 :: Dict (K.Div 'K.RoundZero (N 3) (P 4) ~ Z)+_test_Div_RoundZero_N3_P4 =  Dict+_test_Rem_RoundZero_N3_P4 :: Dict (K.Rem 'K.RoundZero (N 3) (P 4) ~ N 3)+_test_Rem_RoundZero_N3_P4 =  Dict+_test_Div_RoundZero_N4_N1 :: Dict (K.Div 'K.RoundZero (N 4) (N 1) ~ P 4)+_test_Div_RoundZero_N4_N1 =  Dict+_test_Rem_RoundZero_N4_N1 :: Dict (K.Rem 'K.RoundZero (N 4) (N 1) ~ Z)+_test_Rem_RoundZero_N4_N1 =  Dict+_test_Div_RoundZero_N4_N2 :: Dict (K.Div 'K.RoundZero (N 4) (N 2) ~ P 2)+_test_Div_RoundZero_N4_N2 =  Dict+_test_Rem_RoundZero_N4_N2 :: Dict (K.Rem 'K.RoundZero (N 4) (N 2) ~ Z)+_test_Rem_RoundZero_N4_N2 =  Dict+_test_Div_RoundZero_N4_N3 :: Dict (K.Div 'K.RoundZero (N 4) (N 3) ~ P 1)+_test_Div_RoundZero_N4_N3 =  Dict+_test_Rem_RoundZero_N4_N3 :: Dict (K.Rem 'K.RoundZero (N 4) (N 3) ~ N 1)+_test_Rem_RoundZero_N4_N3 =  Dict+_test_Div_RoundZero_N4_N4 :: Dict (K.Div 'K.RoundZero (N 4) (N 4) ~ P 1)+_test_Div_RoundZero_N4_N4 =  Dict+_test_Rem_RoundZero_N4_N4 :: Dict (K.Rem 'K.RoundZero (N 4) (N 4) ~ Z)+_test_Rem_RoundZero_N4_N4 =  Dict+_test_Div_RoundZero_N4_P1 :: Dict (K.Div 'K.RoundZero (N 4) (P 1) ~ N 4)+_test_Div_RoundZero_N4_P1 =  Dict+_test_Rem_RoundZero_N4_P1 :: Dict (K.Rem 'K.RoundZero (N 4) (P 1) ~ Z)+_test_Rem_RoundZero_N4_P1 =  Dict+_test_Div_RoundZero_N4_P2 :: Dict (K.Div 'K.RoundZero (N 4) (P 2) ~ N 2)+_test_Div_RoundZero_N4_P2 =  Dict+_test_Rem_RoundZero_N4_P2 :: Dict (K.Rem 'K.RoundZero (N 4) (P 2) ~ Z)+_test_Rem_RoundZero_N4_P2 =  Dict+_test_Div_RoundZero_N4_P3 :: Dict (K.Div 'K.RoundZero (N 4) (P 3) ~ N 1)+_test_Div_RoundZero_N4_P3 =  Dict+_test_Rem_RoundZero_N4_P3 :: Dict (K.Rem 'K.RoundZero (N 4) (P 3) ~ N 1)+_test_Rem_RoundZero_N4_P3 =  Dict+_test_Div_RoundZero_N4_P4 :: Dict (K.Div 'K.RoundZero (N 4) (P 4) ~ N 1)+_test_Div_RoundZero_N4_P4 =  Dict+_test_Rem_RoundZero_N4_P4 :: Dict (K.Rem 'K.RoundZero (N 4) (P 4) ~ Z)+_test_Rem_RoundZero_N4_P4 =  Dict+_test_Div_RoundZero_Z_N1 :: Dict (K.Div 'K.RoundZero Z (N 1) ~ Z)+_test_Div_RoundZero_Z_N1 =  Dict+_test_Div_RoundZero_Z_N2 :: Dict (K.Div 'K.RoundZero Z (N 2) ~ Z)+_test_Div_RoundZero_Z_N2 =  Dict+_test_Div_RoundZero_Z_N3 :: Dict (K.Div 'K.RoundZero Z (N 3) ~ Z)+_test_Div_RoundZero_Z_N3 =  Dict+_test_Div_RoundZero_Z_N4 :: Dict (K.Div 'K.RoundZero Z (N 4) ~ Z)+_test_Div_RoundZero_Z_N4 =  Dict+_test_Div_RoundZero_Z_P1 :: Dict (K.Div 'K.RoundZero Z (P 1) ~ Z)+_test_Div_RoundZero_Z_P1 =  Dict+_test_Div_RoundZero_Z_P2 :: Dict (K.Div 'K.RoundZero Z (P 2) ~ Z)+_test_Div_RoundZero_Z_P2 =  Dict+_test_Div_RoundZero_Z_P3 :: Dict (K.Div 'K.RoundZero Z (P 3) ~ Z)+_test_Div_RoundZero_Z_P3 =  Dict+_test_Div_RoundZero_Z_P4 :: Dict (K.Div 'K.RoundZero Z (P 4) ~ Z)+_test_Div_RoundZero_Z_P4 =  Dict+_test_Div_RoundZero_P1_N1 :: Dict (K.Div 'K.RoundZero (P 1) (N 1) ~ N 1)+_test_Div_RoundZero_P1_N1 =  Dict+_test_Rem_RoundZero_P1_N1 :: Dict (K.Rem 'K.RoundZero (P 1) (N 1) ~ Z)+_test_Rem_RoundZero_P1_N1 =  Dict+_test_Div_RoundZero_P1_N2 :: Dict (K.Div 'K.RoundZero (P 1) (N 2) ~ Z)+_test_Div_RoundZero_P1_N2 =  Dict+_test_Rem_RoundZero_P1_N2 :: Dict (K.Rem 'K.RoundZero (P 1) (N 2) ~ P 1)+_test_Rem_RoundZero_P1_N2 =  Dict+_test_Div_RoundZero_P1_N3 :: Dict (K.Div 'K.RoundZero (P 1) (N 3) ~ Z)+_test_Div_RoundZero_P1_N3 =  Dict+_test_Rem_RoundZero_P1_N3 :: Dict (K.Rem 'K.RoundZero (P 1) (N 3) ~ P 1)+_test_Rem_RoundZero_P1_N3 =  Dict+_test_Div_RoundZero_P1_N4 :: Dict (K.Div 'K.RoundZero (P 1) (N 4) ~ Z)+_test_Div_RoundZero_P1_N4 =  Dict+_test_Rem_RoundZero_P1_N4 :: Dict (K.Rem 'K.RoundZero (P 1) (N 4) ~ P 1)+_test_Rem_RoundZero_P1_N4 =  Dict+_test_Div_RoundZero_P1_P1 :: Dict (K.Div 'K.RoundZero (P 1) (P 1) ~ P 1)+_test_Div_RoundZero_P1_P1 =  Dict+_test_Rem_RoundZero_P1_P1 :: Dict (K.Rem 'K.RoundZero (P 1) (P 1) ~ Z)+_test_Rem_RoundZero_P1_P1 =  Dict+_test_Div_RoundZero_P1_P2 :: Dict (K.Div 'K.RoundZero (P 1) (P 2) ~ Z)+_test_Div_RoundZero_P1_P2 =  Dict+_test_Rem_RoundZero_P1_P2 :: Dict (K.Rem 'K.RoundZero (P 1) (P 2) ~ P 1)+_test_Rem_RoundZero_P1_P2 =  Dict+_test_Div_RoundZero_P1_P3 :: Dict (K.Div 'K.RoundZero (P 1) (P 3) ~ Z)+_test_Div_RoundZero_P1_P3 =  Dict+_test_Rem_RoundZero_P1_P3 :: Dict (K.Rem 'K.RoundZero (P 1) (P 3) ~ P 1)+_test_Rem_RoundZero_P1_P3 =  Dict+_test_Div_RoundZero_P1_P4 :: Dict (K.Div 'K.RoundZero (P 1) (P 4) ~ Z)+_test_Div_RoundZero_P1_P4 =  Dict+_test_Rem_RoundZero_P1_P4 :: Dict (K.Rem 'K.RoundZero (P 1) (P 4) ~ P 1)+_test_Rem_RoundZero_P1_P4 =  Dict+_test_Div_RoundZero_P2_N1 :: Dict (K.Div 'K.RoundZero (P 2) (N 1) ~ N 2)+_test_Div_RoundZero_P2_N1 =  Dict+_test_Rem_RoundZero_P2_N1 :: Dict (K.Rem 'K.RoundZero (P 2) (N 1) ~ Z)+_test_Rem_RoundZero_P2_N1 =  Dict+_test_Div_RoundZero_P2_N2 :: Dict (K.Div 'K.RoundZero (P 2) (N 2) ~ N 1)+_test_Div_RoundZero_P2_N2 =  Dict+_test_Rem_RoundZero_P2_N2 :: Dict (K.Rem 'K.RoundZero (P 2) (N 2) ~ Z)+_test_Rem_RoundZero_P2_N2 =  Dict+_test_Div_RoundZero_P2_N3 :: Dict (K.Div 'K.RoundZero (P 2) (N 3) ~ Z)+_test_Div_RoundZero_P2_N3 =  Dict+_test_Rem_RoundZero_P2_N3 :: Dict (K.Rem 'K.RoundZero (P 2) (N 3) ~ P 2)+_test_Rem_RoundZero_P2_N3 =  Dict+_test_Div_RoundZero_P2_N4 :: Dict (K.Div 'K.RoundZero (P 2) (N 4) ~ Z)+_test_Div_RoundZero_P2_N4 =  Dict+_test_Rem_RoundZero_P2_N4 :: Dict (K.Rem 'K.RoundZero (P 2) (N 4) ~ P 2)+_test_Rem_RoundZero_P2_N4 =  Dict+_test_Div_RoundZero_P2_P1 :: Dict (K.Div 'K.RoundZero (P 2) (P 1) ~ P 2)+_test_Div_RoundZero_P2_P1 =  Dict+_test_Rem_RoundZero_P2_P1 :: Dict (K.Rem 'K.RoundZero (P 2) (P 1) ~ Z)+_test_Rem_RoundZero_P2_P1 =  Dict+_test_Div_RoundZero_P2_P2 :: Dict (K.Div 'K.RoundZero (P 2) (P 2) ~ P 1)+_test_Div_RoundZero_P2_P2 =  Dict+_test_Rem_RoundZero_P2_P2 :: Dict (K.Rem 'K.RoundZero (P 2) (P 2) ~ Z)+_test_Rem_RoundZero_P2_P2 =  Dict+_test_Div_RoundZero_P2_P3 :: Dict (K.Div 'K.RoundZero (P 2) (P 3) ~ Z)+_test_Div_RoundZero_P2_P3 =  Dict+_test_Rem_RoundZero_P2_P3 :: Dict (K.Rem 'K.RoundZero (P 2) (P 3) ~ P 2)+_test_Rem_RoundZero_P2_P3 =  Dict+_test_Div_RoundZero_P2_P4 :: Dict (K.Div 'K.RoundZero (P 2) (P 4) ~ Z)+_test_Div_RoundZero_P2_P4 =  Dict+_test_Rem_RoundZero_P2_P4 :: Dict (K.Rem 'K.RoundZero (P 2) (P 4) ~ P 2)+_test_Rem_RoundZero_P2_P4 =  Dict+_test_Div_RoundZero_P3_N1 :: Dict (K.Div 'K.RoundZero (P 3) (N 1) ~ N 3)+_test_Div_RoundZero_P3_N1 =  Dict+_test_Rem_RoundZero_P3_N1 :: Dict (K.Rem 'K.RoundZero (P 3) (N 1) ~ Z)+_test_Rem_RoundZero_P3_N1 =  Dict+_test_Div_RoundZero_P3_N2 :: Dict (K.Div 'K.RoundZero (P 3) (N 2) ~ N 1)+_test_Div_RoundZero_P3_N2 =  Dict+_test_Rem_RoundZero_P3_N2 :: Dict (K.Rem 'K.RoundZero (P 3) (N 2) ~ P 1)+_test_Rem_RoundZero_P3_N2 =  Dict+_test_Div_RoundZero_P3_N3 :: Dict (K.Div 'K.RoundZero (P 3) (N 3) ~ N 1)+_test_Div_RoundZero_P3_N3 =  Dict+_test_Rem_RoundZero_P3_N3 :: Dict (K.Rem 'K.RoundZero (P 3) (N 3) ~ Z)+_test_Rem_RoundZero_P3_N3 =  Dict+_test_Div_RoundZero_P3_N4 :: Dict (K.Div 'K.RoundZero (P 3) (N 4) ~ Z)+_test_Div_RoundZero_P3_N4 =  Dict+_test_Rem_RoundZero_P3_N4 :: Dict (K.Rem 'K.RoundZero (P 3) (N 4) ~ P 3)+_test_Rem_RoundZero_P3_N4 =  Dict+_test_Div_RoundZero_P3_P1 :: Dict (K.Div 'K.RoundZero (P 3) (P 1) ~ P 3)+_test_Div_RoundZero_P3_P1 =  Dict+_test_Rem_RoundZero_P3_P1 :: Dict (K.Rem 'K.RoundZero (P 3) (P 1) ~ Z)+_test_Rem_RoundZero_P3_P1 =  Dict+_test_Div_RoundZero_P3_P2 :: Dict (K.Div 'K.RoundZero (P 3) (P 2) ~ P 1)+_test_Div_RoundZero_P3_P2 =  Dict+_test_Rem_RoundZero_P3_P2 :: Dict (K.Rem 'K.RoundZero (P 3) (P 2) ~ P 1)+_test_Rem_RoundZero_P3_P2 =  Dict+_test_Div_RoundZero_P3_P3 :: Dict (K.Div 'K.RoundZero (P 3) (P 3) ~ P 1)+_test_Div_RoundZero_P3_P3 =  Dict+_test_Rem_RoundZero_P3_P3 :: Dict (K.Rem 'K.RoundZero (P 3) (P 3) ~ Z)+_test_Rem_RoundZero_P3_P3 =  Dict+_test_Div_RoundZero_P3_P4 :: Dict (K.Div 'K.RoundZero (P 3) (P 4) ~ Z)+_test_Div_RoundZero_P3_P4 =  Dict+_test_Rem_RoundZero_P3_P4 :: Dict (K.Rem 'K.RoundZero (P 3) (P 4) ~ P 3)+_test_Rem_RoundZero_P3_P4 =  Dict+_test_Div_RoundZero_P4_N1 :: Dict (K.Div 'K.RoundZero (P 4) (N 1) ~ N 4)+_test_Div_RoundZero_P4_N1 =  Dict+_test_Rem_RoundZero_P4_N1 :: Dict (K.Rem 'K.RoundZero (P 4) (N 1) ~ Z)+_test_Rem_RoundZero_P4_N1 =  Dict+_test_Div_RoundZero_P4_N2 :: Dict (K.Div 'K.RoundZero (P 4) (N 2) ~ N 2)+_test_Div_RoundZero_P4_N2 =  Dict+_test_Rem_RoundZero_P4_N2 :: Dict (K.Rem 'K.RoundZero (P 4) (N 2) ~ Z)+_test_Rem_RoundZero_P4_N2 =  Dict+_test_Div_RoundZero_P4_N3 :: Dict (K.Div 'K.RoundZero (P 4) (N 3) ~ N 1)+_test_Div_RoundZero_P4_N3 =  Dict+_test_Rem_RoundZero_P4_N3 :: Dict (K.Rem 'K.RoundZero (P 4) (N 3) ~ P 1)+_test_Rem_RoundZero_P4_N3 =  Dict+_test_Div_RoundZero_P4_N4 :: Dict (K.Div 'K.RoundZero (P 4) (N 4) ~ N 1)+_test_Div_RoundZero_P4_N4 =  Dict+_test_Rem_RoundZero_P4_N4 :: Dict (K.Rem 'K.RoundZero (P 4) (N 4) ~ Z)+_test_Rem_RoundZero_P4_N4 =  Dict+_test_Div_RoundZero_P4_P1 :: Dict (K.Div 'K.RoundZero (P 4) (P 1) ~ P 4)+_test_Div_RoundZero_P4_P1 =  Dict+_test_Rem_RoundZero_P4_P1 :: Dict (K.Rem 'K.RoundZero (P 4) (P 1) ~ Z)+_test_Rem_RoundZero_P4_P1 =  Dict+_test_Div_RoundZero_P4_P2 :: Dict (K.Div 'K.RoundZero (P 4) (P 2) ~ P 2)+_test_Div_RoundZero_P4_P2 =  Dict+_test_Rem_RoundZero_P4_P2 :: Dict (K.Rem 'K.RoundZero (P 4) (P 2) ~ Z)+_test_Rem_RoundZero_P4_P2 =  Dict+_test_Div_RoundZero_P4_P3 :: Dict (K.Div 'K.RoundZero (P 4) (P 3) ~ P 1)+_test_Div_RoundZero_P4_P3 =  Dict+_test_Rem_RoundZero_P4_P3 :: Dict (K.Rem 'K.RoundZero (P 4) (P 3) ~ P 1)+_test_Rem_RoundZero_P4_P3 =  Dict+_test_Div_RoundZero_P4_P4 :: Dict (K.Div 'K.RoundZero (P 4) (P 4) ~ P 1)+_test_Div_RoundZero_P4_P4 =  Dict+_test_Rem_RoundZero_P4_P4 :: Dict (K.Rem 'K.RoundZero (P 4) (P 4) ~ Z)+_test_Rem_RoundZero_P4_P4 =  Dict++_test_ShowsPrec_AppPrec_Z :: Dict (P.ShowsPrec AppPrec Z "y" ~ "0y")+_test_ShowsPrec_AppPrec_Z =  Dict+_test_ShowsPrec_AppPrec_P1 :: Dict (P.ShowsPrec AppPrec (P 1) "y" ~ "1y")+_test_ShowsPrec_AppPrec_P1 =  Dict+_test_ShowsPrec_AppPrec_N1 :: Dict (P.ShowsPrec AppPrec (N 1) "y" ~ "-1y")+_test_ShowsPrec_AppPrec_N1 =  Dict++_test_ShowsPrec_AppPrec1_Z :: Dict (P.ShowsPrec AppPrec1 Z "y" ~ "0y")+_test_ShowsPrec_AppPrec1_Z =  Dict+_test_ShowsPrec_AppPrec1_P1 :: Dict (P.ShowsPrec AppPrec1 (P 1) "y" ~ "1y")+_test_ShowsPrec_AppPrec1_P1 =  Dict+_test_ShowsPrec_AppPrec1_N1 :: Dict (P.ShowsPrec AppPrec1 (N 1) "y" ~ "(-1)y")+_test_ShowsPrec_AppPrec1_N1 =  Dict++_test_ShowsPrecLit_AppPrec_Z :: Dict (K.ShowsPrecLit AppPrec Z "y" ~ "Zy")+_test_ShowsPrecLit_AppPrec_Z =  Dict+_test_ShowsPrecLit_AppPrec_P1 :: Dict (K.ShowsPrecLit AppPrec (P 1) "y" ~ "P 1y")+_test_ShowsPrecLit_AppPrec_P1 =  Dict+_test_ShowsPrecLit_AppPrec_N1 :: Dict (K.ShowsPrecLit AppPrec (N 1) "y" ~ "N 1y")+_test_ShowsPrecLit_AppPrec_N1 =  Dict++_test_ShowsPrecLit_AppPrec1_Z :: Dict (K.ShowsPrecLit AppPrec1 Z "y" ~ "Zy")+_test_ShowsPrecLit_AppPrec1_Z =  Dict+_test_ShowsPrecLit_AppPrec1_P1 :: Dict (K.ShowsPrecLit AppPrec1 (P 1) "y" ~ "(P 1)y")+_test_ShowsPrecLit_AppPrec1_P1 =  Dict+_test_ShowsPrecLit_AppPrec1_N1 :: Dict (K.ShowsPrecLit AppPrec1 (N 1) "y" ~ "(N 1)y")+_test_ShowsPrecLit_AppPrec1_N1 =  Dict++_test_Add_Z_Z :: Dict (Z P.+ Z ~ Z)+_test_Add_Z_Z =  Dict+_test_Add_Z_N1 :: Dict (Z P.+ N 1 ~ N 1)+_test_Add_Z_N1 =  Dict+_test_Add_Z_P1 :: Dict (Z P.+ P 1 ~ P 1)+_test_Add_Z_P1 =  Dict+_test_Add_Z_N2 :: Dict (Z P.+ N 2 ~ N 2)+_test_Add_Z_N2 =  Dict+_test_Add_Z_P2 :: Dict (Z P.+ P 2 ~ P 2)+_test_Add_Z_P2 =  Dict++_test_Add_N1_Z :: Dict (N 1 P.+ Z ~ N 1)+_test_Add_N1_Z =  Dict+_test_Add_N1_N1 :: Dict (N 1 P.+ N 1 ~ N 2)+_test_Add_N1_N1 =  Dict+_test_Add_N1_P1 :: Dict (N 1 P.+ P 1 ~ Z)+_test_Add_N1_P1 =  Dict+_test_Add_N1_N2 :: Dict (N 1 P.+ N 2 ~ N 3)+_test_Add_N1_N2 =  Dict+_test_Add_N1_P2 :: Dict (N 1 P.+ P 2 ~ P 1)+_test_Add_N1_P2 =  Dict++_test_Add_P1_Z :: Dict (P 1 P.+ Z ~ P 1)+_test_Add_P1_Z =  Dict+_test_Add_P1_N1 :: Dict (P 1 P.+ N 1 ~ Z)+_test_Add_P1_N1 =  Dict+_test_Add_P1_P1 :: Dict (P 1 P.+ P 1 ~ P 2)+_test_Add_P1_P1 =  Dict+_test_Add_P1_N2 :: Dict (P 1 P.+ N 2 ~ N 1)+_test_Add_P1_N2 =  Dict+_test_Add_P1_P2 :: Dict (P 1 P.+ P 2 ~ P 3)+_test_Add_P1_P2 =  Dict++_test_Add_N2_Z :: Dict (N 2 P.+ Z ~ N 2)+_test_Add_N2_Z =  Dict+_test_Add_N2_N1 :: Dict (N 2 P.+ N 1 ~ N 3)+_test_Add_N2_N1 =  Dict+_test_Add_N2_P1 :: Dict (N 2 P.+ P 1 ~ N 1)+_test_Add_N2_P1 =  Dict+_test_Add_N2_N2 :: Dict (N 2 P.+ N 2 ~ N 4)+_test_Add_N2_N2 =  Dict+_test_Add_N2_P2 :: Dict (N 2 P.+ P 2 ~ Z)+_test_Add_N2_P2 =  Dict++_test_Add_P2_Z :: Dict (P 2 P.+ Z ~ P 2)+_test_Add_P2_Z =  Dict+_test_Add_P2_N1 :: Dict (P 2 P.+ N 1 ~ P 1)+_test_Add_P2_N1 =  Dict+_test_Add_P2_P1 :: Dict (P 2 P.+ P 1 ~ P 3)+_test_Add_P2_P1 =  Dict+_test_Add_P2_N2 :: Dict (P 2 P.+ N 2 ~ Z)+_test_Add_P2_N2 =  Dict+_test_Add_P2_P2 :: Dict (P 2 P.+ P 2 ~ P 4)+_test_Add_P2_P2 =  Dict++_test_Sub_Z_Z :: Dict (Z P.- Z ~ Z)+_test_Sub_Z_Z =  Dict+_test_Sub_Z_N1 :: Dict (Z P.- N 1 ~ P 1)+_test_Sub_Z_N1 =  Dict+_test_Sub_Z_P1 :: Dict (Z P.- P 1 ~ N 1)+_test_Sub_Z_P1 =  Dict+_test_Sub_Z_N2 :: Dict (Z P.- N 2 ~ P 2)+_test_Sub_Z_N2 =  Dict+_test_Sub_Z_P2 :: Dict (Z P.- P 2 ~ N 2)+_test_Sub_Z_P2 =  Dict++_test_Sub_N1_Z :: Dict (N 1 P.- Z ~ N 1)+_test_Sub_N1_Z =  Dict+_test_Sub_N1_N1 :: Dict (N 1 P.- N 1 ~ Z)+_test_Sub_N1_N1 =  Dict+_test_Sub_N1_P1 :: Dict (N 1 P.- P 1 ~ N 2)+_test_Sub_N1_P1 =  Dict+_test_Sub_N1_N2 :: Dict (N 1 P.- N 2 ~ P 1)+_test_Sub_N1_N2 =  Dict+_test_Sub_N1_P2 :: Dict (N 1 P.- P 2 ~ N 3)+_test_Sub_N1_P2 =  Dict++_test_Sub_P1_Z :: Dict (P 1 P.- Z ~ P 1)+_test_Sub_P1_Z =  Dict+_test_Sub_P1_N1 :: Dict (P 1 P.- N 1 ~ P 2)+_test_Sub_P1_N1 =  Dict+_test_Sub_P1_P1 :: Dict (P 1 P.- P 1 ~ Z)+_test_Sub_P1_P1 =  Dict+_test_Sub_P1_N2 :: Dict (P 1 P.- N 2 ~ P 3)+_test_Sub_P1_N2 =  Dict+_test_Sub_P1_P2 :: Dict (P 1 P.- P 2 ~ N 1)+_test_Sub_P1_P2 =  Dict++_test_Sub_N2_Z :: Dict (N 2 P.- Z ~ N 2)+_test_Sub_N2_Z =  Dict+_test_Sub_N2_N1 :: Dict (N 2 P.- N 1 ~ N 1)+_test_Sub_N2_N1 =  Dict+_test_Sub_N2_P1 :: Dict (N 2 P.- P 1 ~ N 3)+_test_Sub_N2_P1 =  Dict+_test_Sub_N2_N2 :: Dict (N 2 P.- N 2 ~ Z)+_test_Sub_N2_N2 =  Dict+_test_Sub_N2_P2 :: Dict (N 2 P.- P 2 ~ N 4)+_test_Sub_N2_P2 =  Dict++_test_Sub_P2_Z :: Dict (P 2 P.- Z ~ P 2)+_test_Sub_P2_Z =  Dict+_test_Sub_P2_N1 :: Dict (P 2 P.- N 1 ~ P 3)+_test_Sub_P2_N1 =  Dict+_test_Sub_P2_P1 :: Dict (P 2 P.- P 1 ~ P 1)+_test_Sub_P2_P1 =  Dict+_test_Sub_P2_N2 :: Dict (P 2 P.- N 2 ~ P 4)+_test_Sub_P2_N2 =  Dict+_test_Sub_P2_P2 :: Dict (P 2 P.- P 2 ~ Z)+_test_Sub_P2_P2 =  Dict++_test_Mul_Z_Z :: Dict (Z P.* Z ~ Z)+_test_Mul_Z_Z =  Dict+_test_Mul_Z_N1 :: Dict (Z P.* N 1 ~ Z)+_test_Mul_Z_N1 =  Dict+_test_Mul_Z_P1 :: Dict (Z P.* P 1 ~ Z)+_test_Mul_Z_P1 =  Dict+_test_Mul_Z_N2 :: Dict (Z P.* N 2 ~ Z)+_test_Mul_Z_N2 =  Dict+_test_Mul_Z_P2 :: Dict (Z P.* P 2 ~ Z)+_test_Mul_Z_P2 =  Dict++_test_Mul_N1_Z :: Dict (N 1 P.* Z ~ Z)+_test_Mul_N1_Z =  Dict+_test_Mul_N1_N1 :: Dict (N 1 P.* N 1 ~ P 1)+_test_Mul_N1_N1 =  Dict+_test_Mul_N1_P1 :: Dict (N 1 P.* P 1 ~ N 1)+_test_Mul_N1_P1 =  Dict+_test_Mul_N1_N2 :: Dict (N 1 P.* N 2 ~ P 2)+_test_Mul_N1_N2 =  Dict+_test_Mul_N1_P2 :: Dict (N 1 P.* P 2 ~ N 2)+_test_Mul_N1_P2 =  Dict++_test_Mul_P1_Z :: Dict (P 1 P.* Z ~ Z)+_test_Mul_P1_Z =  Dict+_test_Mul_P1_N1 :: Dict (P 1 P.* N 1 ~ N 1)+_test_Mul_P1_N1 =  Dict+_test_Mul_P1_P1 :: Dict (P 1 P.* P 1 ~ P 1)+_test_Mul_P1_P1 =  Dict+_test_Mul_P1_N2 :: Dict (P 1 P.* N 2 ~ N 2)+_test_Mul_P1_N2 =  Dict+_test_Mul_P1_P2 :: Dict (P 1 P.* P 2 ~ P 2)+_test_Mul_P1_P2 =  Dict++_test_Mul_N2_Z :: Dict (N 2 P.* Z ~ Z)+_test_Mul_N2_Z =  Dict+_test_Mul_N2_N1 :: Dict (N 2 P.* N 1 ~ P 2)+_test_Mul_N2_N1 =  Dict+_test_Mul_N2_P1 :: Dict (N 2 P.* P 1 ~ N 2)+_test_Mul_N2_P1 =  Dict+_test_Mul_N2_N2 :: Dict (N 2 P.* N 2 ~ P 4)+_test_Mul_N2_N2 =  Dict+_test_Mul_N2_P2 :: Dict (N 2 P.* P 2 ~ N 4)+_test_Mul_N2_P2 =  Dict++_test_Mul_P2_Z :: Dict (P 2 P.* Z ~ Z)+_test_Mul_P2_Z =  Dict+_test_Mul_P2_N1 :: Dict (P 2 P.* N 1 ~ N 2)+_test_Mul_P2_N1 =  Dict+_test_Mul_P2_P1 :: Dict (P 2 P.* P 1 ~ P 2)+_test_Mul_P2_P1 =  Dict+_test_Mul_P2_N2 :: Dict (P 2 P.* N 2 ~ N 4)+_test_Mul_P2_N2 =  Dict+_test_Mul_P2_P2 :: Dict (P 2 P.* P 2 ~ P 4)+_test_Mul_P2_P2 =  Dict++_test_Pow_Z_Z :: Dict (Z K.^ 0 ~ P 1)+_test_Pow_Z_Z =  Dict+_test_Pow_Z_1 :: Dict (Z K.^ 1 ~ Z)+_test_Pow_Z_1 =  Dict+_test_Pow_Z_2 :: Dict (Z K.^ 2 ~ Z)+_test_Pow_Z_2 =  Dict++_test_Pow_N1_0 :: Dict (N 1 K.^ 0 ~ P 1)+_test_Pow_N1_0 =  Dict+_test_Pow_N1_1 :: Dict (N 1 K.^ 1 ~ N 1)+_test_Pow_N1_1 =  Dict+_test_Pow_N1_2 :: Dict (N 1 K.^ 2 ~ P 1)+_test_Pow_N1_2 =  Dict++_test_Pow_P1_Z :: Dict (P 1 K.^ 0 ~ P 1)+_test_Pow_P1_Z =  Dict+_test_Pow_P1_P1 :: Dict (P 1 K.^ 1 ~ P 1)+_test_Pow_P1_P1 =  Dict+_test_Pow_P1_P2 :: Dict (P 1 K.^ 2 ~ P 1)+_test_Pow_P1_P2 =  Dict++_test_Pow_N2_0 :: Dict (N 2 K.^ 0 ~ P 1)+_test_Pow_N2_0 =  Dict+_test_Pow_N2_1 :: Dict (N 2 K.^ 1 ~ N 2)+_test_Pow_N2_1 =  Dict+_test_Pow_N2_2 :: Dict (N 2 K.^ 2 ~ P 4)+_test_Pow_N2_2 =  Dict++_test_Pow_P2_0 :: Dict (P 2 K.^ 0 ~ P 1)+_test_Pow_P2_0 =  Dict+_test_Pow_P2_1 :: Dict (P 2 K.^ 1 ~ P 2)+_test_Pow_P2_1 =  Dict+_test_Pow_P2_2 :: Dict (P 2 K.^ 2 ~ P 4)+_test_Pow_P2_2 =  Dict++_test_ZigZag_Z :: Dict (K.ZigZag Z ~ 0)+_test_ZigZag_Z =  Dict+_test_ZigZag_N1 :: Dict (K.ZigZag (N 1) ~ 1)+_test_ZigZag_N1 =  Dict+_test_ZigZag_P1 :: Dict (K.ZigZag (P 1) ~ 2)+_test_ZigZag_P1 =  Dict+_test_ZigZag_N2 :: Dict (K.ZigZag (N 2) ~ 3)+_test_ZigZag_N2 =  Dict+_test_ZigZag_P2 :: Dict (K.ZigZag (P 2) ~ 4)+_test_ZigZag_P2 =  Dict++_test_ZagZig_Z :: Dict (K.ZagZig 0 ~ Z)+_test_ZagZig_Z =  Dict+_test_ZagZig_N1 :: Dict (K.ZagZig 1 ~ N 1)+_test_ZagZig_N1 =  Dict+_test_ZagZig_P1 :: Dict (K.ZagZig 2 ~ P 1)+_test_ZagZig_P1 =  Dict+_test_ZagZig_N2 :: Dict (K.ZagZig 3 ~ N 2)+_test_ZagZig_N2 =  Dict+_test_ZagZig_P2 :: Dict (K.ZagZig 4 ~ P 2)+_test_ZagZig_P2 =  Dict++_test_FromNatural_0 :: Dict (K.FromNatural 0 ~ Z)+_test_FromNatural_0 =  Dict+_test_FromNatural_1 :: Dict (K.FromNatural 1 ~ P 1)+_test_FromNatural_1 =  Dict+_test_FromNatural_2 :: Dict (K.FromNatural 2 ~ P 2)+_test_FromNatural_2 =  Dict++_test_Normalized_Z :: Dict (K.Normalized Z ~ Z)+_test_Normalized_Z =  Dict+_test_Normalized_N1 :: Dict (K.Normalized (N 1) ~ N 1)+_test_Normalized_N1 =  Dict+_test_Normalized_N2 :: Dict (K.Normalized (N 2) ~ N 2)+_test_Normalized_N2 =  Dict+_test_Normalized_P1 :: Dict (K.Normalized (P 1) ~ P 1)+_test_Normalized_P1 =  Dict+_test_Normalized_P2 :: Dict (K.Normalized (P 2) ~ P 2)+_test_Normalized_P2 =  Dict++_test_KnownInteger_Z :: Dict (K.KnownInteger Z)+_test_KnownInteger_Z =  Dict+_test_KnownInteger_N1 :: Dict (K.KnownInteger (N 1))+_test_KnownInteger_N1 =  Dict+_test_KnownInteger_N2 :: Dict (K.KnownInteger (N 2))+_test_KnownInteger_N2 =  Dict+_test_KnownInteger_P1 :: Dict (K.KnownInteger (P 1))+_test_KnownInteger_P1 =  Dict+_test_KnownInteger_P2 :: Dict (K.KnownInteger (P 2))+_test_KnownInteger_P2 =  Dict