module Test.Abides.Data.EuclideanRing where


integralDomain :: Num a => Eq a => a -> a -> Bool
integralDomain x y = if x /= 0 && y /= 0 then x * y /= 0 else True


-- nonnegative :: Num a => Eq a => a -> Bool
-- nonnegative x = if x /= 0 then degree x >= 0 else True


-- quotientRemainder :: Num a => Eq a => a -> a -> Bool
-- quotientRemainder x y =
--   if y /= 0
--     then
--       let q = x / y
--           r = x `mod` y
--       in  (x == q * y + r) && ((r == 0) || (degree r < degree y))
--     else True


-- submultiplicative :: Num a => Eq a => a -> a -> Bool
-- submultiplicative x y =
--   if x /= 0 && y /= 0
--     then degree x <= degree (x * y)
--     else True