This module provides some goodies and utility functions for SMT-LIB.
Author: Jan Tikovsky
Version: January 2018
                declVars
                  ::  [(String,Sort)] -> [Command]  Declare a list of variables  | 
              
            
                tint
                  ::  Int -> Term  Construct SMT-LIB term from given integer  | 
              
            
                tfloat
                  ::  Float -> Term  Construct SMT-LIB term from given float  | 
              
            
                tchar
                  ::  Char -> Term  Construct SMT-LIB term from given character  | 
              
            
                tvar
                  ::  Int -> Term  Construct SMT-LIB term from given variable index  | 
              
            
                var
                  ::  String -> Term  Construct SMT-LIB term from a string  | 
              
            
                tcomb
                  ::  String -> [Term] -> Term  Construct SMT-LIB constructor term  | 
              
            
                qtcomb
                  ::  QIdent -> [Term] -> Term  Construct qualified SMT-LIB constructor term  | 
              
            
                forAll
                  ::  [Int] -> [Sort] -> Term -> Term  Construct universally quantified SMT-LIB term  | 
              
            
                tneg
                  ::  Term -> Term  Negate given numeral SMT-LIB term  | 
              
            
                tabs
                  ::  Term -> Term  Absolute value of an SMT-LIB term  | 
              
            
                (+%)
                  ::  Term -> Term -> Term  Add two SMT-LIB terms  | 
              
            
                (-%)
                  ::  Term -> Term -> Term  Subtract an SMT-LIB term from another one  | 
              
            
                (*%)
                  ::  Term -> Term -> Term  Multiply two SMT-LIB terms  | 
              
            
                (/%)
                  ::  Term -> Term -> Term  Divide an SMT-LIB term by another one  | 
              
            
                true
                  ::  Term  SMT-LIB term true
               | 
              
            
                false
                  ::  Term  SMT-LIB term false
               | 
              
            
                (=%)
                  ::  Term -> Term -> Term  Constrain two SMT-LIB terms to be equal  | 
              
            
                (/=%)
                  ::  Term -> Term -> Term  Constrain two SMT-LIB terms to be different  | 
              
            
                (<%)
                  ::  Term -> Term -> Term  Constrain two SMT-LIB terms with a less-than-relation  | 
              
            
                (<=%)
                  ::  Term -> Term -> Term  Constrain two SMT-LIB terms with a less-than-or-equal-relation  | 
              
            
                (>%)
                  ::  Term -> Term -> Term  Constrain two SMT-LIB terms with a greater-than-relation  | 
              
            
                (>=%)
                  ::  Term -> Term -> Term  Constrain two SMT-LIB terms with a greater-than-or-equal-relation  | 
              
            
                tand
                  ::  [Term] -> Term  Combine a list of SMT-LIB terms using a conjunction  | 
              
            
                tor
                  ::  [Term] -> Term  Combine a list of SMT-LIB terms using a disjunction  | 
              
            
                (==>)
                  ::  Term -> Term -> Term  Logical implication  | 
              
            
                tnot
                  ::  Term -> Term  Logical negation of an SMT-LIB term  | 
              
            
                scomb
                  ::  String -> [Sort] -> Sort  Construct an SMT-LIB sort  | 
              
            
                orderingSort
                  ::  Sort  Representation of Ordering type as SMT-LIB sort  | 
              
            
                boolSort
                  ::  Sort  Representation of Bool type as SMT-LIB sort  | 
              
            
                intSort
                  ::  Sort  Representation of Int type as SMT-LIB sort  | 
              
            
                floatSort
                  ::  Sort  Representation of Float type as SMT-LIB sort  | 
              
            
                funSC
                  ::  [Sort] -> Sort  Representation of -> type constructor as SMT-LIB sort constructor  | 
              
            
                nop
                  ::  Command  Generate a nop
                SMT-LIB command
               | 
              
            
                assert
                  ::  [Term] -> Command  Generate an assert
                SMT-LIB command
               | 
              
            
                unqual
                  ::  QIdent -> String  Get the unqualified identifier of a qualified SMT-LIB identifier  | 
              
            
                isDeclData
                  ::  Command -> Bool  Is given SMT-LIB command a declaration of an algebraic data type  | 
              
            
                isEcho
                  ::  Command -> Bool  Is given SMT-LIB command an Echo  | 
              
            
                echo
                  ::  String -> Command  Smart constructor for the Echo SMT-LIB command marking every Echo command with an initial @ character which is necessary to recognize Echos during parsing  | 
              
            
                comment
                  ::  String -> Command  Smart constructor to generate a comment in an SMT-LIB script  | 
              
            
                var2SMT
                  ::  Int -> String  Transform a FlatCurry variable index into an SMT-LIB symbol  | 
              
            
| 
                    
                    
                    
                     Construct SMT-LIB term from a string 
  | 
                  
                
| 
                    
                     
                       Construct SMT-LIB constructor term 
  | 
                  
                
| 
                    
                     
                       Construct qualified SMT-LIB constructor term 
  | 
                  
                
| 
                    
                    
                    
                     Negate given numeral SMT-LIB term 
  | 
                  
                
| 
                    
                    
                    
                     Absolute value of an SMT-LIB term 
  | 
                  
                
| 
                    
                    
                    
                     Add two SMT-LIB terms 
  | 
                  
                
| 
                    
                    
                    
                     Subtract an SMT-LIB term from another one 
  | 
                  
                
| 
                    
                    
                    
                     Multiply two SMT-LIB terms 
  | 
                  
                
| 
                    
                    
                    
                     Divide an SMT-LIB term by another one 
  | 
                  
                
| 
                    
                    
                    
                     
                      SMT-LIB term  
  | 
                  
                
| 
                    
                    
                    
                     
                      SMT-LIB term  
  | 
                  
                
| 
                    
                    
                    
                     Constrain two SMT-LIB terms to be equal 
  | 
                  
                
| 
                    
                    
                    
                     Constrain two SMT-LIB terms to be different 
  | 
                  
                
| 
                    
                    
                    
                     Constrain two SMT-LIB terms with a less-than-relation 
  | 
                  
                
| 
                    
                    
                    
                     Constrain two SMT-LIB terms with a less-than-or-equal-relation 
  | 
                  
                
| 
                    
                    
                    
                     Constrain two SMT-LIB terms with a greater-than-relation 
  | 
                  
                
| 
                    
                    
                    
                     Constrain two SMT-LIB terms with a greater-than-or-equal-relation 
  | 
                  
                
| 
                    
                    
                    
                     Combine a list of SMT-LIB terms using a conjunction 
  | 
                  
                
| 
                    
                    
                    
                     Combine a list of SMT-LIB terms using a disjunction 
  | 
                  
                
| 
                    
                    
                    
                     Logical implication 
  | 
                  
                
| 
                    
                    
                    
                     Logical negation of an SMT-LIB term 
  | 
                  
                
| 
                    
                     
                       Construct an SMT-LIB sort 
  | 
                  
                
| 
                    
                     
                       Representation of Ordering type as SMT-LIB sort 
  | 
                  
                
| 
                    
                    
                    
                     Representation of Bool type as SMT-LIB sort 
  | 
                  
                
| 
                    
                    
                    
                     Representation of Int type as SMT-LIB sort 
  | 
                  
                
| 
                    
                    
                    
                     Representation of Float type as SMT-LIB sort 
  | 
                  
                
| 
                    
                    
                    
                     Representation of -> type constructor as SMT-LIB sort constructor 
  | 
                  
                
| 
                    
                    
                    
                     
                      Generate a  
  | 
                  
                
| 
                    
                    
                    
                     Get the unqualified identifier of a qualified SMT-LIB identifier 
  | 
                  
                
| 
                    
                     
                       Is given SMT-LIB command a declaration of an algebraic data type  | 
                  
                
| 
                    
                    
                    
                     Smart constructor for the Echo SMT-LIB command marking every Echo command with an initial @ character which is necessary to recognize Echos during parsing 
  | 
                  
                
| 
                    
                    
                    
                     Smart constructor to generate a comment in an SMT-LIB script 
  | 
                  
                
| 
                    
                     
                       Transform a FlatCurry variable index into an SMT-LIB symbol  |