module Test.QuickCheck.Classes.Monoid.GCD
( gcdMonoidLaws
, cancellativeGCDMonoidLaws
, leftGCDMonoidLaws
, rightGCDMonoidLaws
, overlappingGCDMonoidLaws
)
where
import Prelude hiding
( gcd )
import Data.Function
( (&) )
import Data.Maybe
( isJust, isNothing )
import Data.Monoid.GCD
( GCDMonoid (..)
, LeftGCDMonoid (..)
, OverlappingGCDMonoid (..)
, RightGCDMonoid (..)
)
import Data.Proxy
( Proxy (..) )
import Data.Semigroup.Cancellative
( Cancellative, LeftReductive (..), Reductive (..), RightReductive (..) )
import Internal
( cover, makeLaw1, makeLaw2, makeLaw3, makeProperty, report, (==>) )
import Test.QuickCheck
( Arbitrary (..), Property )
import Test.QuickCheck.Classes
( Laws (..) )
cancellativeGCDMonoidLaws
:: forall a. (Arbitrary a, Show a, Eq a, Cancellative a, GCDMonoid a)
=> Proxy a
-> Laws
cancellativeGCDMonoidLaws :: forall a.
(Arbitrary a, Show a, Eq a, Cancellative a, GCDMonoid a) =>
Proxy a -> Laws
cancellativeGCDMonoidLaws Proxy a
_ = String -> [(String, Property)] -> Laws
Laws String
"CancellativeGCDMonoid"
[ forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"cancellativeGCDMonoidLaw_prefix"
(forall a.
(Eq a, Show a, Cancellative a, GCDMonoid a) =>
a -> a -> a -> Property
cancellativeGCDMonoidLaw_prefix)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"cancellativeGCDMonoidLaw_suffix"
(forall a.
(Eq a, Show a, Cancellative a, GCDMonoid a) =>
a -> a -> a -> Property
cancellativeGCDMonoidLaw_suffix)
]
cancellativeGCDMonoidLaw_prefix
:: (Eq a, Show a, Cancellative a, GCDMonoid a) => a -> a -> a -> Property
cancellativeGCDMonoidLaw_prefix :: forall a.
(Eq a, Show a, Cancellative a, GCDMonoid a) =>
a -> a -> a -> Property
cancellativeGCDMonoidLaw_prefix a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd (a <> b) (a <> c) == a <> gcd b c"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
b) (a
a forall a. Semigroup a => a -> a -> a
<> a
c) forall a. Eq a => a -> a -> Bool
== a
a forall a. Semigroup a => a -> a -> a
<> forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> b"
(a
a forall a. Semigroup a => a -> a -> a
<> a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> c"
(a
a forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd (a <> b) (a <> c)"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
b) (a
a forall a. Semigroup a => a -> a -> a
<> a
c))
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd b c"
(forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> gcd b c"
(a
a forall a. Semigroup a => a -> a -> a
<> forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty && gcd b c /= mempty && a /= gcd b c"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
a forall a. Eq a => a -> a -> Bool
/= forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
cancellativeGCDMonoidLaw_suffix
:: (Eq a, Show a, Cancellative a, GCDMonoid a) => a -> a -> a -> Property
cancellativeGCDMonoidLaw_suffix :: forall a.
(Eq a, Show a, Cancellative a, GCDMonoid a) =>
a -> a -> a -> Property
cancellativeGCDMonoidLaw_suffix a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd (a <> c) (b <> c) == gcd a b <> c"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
c) (a
b forall a. Semigroup a => a -> a -> a
<> a
c) forall a. Eq a => a -> a -> Bool
== forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> c"
(a
a forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"b <> c"
(a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd (a <> c) (b <> c)"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
c) (a
b forall a. Semigroup a => a -> a -> a
<> a
c))
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b <> c"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"c /= mempty && gcd a b /= mempty && c /= gcd a b"
(a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
c forall a. Eq a => a -> a -> Bool
/= forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
gcdMonoidLaws
:: forall a. (Arbitrary a, Show a, Eq a, GCDMonoid a)
=> Proxy a
-> Laws
gcdMonoidLaws :: forall a.
(Arbitrary a, Show a, Eq a, GCDMonoid a) =>
Proxy a -> Laws
gcdMonoidLaws Proxy a
_ = String -> [(String, Property)] -> Laws
Laws String
"GCDMonoid"
[ forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"gcdMonoidLaw_reductivity_left"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_reductivity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"gcdMonoidLaw_reductivity_right"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_reductivity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"gcdMonoidLaw_uniqueness"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_uniqueness)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"gcdMonoidLaw_idempotence"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_idempotence)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"gcdMonoidLaw_identity_left"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_identity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"gcdMonoidLaw_identity_right"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_identity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"gcdMonoidLaw_commutativity"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_commutativity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"gcdMonoidLaw_associativity"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_associativity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"gcdMonoidLaw_distributivity_left"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_distributivity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"gcdMonoidLaw_distributivity_right"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_distributivity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"gcdMonoidLaw_equivalence_commonPrefix"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_equivalence_commonPrefix)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"gcdMonoidLaw_equivalence_commonSuffix"
(forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_equivalence_commonSuffix)
]
gcdMonoidLaw_reductivity_left
:: (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_reductivity_left :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_reductivity_left a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"isJust (a </> gcd a b)"
(forall a. Maybe a -> Bool
isJust (a
a forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"(a </> gcd a b) /= mempty"
((a
a forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b) forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a </> gcd a b"
(a
a forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
gcdMonoidLaw_reductivity_right
:: (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_reductivity_right :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_reductivity_right a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"isJust (b </> gcd a b)"
(forall a. Maybe a -> Bool
isJust (a
b forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"(b </> gcd a b) /= mempty"
((a
b forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b) forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"b </> gcd a b"
(a
b forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
gcdMonoidLaw_uniqueness
:: (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_uniqueness :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_uniqueness a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"all isJust [a </> c, b </> c, c </> gcd a b] ==> (c == gcd a b)"
(forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust [a
a forall m. Reductive m => m -> m -> Maybe m
</> a
c, a
b forall m. Reductive m => m -> m -> Maybe m
</> a
c, a
c forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b] Bool -> Bool -> Bool
==> (a
c forall a. Eq a => a -> a -> Bool
== forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"all isJust [a </> c, b </> c, c </> gcd a b]"
(forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust [a
a forall m. Reductive m => m -> m -> Maybe m
</> a
c, a
b forall m. Reductive m => m -> m -> Maybe m
</> a
c, a
c forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b])
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"not (all isJust [a </> c, b </> c, c </> gcd a b])"
(Bool -> Bool
not (forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust [a
a forall m. Reductive m => m -> m -> Maybe m
</> a
c, a
b forall m. Reductive m => m -> m -> Maybe m
</> a
c, a
c forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b]))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"c == gcd a b"
(a
c forall a. Eq a => a -> a -> Bool
== forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"c /= gcd a b"
(a
c forall a. Eq a => a -> a -> Bool
/= forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"c </> gcd a b"
(a
c forall m. Reductive m => m -> m -> Maybe m
</> forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a </> c"
(a
a forall m. Reductive m => m -> m -> Maybe m
</> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"b </> c"
(a
b forall m. Reductive m => m -> m -> Maybe m
</> a
c)
gcdMonoidLaw_idempotence
:: (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_idempotence :: forall a. (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_idempotence a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd a a == a"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
a forall a. Eq a => a -> a -> Bool
== a
a)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a a"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
a)
gcdMonoidLaw_identity_left
:: (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_identity_left :: forall a. (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_identity_left a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd mempty a == mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd forall a. Monoid a => a
mempty a
a forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd mempty a"
(forall m. GCDMonoid m => m -> m -> m
gcd forall a. Monoid a => a
mempty a
a)
gcdMonoidLaw_identity_right
:: (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_identity_right :: forall a. (Eq a, Show a, GCDMonoid a) => a -> Property
gcdMonoidLaw_identity_right a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd a mempty == mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a forall a. Monoid a => a
mempty forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a forall a. Monoid a => a
mempty)
gcdMonoidLaw_commutativity
:: (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_commutativity :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_commutativity a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd a b == gcd b a"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
== forall m. GCDMonoid m => m -> m -> m
gcd a
b a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b == mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd b a"
(forall m. GCDMonoid m => m -> m -> m
gcd a
b a
a)
gcdMonoidLaw_associativity
:: (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_associativity :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_associativity a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd (gcd a b) c == gcd a (gcd b c)"
(forall m. GCDMonoid m => m -> m -> m
gcd (forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b) a
c forall a. Eq a => a -> a -> Bool
== forall m. GCDMonoid m => m -> m -> m
gcd a
a (forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd b c /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd (gcd a b) c"
(forall m. GCDMonoid m => m -> m -> m
gcd (forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b) a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd b c"
(forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a (gcd b c)"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a (forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c))
gcdMonoidLaw_distributivity_left
:: (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_distributivity_left :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_distributivity_left a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd (a <> b) (a <> c) == a <> gcd b c"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
b) (a
a forall a. Semigroup a => a -> a -> a
<> a
c) forall a. Eq a => a -> a -> Bool
== a
a forall a. Semigroup a => a -> a -> a
<> forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> b"
(a
a forall a. Semigroup a => a -> a -> a
<> a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> c"
(a
a forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd (a <> b) (a <> c)"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
b) (a
a forall a. Semigroup a => a -> a -> a
<> a
c))
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd b c"
(forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> gcd b c"
(a
a forall a. Semigroup a => a -> a -> a
<> forall m. GCDMonoid m => m -> m -> m
gcd a
b a
c)
gcdMonoidLaw_distributivity_right
:: (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_distributivity_right :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> a -> Property
gcdMonoidLaw_distributivity_right a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd (a <> c) (b <> c) == gcd a b <> c"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
c) (a
b forall a. Semigroup a => a -> a -> a
<> a
c) forall a. Eq a => a -> a -> Bool
== forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> c"
(a
a forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"b <> c"
(a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd (a <> c) (b <> c)"
(forall m. GCDMonoid m => m -> m -> m
gcd (a
a forall a. Semigroup a => a -> a -> a
<> a
c) (a
b forall a. Semigroup a => a -> a -> a
<> a
c))
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b <> c"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Semigroup a => a -> a -> a
<> a
c)
gcdMonoidLaw_equivalence_commonPrefix
:: (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_equivalence_commonPrefix :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_equivalence_commonPrefix a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd a b == commonPrefix a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
== forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a b /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
gcdMonoidLaw_equivalence_commonSuffix
:: (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_equivalence_commonSuffix :: forall a. (Eq a, Show a, GCDMonoid a) => a -> a -> Property
gcdMonoidLaw_equivalence_commonSuffix a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"gcd a b == commonSuffix a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
== forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"gcd a b /= mempty"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"gcd a b"
(forall m. GCDMonoid m => m -> m -> m
gcd a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
leftGCDMonoidLaws
:: forall a. (Arbitrary a, Show a, Eq a, LeftGCDMonoid a)
=> Proxy a
-> Laws
leftGCDMonoidLaws :: forall a.
(Arbitrary a, Show a, Eq a, LeftGCDMonoid a) =>
Proxy a -> Laws
leftGCDMonoidLaws Proxy a
_ = String -> [(String, Property)] -> Laws
Laws String
"LeftGCDMonoid"
[ forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_reductivity_left"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_reductivity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_reductivity_right"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_reductivity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_uniqueness"
(forall a.
(Eq a, Show a, LeftGCDMonoid a) =>
a -> a -> a -> Property
leftGCDMonoidLaw_uniqueness)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"leftGCDMonoidLaw_idempotence"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_idempotence)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"leftGCDMonoidLaw_identity_left"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_identity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"leftGCDMonoidLaw_identity_right"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_identity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_commutativity"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_commutativity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"leftGCDMonoidLaw_associativity"
(forall a.
(Eq a, Show a, LeftGCDMonoid a) =>
a -> a -> a -> Property
leftGCDMonoidLaw_associativity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"leftGCDMonoidLaw_distributivity"
(forall a.
(Eq a, Show a, LeftGCDMonoid a) =>
a -> a -> a -> Property
leftGCDMonoidLaw_distributivity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_stripCommonPrefix_commonPrefix"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_commonPrefix)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_stripCommonPrefix_mappend_1"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_mappend_1)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_stripCommonPrefix_mappend_2"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_mappend_2)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_1"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_1)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_2"
(forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_2)
]
leftGCDMonoidLaw_reductivity_left
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_reductivity_left :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_reductivity_left a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"isJust (stripPrefix (commonPrefix a b) a)"
(forall a. Maybe a -> Bool
isJust (forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
a))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a b /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripPrefix (commonPrefix a b) a /= mempty"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefix (commonPrefix a b) a"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
a)
leftGCDMonoidLaw_reductivity_right
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_reductivity_right :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_reductivity_right a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"isJust (stripPrefix (commonPrefix a b) b)"
(forall a. Maybe a -> Bool
isJust (forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
b))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a b /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripPrefix (commonPrefix a b) b /= mempty"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefix (commonPrefix a b) b"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
b)
leftGCDMonoidLaw_uniqueness
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> a -> Property
leftGCDMonoidLaw_uniqueness :: forall a.
(Eq a, Show a, LeftGCDMonoid a) =>
a -> a -> a -> Property
leftGCDMonoidLaw_uniqueness a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"antecedent ==> consequent"
(Bool
antecedent Bool -> Bool -> Bool
==> Bool
consequent)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"antecedent == True"
(Bool
antecedent forall a. Eq a => a -> a -> Bool
== Bool
True)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"antecedent == False"
(Bool
antecedent forall a. Eq a => a -> a -> Bool
== Bool
False)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"consequent == True"
(Bool
consequent forall a. Eq a => a -> a -> Bool
== Bool
True)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"consequent == False"
(Bool
consequent forall a. Eq a => a -> a -> Bool
== Bool
False)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefix c a"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
c a
a)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefix c b"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
c a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefix (commonPrefix a b) c"
(forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
c)
where
antecedent :: Bool
antecedent =
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust
[ forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
c a
a
, forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
c a
b
, forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
c
]
consequent :: Bool
consequent =
a
c forall a. Eq a => a -> a -> Bool
== forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b
leftGCDMonoidLaw_idempotence
:: (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_idempotence :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_idempotence a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonPrefix a a == a"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
a forall a. Eq a => a -> a -> Bool
== a
a)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a a"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
a)
leftGCDMonoidLaw_identity_left
:: (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_identity_left :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_identity_left a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonPrefix mempty a == mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix forall a. Monoid a => a
mempty a
a forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix mempty a"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix forall a. Monoid a => a
mempty a
a)
leftGCDMonoidLaw_identity_right
:: (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_identity_right :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> Property
leftGCDMonoidLaw_identity_right a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonPrefix a mempty == mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a forall a. Monoid a => a
mempty forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a forall a. Monoid a => a
mempty)
leftGCDMonoidLaw_commutativity
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_commutativity :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_commutativity a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonPrefix a b == commonPrefix b a"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
== forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a b == mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a b /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix b a"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
a)
leftGCDMonoidLaw_associativity
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> a -> Property
leftGCDMonoidLaw_associativity :: forall a.
(Eq a, Show a, LeftGCDMonoid a) =>
a -> a -> a -> Property
leftGCDMonoidLaw_associativity a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonPrefix (commonPrefix a b) c == commonPrefix a (commonPrefix b c)"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
c forall a. Eq a => a -> a -> Bool
== forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix (commonPrefix a b) c /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a (commonPrefix b c) /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c) forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix (commonPrefix a b) c"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b) a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix b c"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a (commonPrefix b c)"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a (forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c))
leftGCDMonoidLaw_distributivity
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> a -> Property
leftGCDMonoidLaw_distributivity :: forall a.
(Eq a, Show a, LeftGCDMonoid a) =>
a -> a -> a -> Property
leftGCDMonoidLaw_distributivity a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonPrefix (a <> b) (a <> c) == a <> commonPrefix b c"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix (a
a forall a. Semigroup a => a -> a -> a
<> a
b) (a
a forall a. Semigroup a => a -> a -> a
<> a
c) forall a. Eq a => a -> a -> Bool
== a
a forall a. Semigroup a => a -> a -> a
<> forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix b c /= mempty && a /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> b"
(a
a forall a. Semigroup a => a -> a -> a
<> a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> c"
(a
a forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix (a <> b) (a <> c)"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix (a
a forall a. Semigroup a => a -> a -> a
<> a
b) (a
a forall a. Semigroup a => a -> a -> a
<> a
c))
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix b c"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> commonPrefix b c"
(a
a forall a. Semigroup a => a -> a -> a
<> forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
b a
c)
leftGCDMonoidLaw_stripCommonPrefix_commonPrefix
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_commonPrefix :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_commonPrefix a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonPrefix a b & λ(p, _, _) -> p == commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
_) -> a
p forall a. Eq a => a -> a -> Bool
== forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonPrefix a b /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> m
commonPrefix a
a a
b)
leftGCDMonoidLaw_stripCommonPrefix_mappend_1
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_mappend_1 :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_mappend_1 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonPrefix a b & λ(p, x, _) -> p <> x == a"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
x, a
_) -> a
p forall a. Semigroup a => a -> a -> a
<> a
x forall a. Eq a => a -> a -> Bool
== a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonPrefix a b & λ(p, x, _) -> p /= mempty && x /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
x, a
_) -> a
p forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b & λ(p, x, _) -> p <> x"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
x, a
_) -> a
p forall a. Semigroup a => a -> a -> a
<> a
x)
leftGCDMonoidLaw_stripCommonPrefix_mappend_2
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_mappend_2 :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_mappend_2 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonPrefix a b & λ(p, _, x) -> p <> x == b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
x) -> a
p forall a. Semigroup a => a -> a -> a
<> a
x forall a. Eq a => a -> a -> Bool
== a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonPrefix a b & λ(p, _, x) -> p /= mempty && x /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
x) -> a
p forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b & λ(p, _, x) -> p <> x"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
x) -> a
p forall a. Semigroup a => a -> a -> a
<> a
x)
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_1
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_1 :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_1 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonPrefix a b & λ(p, x, _) -> Just x == stripPrefix p a"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
x, a
_) -> forall a. a -> Maybe a
Just a
x forall a. Eq a => a -> a -> Bool
== forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
p a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonPrefix a b & λ(p, x, _) -> p /= mempty && x /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
x, a
_) -> a
p forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b & λ(p, _, _) -> stripPrefix p a"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
_) -> forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
p a
a)
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_2
:: (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_2 :: forall a. (Eq a, Show a, LeftGCDMonoid a) => a -> a -> Property
leftGCDMonoidLaw_stripCommonPrefix_stripPrefix_2 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonPrefix a b & λ(p, _, x) -> Just x == stripPrefix p b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
x) -> forall a. a -> Maybe a
Just a
x forall a. Eq a => a -> a -> Bool
== forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
p a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonPrefix a b & λ(p, _, x) -> p /= mempty && x /= mempty"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
x) -> a
p forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonPrefix a b & λ(p, _, _) -> stripPrefix p b"
(forall m. LeftGCDMonoid m => m -> m -> (m, m, m)
stripCommonPrefix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
p, a
_, a
_) -> forall m. LeftReductive m => m -> m -> Maybe m
stripPrefix a
p a
b)
overlappingGCDMonoidLaws
:: forall a. (Arbitrary a, Show a, Eq a, OverlappingGCDMonoid a)
=> Proxy a
-> Laws
overlappingGCDMonoidLaws :: forall a.
(Arbitrary a, Show a, Eq a, OverlappingGCDMonoid a) =>
Proxy a -> Laws
overlappingGCDMonoidLaws Proxy a
_ = String -> [(String, Property)] -> Laws
Laws String
"OverlappingGCDMonoid"
[ forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"overlappingGCDMonoidLaw_overlap_stripPrefixOverlap"
(forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_overlap_stripPrefixOverlap)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"overlappingGCDMonoidLaw_overlap_stripSuffixOverlap"
(forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_overlap_stripSuffixOverlap)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"overlappingGCDMonoidLaw_stripOverlap_overlap"
(forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_overlap)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"overlappingGCDMonoidLaw_stripOverlap_stripPrefixOverlap"
(forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_stripPrefixOverlap)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"overlappingGCDMonoidLaw_stripOverlap_stripSuffixOverlap"
(forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_stripSuffixOverlap)
]
overlappingGCDMonoidLaw_overlap_stripPrefixOverlap
:: (Eq a, Show a, OverlappingGCDMonoid a) => a -> a -> Property
overlappingGCDMonoidLaw_overlap_stripPrefixOverlap :: forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_overlap_stripPrefixOverlap a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"overlap a b <> stripPrefixOverlap a b == b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b forall a. Semigroup a => a -> a -> a
<> forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b forall a. Eq a => a -> a -> Bool
== a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"overlap a b /= mempty && stripPrefixOverlap a b /= mempty"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"overlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefixOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"overlap a b <> stripPrefixOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b forall a. Semigroup a => a -> a -> a
<> forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b)
overlappingGCDMonoidLaw_overlap_stripSuffixOverlap
:: (Eq a, Show a, OverlappingGCDMonoid a) => a -> a -> Property
overlappingGCDMonoidLaw_overlap_stripSuffixOverlap :: forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_overlap_stripSuffixOverlap a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripSuffixOverlap b a <> overlap a b == a"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a forall a. Semigroup a => a -> a -> a
<> forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b forall a. Eq a => a -> a -> Bool
== a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripSuffixOverlap b a /= mempty && overlap a b /= mempty"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffixOverlap b a"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"overlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffixOverlap b a <> overlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a forall a. Semigroup a => a -> a -> a
<> forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b)
overlappingGCDMonoidLaw_stripOverlap_overlap
:: (Eq a, Show a, OverlappingGCDMonoid a) => a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_overlap :: forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_overlap a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripOverlap a b & λ(_, x, _) -> x == overlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> (m, m, m)
stripOverlap a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
x, a
_) -> a
x forall a. Eq a => a -> a -> Bool
== forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"overlap a b /= mempty"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> (m, m, m)
stripOverlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"overlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
overlap a
a a
b)
overlappingGCDMonoidLaw_stripOverlap_stripPrefixOverlap
:: (Eq a, Show a, OverlappingGCDMonoid a) => a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_stripPrefixOverlap :: forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_stripPrefixOverlap a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripOverlap a b & λ(_, _, x) -> x == stripPrefixOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> (m, m, m)
stripOverlap a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
_, a
x) -> a
x forall a. Eq a => a -> a -> Bool
== forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripPrefixOverlap a b /= mempty"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> (m, m, m)
stripOverlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripPrefixOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripPrefixOverlap a
a a
b)
overlappingGCDMonoidLaw_stripOverlap_stripSuffixOverlap
:: (Eq a, Show a, OverlappingGCDMonoid a) => a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_stripSuffixOverlap :: forall a.
(Eq a, Show a, OverlappingGCDMonoid a) =>
a -> a -> Property
overlappingGCDMonoidLaw_stripOverlap_stripSuffixOverlap a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripOverlap a b & λ(x, _, _) -> x == stripSuffixOverlap b a"
(forall m. OverlappingGCDMonoid m => m -> m -> (m, m, m)
stripOverlap a
a a
b forall a b. a -> (a -> b) -> b
& \(a
x, a
_, a
_) -> a
x forall a. Eq a => a -> a -> Bool
== forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripSuffixOverlap b a /= mempty"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripOverlap a b"
(forall m. OverlappingGCDMonoid m => m -> m -> (m, m, m)
stripOverlap a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffixOverlap b a"
(forall m. OverlappingGCDMonoid m => m -> m -> m
stripSuffixOverlap a
b a
a)
rightGCDMonoidLaws
:: forall a. (Arbitrary a, Show a, Eq a, RightGCDMonoid a)
=> Proxy a
-> Laws
rightGCDMonoidLaws :: forall a.
(Arbitrary a, Show a, Eq a, RightGCDMonoid a) =>
Proxy a -> Laws
rightGCDMonoidLaws Proxy a
_ = String -> [(String, Property)] -> Laws
Laws String
"RightGCDMonoid"
[ forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_reductivity_left"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_reductivity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_reductivity_right"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_reductivity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_uniqueness"
(forall a.
(Eq a, Show a, RightGCDMonoid a) =>
a -> a -> a -> Property
rightGCDMonoidLaw_uniqueness)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"rightGCDMonoidLaw_idempotence"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_idempotence)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"rightGCDMonoidLaw_identity_left"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_identity_left)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> t) -> (String, Property)
makeLaw1 @a
String
"rightGCDMonoidLaw_identity_right"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_identity_right)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_commutativity"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_commutativity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"rightGCDMonoidLaw_associativity"
(forall a.
(Eq a, Show a, RightGCDMonoid a) =>
a -> a -> a -> Property
rightGCDMonoidLaw_associativity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> a -> t) -> (String, Property)
makeLaw3 @a
String
"rightGCDMonoidLaw_distributivity"
(forall a.
(Eq a, Show a, RightGCDMonoid a) =>
a -> a -> a -> Property
rightGCDMonoidLaw_distributivity)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_stripCommonSuffix_commonSuffix"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_commonSuffix)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_stripCommonSuffix_mappend_1"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_mappend_1)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_stripCommonSuffix_mappend_2"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_mappend_2)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_1"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_1)
, forall a t.
(Arbitrary a, Show a, Eq a, Semigroup a, Testable t) =>
String -> (a -> a -> t) -> (String, Property)
makeLaw2 @a
String
"rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_2"
(forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_2)
]
rightGCDMonoidLaw_reductivity_left
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_reductivity_left :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_reductivity_left a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"isJust (stripSuffix (commonSuffix a b) a)"
(forall a. Maybe a -> Bool
isJust (forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
a))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripSuffix (commonSuffix a b) a /= mempty"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffix (commonSuffix a b) a"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
a)
rightGCDMonoidLaw_reductivity_right
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_reductivity_right :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_reductivity_right a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"isJust (stripSuffix (commonSuffix a b) b)"
(forall a. Maybe a -> Bool
isJust (forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
b))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripSuffix (commonSuffix a b) b /= mempty"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffix (commonSuffix a b) b"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
b)
rightGCDMonoidLaw_uniqueness
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> a -> Property
rightGCDMonoidLaw_uniqueness :: forall a.
(Eq a, Show a, RightGCDMonoid a) =>
a -> a -> a -> Property
rightGCDMonoidLaw_uniqueness a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"antecedent ==> consequent"
(Bool
antecedent Bool -> Bool -> Bool
==> Bool
consequent)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"antecedent == True"
(Bool
antecedent forall a. Eq a => a -> a -> Bool
== Bool
True)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"antecedent == False"
(Bool
antecedent forall a. Eq a => a -> a -> Bool
== Bool
False)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"consequent == True"
(Bool
consequent forall a. Eq a => a -> a -> Bool
== Bool
True)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"consequent == False"
(Bool
consequent forall a. Eq a => a -> a -> Bool
== Bool
False)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffix c a"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
c a
a)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffix c b"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
c a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripSuffix (commonSuffix a b) c"
(forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
c)
where
antecedent :: Bool
antecedent =
forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all forall a. Maybe a -> Bool
isJust
[ forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
c a
a
, forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
c a
b
, forall m. RightReductive m => m -> m -> Maybe m
stripSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
c
]
consequent :: Bool
consequent =
a
c forall a. Eq a => a -> a -> Bool
== forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b
rightGCDMonoidLaw_idempotence
:: (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_idempotence :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_idempotence a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonSuffix a a == a"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
a forall a. Eq a => a -> a -> Bool
== a
a)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a a"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
a)
rightGCDMonoidLaw_identity_left
:: (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_identity_left :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_identity_left a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonSuffix mempty a == mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix forall a. Monoid a => a
mempty a
a forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix mempty a"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix forall a. Monoid a => a
mempty a
a)
rightGCDMonoidLaw_identity_right
:: (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_identity_right :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> Property
rightGCDMonoidLaw_identity_right a
a =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonSuffix a mempty == mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a forall a. Monoid a => a
mempty forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"a /= mempty"
(a
a forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a forall a. Monoid a => a
mempty)
rightGCDMonoidLaw_commutativity
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_commutativity :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_commutativity a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonSuffix a b == commonSuffix b a"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
== forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
b a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b == mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
== forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix b a"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
b a
a)
rightGCDMonoidLaw_associativity
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> a -> Property
rightGCDMonoidLaw_associativity :: forall a.
(Eq a, Show a, RightGCDMonoid a) =>
a -> a -> a -> Property
rightGCDMonoidLaw_associativity a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonSuffix (commonSuffix a b) c == commonSuffix a (commonSuffix b c)"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
c forall a. Eq a => a -> a -> Bool
== forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
b a
c))
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix (commonSuffix a b) c /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a (commonSuffix b c) /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
b a
c) forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix (commonSuffix a b) c"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b) a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix b c"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
b a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a (commonSuffix b c)"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a (forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
b a
c))
rightGCDMonoidLaw_distributivity
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> a -> Property
rightGCDMonoidLaw_distributivity :: forall a.
(Eq a, Show a, RightGCDMonoid a) =>
a -> a -> a -> Property
rightGCDMonoidLaw_distributivity a
a a
b a
c =
forall t. Testable t => String -> t -> Property
makeProperty
String
"commonSuffix (a <> c) (b <> c) == commonSuffix a b <> c"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix (a
a forall a. Semigroup a => a -> a -> a
<> a
c) (a
b forall a. Semigroup a => a -> a -> a
<> a
c) forall a. Eq a => a -> a -> Bool
== forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b /= mempty && c /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
c forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"a <> c"
(a
a forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"b <> c"
(a
b forall a. Semigroup a => a -> a -> a
<> a
c)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix (a <> c) (b <> c)"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix (a
a forall a. Semigroup a => a -> a -> a
<> a
c) (a
b forall a. Semigroup a => a -> a -> a
<> a
c))
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b <> c"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Semigroup a => a -> a -> a
<> a
c)
rightGCDMonoidLaw_stripCommonSuffix_commonSuffix
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_commonSuffix :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_commonSuffix a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonSuffix a b & λ(_, _, s) -> s == commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
_, a
s) -> a
s forall a. Eq a => a -> a -> Bool
== forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"commonSuffix a b /= mempty"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"commonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> m
commonSuffix a
a a
b)
rightGCDMonoidLaw_stripCommonSuffix_mappend_1
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_mappend_1 :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_mappend_1 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonSuffix a b & λ(x, _, s) -> x <> s == a"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
x, a
_, a
s) -> a
x forall a. Semigroup a => a -> a -> a
<> a
s forall a. Eq a => a -> a -> Bool
== a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonSuffix a b & λ(x, _, s) -> x /= mempty && s /= mempty"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
x, a
_, a
s) -> a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
s forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b & λ(x, _, s) -> x <> s"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
x, a
_, a
s) -> a
x forall a. Semigroup a => a -> a -> a
<> a
s)
rightGCDMonoidLaw_stripCommonSuffix_mappend_2
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_mappend_2 :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_mappend_2 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonSuffix a b & λ(_, x, s) -> x <> s == b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
x, a
s) -> a
x forall a. Semigroup a => a -> a -> a
<> a
s forall a. Eq a => a -> a -> Bool
== a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonSuffix a b & λ(_, x, s) -> x /= mempty && s /= mempty"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
x, a
s) -> a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
s forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b & λ(_, x, s) -> x <> s"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
x, a
s) -> a
x forall a. Semigroup a => a -> a -> a
<> a
s)
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_1
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_1 :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_1 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonSuffix a b & λ(x, _, s) -> Just x == stripSuffix s a"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
x, a
_, a
s) -> forall a. a -> Maybe a
Just a
x forall a. Eq a => a -> a -> Bool
== forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
s a
a)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonSuffix a b & λ(x, _, s) -> x /= mempty && s /= mempty"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
x, a
_, a
s) -> a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
s forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b & λ(_, _, s) -> stripSuffix s a"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
_, a
s) -> forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
s a
a)
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_2
:: (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_2 :: forall a. (Eq a, Show a, RightGCDMonoid a) => a -> a -> Property
rightGCDMonoidLaw_stripCommonSuffix_stripSuffix_2 a
a a
b =
forall t. Testable t => String -> t -> Property
makeProperty
String
"stripCommonSuffix a b & λ(_, x, s) -> Just x == stripSuffix s b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
x, a
s) -> forall a. a -> Maybe a
Just a
x forall a. Eq a => a -> a -> Bool
== forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
s a
b)
forall a b. a -> (a -> b) -> b
& forall t. Testable t => String -> Bool -> t -> Property
cover
String
"stripCommonSuffix a b & λ(_, x, s) -> x /= mempty && s /= mempty"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
x, a
s) -> a
x forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty Bool -> Bool -> Bool
&& a
s forall a. Eq a => a -> a -> Bool
/= forall a. Monoid a => a
mempty)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b)
forall a b. a -> (a -> b) -> b
& forall a prop.
(Show a, Testable prop) =>
String -> a -> prop -> Property
report
String
"stripCommonSuffix a b & λ(_, _, s) -> stripSuffix s b"
(forall m. RightGCDMonoid m => m -> m -> (m, m, m)
stripCommonSuffix a
a a
b forall a b. a -> (a -> b) -> b
& \(a
_, a
_, a
s) -> forall m. RightReductive m => m -> m -> Maybe m
stripSuffix a
s a
b)