Îõ³h& ðBâ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`a 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-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 b& or in a "tabular" way using multiple cÜ 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.d 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.éefghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤  !"#$%&'()$# !"  %&'( Safe-Inferred%& QN sbv-program2Logical equivalence implemented in "tabular" style EFGHIJKLMN EFGHIJKLMN Safe-Inferred%&Üï O sbv-programGiven a  ì tries to generate a set of input/output values that satisfy the specification. Uses solver under the hood.P sbv-program1Creates sanitized variable name suitable for SBV.Q sbv-programShortcut for the more general P function.R sbv-programShortcut for the more general P function.S sbv-programShortcut for the more general P function.T sbv-programShortcut for the more general P function.U sbv-program"Renders the solution in SSA style.P 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.OPQRSTUOPQRSTU Safe-Inferred%&ÁÃÜe¨ sbv-programRepresents a failed run in V. Corresponds to program variable S in the paper.V 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. Do not use this procedure for solving real problems.W sbv-programAn implementation of RefinedExAllSolverÈ presented in section 6.2 of the paper. This is an improved version of V. It only keeps input values |\vec I| in S- and uses different synthesis constraints on  synthesis and  verification steps.X 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.Y 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.Z 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.[ 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 Y€, but unlike it allows creating both existentially and universally quantified variables. Standard and Refined procedures pass ©5 to create existentially quantified variables, while X uses ª.\ sbv-programÅLast building block of the synthesis process. This function creates È_{conn} and Æ_{lib} constraints and return them.V sbv-programComponent library sbv-program*Specification of program being synthesizedW sbv-programComponent library sbv-program*Specification of program being synthesizedX sbv-programComponent library sbv-program*Specification of program being synthesizedZ 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|.[ sbv-program#Variable creation function. Either © or ª. sbv-programComponent library. sbv-programNumber of program inputs |\vec I|.efghijklmnopqrstuvwxyz{|}~€‚ƒ„…†‡ˆ‰Š‹ŒŽ‘’“”•–—˜™š›œžŸ ¡¢£¤    !"#$%&'(EFGHIJKLMNOPQRSTUVWXYZ[\VWXYZ[\ Safe-Inferred%&6^ 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 0010` sbv-program1Synthesizes a formula for the quadratic equation x^2 - 2*x + 1 = 0^_`a^_`a«        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdecfghijkijlijmijnijoijpijqijrijsijtijuivwivxivyivziv{iv|iv}iv~iviv€iviv‚ivƒiv„iv…iv†iv‡ivˆiv‰ivŠiv‹ivŒivivŽiviviv‘iv’iv“iv”iv•iv–iv—iv˜iv™ivšiv›iœiœžiœŸiœ ¡¢£¡¢¤¡¢¥¡¢¦¡¢§¡¢¨¡¢©¡¢ª¡¢«¡¢¬¡¢­¡¢®¯°±¯°²i³´µc¶·c¶¸¹*sbv-program-1.0.0.0-JTnuyJsJdjgFEPU0rJKDNrData.SBV.Program.TypesData.SBV.Program.SimpleLibraryData.SBV.Program.UtilsData.SBV.ProgramData.SBV.Program.Examples ProgramTreeInstructionNode InputLeafProgram programIOsprogramInstructions InstructioninstructionIOsinstructionComponentIOs_ins_outSynthesisError ErrorUnsat ErrorUnknownErrorZeroResultsRequestedErrorSeedingFailedSimpleComponent simpleName simpleSpec SimpleSpec simpleArity simpleFuncSynthComponentcompNamecompSpecextraLocConstrs SynthSpec specArityspecFunc SLocationLocation 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$fShowSynthesisErrorincdecaddsubmulandornotbXorbEquiv sampleSpec mkVarNamemkInputLocNamemkOutputLocNamemkInputVarNamemkOutputVarNamewritePseudocodestandardExAllProcedurerefinedExAllProcedureexAllProcedurecreateProgramLocs constrainLocscreateProgramVarsWithcreateVarsConstraints $fShowSTuplepaperRunningExampleSpecpaperRunningExamplequadEquExampleSpecquadEquExamplesbv-9.1-K2obF3Nc7RH75SD7QUXzc3Data.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 sbvForall