!"#$%&'()*+ , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F G H I J K L M N O P QRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Safe<=T?A class of types that are the result of functions that can failNone<=T$shrinkPreservesValidOnGenValid (:[])(shrinkPreservesInvalidOnGenInvalid (:[])"shrinkValidPreservesValid (pure 5)8shrinkInvalidPreservesInvalid (pure (1/0) :: Gen Double) AshrinkingStaysValid (pure 5 :: Gen Double) (\d -> [d - 1, d - 2]) 6shrinkingStaysInvalid (pure (1/0) :: Gen Double) (:[]) (shrinkingPreserves (pure 5) (:[]) (== 5)    None<=T D Reflexive(\prec) \quad\equiv\quad \forall a: (a \prec a) 5reflexivityOnValid ((<=) :: Double -> Double -> Bool)5reflexivityOnValid ((==) :: Double -> Double -> Bool)5reflexivityOnValid ((>=) :: Double -> Double -> Bool)IreflexivityOnValid (Data.List.isPrefixOf :: [Double] -> [Double] -> Bool)IreflexivityOnValid (Data.List.isSuffixOf :: [Double] -> [Double] -> Bool)HreflexivityOnValid (Data.List.isInfixOf :: [Double] -> [Double] -> Bool)(reflexivity ((<=) :: Int -> Int -> Bool)(reflexivity ((==) :: Int -> Int -> Bool)(reflexivity ((>=) :: Int -> Int -> Bool)<reflexivity (Data.List.isPrefixOf :: [Int] -> [Int] -> Bool)<reflexivity (Data.List.isSuffixOf :: [Int] -> [Int] -> Bool);reflexivity (Data.List.isInfixOf :: [Int] -> [Int] -> Bool)3reflexivityOnArbitrary ((<=) :: Int -> Int -> Bool)3reflexivityOnArbitrary ((==) :: Int -> Int -> Bool)3reflexivityOnArbitrary ((>=) :: Int -> Int -> Bool)GreflexivityOnArbitrary (Data.List.isPrefixOf :: [Int] -> [Int] -> Bool)GreflexivityOnArbitrary (Data.List.isSuffixOf :: [Int] -> [Int] -> Bool)FreflexivityOnArbitrary (Data.List.isInfixOf :: [Int] -> [Int] -> Bool)  A relation An element    None<=TM Antireflexive(\prec) \quad\equiv\quad \forall a: \neg (a \prec a) 8antireflexivityOnValid ((<) :: Double -> Double -> Bool)9antireflexivityOnValid ((/=) :: Double -> Double -> Bool)8antireflexivityOnValid ((>) :: Double -> Double -> Bool)+antireflexivity ((<) :: Int -> Int -> Bool),antireflexivity ((/=) :: Int -> Int -> Bool)+antireflexivity ((>) :: Int -> Int -> Bool)6antireflexivityOnArbitrary ((<) :: Int -> Int -> Bool)7antireflexivityOnArbitrary ((/=) :: Int -> Int -> Bool)6antireflexivityOnArbitrary ((>) :: Int -> Int -> Bool) A relation An elementNoneNone<=T Antisymmetric(\prec, \doteq) \quad\equiv\quad \forall a, b: ((a \prec b) \wedge (b \prec a)) \Rightarrow (a \doteq b) 5antisymmetryOnValid ((>) :: Double -> Double -> Bool)6antisymmetryOnValid ((>=) :: Double -> Double -> Bool)6antisymmetryOnValid ((<=) :: Double -> Double -> Bool)5antisymmetryOnValid ((<) :: Double -> Double -> Bool)JantisymmetryOnValid (Data.List.isPrefixOf :: [Double] -> [Double] -> Bool)JantisymmetryOnValid (Data.List.isSuffixOf :: [Double] -> [Double] -> Bool)IantisymmetryOnValid (Data.List.isInfixOf :: [Double] -> [Double] -> Bool)(antisymmetry ((>) :: Int -> Int -> Bool))antisymmetry ((>=) :: Int -> Int -> Bool))antisymmetry ((<=) :: Int -> Int -> Bool)(antisymmetry ((<) :: Int -> Int -> Bool)=antisymmetry (Data.List.isPrefixOf :: [Int] -> [Int] -> Bool)=antisymmetry (Data.List.isSuffixOf :: [Int] -> [Int] -> Bool)<antisymmetry (Data.List.isInfixOf :: [Int] -> [Int] -> Bool)>antisymmetry ((\x y -> even x && odd y) :: Int -> Int -> Bool) 3antisymmetryOnArbitrary ((>) :: Int -> Int -> Bool)4antisymmetryOnArbitrary ((>=) :: Int -> Int -> Bool)4antisymmetryOnArbitrary ((<=) :: Int -> Int -> Bool)3antisymmetryOnArbitrary ((<) :: Int -> Int -> Bool)HantisymmetryOnArbitrary (Data.List.isPrefixOf :: [Int] -> [Int] -> Bool)HantisymmetryOnArbitrary (Data.List.isSuffixOf :: [Int] -> [Int] -> Bool)GantisymmetryOnArbitrary (Data.List.isInfixOf :: [Int] -> [Int] -> Bool)IantisymmetryOnArbitrary ((\x y -> even x && odd y) :: Int -> Int -> Bool) A relationAn equivalence relation Two elements    None<=T!c Symmetric(\prec) \quad\equiv\quad \forall a, b: (a \prec b) \Leftrightarrow (b \prec a) #2symmetryOnValid ((==) :: Double -> Double -> Bool)2symmetryOnValid ((/=) :: Double -> Double -> Bool)$%symmetry ((==) :: Int -> Int -> Bool)%symmetry ((/=) :: Int -> Int -> Bool)%0symmetryOnArbitrary ((==) :: Int -> Int -> Bool)0symmetryOnArbitrary ((/=) :: Int -> Int -> Bool)! A relation Two elements"#$%!"#$%!"#$%!"#$%None<=T&x Transitive(\prec) \quad\equiv\quad \forall a, b, c: ((a \prec b) \wedge (b \prec c)) \Rightarrow (a \prec c) (5transitivityOnValid ((>) :: Double -> Double -> Bool)6transitivityOnValid ((>=) :: Double -> Double -> Bool)6transitivityOnValid ((==) :: Double -> Double -> Bool)6transitivityOnValid ((<=) :: Double -> Double -> Bool)5transitivityOnValid ((<) :: Double -> Double -> Bool)JtransitivityOnValid (Data.List.isPrefixOf :: [Double] -> [Double] -> Bool)JtransitivityOnValid (Data.List.isSuffixOf :: [Double] -> [Double] -> Bool)ItransitivityOnValid (Data.List.isInfixOf :: [Double] -> [Double] -> Bool))(transitivity ((>) :: Int -> Int -> Bool))transitivity ((>=) :: Int -> Int -> Bool))transitivity ((==) :: Int -> Int -> Bool))transitivity ((<=) :: Int -> Int -> Bool)(transitivity ((<) :: Int -> Int -> Bool)=transitivity (Data.List.isPrefixOf :: [Int] -> [Int] -> Bool)=transitivity (Data.List.isSuffixOf :: [Int] -> [Int] -> Bool)<transitivity (Data.List.isInfixOf :: [Int] -> [Int] -> Bool)*3transitivityOnArbitrary ((>) :: Int -> Int -> Bool)4transitivityOnArbitrary ((>=) :: Int -> Int -> Bool)4transitivityOnArbitrary ((==) :: Int -> Int -> Bool)4transitivityOnArbitrary ((<=) :: Int -> Int -> Bool)3transitivityOnArbitrary ((<) :: Int -> Int -> Bool)HtransitivityOnArbitrary (Data.List.isPrefixOf :: [Int] -> [Int] -> Bool)HtransitivityOnArbitrary (Data.List.isSuffixOf :: [Int] -> [Int] -> Bool)GtransitivityOnArbitrary (Data.List.isInfixOf :: [Int] -> [Int] -> Bool)& A relationThree elements'()*&'()*&'()*&'()*None<=T  !"#$%&'()* &'()* !"#$% None<=T +[ LeftIdentity(\star, \doteq, b) \quad\equiv\quad \forall a: (b \star a) \doteq a .=leftIdentityOnValid (flip ((^) :: Double -> Int -> Double)) 1/0leftIdentity (flip ((^) :: Int -> Int -> Int)) 10;leftIdentityOnArbitrary (flip ((^) :: Int -> Int -> Int)) 11\ RightIdentity(\star, \doteq, b) \quad\equiv\quad \forall a: (a \star b) \doteq a 47rightIdentityOnValid ((^) :: Double -> Int -> Double) 15*rightIdentity ((^) :: Int -> Int -> Int) 165rightIdentityOnArbitrary ((^) :: Int -> Int -> Int) 17} Identity(\star, \doteq, b) \quad\equiv\quad LeftIdentity(\star, \doteq, b) \wedge RightIdentity(\star, \doteq, b) 85identityOnValid ((*) :: Double -> Double -> Double) 15identityOnValid ((+) :: Double -> Double -> Double) 09%identity ((*) :: Int -> Int -> Int) 1%identity ((+) :: Int -> Int -> Int) 0:0identityOnArbitrary ((*) :: Int -> Int -> Int) 10identityOnArbitrary ((+) :: Int -> Int -> Int) 0+A binary operation An equalityA candidate left-identity An element,A binary operation An equalityA candidate left-identity-A binary operationA candidate left-identity./01A binary operation An equalityA candidate right-identity An element2A binary operation An equalityA candidate right-identity3A binary operationA candidate right-identity456789:+,-./0123456789:+,-./0123456789:+,-./0123456789: None<=T;^ Commutative(\star) \quad\equiv\quad \forall a, b: a \star b = b \star a </commutative ((+) :: Double -> Double -> Double)/commutative ((*) :: Double -> Double -> Double)=&commutative ((+) :: Int -> Int -> Int)&commutative ((*) :: Int -> Int -> Int)>1commutativeOnArbitrary ((+) :: Int -> Int -> Int)1commutativeOnArbitrary ((*) :: Int -> Int -> Int);<=>;<=>;<=>;<=> None<=T?u Associative(\star) \quad\equiv\quad \forall a, b, c: (a \star b) \star c = a \star (b \star c) A&associative ((*) :: Int -> Int -> Int)&associative ((+) :: Int -> Int -> Int)B1associativeOnArbitrary ((*) :: Int -> Int -> Int)1associativeOnArbitrary ((+) :: Int -> Int -> Int)?@AB?@AB?@AB?@ABNone<=T+,-./0123456789:;<=>?@AB+,-./0123456789:?@AB;<=> None<=TC4The given generator generates only valid data pointsD6The given generator generates only invalid data pointsCDCDCDCD None<=TEdThe function produces valid output when the input is generated as specified by the given generator.FCThe function produces valid output when the input is generated by genValidGCThe function produces valid output when the input is generated by  genUncheckedHCThe function produces valid output when the input is generated by  arbitrary EFGHIJKLMNOP EFGHIJKLMNOP EFGHIJKLMNOP EFGHIJKLMNOPNone<=TTe is its own inverse function for every type: prop> inverseFunctionsOnArbitrary id (id :: Int -> Int)QRSTUVWXYZ[\]^_`QRSTUVWXYZ[\]^_`QRSTUVWXYZ[\]^_`QRSTUVWXYZ[\]^_`None<=Td is idempotent for any type:(idempotentOnArbitrary (id :: Int -> Int)6, given any input, is idempotent for any type as well:7\int -> idempotentOnArbitrary (const int :: Int -> Int)abcdabcdabcdabcdNone<=ThCequivalentOnArbitrary ((* 2) . (+ 1)) ((+ 2) . (* 2) :: Int -> Int)l5equivalentOnArbitrary2 (+) ((+) :: Int -> Int -> Int)$efghijklmnopqrstuvwxyz{|}~$efghijklmnopqrstuvwxyz{|}~$efghijklmnpoqrtsuvxwyz|{}~$efghijklmnopqrstuvwxyz{|}~None<=T FThe function succeeds if the input is generated by the given generator3The function succeeds if the input is generated by genValid3The function succeeds if the input is generated by  genUnchecked3The function succeeds if the input is generated by  arbitraryCThe function fails if the input is generated by the given generator0The function fails if the input is generated by  genInvalid,The function produces output that satisfies isValid@ if it is given input that is generated by the given generator.,The function produces output that satisfies isValid, if it is given input that is generated by  arbitrary.,The function produces output that satisfies isValid, if it is given input that is generated by  arbitrary.,The function produces output that satisfies isValid, if it is given input that is generated by  genUnchecked.None<=T\EFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~\EFGHIJKLMNOPefghijklmnpoqrtsuvxwyz|{}~QRSTUVWXYZ[\]^_`abcdNone<=T  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~CDEFGHIJKLMNOPefghijklmnpoqrtsuvxwyz|{}~QRSTUVWXYZ[\]^_`abcd &'()* !"#$%+,-./0123456789:?@AB;<=> !"#$%&'()*+,-./0123456789:;<=>?@ A B C D E F G H I J K L M N O P Q R S T U V W X Y Z [ \ ] ^ _ ` a b c d e fghijklmnopqrstuvwxyz{|}~3genvalidity-property-0.1.0.0-2aTJQxPFiWJ6OlajDTgT0fTest.Validity.Types Test.Validity.Shrinking.Property#Test.Validity.Relations.Reflexivity'Test.Validity.Relations.AntireflexivityTest.Validity.Property.Utils$Test.Validity.Relations.Antisymmetry Test.Validity.Relations.Symmetry$Test.Validity.Relations.Transitivity!Test.Validity.Operations.Identity&Test.Validity.Operations.Commutativity&Test.Validity.Operations.Associativity"Test.Validity.GenValidity.Property Test.Validity.Functions.ValidityTest.Validity.Functions.Inverse#Test.Validity.Functions.Idempotence#Test.Validity.Functions.EquivalenceTest.Validity.Functions.CanFailTest.Validity.RelationsTest.Validity.OperationsTest.Validity.FunctionsTest.Validity.PropertyCanFail hasFailedresultIfSucceeded$fCanFailEither$fCanFailMaybeshrinkPreservesValidOnGenValid"shrinkPreservesInvalidOnGenInvalidshrinkValidPreservesValidshrinkInvalidPreservesInvalidshrinkingStaysValidshrinkingStaysInvalidshrinkingPreservesreflexiveOnElemreflexivityOnGenreflexivityOnValid reflexivityreflexivityOnArbitraryantireflexiveOnElemantireflexivityOnGenantireflexivityOnValidantireflexivityantireflexivityOnArbitraryforAllUnchecked forAllValid forAllInvalid===><==> antisymmetricOnElemsWithEqualityantisymmetryOnGensWithEqualityantisymmetryOnGensantisymmetryOnValid antisymmetryantisymmetryOnArbitrarysymmetricOnElemssymmetryOnGenssymmetryOnValidsymmetrysymmetryOnArbitrarytransitiveOnElemstransitivityOnGenstransitivityOnValid transitivitytransitivityOnArbitraryleftIdentityOnElemWithEqualityleftIdentityOnGenWithEqualityleftIdentityOnGenleftIdentityOnValid leftIdentityleftIdentityOnArbitraryrightIdentityOnElemWithEqualityrightIdentityOnGenWithEqualityrightIdentityOnGenrightIdentityOnValid rightIdentityrightIdentityOnArbitrary identityOnGenidentityOnValididentityidentityOnArbitrarycommutativeOnGenscommutativeOnValids commutativecommutativeOnArbitraryassociativeOnGensassociativeOnValids associativeassociativeOnArbitrarygenGeneratesValidgenGeneratesInvalidproducesValidsOnGenproducesValidsOnValids producesValidproducesValidsOnArbitraryproducesValidsOnGens2producesValidsOnValids2producesValid2producesValidsOnArbitrary2producesValidsOnGens3producesValidsOnValids3producesValid3producesValidsOnArbitrary3inverseFunctionsOnGeninverseFunctionsOnValidinverseFunctionsinverseFunctionsOnArbitrary$inverseFunctionsIfFirstSucceedsOnGen&inverseFunctionsIfFirstSucceedsOnValidinverseFunctionsIfFirstSucceeds*inverseFunctionsIfFirstSucceedsOnArbitrary%inverseFunctionsIfSecondSucceedsOnGen'inverseFunctionsIfSecondSucceedsOnValid inverseFunctionsIfSecondSucceeds+inverseFunctionsIfSecondSucceedsOnArbitraryinverseFunctionsIfSucceedOnGen inverseFunctionsIfSucceedOnValidinverseFunctionsIfSucceed$inverseFunctionsIfSucceedOnArbitraryidempotentOnGenidempotentOnValid idempotentidempotentOnArbitraryequivalentOnGenequivalentOnValid equivalentequivalentOnArbitraryequivalentOnGens2equivalentOnValids2 equivalent2equivalentOnArbitrary2 equivalentWhenFirstSucceedsOnGen"equivalentWhenFirstSucceedsOnValid&equivalentWhenFirstSucceedsOnArbitraryequivalentWhenFirstSucceeds"equivalentWhenFirstSucceedsOnGens2$equivalentWhenFirstSucceedsOnValids2'equivalentWhenFirstSucceedsOnArbitrary2equivalentWhenFirstSucceeds2!equivalentWhenSecondSucceedsOnGen#equivalentWhenSecondSucceedsOnValid'equivalentWhenSecondSucceedsOnArbitraryequivalentWhenSecondSucceeds#equivalentWhenSecondSucceedsOnGens2%equivalentWhenSecondSucceedsOnValids2(equivalentWhenSecondSucceedsOnArbitrary2equivalentWhenSecondSucceeds2equivalentWhenSucceedOnGenequivalentWhenSucceedOnValidequivalentWhenSucceed equivalentWhenSucceedOnArbitraryequivalentWhenSucceedOnGens2equivalentWhenSucceedOnValids2!equivalentWhenSucceedOnArbitrary2equivalentWhenSucceed2equivalentOnGens3equivalentOnValids3 equivalent3equivalentOnArbitrary3 succeedsOnGensucceedsOnValidsucceedssucceedsOnArbitrary failsOnGenfailsOnInvalidvalidIfSucceedsOnGenvalidIfSucceedsOnValidvalidIfSucceedsOnArbitraryvalidIfSucceedssucceedsOnGens2succeedsOnValids2 succeeds2succeedsOnArbitrary2 failsOnGens2failsOnInvalid2validIfSucceedsOnGens2validIfSucceedsOnValids2validIfSucceeds2validIfSucceedsOnArbitrary2validIfSucceedsOnGens3validIfSucceedsOnValids3validIfSucceeds3validIfSucceedsOnArbitrary3baseGHC.BaseidconstMonoidmemptymappendmconcat%validity-0.4.0.0-4VjJnV4ZfnbtA8pppYCP Data.Validity Validation unValidationValidationChainLocationViolatedValidityvalidateisValidtriviallyValidisValidByValidatingtrivialValidationvalidateByCheckingvalidateByCheckingNamevalidateByCheckingDefaultcheckannotateconstructValidconstructValidUnsafe checkValidityprettyValidation isInvalid*genvalidity-0.4.0.0-HZgC5nDsOfb8kTMFmfzb7KData.GenValidityuncheckedSubtermsuncheckedRecursivelyShrinkgShrinkUnchecked genListOf arbPartition genSplit4 genSplit3genSplitupToshrinkT3shrinkT2 GenUnchecked genUncheckedshrinkUncheckedGenValidgenValid shrinkValid GenInvalid genInvalid shrinkInvalid GGenUnchecked gGenUncheckedGUncheckedRecursivelyShrinkgUncheckedRecursivelyShrinkGUncheckedSubtermsgUncheckedSubtermsGUncheckedSubtermsInclgUncheckedSubtermsIncl