constructive-algebra-0.1: src/Algebra/Structures/IntegralDomain.hs
module Algebra.Structures.IntegralDomain
( module Algebra.Structures.CommutativeRing
, IntegralDomain
, propIntegralDomain
) where
import Test.QuickCheck
import Algebra.Structures.Ring
import Algebra.Structures.CommutativeRing
-------------------------------------------------------------------------------
-- | Definition of integral domains
class CommutativeRing a => IntegralDomain a
-- An integral domain is a ring in which there are no zero divisors.
propZeroDivisors :: (IntegralDomain a, Eq a) => a -> a -> Bool
propZeroDivisors a b = if a <*> b == zero then a == zero || b == zero else True
-- | Specification of commutative rings. Test that there are no zero-divisors
-- commutative and that it satisfies the axioms of commutative rings.
propIntegralDomain :: (IntegralDomain a, Eq a) => a -> a -> a -> Property
propIntegralDomain a b c = if propZeroDivisors a b
then propCommutativeRing a b c
else whenFail (print "propZeroDivisors") False