A+8ϕ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst u v w x y z { | } ~   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..Lift a value into normal form.//Simplify the formula, if some terms are " or ".0 transform from free boolean form,-./01 ,-./0,-./0,-./01 Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone04DR2'Boolean formula in Negation Normal Form2 operations will perform transformations as below: doc-formulae/nnf.svg23456789:;<,-./0234567234567 23456789:;< Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024DRB'Boolean formula in Negation Normal Form2 operations will perform transformations as below: doc-formulae/nnf.svgBCDEFGHIJKL,-./0BCDEFGBCDEFG BCDEFGHIJKL Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024DRS*Boolean formula in Disjunction Normal Form doc-formulae/dnf.svg STUVWXYZ[\],-./0STUVWXSTUVWX STUVWXYZ[\] Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone04DRd*Boolean formula in Disjunction Normal Form doc-formulae/dnf.svgdefghijklmn,-./0defghidefhgi defghijklmn  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone,-./0defghi Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone,-./0BCDEFG  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone04DRt*Boolean formula in Conjunction Normal Form doc-formulae/cnf.svgtuvwxyz{|}~,-./0tuvwxytuvxwy tuvwxyz{|}~  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone024DR*Boolean formula in Conjunction Normal Form doc-formulae/cnf.svg ,-./0  Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone,-./0tuvwxy !"#$%&'()*+,-./0123456789:;<=>?@ ABCDEFGHIJKLMNO ABCDEFGHIJKLMNPOQQRSTUVWXYZ[\]^_`QQRTSUVWXYZ[\]^` a a b T S U c d e f g h i j k l a a b S T U c d e f g h i j k m ln opqrrstuuvw x v w xy3boolean-normal-forms-0.0.0.2-3rf2oXjrQqmDbG042aub7eData.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$fCoBoolean1Neg$fCoBooleanNeg$fEqNeg$fOrdNeg $fShowNeg $fReadNeg $fFunctorNeg FreeBooleanFBValueFBTrueFBFalseFBNotFBAndFBOr$fBooleanFreeBoolean$fNegableFreeBoolean$fCoBooleanFreeBoolean$fCoBoolean1FreeBoolean$fEqFreeBoolean$fOrdFreeBoolean$fShowFreeBoolean$fReadFreeBoolean$fFunctorFreeBoolean$fFoldableFreeBoolean NormalForm NFConstraint toNormalFormsimplifyfromFreeBoolean$fNormalFormFreeBooleanNNFTrueNNFFalseNNFValueNNFOrNNFAnd$fNormalFormNNF $fBooleanNNF $fNegableNNF$fCoBoolean1NNF$fCoBooleanNNF$fEqNNF$fOrdNNF $fShowNNF $fReadNNF $fFoldableNNF $fFunctorNNFDNFunDNFfromDoubleList toDoubleListfromNNF$fNormalFormDNF $fBooleanDNF $fNegableDNF$fCoBooleanDNF$fCoBoolean1DNF$fEqDNF$fOrdDNF $fShowDNF $fReadDNF $fFunctorDNF $fFoldableDNFCNFunCNF$fNormalFormCNF $fBooleanCNF $fNegableCNF$fCoBooleanCNF$fCoBoolean1CNF$fEqCNF$fOrdCNF $fShowCNF $fReadCNF $fFoldableCNF $fFunctorCNF#cond-0.4.1.1-2yYcKtUJ6TG4fyL0AuCq0nBooleanorListandListnnfNotnnfOrnnfAnddnfNotfromLeftoptimizecnfNot