whi      !"#$%&'()*+,-./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 YZ[\]^_`abcdefgh non-portable experimentalEdward Kmett <ekmett@gmail.com> Safe-Inferred ijklmnopqrs ijklmnoqrs ijklmnopqrs non-portable experimentalEdward Kmett <ekmett@gmail.com>Nonetutt non-portable experimentalEdward Kmett <ekmett@gmail.com> Safe-Inferred!Literals with partial evaluation 5A naked possibly-negated Atom, present in the target  . Lift a v to a  w  w non-portable experimentalEdward Kmett <ekmett@gmail.com>None A conjunction of clauses GA disjunction of possibly negated atoms. Negated atoms are represented  by negating the identifier. 5Extract the (possibly negated) atoms referenced by a  . A formula with no clauses Assert a literal  The boolean not operation   O "a A  (O ! A) & (O ! A)  (O | A) & (O | A)  The boolean and operation   O "a (A & B & C)  (O ! (A & B & C)) & (O ! (A & B & C))  (O | (A & B & C)) & (O | (A & B & C))  (O | A) & (O | B) & (O | C) & (O | A | B | C)  The boolean or operation   O "a (A | B | C)  (O ! (A | B | C)) & (O ! (A | B | C))  (O | (A | B | C)) & (O | (A | B | C))  (O | A | B | C) & (O | (A & B & C))  (O | A | B | C) & (O | A) & (O | B) & (O | C)  The boolean xor operation    O "a A " B  O "a ((A & B) | (A & B))  (O ! ((A & B) | (A & B))) & (O ! ((A & B) | (A & B))) Left hand side:    O ! ((A & B) | (A & B))  O | ((A & B) | (A & B))  O | ((A | A) & (A | B) & (A | B) & (B | B))  O | ((A | B) & (A | B))  (O | A | B) & (O | A | B)   Right hand side:    O ! ((A & B) | (A & B))  O | ((A & B) | (A & B))  O | ((A & B) & (A & B))  O | ((A | B) & (A | B))  (O | A | B) & (O | A | B) Result:   (O | A | B) & (O | A | B) & (O | A | B) & (O | A | B)  The boolean  else-then-if or mux operation    O "a (F & P) | (T & P)  (O ! ((F & P) | (T & P))) & (O ! ((F & P) | (T & P))) Left hand side:    O ! ((F & P) | (T & P))  O | ((F & P) | (T & P))  O | ((F | T) & (F | P) & (T | P) & (P | P))  O | ((F | T) & (F | P) & (T | P))  (O | F | T) & (O | F | P) & (O | T | P) Right hand side:    O ! ((F & P) | (T & P))  O | ((F & P) | (T & P))  O | ((F & P) & (T & P))  O | ((F | P) & (T | P))  (O | F | P) & (O | T | P) Result:   (O | F | T) & (O | F | P) & (O | T | P) & (O | F | P) & (O | T | P)  Output Input Output Inputs Output Inputs Output Input Input Output  False branch  True branch  Predicate/ selector xyz      xyz non-portable experimentalEdward Kmett <ekmett@gmail.com> Safe-InferredHThis is used to observe the directed graph with sharing of how multiple    values are related. $False branch, true branch, predicate/selector branch {|}{|} non-portable experimentalEdward Kmett <ekmett@gmail.com>None~An explicit prenex quantifier %(Q)DIMACS file format pretty printer ;This is used to generate the problem statement for a given SAT  .  A (quantified) boolean formula. !"The id of the last atom allocated "a set of clauses to assert #;a set indicating which literals are universally quantified $a mapping used during Bit expansion P , qbfNameMap :: !(IntMap String) -- ^ a map of literals to given names ~ !"#$ !"#$ !"#$ ~ !"#$ non-portable experimentalEdward Kmett <ekmett@gmail.com>None %&'()*+,-. %&'()*+,-. *+,-.&)('%%&)('*+,-. non-portable experimentalEdward Kmett <ekmett@gmail.com>None /01/01/01 /01 non-portable experimentalEdward Kmett <ekmett@gmail.com>None23456789: 23456789: 89:23456723456789: non-portable experimentalEdward Kmett <ekmett@gmail.com>None;MInstances for this class for product-like types can be automatically derived % for any type that is an instance of Generic. ;<=;<=;<=;<=  non-portable experimentalEdward Kmett <ekmett@gmail.com> Safe-Inferred>?@>?@>?@>?@  non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneC?Return a value based on the solution if one can be determined. ABCABCABCABC  non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneD/01DDD  non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneE The normal v/ operators in Haskell are not overloaded. This ! provides a richer set that are. MInstances for this class for product-like types can be automatically derived % for any type that is an instance of Generic FLift a v G G = F H H = F ILogical conjunction. J$Logical disjunction (inclusive or). KLogical implication. LLogical negation M+The logical conjunction of several values. N+The logical disjunction of several values. O3The negated logical conjunction of several values. O = L . MP3The negated logical disjunction of several values. P = L . NQ Exclusive-or R9Choose between two alternatives based on a selector bit. SA S: provides a reference to a possibly indeterminate boolean 9 value that can be determined by an external SAT solver. U'Assert claims that in any satisf given S must be G in any 3 satisfying interpretation of the current problem.  Convert a S to a . $EFGHIJKLMNOPQR False branch  True branch  Predicate/selector branch STUEFGHIJKLMNOPQRSTUSTUEFGHIJKLMNOPQRE FGHIJKLMNOPQRSTU  non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneVOInstances for this class for arbitrary types can be automatically derived from Generic. W-Compare for equality within the SAT problem. X/Compare for inequality within the SAT problem. VWXVWXVWXVWX non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneDYZ[\]^_`abcdefgh      !"#$%&'()*+YZ[\]^_`abcdefghghefcdab_`]^[\YZ<YZ[\]^_`abcdefgh      !"#$%&'()*+ non-portable experimentalEdward Kmett <ekmett@gmail.com>NoneK !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh, !"#$%&'()*+,-./01234567899:;<=>?@ABCDEFFGHIJ K L M N O P Q R S T U V W X Y Z [ \ ] ^ _   ` a b cddeeffgghhiijjkklmnopqrstuvwxyz{|}~0 {|{|         !"#$%&'()*+,-./01 ersatz-0.1Ersatz.Internal.LiteralErsatz.Internal.FormulaErsatz.Internal.CircuitErsatz.ProblemErsatz.SolutionErsatz.Solver.Minisat Ersatz.MonadErsatz.VariableErsatz.EncodingErsatz.Decoding Ersatz.Solver Ersatz.BitErsatz.Equatable Ersatz.BitsErsatz.Internal.ParserErsatz.Internal.StableNameSolverBitErsatzLitBoolLiteral literalId negateLiterallit negateLitFormula formulaSetClause clauseSetclauseLiterals formulaEmptyformulaLiteral formulaNot formulaAnd formulaOr formulaXor formulaMuxCircuitVarNotMuxXorOrAndQDIMACSqdimacsProblem qbfLastAtom qbfFormula qbfUniversalsqbfSNMapResult Satisfied UnsatisfiedUnsolvedSolutionsolutionLiteralsolutionStableName solutionFromminisat cryptominisat minisatPathMonadSATsat literalExists literalForall assertFormulagenerateLiteralSATrunSATVariableexistsforallEncodingEncodedencodeDecodingDecodeddecode solveWithBooleanbooltruefalse&&||==>notandornandnorxorchooseassert Equatable===/==Bit8Bit7Bit6Bit5Bit4Bit3Bit2Bit1Parser runParsersepBysepBy1tokenstringintegernegationnaturaleofsatisfymakeStableName'baseSystem.Mem.StableName StableNameghc-prim GHC.Types $fShowLiteralformulaFromList $fShowClause $fShowFormula$fTraversableCircuit$fFoldableCircuit$fFunctorCircuitQuantForallExistsgetQuant$fQDIMACSProblem$fQDIMACSClause$fQDIMACSFormula$fQDIMACSLiteral $fShowProblem$fDefaultProblem$fBoundedResult $fEnumResultresultOfparseSolutionFile parseSolutionsolutionvaluesvalue$fMonadSATRWST$fMonadSATRWST0$fMonadSATWriterT$fMonadSATWriterT0$fMonadSATStateT$fMonadSATStateT0$fMonadSATReaderT $fMonadSATSAT $fMonadIOSAT$fMonadTransSAT $fMonadSAT$fApplicativeSAT $fFunctorSAT GVariablegexistsgforall$fVariable(,,,,,,)$fVariable(,,,,,)$fVariable(,,,,)$fVariable(,,,)$fVariable(,,) $fVariable(,)$fVariableLiteral $fVariableLit $fGVariableM1 $fGVariableK1$fGVariable:*: $fGVariableU1$fEncodingTree $fEncodingSeq$fEncodingMaybe $fEncodingMap$fEncodingIntMap$fEncodingHashMap$fEncodingEither$fEncodingArray $fEncoding[]$fEncoding(,,,,,,,)$fEncoding(,,,,,,)$fEncoding(,,,,,)$fEncoding(,,,,)$fEncoding(,,,)$fEncoding(,,) $fEncoding(,) $fEncoding() $fEncodingLit$fDecodingTree $fDecodingSeq$fDecodingMaybe $fDecodingMap$fDecodingIntMap$fDecodingHashMap$fDecodingEither$fDecodingArray $fDecoding[]$fDecoding(,,,,,,,)$fDecoding(,,,,,,)$fDecoding(,,,,,)$fDecoding(,,,,)$fDecoding(,,,)$fDecoding(,,) $fDecoding(,) $fDecoding() $fDecodingLit$fDecodingLiteralTrueFalserunBitGBooleangbool&&#||#==>#gnotgandgorgxor $fBooleanBool $fGBooleanM1 $fGBooleanK1 $fGBoolean:*: $fGBooleanU1 $fEncodingBit $fDecodingBit $fVariableBit $fBooleanBit GEquatable===#$fGEquatableK1$fGEquatableM1$fGEquatable:+:$fGEquatable:*:$fGEquatableU1$fEquatableEither $fEquatable[]$fEquatableMaybe$fEquatable(,,,,,,)$fEquatable(,,,,,)$fEquatable(,,,,)$fEquatable(,,,)$fEquatable(,,)$fEquatable(,)$fEquatableBit boolsToNum1 boolsToNum2 boolsToNum3 boolsToNum4 boolsToNum5 boolsToNum6 boolsToNum7 boolsToNum8bitsOf numToBool boolsToNum boolToNum$fEncodingBit8$fEncodingBit7$fEncodingBit6$fEncodingBit5$fEncodingBit4$fEncodingBit3$fEncodingBit2$fEncodingBit1$fDecodingBit8$fDecodingBit7$fDecodingBit6$fDecodingBit5$fDecodingBit4$fDecodingBit3$fDecodingBit2$fDecodingBit1$fVariableBit8$fVariableBit7$fVariableBit6$fVariableBit5$fVariableBit4$fVariableBit3$fVariableBit2$fVariableBit1$fEquatableBit8$fEquatableBit7$fEquatableBit6$fEquatableBit5$fEquatableBit4$fEquatableBit3$fEquatableBit2$fEquatableBit1 $fBooleanBit8 $fBooleanBit7 $fBooleanBit6 $fBooleanBit5 $fBooleanBit4 $fBooleanBit3 $fBooleanBit2 $fBooleanBit1