Îõ³h&)$ëí      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijkl Safe-Inferred%&8ÁÃÄÅÇ   sbv-programA & converted into a tree-like structure. sbv-program1A datatype that unites program instructions with   of the program itself. sbv-programA datatype that holds a " with inputs and output locations.  sbv-programÃA datatype holding inputs and output of something. Usual types for l are ' and &. sbv-program4Possible failure reasons during synthesis operation. sbv-program A simplest library component datatype possible. sbv-program A simplest  specification" datatype possible. Type variable a$ stands for function's domain type. sbv-programA class for a library component. sbv-programâComponent name (optional). Used for naming SBV variables and when rendering the resulting program. sbv-program Component's  specification.  sbv-programOptional constraints to set on location variables  l_x \in L.! sbv-programMethod used to get the value of a constant component. It doesn't require an implementation if you don't use constant components." sbv-program Method used to by the synthesis procedure to set the value of a constant component. It doesn't require an implementation if you don't use constant components.# sbv-program#Class for a program or a component  specification  Æ(\vec I, O). Type variable a# stands for function's domain type.$ sbv-program2Number of inputs the specification function takes.% sbv-programãAn equation that relates input variables to the output one. The equation is build up either using m& or in a "tabular" way using multiple nÜ expressions. See definitions from the Data.SBV.Program.SimpleLibrary module for examples.& sbv-program Symbolic '.' sbv-program(Type used to represent a value from the set of location variables  l_x \in L.) sbv-programÖExtract all locations from the program as a list, including locations of instructions.* sbv-program6Sorts program's instructions by their output location.+ sbv-program Create a  for a given  by resolving its '=s. This function effectively performs dead code elimination.o sbv-program A variant of +- that builds from a specified starting point., sbv-program Create a  for each unused output in the % sbv-program'Input variables. The list should be of $ size. sbv-programOutput variable.ípqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯  !"#$%&'()*+,-'&#$% !"(  )*+, Safe-Inferred%& ×T sbv-program2Logical equivalence implemented in "tabular" style IJKLMNOPQRST IJKLMNOPQRST Safe-Inferred%&Üï#U sbv-programGiven a #ì tries to generate a set of input/output values that satisfy the specification. Uses solver under the hood.V sbv-programReturns ° if the component is a constant3 one. Constant components have zero inputs (their $ =0 ).W sbv-program1Creates sanitized variable name suitable for SBV.X sbv-programShortcut for the more general W function.Y sbv-programShortcut for the more general W function.Z sbv-programShortcut for the more general W function.[ sbv-programShortcut for the more general W function.\ sbv-program"Renders the solution in SSA style.W sbv-programÝBase name, which can be an empty string, in which case "UnnamedComponent" value will be used. sbv-programSetting  isLocation to ° will append "Loc" to the name. sbv-programIf isOutput is ± the value of i is also appended to the name. sbv-programNumber of an input. Can be ² for an output.UVWXYZ[\UVWXYZ[\ Safe-Inferred%&ÁÃÜ!Ý ³ sbv-programRepresents a failed run in ]. Corresponds to program variable S in the paper.] sbv-programAn implementation of StandardExAllSolver presented in section 6.1 of the paper. As stated in the paper, this implementation boils down to exhaustive enumeration of possible solutions, and as such isn't effective. It can be used to better understand how the synthesis procedure works and provides a lot of debugging output. It also doesn't support constant components. Do not use this procedure for solving real problems.^ sbv-programAn implementation of RefinedExAllSolverÈ presented in section 6.2 of the paper. This is an improved version of ]. It only keeps input values |\vec I| in S- and uses different synthesis constraints on  synthesis and  verification steps._ sbv-programòThis procedure is not part of the paper. It uses forall quantification directly when creating variables from the T‰ set. As consequence it requires an SMT-solver than can handle foralls (for instance, Z3). This procedure is the easiest to understand.` sbv-programŽFirst step of each synthesis procedure. Given a library of components and a number of program's inputs, it creates existentially quantified location variables (members of set L> in the paper) for each component and for the program itself.a sbv-programÄSecond step of each synthesis procedure. It applies constraints on location variables from section 5 of the original paper. These constraints include well-formedness constraint È_{wfp}, acyclicity constraint È_{acyc} and consistency constraint È_{cons}ú. Constraints are not returned from this function, but are applied immediately. Section 5 of the paper also talks about connectivity constraint È_{conn}, which is not created here.b sbv-programûThird step of the synthesis process. It creates variables that represent actual inputs/outputs values (members of the set T) in the paper). This function resembles `€, but unlike it allows creating both existentially and universally quantified variables. Standard and Refined procedures pass ´5 to create existentially quantified variables, while _ uses µ.c sbv-programÅLast building block of the synthesis process. This function creates È_{conn} and Æ_{lib} constraints and return them.d sbv-programSpecial version of bÆ for constant components. A constant component is a component having $ =0». The original paper slightly touches this topic in the last paragraph of section 7. This function always uses existential quantification and only operates on constant components. The ' returned from this function contains ² values for  and non-constant  . The user is expected to call b later and then use e to merge two results.e sbv-programGiven a # of constant-only components and a 9 of non-constant components, combine them into a single .f sbv-programSmart version of ¶ for ‚. For each component it gets solutions for location variable, effectively turning 'Instruction SLocation (comp a)' into 'Instruction Location (comp a)'. For constant components it additionaly fills 'comp a' part of the structure with its returning value.] sbv-programComponent library sbv-program*Specification of program being synthesized^ sbv-programComponent library sbv-program*Specification of program being synthesized_ sbv-programComponent library sbv-program*Specification of program being synthesizeda sbv-programThe M* constant from the paper, which equals to  N + |\vec I| , where N is the size of the library. sbv-programNumber of program inputs |\vec I|.b sbv-program#Variable creation function. Either ´ or µ. sbv-programComponent library. sbv-programNumber of program inputs |\vec I|.d sbv-programComponent library.e sbv-programThe result of d sbv-programThe result of b‹pqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤¥¦§¨©ª«¬­®¯   "! #$%&'()*+,IJKLMNOPQRSTUVWXYZ[\]^_`abcdef ]^_`abcdef Safe-Inferred%&$Ýh sbv-program‘A running example from the original paper. The function should reset the least significant set bit of a 8-byte word: >>> 0001 0010 -> 0000 0010j sbv-program1Synthesizes a formula for the quadratic equation x^2 - 2x + 1 = 0l sbv-programÐReimplement arbitrary boolean formula with only NAND components. Example usage: ÂnandifyExample 2 (SimpleSpec 2 $ [i1, i2] o -> o .== (i1 .&& i2)) l sbv-program#Amount of NAND components available sbv-program%Specification of the desired functionhijklhijkl·        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopnqrstuvtuwtuxtuytuztu{tu|tu}tu~tutu€t‚tƒt„t…t†t‡tˆt‰tŠt‹tŒttŽttt‘t’t“t”t•t–t—t˜t™tšt›tœttžtŸt t¡t¢t£t¤t¥t¦t§¨t§©t§ªt§«¬­®¬­¯¬­°¬­±¬­²¬­³¬­´¬­µ¬­¶¬­·¬­¸¬­¹º»¼º»½t¾¿ÀnÁÂnÁÃnÄÅÆ*sbv-program-1.1.0.0-Kgs8r19ldJ15Ig51BU3rvQData.SBV.Program.TypesData.SBV.Program.SimpleLibraryData.SBV.Program.UtilsData.SBV.ProgramData.SBV.Program.Examples ProgramTreeInstructionNode InputLeafProgram programIOsprogramInstructions InstructioninstructionIOsinstructionComponentIOs_ins_outSynthesisError ErrorUnsat ErrorUnknownErrorZeroResultsRequestedErrorSeedingFailedSimpleComponent simpleName simpleSpec simpleVal SimpleSpec simpleArity simpleFuncSynthComponentcompNamecompSpecextraLocConstrs getConstValue putConstValue SynthSpec specArityspecFunc SLocationLocation mkSimpleComp toIOsListsortInstructionsbuildProgramTreebuildForestResult$fSynthSpecSimpleSpeca$fShowSimpleComponent*$fSynthComponentSimpleComponentSimpleSpeca$fEqSymbolicIOs$fTraversableIOs $fFoldableIOs$fBifoldableInstruction$fBitraversableInstruction$fBifunctorInstruction$fBifoldableProgram$fBitraversableProgram$fBifunctorProgram$fFoldableProgramTree$fShowProgramTree$fEqProgramTree$fOrdProgramTree$fFunctorProgramTree $fShowProgram $fEqProgram $fOrdProgram$fShowInstruction$fEqInstruction$fOrdInstruction $fShowIOs$fEqIOs$fOrdIOs $fFunctorIOs$fShowSynthesisErrorconstincdecaddsubmulandornotbXorbNandbEquiv sampleSpecisConstantComponent mkVarNamemkInputLocNamemkOutputLocNamemkInputVarNamemkOutputVarNamewritePseudocodestandardExAllProcedurerefinedExAllProcedureexAllProcedurecreateProgramLocs constrainLocscreateProgramVarsWithcreateVarsConstraintscreateConstantVarscombineProgramVarsinstructionGetValue $fShowSTuplepaperRunningExampleSpecpaperRunningExamplequadEquExampleSpecquadEquExamplenandifyExamplesbv-9.0-6uwhYa1fJTqLr7zD4F1aIeData.SBV.Core.Model.==Data.SBV.Core.Data.=>buildProgramTree'baseData.Bitraversable Bitraversable bitraverse bisequenceA bisequencebimapM bimapDefault bimapAccumR bimapAccumLbiforMbiforbifoldMapDefaultData.Bifoldable Bifoldablebifoldrbifoldlbifold bifoldMap bitraverse_bisum bisequence_ bisequenceA_ biproductbiorbinull binotElembimsum biminimumBy biminimum bimaximumBy bimaximumbimapM_bilengthbifor_biforM_bifoldrMbifoldr1bifoldr'bifoldlMbifoldl1bifoldl'bifindbielem biconcatMapbiconcatbiasumbianybiandbiallbiListData.Bifunctor Bifunctorsecondbimapfirst'bifunctors-5.5.14-7eEBVOK9skQ57VNCX1BGjData.BiapplicativetraverseBiaWith sequenceBia traverseBiabiliftA3<<**>><<$>> Biapplicative<<**>>biliftA2bipure<<*>>ghc-prim GHC.TypesTrueFalseGHC.Err undefinedSTupleData.SBV.Client.BaseIO sbvExists sbvForallData.SBV.Control.BaseIOgetValue