A tool to translate FlatCurry operations into SMT assertions.
Author: Michael Hanus
Version: April 2019
| funcs2SMT
                  ::  IORef VState -> [(String,String)] -> IO CommandTranslates a list of operations specified by their qualified name (together with all operations on which these operation depend on) into an SMT string that axiomatizes their semantics. | 
| fun2SMT
                  ::  AFuncDecl TypeExpr -> ([String],FunSig,Term) | 
| exp2SMT
                  ::  Maybe Term -> AExpr TypeExpr -> Term | 
| patternTest
                  ::  APattern TypeExpr -> Term -> Term | 
| constructorTest
                  ::  Bool -> (String,String) -> Term -> TypeExpr -> TermTranslates a constructor name and a term into an SMT formula implementing a test on the term for this constructor. | 
| selectors
                  ::  (String,String) -> [String]Computes the SMT selector names for a given constructor. | 
| polytype2sort
                  ::  TypeExpr -> SortTranslates a FlatCurry type expression into a corresponding SMT sort. | 
| polytype2psort
                  ::  TypeExpr -> SortTranslates a FlatCurry type expression into a parametric SMT sort. | 
| type2sort
                  ::  [(String,String)] -> Bool -> Bool -> TypeExpr -> SortTranslates a FlatCurry type expression into a corresponding SMT sort. | 
| tcons2SMT
                  ::  (String,String) -> StringTranslates a FlatCurry type constructor name into SMT. | 
| tdecl2SMT
                  ::  TypeDecl -> CommandTranslates a type declaration into an SMT datatype declaration. | 
| genSelName
                  ::  (String,String) -> Int -> StringGenerates the name of the i-th selector for a given constructor. | 
| preludeType2SMT
                  ::  String -> [Command]Translates a prelude type into an SMT datatype declaration, if necessary. | 
| cons2SMT
                  ::  Bool -> Bool -> (String,String) -> TypeExpr -> QIdentTranslates a qualifed name with given result type into an SMT identifier. | 
| pat2smt
                  ::  APattern TypeExpr -> TermTranslates a pattern into an SMT expression. | 
| lit2smt
                  ::  Literal -> TermTranslates a literal into an SMT expression. | 
| transOpName
                  ::  (String,String) -> StringTranslates a qualified FlatCurry name into an SMT string. | 
| encodeSpecialChars
                  ::  String -> StringEncode special characters in strings | 
| decodeSpecialChars
                  ::  String -> StringTranslates urlencoded string into equivalent ASCII string. | 
| untransOpName
                  ::  String -> Maybe (String,String)Translates a (translated) SMT string back into qualified FlatCurry name. | 
| 
                       Translates a list of operations specified by their qualified name (together with all operations on which these operation depend on) into an SMT string that axiomatizes their semantics. | 
| 
                       | 
| 
                       
                      Translates a constructor name and a term into an SMT formula
implementing a test on the term for this constructor.
If the first argument is true, parametric sorts are used
(i.e., we translate a polymorphic function), otherwise
type variables are translated into the sort  | 
| 
                       Computes the SMT selector names for a given constructor. | 
| 
                       
                      Translates a FlatCurry type expression into a corresponding SMT sort.
Polymorphic type variables are translated into the sort  | 
| 
                       
                      Translates a FlatCurry type expression into a parametric SMT sort.
Thus, a polymorphic type variable  | 
| 
                       
                      Translates a FlatCurry type expression into a corresponding SMT sort.
If the first argument is null, then type variables are
translated into the sort  | 
| 
                       Translates a FlatCurry type constructor name into SMT. | 
| 
                       Generates the name of the i-th selector for a given constructor. | 
| 
                       Translates a prelude type into an SMT datatype declaration, if necessary. | 
| 
                       
                      Translates a qualifed name with given result type into an SMT identifier.
If the first argument is true and the result type is not a base type,
the type is attached via  | 
| Translates a literal into an SMT expression. We represent character as ints. | 
| 
                       Translates a qualified FlatCurry name into an SMT string. | 
| 
                       Encode special characters in strings | 
| 
                       Translates urlencoded string into equivalent ASCII string. | 
| 
                       Translates a (translated) SMT string back into qualified FlatCurry name. Returns Nothing if it was not a qualified name. |