Portability | Non-portable (GHC extensions) |
---|---|
Stability | Provisional |
Maintainer | Daniel Fischer <daniel.is.fischer@googlemail.com> |
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.
data CompositenessProof Source
A proof of compositeness of a positive number. The type is abstract to ensure the validity of proofs.
composite :: CompositenessProof -> IntegerSource
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.
cprime :: PrimalityProof -> IntegerSource
The number whose primality is proved.
Arguments
data CompositenessArgument Source
An argument for compositeness of a number (which must be > 1
).
CompositenessProof
s 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.
Divisors |
|
| |
Fermat |
|
| |
Lucas |
|
Belief | No particular reason given |
data PrimalityArgument Source
An argument for primality of a number (which must be > 1
).
PrimalityProof
s 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.
Pock | A suggested Pocklington certificate |
| |
Division | Primality should be provable by trial division to |
Obvious |
|
Assumption | Primality assumed |
Weaken proofs to arguments
arguePrimality :: PrimalityProof -> PrimalityArgumentSource
transforms a proof of primality into an argument for primality.
arguePrimality
argueCompositeness :: CompositenessProof -> CompositenessArgumentSource
transforms a proof of compositeness into an argument
for compositeness.
argueCompositeness
Prove valid arguments
verifyPrimalityArgument :: PrimalityArgument -> Maybe PrimalityProofSource
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 verifyPrimalityArgument
Assumption
, the verification uses certify
and hence may take a long time.
verifyCompositenessArgument :: CompositenessArgument -> Maybe CompositenessProofSource
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 verifyCompositenessArgument
Belief
, the verification uses certify
and hence may take a long time.
Determine and prove whether a number is prime or composite
certify :: Integer -> CertificateSource
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 -> BoolSource
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 -> BoolSource
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 -> BoolSource
Check the validity of a PrimalityProof
. Since it should be
impossible to create invalid proofs by the public interface, this
should never return False
.