úÎBI?ª     None GIn order to interpret an expression, a mapping from variables to truth B values needs to be provided. Truth values are compositional; that' s to say, J the value of a composite expression (any expression which is not atomic) N depends on the truth values of its component parts. For example, the Haskell $ expression below would evaluate to False.  interpret 1 (Conjunction (Variable "A") (Variable "B")) , (fromList [("A", True), ("B", False)]) BGenerates the possible assignments of variables in an expression. 7Lists the names of variables present in an expression. JDetermines whether two expressions are extensionally equivalent (that is, 2 have the same values under all interpretations). 2Determines whether an expression is tautological. 3Determines whether an expression is contradictory. JDetermines whether an expression is contingent (that is, true in at least ? one interpretation and false in at least one interpretation). JLists the values of an expression under all interpretations (that is, all & assignments of values to variables). 8Represents expressions using only ASCII characters (the  function J pretty-prints expressions using logical symbols only present in extended  character sets).    !"      !"NoneThe ; function accepts the name of a source, and a string to be I parsed, and attempts to parse the string as a logical expression of the  following forms, where Æ and È are metalinguistic variables $ standing for any valid expression.  Variables: "P", "Q", "a", "b" etc.; basically anything in  the character class [a-zA-Z]  Negation: "~Æ"  Conjunction: "(Æ & È)"  Disjunction: "(Æ | È)"  Conditional: "(Æ -> È)"  Biconditional: "(Æ <-> È)" JTop-level expressions where the primary connective is a binary one do not ( need to be parenthesised. For example, "p -> (q & r)" is a valid  expression, although " (p -> (q & r))" is also fine. #$%&'(#$%&'(NoneThe ; function produces a truth table for the given expression. The  is a configurable version of  which allows a K printer function to be selected, so for example one can print ASCII truth  tables by passing  to  instead of . )*+,)+,)*+,None-The -= function converts expressions to negation normal form. This  function is total: it'4s defined for all expressions, not just those which M only use negation, conjunction and disjunction, although all expressions in = negation normal form do in fact only use those connectives. @The conversion is carried out by replacing any condtitionals or M biconditionals with equivalent expressions using only negation, conjunction  and disjunction. Then de Morgan'&s laws are applied to convert negated J conjunctions and disjunctions into the conjunction or disjunction of the  negation of their conjuncts: ¬(Æ "' È) is converted to  (¬Æ "( ¬È)  while ¬(Æ "( È) becomes (¬Æ "' ¬È). .The .= function converts expressions to conjunctive normal form: a E conjunction of clauses, where a clause is a disjunction of literals $ (variables and negated variables). FThe conversion is carried out by first converting the expression into ? negation normal form, and then applying the distributive law. Because it first applies -(, it is a total function and can handle < expressions which include conditionals and biconditionals. /The /= function converts expressions to disjunctive normal form: a E disjunction of clauses, where a clause is a conjunction of literals $ (variables and negated variables). FThe conversion is carried out by first converting the expression into ? negation normal form, and then applying the distributive law. Because it first applies -(, it is a total function and can handle < expressions which include conditionals and biconditionals. -./012-./-./012None    3      !"#$%&'()*+,-./0123456789: hatt-1.5.0.2Data.Logic.PropositionalData.Logic.Propositional.CoreData.Logic.Propositional.ParserData.Logic.Propositional.Tables$Data.Logic.Propositional.NormalFormsbaseGHC.ShowshowMappingExpr Biconditional Conditional Disjunction ConjunctionNegationVariableVar interpret assignments variables equivalent isTautologyisContradiction isContingentvalues showAscii parseExpr truthTable truthTableP randomExpr randomExpr' randomBin randomNeg randomVarshowBinaryConnectiveshowBCshowBCA$fArbitraryExpr$fArbitraryVar $fShowExpr $fShowVar statementexprvariablenegationbinaryPbinaryPrintershowAssignmentshowBool colourBooltoNNFtoCNFtoDNFnegdisjconj