Safe Haskell | Trustworthy |
---|---|
Language | Haskell2010 |
Data.Constraint.Nat
Description
Utilities for working with KnownNat
constraints.
This module is only available on GHC 8.0 or later.
Documentation
plusAssociates :: forall m n o. Dict (((m + n) + o) ~ (m + (n + o))) #
timesAssociates :: forall m n o. Dict (((m * n) * o) ~ (m * (n * o))) #
plusCommutes :: forall n m. Dict ((m + n) ~ (n + m)) #
timesCommutes :: forall n m. Dict ((m * n) ~ (n * m)) #
minCommutes :: forall n m. Dict (Min m n ~ Min n m) #
maxCommutes :: forall n m. Dict (Max m n ~ Max n m) #
gcdCommutes :: forall a b. Dict (Gcd a b ~ Gcd b a) #
lcmCommutes :: forall a b. Dict (Lcm a b ~ Lcm b a) #
plusDistributesOverTimes :: forall n m o. Dict ((n * (m + o)) ~ ((n * m) + (n * o))) #
timesDistributesOverPow :: forall n m o. Dict ((n ^ (m + o)) ~ ((n ^ m) * (n ^ o))) #
timesDistributesOverGcd :: forall n m o. Dict ((n * Gcd m o) ~ Gcd (n * m) (n * o)) #
timesDistributesOverLcm :: forall n m o. Dict ((n * Lcm m o) ~ Lcm (n * m) (n * o)) #
minDistributesOverPlus :: forall n m o. Dict ((n + Min m o) ~ Min (n + m) (n + o)) #
minDistributesOverTimes :: forall n m o. Dict ((n * Min m o) ~ Min (n * m) (n * o)) #
minDistributesOverPow1 :: forall n m o. Dict ((Min n m ^ o) ~ Min (n ^ o) (m ^ o)) #
minDistributesOverPow2 :: forall n m o. Dict ((n ^ Min m o) ~ Min (n ^ m) (n ^ o)) #
maxDistributesOverPlus :: forall n m o. Dict ((n + Max m o) ~ Max (n + m) (n + o)) #
maxDistributesOverTimes :: forall n m o. Dict ((n * Max m o) ~ Max (n * m) (n * o)) #
maxDistributesOverPow1 :: forall n m o. Dict ((Max n m ^ o) ~ Max (n ^ o) (m ^ o)) #
maxDistributesOverPow2 :: forall n m o. Dict ((n ^ Max m o) ~ Max (n ^ m) (n ^ o)) #
minIsIdempotent :: forall n. Dict (Min n n ~ n) #
maxIsIdempotent :: forall n. Dict (Max n n ~ n) #
lcmIsIdempotent :: forall n. Dict (Lcm n n ~ n) #
gcdIsIdempotent :: forall n. Dict (Gcd n n ~ n) #
plusIsCancellative :: forall n m o. ((n + m) ~ (n + o)) :- (m ~ o) #
timesIsCancellative :: forall n m o. (1 <= n, (n * m) ~ (n * o)) :- (m ~ o) #
dividesTimes :: Divides a b :- Divides a (b * c) #
dividesPow :: (1 <= n, Divides a b) :- Divides a (b ^ n) #
plusMonotone1 :: forall a b c. (a <= b) :- ((a + c) <= (b + c)) #
plusMonotone2 :: forall a b c. (b <= c) :- ((a + b) <= (a + c)) #
timesMonotone1 :: forall a b c. (a <= b) :- ((a * c) <= (b * c)) #
timesMonotone2 :: forall a b c. (b <= c) :- ((a * b) <= (a * c)) #
powMonotone1 :: forall a b c. (a <= b) :- ((a ^ c) <= (b ^ c)) #
powMonotone2 :: forall a b c. (b <= c) :- ((a ^ b) <= (a ^ c)) #
minMonotone1 :: forall a b c. (a <= b) :- (Min a c <= Min b c) #
minMonotone2 :: forall a b c. (b <= c) :- (Min a b <= Min a c) #
maxMonotone1 :: forall a b c. (a <= b) :- (Max a c <= Max b c) #
maxMonotone2 :: forall a b c. (b <= c) :- (Max a b <= Max a c) #
divMonotone1 :: forall a b c. (a <= b) :- (Div a c <= Div b c) #
divMonotone2 :: forall a b c. (b <= c) :- (Div a c <= Div a b) #
euclideanNat :: (1 <= c) :- (a ~ ((c * Div a c) + Mod a c)) #
dividesDef :: forall a b. Divides a b :- (Mod b a ~ 0) #
plusMinusInverse1 :: forall n m. Dict (((m + n) - n) ~ m) #
plusMinusInverse2 :: forall n m. (m <= n) :- (((m + n) - m) ~ n) #
plusMinusInverse3 :: forall n m. (n <= m) :- (((m - n) + n) ~ m) #