BC9      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz { | } ~   Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone5A polymorphic class of values translable to booleans.Cast value to .)A class to values translable to booleans.Cast value to .Less polymorphic version of .Less polymorphic version of .    Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone02 %Class to represent invertible values.#Must obey the double negation law: not (not x) = xThe negation appears only in leafs of normal forms, and the underlying proposition class might have built-in negation, thus we use  . Invert the value. Free  . Positive valueNegative value        Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024Free Q type, does not perform any optimizations on the structure. Useful only in tests.Consider using   .  !"#$%&'  !" !" !"#$%&' Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone*DR..Class unifying different boolean normal forms./. could be constrained, so the Set) based implementations could be included.0Lift a value into normal form.1/Simplify the formula, if some terms are " or ".2 transform from free boolean form./0123 ./012./012./0123 Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone04DR4'Boolean formula in Negation Normal Form2 operations will perform transformations as below: doc-formulae/nnf.svg456789:;<=>?./012456789456789 456789:;<=>? Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024DRE'Boolean formula in Negation Normal Form2 operations will perform transformations as below: doc-formulae/nnf.svgEFGHIJKLMNOP./012EFGHIJEFGHIJ EFGHIJKLMNOP Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024DRW*Boolean formula in Disjunction Normal Form doc-formulae/dnf.svg WXYZ[\]^_`ab./012WXYZ[\WXYZ[\ WXYZ[\]^_`ab Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone04DRi*Boolean formula in Disjunction Normal Form doc-formulae/dnf.svgijklmnopqrst./012ijklmnijkmln ijklmnopqrst  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone./012ijklmn Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone./012EFGHIJ  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone04DRz*Boolean formula in Conjunction Normal Form doc-formulae/cnf.svgz{|}~./012z{|}~z{|~} z{|}~  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024DR*Boolean formula in Conjunction Normal Form doc-formulae/cnf.svg ./012  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone./012z{|}~ !"#$%&'()*+,-./0123456789:;<=>?@AB CDEFGHIJKLMNOPQR CDEFGHIJKLMNOPQSRTTUVWXYZ[\]^_`abcdTTUWVXYZ[\]^_`abd e e f W V X g h i j k l m n o p q e e f V W X g h i j k l m n o p r qs tuvwwxyzz{| } { | }~1boolean-normal-forms-0.0.1-D0yhB6V2AGHCtpWxTahNlcData.Algebra.Boolean.CoBooleanData.Algebra.Boolean.Negable Data.Algebra.Boolean.FreeBooleanData.Algebra.Boolean.NormalFormData.Algebra.Boolean.NNF.SetData.Algebra.Boolean.NNF.TreeData.Algebra.Boolean.DNF.ListData.Algebra.Boolean.DNF.SetData.Algebra.Boolean.CNF.SetData.Algebra.Boolean.CNF.ListData.Algebra.BooleanNNFData.Algebra.Boolean.DNFData.Algebra.Boolean.NNFData.Algebra.Boolean.CNF CoBoolean1 toBooleanWith CoBoolean toBooleantoBool toBoolWith$fCoBoolean1Maybe$fCoBooleanMaybe$fCoBooleanEither$fCoBooleanBoolNegablenotNegPos$fNegableEither $fNegable(,)$fNegableMaybe $fNegableBool $fNegableNeg $fNFDataNeg$fCoBoolean1Neg$fCoBooleanNeg$fEqNeg$fOrdNeg $fShowNeg $fReadNeg $fFunctorNeg FreeBooleanFBValueFBTrueFBFalseFBNotFBAndFBOr$fNFDataFreeBoolean$fBooleanFreeBoolean$fNegableFreeBoolean$fCoBooleanFreeBoolean$fCoBoolean1FreeBoolean$fEqFreeBoolean$fOrdFreeBoolean$fShowFreeBoolean$fReadFreeBoolean$fFunctorFreeBoolean$fFoldableFreeBoolean NormalForm NFConstraint toNormalFormsimplifyfromFreeBoolean$fNormalFormFreeBooleanNNFTrueNNFFalseNNFValueNNFOrNNFAnd $fNFDataNNF$fNormalFormNNF $fBooleanNNF $fNegableNNF$fCoBoolean1NNF$fCoBooleanNNF$fEqNNF$fOrdNNF $fShowNNF $fReadNNF $fFoldableNNF $fFunctorNNFDNFunDNFfromDoubleList toDoubleListfromNNF $fNFDataDNF$fNormalFormDNF $fBooleanDNF $fNegableDNF$fCoBooleanDNF$fCoBoolean1DNF$fEqDNF$fOrdDNF $fShowDNF $fReadDNF $fFunctorDNF $fFoldableDNFCNFunCNF $fNFDataCNF$fNormalFormCNF $fBooleanCNF $fNegableCNF$fCoBooleanCNF$fCoBoolean1CNF$fEqCNF$fOrdCNF $fShowCNF $fReadCNF $fFoldableCNF $fFunctorCNF#cond-0.4.1.1-2yYcKtUJ6TG4fyL0AuCq0nBooleanorListandListnnfNotnnfOrnnfAnddnfNotfromLeftoptimizecnfNot