| Copyright | (c) 2011 Daniel Fischer |
|---|---|
| License | MIT |
| Maintainer | Daniel Fischer <daniel.is.fischer@googlemail.com> |
| Stability | Provisional |
| Portability | Non-portable (GHC extensions) |
| Safe Haskell | None |
| Language | Haskell2010 |
Math.NumberTheory.Primes.Testing.Certificates
Contents
Description
Certificates for primality or compositeness.
- data Certificate
- argueCertificate :: Certificate -> Either CompositenessArgument PrimalityArgument
- data CompositenessProof
- composite :: CompositenessProof -> Integer
- data PrimalityProof
- cprime :: PrimalityProof -> Integer
- data CompositenessArgument
- data PrimalityArgument
- = Pock {
- aprime :: Integer
- largeFactor :: Integer
- smallFactor :: Integer
- factorList :: [(Integer, Int, Integer, PrimalityArgument)]
- | Division { }
- | Obvious { }
- | Assumption { }
- = Pock {
- arguePrimality :: PrimalityProof -> PrimalityArgument
- argueCompositeness :: CompositenessProof -> CompositenessArgument
- verifyPrimalityArgument :: PrimalityArgument -> Maybe PrimalityProof
- verifyCompositenessArgument :: CompositenessArgument -> Maybe CompositenessProof
- certify :: Integer -> Certificate
- checkCertificate :: Certificate -> Bool
- checkCompositenessProof :: CompositenessProof -> Bool
- checkPrimalityProof :: PrimalityProof -> Bool
Certificates
data Certificate Source
A certificate of either compositeness or primality of an
Integer. Only numbers > 1 can be certified, trying to
create a certificate for other numbers raises an error.
Constructors
| Composite !CompositenessProof | |
| Prime !PrimalityProof |
Instances
data CompositenessProof Source
A proof of compositeness of a positive number. The type is abstract to ensure the validity of proofs.
Instances
composite :: CompositenessProof -> Integer Source
The number whose compositeness is proved.
data PrimalityProof Source
A proof of primality of a positive number. The type is abstract to ensure the validity of proofs.
Instances
cprime :: PrimalityProof -> Integer Source
The number whose primality is proved.
Arguments
data CompositenessArgument Source
An argument for compositeness of a number (which must be > 1).
CompositenessProofs translate directly to CompositenessArguments,
correct arguments can be transformed into proofs. This type allows the
manipulation of proofs while maintaining their correctness.
The only way to access components of a CompositenessProof except
the composite is through this type.
Constructors
| Divisors |
|
Fields
| |
| Fermat |
|
Fields
| |
| Lucas |
|
| Belief | No particular reason given |
data PrimalityArgument Source
An argument for primality of a number (which must be > 1).
PrimalityProofs translate directly to PrimalityArguments,
correct arguments can be transformed into proofs. This type allows the
manipulation of proofs while maintaining their correctness.
The only way to access components of a PrimalityProof except
the prime is through this type.
Constructors
| Pock | A suggested Pocklington certificate |
Fields
| |
| Division | Primality should be provable by trial division to |
| Obvious |
|
| Assumption | Primality assumed |
Weaken proofs to arguments
arguePrimality :: PrimalityProof -> PrimalityArgument Source
transforms a proof of primality into an argument for primality.arguePrimality
argueCompositeness :: CompositenessProof -> CompositenessArgument Source
transforms a proof of compositeness into an argument
for compositeness.argueCompositeness
Prove valid arguments
verifyPrimalityArgument :: PrimalityArgument -> Maybe PrimalityProof Source
checks the given argument and constructs a proof from
it, if it is valid. For the explicit arguments, this is simple and resonably fast,
for an verifyPrimalityArgumentAssumption, the verification uses certify and hence may take a long time.
verifyCompositenessArgument :: CompositenessArgument -> Maybe CompositenessProof Source
checks the given argument and constructs a proof from
it, if it is valid. For the explicit arguments, this is simple and resonably fast,
for a verifyCompositenessArgumentBelief, the verification uses certify and hence may take a long time.
Determine and prove whether a number is prime or composite
certify :: Integer -> Certificate Source
constructs, for certify nn > 1, a proof of either
primality or compositeness of n. This may take a very long
time if the number has no small(ish) prime divisors
Checks for the paranoid
checkCertificate :: Certificate -> Bool Source
Check the validity of a Certificate. Since it should be impossible
to construct invalid certificates by the public interface, this should
never return False.
checkCompositenessProof :: CompositenessProof -> Bool Source
Check the validity of a CompositenessProof. Since it should be
impossible to create invalid proofs by the public interface, this
should never return False.
checkPrimalityProof :: PrimalityProof -> Bool Source
Check the validity of a PrimalityProof. Since it should be
impossible to create invalid proofs by the public interface, this
should never return False.