arithmoi-0.9.0.0: Efficient basic number-theoretic functions.

Copyright(c) 2011 Daniel Fischer
LicenseMIT
MaintainerDaniel Fischer <daniel.is.fischer@googlemail.com>
Safe HaskellNone
LanguageHaskell2010

Math.NumberTheory.Primes.Testing.Certificates

Contents

Description

Certificates for primality or compositeness.

Synopsis

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 -> 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.

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

compo == firstDiv*secondDiv, where all are > 1

Fermat

compo fails the strong Fermat test for fermatBase

Lucas

compo fails the Lucas-Selfridge test

Fields

Belief

No particular reason given

Fields

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

Division

Primality should be provable by trial division to alimit

Fields

Obvious

aprime is said to be obviously prime, that holds for primes < 30

Fields

Assumption

Primality assumed

Fields

Weaken proofs to arguments

arguePrimality :: PrimalityProof -> PrimalityArgument Source #

arguePrimality transforms a proof of primality into an argument for primality.

argueCompositeness :: CompositenessProof -> CompositenessArgument Source #

argueCompositeness transforms a proof of compositeness into an argument for compositeness.

Prove valid arguments

verifyPrimalityArgument :: PrimalityArgument -> Maybe PrimalityProof Source #

verifyPrimalityArgument 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 Assumption, the verification uses certify and hence may take a long time.

verifyCompositenessArgument :: CompositenessArgument -> Maybe CompositenessProof Source #

verifyCompositenessArgument 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 Belief, 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 #

certify n constructs, for n > 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.