úÎ!EČ=      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz { | } ~  €  ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ  Ž   ‘ ’ “ ” • – — ˜ ™ š › œ © Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone˜boolean-normal-forms5A polymorphic class of values translable to booleans.boolean-normal-formsCast value to .boolean-normal-forms)A class to values translable to booleans.boolean-normal-formsCast value to .boolean-normal-formsLess polymorphic version of .boolean-normal-formsLess polymorphic version of .© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone24o boolean-normal-forms%Class to represent invertible values.#Must obey the double negation law: not (not x) = x„The negation appears only in leafs of normal forms, and the underlying proposition class might have built-in negation, thus we use  . boolean-normal-formsInvert the value. boolean-normal-formsFree  . boolean-normal-formsPositive valueboolean-normal-formsNegative value    © Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone2467boolean-normal-formsFree 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,HV!.boolean-normal-forms.Class unifying different boolean normal forms./boolean-normal-forms. could be constrained, so the Set) based implementations could be included.0boolean-normal-formsLift a value into normal form.1boolean-normal-forms/Simplify the formula, if some terms are "„ or "€.2boolean-normal-forms transform from free boolean form ./012./012© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone246HV%4boolean-normal-forms'Boolean formula in Negation Normal Form2 operations will perform transformations as below: doc-formulae/nnf.svg./012456789456789 © Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone't./012456789© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone26HV+€Fboolean-normal-forms'Boolean formula in Negation Normal Form2 operations will perform transformations as below: doc-formulae/nnf.svg./012FGHIJKFGHIJK© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone26HV.æWboolean-normal-forms*Boolean formula in Disjunction Normal Form doc-formulae/dnf.svg./012WXYZ[\WXY[Z\© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone0œ./012WXYZ[\© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone246HV4hboolean-normal-forms*Boolean formula in Disjunction Normal Form doc-formulae/dnf.svg./012hijklmhijklm © Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone26HV7yzboolean-normal-forms*Boolean formula in Conjunction Normal Form doc-formulae/cnf.svg./012z{|}~z{|~}© Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone9P./012z{|}~ © Oleg Grenrus 2014MIT"Oleg Grenrus <oleg.grenrus@iki.fi> experimental non-portableNone246HV<Š‹boolean-normal-forms*Boolean formula in Conjunction Normal Form doc-formulae/cnf.svg./012‹ŒŽ‹ŒŽž !"#$%&'()*+,-./0123456789:;<=>?@AB CDEFGHIJKLMNOPQRS CDEFGHIJKLMNOPQSTTUVWXYZ[\]^_`abcTTUWVXYZ[\]^_`abdc e e f V W X g h i j k l m n o p q e e f W V X g h i j k l m n o p r qs tu3boolean-normal-forms-0.0.1.1-LU3EoJOjHnO9ouiwSpaTI7Data.Algebra.Boolean.CoBooleanData.Algebra.Boolean.Negable Data.Algebra.Boolean.FreeBooleanData.Algebra.Boolean.NormalFormData.Algebra.Boolean.NNF.TreeData.Algebra.Boolean.NNF.SetData.Algebra.Boolean.DNF.SetData.Algebra.Boolean.DNF.ListData.Algebra.Boolean.CNF.SetData.Algebra.Boolean.CNF.ListData.Algebra.BooleanNNFData.Algebra.Boolean.NNFData.Algebra.Boolean.DNFData.Algebra.Boolean.CNF CoBoolean1 toBooleanWith CoBoolean toBooleantoBool toBoolWith$fCoBooleanMaybe$fCoBooleanEither$fCoBooleanBool$fCoBoolean1MaybeNegablenotNegPos $fNFDataNeg$fCoBoolean1Neg$fCoBooleanNeg$fNegableEither $fNegable(,)$fNegableMaybe $fNegableBool $fNegableNeg$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 $fFunctorNNF $fFoldableNNFDNFunDNF toDoubleListfromDoubleListfromNNF $fNFDataDNF$fNormalFormDNF $fBooleanDNF $fNegableDNF$fCoBooleanDNF$fCoBoolean1DNF$fEqDNF$fOrdDNF $fShowDNF $fReadDNF $fFoldableDNF $fFunctorDNFCNFunCNF $fNFDataCNF$fNormalFormCNF $fBooleanCNF $fNegableCNF$fCoBooleanCNF$fCoBoolean1CNF$fEqCNF$fOrdCNF $fShowCNF $fReadCNF $fFoldableCNF $fFunctorCNF#cond-0.4.1.1-GSsSHzIxCndLEfUCfsZmS9Boolean