Copyright | (c) 2013-2016 Galois Inc. |
---|---|
License | BSD3 |
Maintainer | cryptol@galois.com |
Stability | provisional |
Portability | portable |
Safe Haskell | Safe |
Language | Haskell2010 |
Cryptol.TypeCheck.Solver.InfNat
Description
This module defines natural numbers with an additional infinity element, and various arithmetic operators on them.
Synopsis
- data Nat'
- fromNat :: Nat' -> Maybe Integer
- nAdd :: Nat' -> Nat' -> Nat'
- nMul :: Nat' -> Nat' -> Nat'
- nExp :: Nat' -> Nat' -> Nat'
- nMin :: Nat' -> Nat' -> Nat'
- nMax :: Nat' -> Nat' -> Nat'
- nSub :: Nat' -> Nat' -> Maybe Nat'
- nDiv :: Nat' -> Nat' -> Maybe Nat'
- nMod :: Nat' -> Nat' -> Maybe Nat'
- nCeilDiv :: Nat' -> Nat' -> Maybe Nat'
- nCeilMod :: Nat' -> Nat' -> Maybe Nat'
- nLg2 :: Nat' -> Nat'
- nWidth :: Nat' -> Nat'
- nLenFromThenTo :: Nat' -> Nat' -> Nat' -> Maybe Nat'
- genLog :: Integer -> Integer -> Maybe (Integer, Bool)
- widthInteger :: Integer -> Integer
- rootExact :: Integer -> Integer -> Maybe Integer
- genRoot :: Integer -> Integer -> Maybe (Integer, Bool)
Documentation
Natural numbers with an infinity element
Instances
Generic Nat' Source # | |
Show Nat' Source # | |
NFData Nat' Source # | |
Defined in Cryptol.TypeCheck.Solver.InfNat | |
Eq Nat' Source # | |
Ord Nat' Source # | |
type Rep Nat' Source # | |
Defined in Cryptol.TypeCheck.Solver.InfNat type Rep Nat' = D1 ('MetaData "Nat'" "Cryptol.TypeCheck.Solver.InfNat" "cryptol-3.3.0-7OIQa8lMv7L2xoAlM9JEI6" 'False) (C1 ('MetaCons "Nat" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Integer)) :+: C1 ('MetaCons "Inf" 'PrefixI 'False) (U1 :: Type -> Type)) |
nMul :: Nat' -> Nat' -> Nat' Source #
Some algebraic properties of interest:
1 * x = x x * (y * z) = (x * y) * z 0 * x = 0 x * y = y * x x * (a + b) = x * a + x * b
nExp :: Nat' -> Nat' -> Nat' Source #
Some algebraic properties of interest:
x ^ 0 = 1 x ^ (n + 1) = x * (x ^ n) x ^ (m + n) = (x ^ m) * (x ^ n) x ^ (m * n) = (x ^ m) ^ n
nSub :: Nat' -> Nat' -> Maybe Nat' Source #
nSub x y = Just z
iff z
is the unique value
such that Add y z = Just x
.
nCeilDiv :: Nat' -> Nat' -> Maybe Nat' Source #
nCeilDiv msgLen blockSize
computes the least n
such that
msgLen <= blockSize * n
. It is undefined when blockSize = 0
,
or when blockSize = inf
. inf
divided by any positive
finite value is inf
.
nCeilMod :: Nat' -> Nat' -> Maybe Nat' Source #
nCeilMod msgLen blockSize
computes the least k
such that
blockSize
divides msgLen + k
. It is undefined when blockSize = 0
or blockSize = inf
. inf
modulus any positive finite value is 0
.
Rounds up.
lg2 x = y
, iff y
is the smallest number such that x <= 2 ^ y
nWidth :: Nat' -> Nat' Source #
nWidth n
is number of bits needed to represent all numbers
from 0 to n, inclusive. nWidth x = nLg2 (x + 1)
.
genLog :: Integer -> Integer -> Maybe (Integer, Bool) Source #
Compute the logarithm of a number in the given base, rounded down to the closest integer. The boolean indicates if we the result is exact (i.e., True means no rounding happened, False means we rounded down). The logarithm base is the second argument.
widthInteger :: Integer -> Integer Source #
Compute the number of bits required to represent the given integer.
rootExact :: Integer -> Integer -> Maybe Integer Source #
Compute the exact root of a natural number. The second argument specifies which root we are computing.
genRoot :: Integer -> Integer -> Maybe (Integer, Bool) Source #
Compute the the n-th root of a natural number, rounded down to the closest natural number. The boolean indicates if the result is exact (i.e., True means no rounding was done, False means rounded down). The second argument specifies which root we are computing.