úÎ!XÀUš7      ! " # $ % & ' ( ) * + , - . / 0123456Safe=?SXk=01Safe=?SXk »propertyB \forall a, b, c: ((a \# b) \wedge (b \# c)) \Rightarrow (a \# c) TFor example, "is ancestor of" is a transitive relation, while "is parent of" is not.propertyB \forall a, b, c: ((a \# b) \wedge (a \# c)) \Rightarrow (b \# c)  For example, =+ is an right Euclidean relation because if x = y and x = z then y = z.propertyB \forall a, b, c: ((b \# a) \wedge (c \# a)) \Rightarrow (b \# c)  For example, =) is a left Euclidean relation because if x = y and x = z then y = z.Safe=?SXk­ property1 \forall a, b: (a \# b) \Leftrightarrow (b \# a) ŽFor example, "is a blood relative of" is a symmetric relation, because A is a blood relative of B if and only if B is a blood relative of A. property2 \forall a, b: (a \# b) \Rightarrow \neg (b \# a) 7For example, > is an asymmetric relation, but "e is not.QA relation is asymmetric if and only if it is both antisymmetric and irreflexive. property? \forall a, b: (a \# b) \wedge (b \# a) \Rightarrow a \equiv b xFor example, "e is an antisymmetric relation; so is >, but vacuously (the condition in the definition is always false). property? \forall a, b: (a \# b) \wedge (b \# a) \Rightarrow a \doteq b   Safe=?SXk"  property \forall a: (a \# a) 4For example, "e is a reflexive relation but > is not.property \forall a: \neg (a \# a) 8For example, > is an irreflexive relation, but "e is not.propertyC \forall a, b: ((a \# b) \wedge (b \# a)) \Rightarrow (a \equiv b) ÿFor example, the relation over the integers in which each odd number is related to itself is a coreflexive relation. The equality relation is the only example of a relation that is both reflexive and coreflexive, and any coreflexive relation is a subset of the equality relation.propertyC \forall a, b: ((a \# b) \wedge (b \# a)) \Rightarrow (a \doteq b) property? \forall a, b: (a \# b) \Rightarrow ((a \# a) \wedge (b \# b))   Safe=?SXk1¿property( \forall a, b: ((a \# b) \vee (b \# a)) CFor example, "e is a connex relation, while 'divides evenly' is not.IA connex relation cannot be symmetric, except for the universal relation.propertyF \forall a, b: \neg (a \equiv b) \Rightarrow ((a \# b) \vee (b \# a)) [A binary relation is semiconnex if it relates all pairs of _distinct_ elements in some way.CA relation is connex if and only if it is semiconnex and reflexive.propertyF \forall a, b: \neg (a \doteq b) \Rightarrow ((a \# b) \vee (b \# a)) propertyx \forall a, b, c: ((a \# b) \vee (a \equiv b) \vee (b \# a)) \wedge \neg ((a \# b) \wedge (a \equiv b) \wedge (b \# a))  Note that  trichotomous (>)  should hold for any 7 instance.propertyx \forall a, b, c: ((a \# b) \vee (a \doteq b) \vee (b \# a)) \wedge \neg ((a \# b) \wedge (a \doteq b) \wedge (b \# a)) In other words, exactly one of a \# b,  a \doteq b, or b \# a holds.:For example, > is a trichotomous relation, while "e is not.Safe=?SXk2M Safe=?SXk8mproperty \forall a: (u \# a) \equiv a Right neutrality of a unit u with respect to an operator #."For example, an implementation of 8 must satisfy neutral (<>) memptyproperty \forall a: (a \# u) \equiv a Left neutrality of a unit u with respect to an operator #."For example, an implementation of 8 must satisfy neutral (<>) memptySafe=?SXk;'property< \forall a, b, c: (a \# b) \% c \equiv (a \% c) \# (b \% c) property< \forall a, b, c: c \% (a \# b) \equiv (c \% a) \# (c \% b) Safe=?SXk=!property$ \forall a, b: a \# b \equiv b \# a property$ \forall a, b: a \# b \doteq b \# a   Safe=?SXk?“!property5 \forall a, b, c: (a \# b) \# c \equiv a \# (b \# c) "property5 \forall a, b, c: (a \# b) \# c \doteq a \# (b \# c) !"!" Safe=?SXkEy#property \forall a: (u \# a) \equiv u #Right annihilativity of an element u with respect to an operator #. For example, False$ is a right annihilative element of ||.$property \forall a: (a \# u) \equiv u "Left annihilativity of an element u with respect to an operator #. For example, Nothing$ is a right annihilative element of *>.#$%&#$%&Safe=?SXkEÿ !"#$%& Safe=?SXkH‘(property3 \forall a, b: a \leq b \Rightarrow f(a) \leq f(b) *property3 \forall a, b: a \leq b \Rightarrow f(b) \leq f(a) '()*'()* Safe=?SXkL<+property. \forall a: f a \# b \Leftrightarrow a \# g b /For example, a Galois connection is defined by adjoint_on (<=).,property \forall a: f (g a) \equiv a -property \forall a: f (g a) \doteq a +,-+,- Safe=?SXkNž.property2 \forall a: f a \equiv f b \Rightarrow a \equiv b /property2 \forall a: f a \doteq f b \Rightarrow a \doteq b ././Safe=?SXkQä0property" \forall a: g \circ f (a) = f (a) 1property% \forall a: g \circ f (a) \sim f (a) 2property \forall a: f \circ f(a) = f(a) 3property# \forall a: f \circ f(a) \sim f(a) 0123401234Safe=?SXkSž5property \forall a: f a \equiv g a 6property \forall a: f a \doteq g a 5656Safe=?SXkT'()*+,-./0123456Safe=?SXkTº7  !"#$%&'()*+,-./01234569 !"#$%&'()*+,-./01234 5 6 7 8 9 : ; < = > ? @ A B CDEFGHIJKLMNOPQ%property-0.0.1-DY804XbCMh9Ablm4tpSLh1Test.Property.Util!Test.Property.Relation.Transitive Test.Property.Relation.Symmetric Test.Property.Relation.ReflexiveTest.Property.Relation.ConnexTest.Property.Operation.Neutral$Test.Property.Operation.Distributive#Test.Property.Operation.Commutative#Test.Property.Operation.Associative$Test.Property.Operation.AnnihilativeTest.Property.Function.Monotone!Test.Property.Function.Invertible Test.Property.Function.Injective!Test.Property.Function.Idempotent!Test.Property.Function.EquivalentTest.Property.RelationTest.Property.OperationTest.Property.Function Test.PropertyRelxorxor3==>iff<==> transitive euclidean euclidean' symmetric asymmetric antisymmetricantisymmetric_on reflexive irreflexive coreflexivecoreflexive_onquasireflexiveconnex semiconnex semiconnex_on trichotomoustrichotomous_onneutralneutral' neutral_on neutral_on' distributive distributive'distributive_ondistributive_on' commutativecommutative_on associativeassociative_on annihilative annihilative'annihilative_onannihilative_on'monotone monotone_onantitone antitone_on adjoint_on invertible invertible_on injective injective_on projective projective_on idempotent idempotent_on idempotent_k equivalent equivalent_onghc-prim GHC.ClassesOrdbaseGHC.BaseMonoid