diff --git a/.gitignore b/.gitignore index 8424ea64b..505601597 100644 --- a/.gitignore +++ b/.gitignore @@ -48,4 +48,6 @@ src/api/dotnet/Native.cs src/api/python/z3consts.py src/api/python/z3core.py src/ast/pattern/database.h -src/util/version.h \ No newline at end of file +src/util/version.h +src/api/java/Z3Native.c +src/api/java/Z3Native.java \ No newline at end of file diff --git a/doc/README b/doc/README index 68019ca86..818374808 100644 --- a/doc/README +++ b/doc/README @@ -3,9 +3,20 @@ API documentation To generate the API documentation for the C, .NET and Python APIs, we must execute - python mk_doc.py + python mk_api_doc.py We must have doxygen installed in our system. -The documentation will be stored in the subdirectory './html'. -The main file is './html/index.html' +The documentation will be stored in the subdirectory './api/html'. +The main file is './api/html/index.html' + +Code documentation +------------------ + +To generate documentation for the Z3 code, we must execute + + doxygen z3code.dox + +The documentation will be store in the subdirectory './code/html'. +The main file is './code/html/index.html' + diff --git a/doc/mk_doc.py b/doc/mk_api_doc.py similarity index 88% rename from doc/mk_doc.py rename to doc/mk_api_doc.py index b6ca4ae0b..cb90748ff 100644 --- a/doc/mk_doc.py +++ b/doc/mk_api_doc.py @@ -21,7 +21,7 @@ def cleanup_API(inf, outf): _outf.write(line) try: - mk_dir('html') + mk_dir('api/html') cleanup_API('../src/api/z3_api.h', 'z3_api.h') print "Removed annotations from z3_api.h." DEVNULL = open(os.devnull, 'wb') @@ -33,15 +33,15 @@ try: print "Generated C and .NET API documentation." os.remove('z3_api.h') print "Removed temporary file z3_api.h." - shutil.copy('z3.css', 'html/z3.css') + shutil.copy('z3.css', 'api/html/z3.css') print "Copied z3.css." - shutil.copy('z3.png', 'html/z3.png') + shutil.copy('z3.png', 'api/html/z3.png') print "Copied z3.png." sys.path.append('../src/api/python') pydoc.writedoc('z3') - shutil.move('z3.html', 'html/z3.html') + shutil.move('z3.html', 'api/html/z3.html') print "Generated Python documentation." - print "Documentation was successfully generated at subdirectory './html'." + print "Documentation was successfully generated at subdirectory './api/html'." except: print "ERROR: failed to generate documentation" exit(1) diff --git a/doc/update_website.cmd b/doc/update_website.cmd index 1b1ede627..106d6a4eb 100644 --- a/doc/update_website.cmd +++ b/doc/update_website.cmd @@ -1,4 +1,4 @@ REM Script for updating the website containing the Z3 API documentation. REM You must be inside the Microsoft network to execute this script, and REM robocopy must be in your PATH. -robocopy /S html \\research\root\web\external\en-us\UM\redmond\projects\z3 \ No newline at end of file +robocopy /S api\html \\research\root\web\external\en-us\UM\redmond\projects\z3 \ No newline at end of file diff --git a/doc/z3.dox b/doc/z3.dox index 0ab3d7656..6b8780352 100644 --- a/doc/z3.dox +++ b/doc/z3.dox @@ -38,7 +38,7 @@ PROJECT_NUMBER = # If a relative path is entered, it will be relative to the location # where doxygen was started. If left blank the current directory will be used. -OUTPUT_DIRECTORY = . +OUTPUT_DIRECTORY = api # If the CREATE_SUBDIRS tag is set to YES, then doxygen will create # 4096 sub-directories (in 2 levels) under the output directory of each output diff --git a/doc/z3code.dox b/doc/z3code.dox new file mode 100644 index 000000000..7ec57594e --- /dev/null +++ b/doc/z3code.dox @@ -0,0 +1,1081 @@ +# Doxyfile 1.6.3 + +# This file describes the settings to be used by the documentation system +# doxygen (www.doxygen.org) for a project +# +# All text after a hash (#) is considered a comment and will be ignored +# The format is: +# TAG = value [value, ...] +# For lists items can also be appended using: +# TAG += value [value, ...] +# Values that contain spaces should be placed between quotes (" ") + +#--------------------------------------------------------------------------- +# Project related configuration options +#--------------------------------------------------------------------------- + +DOXYFILE_ENCODING = UTF-8 + +# The PROJECT_NAME tag is a single word (or a sequence of words surrounded +# by quotes) that should identify the project. + +PROJECT_NAME = Z3_CODE +PROJECT_NUMBER = +OUTPUT_DIRECTORY = code +CREATE_SUBDIRS = NO +OUTPUT_LANGUAGE = English +BRIEF_MEMBER_DESC = YES +REPEAT_BRIEF = YES +ABBREVIATE_BRIEF = "The $name class " \ + "The $name widget " \ + "The $name file " \ + is \ + provides \ + specifies \ + contains \ + represents \ + a \ + an \ + the + +# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then +# Doxygen will generate a detailed section even if there is only a brief +# description. + +ALWAYS_DETAILED_SEC = YES +INLINE_INHERITED_MEMB = NO +FULL_PATH_NAMES = YES +STRIP_FROM_PATH = ".." +STRIP_FROM_INC_PATH = +SHORT_NAMES = NO +JAVADOC_AUTOBRIEF = NO +QT_AUTOBRIEF = NO +MULTILINE_CPP_IS_BRIEF = NO +INHERIT_DOCS = YES +SEPARATE_MEMBER_PAGES = NO +TAB_SIZE = 4 + +ALIASES = "beginfaq=" \ + "cmdopt{1}=\arg /\1" \ + "ext{1}=.\1" \ + "ty{1}=\1" \ + "emph{1}=\1" \ + "extdoc{2}=\2" \ + "nicebox{1}=
\1
" \ + "mlonly=\if Ocaml" \ + "endmlonly=\endif" \ + "mlh=\if Ocaml" \ + "endmlh=\endif" \ + "conly=" \ + "ccode{1}=\1" \ + "zframe=" + +OPTIMIZE_OUTPUT_FOR_C = YES +OPTIMIZE_OUTPUT_JAVA = NO +OPTIMIZE_FOR_FORTRAN = NO +OPTIMIZE_OUTPUT_VHDL = NO + +# Doxygen has a built-in mapping, but you can override or extend it using this tag. +# The format is ext=language, where ext is a file extension, and language is one of +# the parsers supported by doxygen: IDL, Java, Javascript, C#, C, C++, D, PHP, +# Objective-C, Python, Fortran, VHDL, C, C++. For instance to make doxygen treat +# .inc files as Fortran files (default is PHP), and .f files as C (default is Fortran), +# use: inc=Fortran f=C. Note that for custom extensions you also need to set FILE_PATTERNS otherwise the files are not read by doxygen. + +EXTENSION_MAPPING = + +BUILTIN_STL_SUPPORT = NO +CPP_CLI_SUPPORT = NO +SIP_SUPPORT = NO +IDL_PROPERTY_SUPPORT = YES +DISTRIBUTE_GROUP_DOC = NO +SUBGROUPING = YES +TYPEDEF_HIDES_STRUCT = NO +SYMBOL_CACHE_SIZE = 0 + +#--------------------------------------------------------------------------- +# Build related configuration options +#--------------------------------------------------------------------------- + +EXTRACT_ALL = YES +EXTRACT_PRIVATE = YES +EXTRACT_STATIC = YES +EXTRACT_LOCAL_CLASSES = YES +EXTRACT_LOCAL_METHODS = YES +EXTRACT_ANON_NSPACES = YES +HIDE_UNDOC_MEMBERS = NO +HIDE_UNDOC_CLASSES = NO +HIDE_FRIEND_COMPOUNDS = NO +HIDE_IN_BODY_DOCS = NO +INTERNAL_DOCS = YES +CASE_SENSE_NAMES = NO + +# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen +# will show members with their full class and namespace scopes in the +# documentation. If set to YES the scope will be hidden. + +HIDE_SCOPE_NAMES = YES + +SHOW_INCLUDE_FILES = YES + +FORCE_LOCAL_INCLUDES = NO +INLINE_INFO = YES +SORT_MEMBER_DOCS = YES + +# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the +# brief documentation of file, namespace and class members alphabetically +# by member name. If set to NO (the default) the members will appear in +# declaration order. + +SORT_BRIEF_DOCS = NO + +# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then doxygen will sort the (brief and detailed) documentation of class members so that constructors and destructors are listed first. If set to NO (the default) the constructors will appear in the respective orders defined by SORT_MEMBER_DOCS and SORT_BRIEF_DOCS. This tag will be ignored for brief docs if SORT_BRIEF_DOCS is set to NO and ignored for detailed docs if SORT_MEMBER_DOCS is set to NO. + +SORT_MEMBERS_CTORS_1ST = NO + +# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the +# hierarchy of group names into alphabetical order. If set to NO (the default) +# the group names will appear in their defined order. + +SORT_GROUP_NAMES = NO + +# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be +# sorted by fully-qualified names, including namespaces. If set to +# NO (the default), the class list will be sorted only by class name, +# not including the namespace part. +# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES. +# Note: This option applies only to the class list, not to the +# alphabetical list. + +SORT_BY_SCOPE_NAME = NO + +# The GENERATE_TODOLIST tag can be used to enable (YES) or +# disable (NO) the todo list. This list is created by putting \todo +# commands in the documentation. + +GENERATE_TODOLIST = YES + +# The GENERATE_TESTLIST tag can be used to enable (YES) or +# disable (NO) the test list. This list is created by putting \test +# commands in the documentation. + +GENERATE_TESTLIST = YES + +# The GENERATE_BUGLIST tag can be used to enable (YES) or +# disable (NO) the bug list. This list is created by putting \bug +# commands in the documentation. + +GENERATE_BUGLIST = YES + +# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or +# disable (NO) the deprecated list. This list is created by putting +# \deprecated commands in the documentation. + +GENERATE_DEPRECATEDLIST= YES + +# The ENABLED_SECTIONS tag can be used to enable conditional +# documentation sections, marked by \if sectionname ... \endif. + +ENABLED_SECTIONS = + +# The MAX_INITIALIZER_LINES tag determines the maximum number of lines +# the initial value of a variable or define consists of for it to appear in +# the documentation. If the initializer consists of more lines than specified +# here it will be hidden. Use a value of 0 to hide initializers completely. +# The appearance of the initializer of individual variables and defines in the +# documentation can be controlled using \showinitializer or \hideinitializer +# command in the documentation regardless of this setting. + +MAX_INITIALIZER_LINES = 30 + +# Set the SHOW_USED_FILES tag to NO to disable the list of files generated +# at the bottom of the documentation of classes and structs. If set to YES the +# list will mention the files that were used to generate the documentation. + +SHOW_USED_FILES = NO + +# If the sources in your project are distributed over multiple directories +# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy +# in the documentation. The default is NO. + +SHOW_DIRECTORIES = NO + +# Set the SHOW_FILES tag to NO to disable the generation of the Files page. +# This will remove the Files entry from the Quick Index and from the +# Folder Tree View (if specified). The default is YES. + +SHOW_FILES = YES + +# Set the SHOW_NAMESPACES tag to NO to disable the generation of the +# Namespaces page. +# This will remove the Namespaces entry from the Quick Index +# and from the Folder Tree View (if specified). The default is YES. + +SHOW_NAMESPACES = YES + +# The FILE_VERSION_FILTER tag can be used to specify a program or script that +# doxygen should invoke to get the current version for each file (typically from +# the version control system). Doxygen will invoke the program by executing (via +# popen()) the command , where is the value of +# the FILE_VERSION_FILTER tag, and is the name of an input file +# provided by doxygen. Whatever the program writes to standard output +# is used as the file version. See the manual for examples. + +FILE_VERSION_FILTER = + +# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed by +# doxygen. The layout file controls the global structure of the generated output files +# in an output format independent way. The create the layout file that represents +# doxygen's defaults, run doxygen with the -l option. You can optionally specify a +# file name after the option, if omitted DoxygenLayout.xml will be used as the name +# of the layout file. + +LAYOUT_FILE = + +#--------------------------------------------------------------------------- +# configuration options related to warning and progress messages +#--------------------------------------------------------------------------- + +# The QUIET tag can be used to turn on/off the messages that are generated +# by doxygen. Possible values are YES and NO. If left blank NO is used. + +QUIET = NO + +# The WARNINGS tag can be used to turn on/off the warning messages that are +# generated by doxygen. Possible values are YES and NO. If left blank +# NO is used. + +WARNINGS = YES + +# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings +# for undocumented members. If EXTRACT_ALL is set to YES then this flag will +# automatically be disabled. + +WARN_IF_UNDOCUMENTED = YES + +# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for +# potential errors in the documentation, such as not documenting some +# parameters in a documented function, or documenting parameters that +# don't exist or using markup commands wrongly. + +WARN_IF_DOC_ERROR = YES + +# This WARN_NO_PARAMDOC option can be abled to get warnings for +# functions that are documented, but have no documentation for their parameters +# or return value. If set to NO (the default) doxygen will only warn about +# wrong or incomplete parameter documentation, but not about the absence of +# documentation. + +WARN_NO_PARAMDOC = NO + +# The WARN_FORMAT tag determines the format of the warning messages that +# doxygen can produce. The string should contain the $file, $line, and $text +# tags, which will be replaced by the file and line number from which the +# warning originated and the warning text. Optionally the format may contain +# $version, which will be replaced by the version of the file (if it could +# be obtained via FILE_VERSION_FILTER) + +WARN_FORMAT = "$file:$line: $text " + +# The WARN_LOGFILE tag can be used to specify a file to which warning +# and error messages should be written. If left blank the output is written +# to stderr. + +WARN_LOGFILE = + +#--------------------------------------------------------------------------- +# configuration options related to the input files +#--------------------------------------------------------------------------- + +# The INPUT tag can be used to specify the files and/or directories that contain +# documented source files. You may enter file names like "myfile.cpp" or +# directories like "/usr/src/myproject". Separate the files or directories +# with spaces. + +INPUT = ../src + +# This tag can be used to specify the character encoding of the source files +# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is +# also the default input encoding. Doxygen uses libiconv (or the iconv built +# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for +# the list of possible encodings. + +INPUT_ENCODING = UTF-8 + +# If the value of the INPUT tag contains directories, you can use the +# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank the following patterns are tested: +# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx +# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90 + +FILE_PATTERNS = *.cpp *.h + +# The RECURSIVE tag can be used to turn specify whether or not subdirectories +# should be searched for input files as well. Possible values are YES and NO. +# If left blank NO is used. + +RECURSIVE = YES + +# The EXCLUDE tag can be used to specify files and/or directories that should +# excluded from the INPUT source files. This way you can easily exclude a +# subdirectory from a directory tree whose root is specified with the INPUT tag. + +EXCLUDE = + +# The EXCLUDE_SYMLINKS tag can be used select whether or not files or +# directories that are symbolic links (a Unix filesystem feature) are excluded +# from the input. + +EXCLUDE_SYMLINKS = NO + +# If the value of the INPUT tag contains directories, you can use the +# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude +# certain files from those directories. Note that the wildcards are matched +# against the file with absolute path, so to exclude all test directories +# for example use the pattern */test/* + +EXCLUDE_PATTERNS = + +# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names +# (namespaces, classes, functions, etc.) that should be excluded from the +# output. The symbol name can be a fully qualified name, a word, or if the +# wildcard * is used, a substring. Examples: ANamespace, AClass, +# AClass::ANamespace, ANamespace::*Test + +EXCLUDE_SYMBOLS = + +# The EXAMPLE_PATH tag can be used to specify one or more files or +# directories that contain example code fragments that are included (see +# the \include command). + +EXAMPLE_PATH = + +# If the value of the EXAMPLE_PATH tag contains directories, you can use the +# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp +# and *.h) to filter out the source-files in the directories. If left +# blank all files are included. + +EXAMPLE_PATTERNS = * + +# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be +# searched for input files to be used with the \include or \dontinclude +# commands irrespective of the value of the RECURSIVE tag. +# Possible values are YES and NO. If left blank NO is used. + +EXAMPLE_RECURSIVE = NO + +# The IMAGE_PATH tag can be used to specify one or more files or +# directories that contain image that are included in the documentation (see +# the \image command). + +IMAGE_PATH = + +# The INPUT_FILTER tag can be used to specify a program that doxygen should +# invoke to filter for each input file. Doxygen will invoke the filter program +# by executing (via popen()) the command , where +# is the value of the INPUT_FILTER tag, and is the name of an +# input file. Doxygen will then use the output that the filter program writes +# to standard output. +# If FILTER_PATTERNS is specified, this tag will be +# ignored. + +INPUT_FILTER = + +# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern +# basis. +# Doxygen will compare the file name with each pattern and apply the +# filter if there is a match. +# The filters are a list of the form: +# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further +# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER +# is applied to all files. + +FILTER_PATTERNS = + +# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using +# INPUT_FILTER) will be used to filter the input files when producing source +# files to browse (i.e. when SOURCE_BROWSER is set to YES). + +FILTER_SOURCE_FILES = NO + +#--------------------------------------------------------------------------- +# configuration options related to source browsing +#--------------------------------------------------------------------------- + +# If the SOURCE_BROWSER tag is set to YES then a list of source files will +# be generated. Documented entities will be cross-referenced with these sources. +# Note: To get rid of all source code in the generated output, make sure also +# VERBATIM_HEADERS is set to NO. + +SOURCE_BROWSER = YES + +# Setting the INLINE_SOURCES tag to YES will include the body +# of functions and classes directly in the documentation. + +INLINE_SOURCES = YES + +# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct +# doxygen to hide any special comment blocks from generated source code +# fragments. Normal C and C++ comments will always remain visible. + +STRIP_CODE_COMMENTS = YES + +# If the REFERENCED_BY_RELATION tag is set to YES +# then for each documented function all documented +# functions referencing it will be listed. + +REFERENCED_BY_RELATION = YES + +# If the REFERENCES_RELATION tag is set to YES +# then for each documented function all documented entities +# called/used by that function will be listed. + +REFERENCES_RELATION = YES + +# If the REFERENCES_LINK_SOURCE tag is set to YES (the default) +# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from +# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will +# link to the source code. +# Otherwise they will link to the documentation. + +REFERENCES_LINK_SOURCE = YES + +# If the USE_HTAGS tag is set to YES then the references to source code +# will point to the HTML generated by the htags(1) tool instead of doxygen +# built-in source browser. The htags tool is part of GNU's global source +# tagging system (see http://www.gnu.org/software/global/global.html). You +# will need version 4.8.6 or higher. + +USE_HTAGS = NO + +# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen +# will generate a verbatim copy of the header file for each class for +# which an include is specified. Set to NO to disable this. + +VERBATIM_HEADERS = NO + +#--------------------------------------------------------------------------- +# configuration options related to the alphabetical class index +#--------------------------------------------------------------------------- + +# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index +# of all compounds will be generated. Enable this if the project +# contains a lot of classes, structs, unions or interfaces. + +ALPHABETICAL_INDEX = NO + +# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then +# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns +# in which this list will be split (can be a number in the range [1..20]) + +COLS_IN_ALPHA_INDEX = 5 + +# In case all classes in a project start with a common prefix, all +# classes will be put under the same header in the alphabetical index. +# The IGNORE_PREFIX tag can be used to specify one or more prefixes that +# should be ignored while generating the index headers. + +IGNORE_PREFIX = + +#--------------------------------------------------------------------------- +# configuration options related to the HTML output +#--------------------------------------------------------------------------- + +# If the GENERATE_HTML tag is set to YES (the default) Doxygen will +# generate HTML output. + +GENERATE_HTML = YES + +# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. +# If a relative path is entered the value of OUTPUT_DIRECTORY will be +# put in front of it. If left blank `html' will be used as the default path. + +HTML_OUTPUT = html + +# The HTML_FILE_EXTENSION tag can be used to specify the file extension for +# each generated HTML page (for example: .htm,.php,.asp). If it is left blank +# doxygen will generate files with .html extension. + +HTML_FILE_EXTENSION = .html + +# The HTML_HEADER tag can be used to specify a personal HTML header for +# each generated HTML page. If it is left blank doxygen will generate a +# standard header. + +HTML_HEADER = + +# The HTML_FOOTER tag can be used to specify a personal HTML footer for +# each generated HTML page. If it is left blank doxygen will generate a +# standard footer. + +HTML_FOOTER = + +# The HTML_STYLESHEET tag can be used to specify a user-defined cascading +# style sheet that is used by each HTML page. It can be used to +# fine-tune the look of the HTML output. If the tag is left blank doxygen +# will generate a default style sheet. Note that doxygen will try to copy +# the style sheet file to the HTML output directory, so don't put your own +# stylesheet in the HTML output directory as well, or it will be erased! + +HTML_STYLESHEET = + +# If the HTML_TIMESTAMP tag is set to YES then the footer of each generated HTML +# page will contain the date and time when the page was generated. Setting +# this to NO can help when comparing the output of multiple runs. + +HTML_TIMESTAMP = YES + +# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes, +# files or namespaces will be aligned in HTML using tables. If set to +# NO a bullet list will be used. + +HTML_ALIGN_MEMBERS = YES + +# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML +# documentation will contain sections that can be hidden and shown after the +# page has loaded. For this to work a browser that supports +# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox +# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari). + +HTML_DYNAMIC_SECTIONS = YES + +# If the GENERATE_DOCSET tag is set to YES, additional index files +# will be generated that can be used as input for Apple's Xcode 3 +# integrated development environment, introduced with OSX 10.5 (Leopard). +# To create a documentation set, doxygen will generate a Makefile in the +# HTML output directory. Running make will produce the docset in that +# directory and running "make install" will install the docset in +# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find +# it at startup. +# See http://developer.apple.com/tools/creatingdocsetswithdoxygen.html for more information. + +GENERATE_DOCSET = NO + +# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the +# feed. A documentation feed provides an umbrella under which multiple +# documentation sets from a single provider (such as a company or product suite) +# can be grouped. + +DOCSET_FEEDNAME = "Doxygen generated docs" + +# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that +# should uniquely identify the documentation set bundle. This should be a +# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen +# will append .docset to the name. + +DOCSET_BUNDLE_ID = org.doxygen.Project + +# If the GENERATE_HTMLHELP tag is set to YES, additional index files +# will be generated that can be used as input for tools like the +# Microsoft HTML help workshop to generate a compiled HTML help file (.chm) +# of the generated HTML documentation. + +GENERATE_HTMLHELP = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can +# be used to specify the file name of the resulting .chm file. You +# can add a path in front of the file if the result should not be +# written to the html output directory. + +CHM_FILE = + +# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can +# be used to specify the location (absolute path including file name) of +# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run +# the HTML help compiler on the generated index.hhp. + +HHC_LOCATION = + +# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag +# controls if a separate .chi index file is generated (YES) or that +# it should be included in the master .chm file (NO). + +GENERATE_CHI = NO + +# If the GENERATE_HTMLHELP tag is set to YES, the CHM_INDEX_ENCODING +# is used to encode HtmlHelp index (hhk), content (hhc) and project file +# content. + +CHM_INDEX_ENCODING = + +# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag +# controls whether a binary table of contents is generated (YES) or a +# normal table of contents (NO) in the .chm file. + +BINARY_TOC = NO + +# The TOC_EXPAND flag can be set to YES to add extra items for group members +# to the contents of the HTML help documentation and to the tree view. + +TOC_EXPAND = NO + +# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and QHP_VIRTUAL_FOLDER +# are set, an additional index file will be generated that can be used as input for +# Qt's qhelpgenerator to generate a Qt Compressed Help (.qch) of the generated +# HTML documentation. + +GENERATE_QHP = NO + +# If the QHG_LOCATION tag is specified, the QCH_FILE tag can +# be used to specify the file name of the resulting .qch file. +# The path specified is relative to the HTML output folder. + +QCH_FILE = + +# The QHP_NAMESPACE tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#namespace + +QHP_NAMESPACE = org.doxygen.Project + +# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating +# Qt Help Project output. For more information please see +# http://doc.trolltech.com/qthelpproject.html#virtual-folders + +QHP_VIRTUAL_FOLDER = doc + +# If QHP_CUST_FILTER_NAME is set, it specifies the name of a custom filter to add. +# For more information please see +# http://doc.trolltech.com/qthelpproject.html#custom-filters + +QHP_CUST_FILTER_NAME = + +# The QHP_CUST_FILT_ATTRS tag specifies the list of the attributes of the custom filter to add.For more information please see +# Qt Help Project / Custom Filters. + +QHP_CUST_FILTER_ATTRS = + +# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this project's +# filter section matches. +# Qt Help Project / Filter Attributes. + +QHP_SECT_FILTER_ATTRS = + +# If the GENERATE_QHP tag is set to YES, the QHG_LOCATION tag can +# be used to specify the location of Qt's qhelpgenerator. +# If non-empty doxygen will try to run qhelpgenerator on the generated +# .qhp file. + +QHG_LOCATION = + +# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files +# will be generated, which together with the HTML files, form an Eclipse help +# plugin. To install this plugin and make it available under the help contents +# menu in Eclipse, the contents of the directory containing the HTML and XML +# files needs to be copied into the plugins directory of eclipse. The name of +# the directory within the plugins directory should be the same as +# the ECLIPSE_DOC_ID value. After copying Eclipse needs to be restarted before the help appears. + +GENERATE_ECLIPSEHELP = NO + +# A unique identifier for the eclipse help plugin. When installing the plugin +# the directory name containing the HTML and XML files should also have +# this name. + +ECLIPSE_DOC_ID = org.doxygen.Project + +# The DISABLE_INDEX tag can be used to turn on/off the condensed index at +# top of each HTML page. The value NO (the default) enables the index and +# the value YES disables it. + +DISABLE_INDEX = YES + +# This tag can be used to set the number of enum values (range [1..20]) +# that doxygen will group on one line in the generated HTML documentation. + +ENUM_VALUES_PER_LINE = 4 + +# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index +# structure should be generated to display hierarchical information. +# If the tag value is set to YES, a side panel will be generated +# containing a tree-like index structure (just like the one that +# is generated for HTML Help). For this to work a browser that supports +# JavaScript, DHTML, CSS and frames is required (i.e. any modern browser). +# Windows users are probably better off using the HTML help feature. + +GENERATE_TREEVIEW = YES + +# By enabling USE_INLINE_TREES, doxygen will generate the Groups, Directories, +# and Class Hierarchy pages using a tree view instead of an ordered list. + +USE_INLINE_TREES = YES + +# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be +# used to set the initial width (in pixels) of the frame in which the tree +# is shown. + +TREEVIEW_WIDTH = 250 + +# Use this tag to change the font size of Latex formulas included +# as images in the HTML documentation. The default is 10. Note that +# when you change the font size after a successful doxygen run you need +# to manually remove any form_*.png images from the HTML output directory +# to force them to be regenerated. + +FORMULA_FONTSIZE = 10 + +# When the SEARCHENGINE tag is enabled doxygen will generate a search box for the HTML output. The underlying search engine uses javascript +# and DHTML and should work on any modern browser. Note that when using HTML help (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET) there is already a search function so this one should +# typically be disabled. For large projects the javascript based search engine +# can be slow, then enabling SERVER_BASED_SEARCH may provide a better solution. + +SEARCHENGINE = YES + +# When the SERVER_BASED_SEARCH tag is enabled the search engine will be implemented using a PHP enabled web server instead of at the web client using Javascript. Doxygen will generate the search PHP script and index +# file to put on the web server. The advantage of the server based approach is that it scales better to large projects and allows full text search. The disadvances is that it is more difficult to setup +# and does not have live searching capabilities. + +SERVER_BASED_SEARCH = NO + +#--------------------------------------------------------------------------- +# configuration options related to the LaTeX output +#--------------------------------------------------------------------------- + +GENERATE_LATEX = NO +LATEX_OUTPUT = latex +LATEX_CMD_NAME = latex +MAKEINDEX_CMD_NAME = makeindex +COMPACT_LATEX = NO +PAPER_TYPE = a4wide +EXTRA_PACKAGES = +LATEX_HEADER = +PDF_HYPERLINKS = NO +USE_PDFLATEX = YES +LATEX_BATCHMODE = NO +LATEX_HIDE_INDICES = NO +LATEX_SOURCE_CODE = NO + +GENERATE_RTF = NO +RTF_OUTPUT = rtf +COMPACT_RTF = NO +RTF_HYPERLINKS = NO +RTF_STYLESHEET_FILE = +RTF_EXTENSIONS_FILE = + +GENERATE_MAN = NO +MAN_OUTPUT = man +MAN_EXTENSION = .3 +MAN_LINKS = NO + +GENERATE_XML = NO +XML_OUTPUT = xml +XML_SCHEMA = +XML_DTD = +XML_PROGRAMLISTING = YES + +GENERATE_AUTOGEN_DEF = NO + +GENERATE_PERLMOD = NO +PERLMOD_LATEX = NO +PERLMOD_PRETTY = YES +PERLMOD_MAKEVAR_PREFIX = + +#--------------------------------------------------------------------------- +# Configuration options related to the preprocessor +#--------------------------------------------------------------------------- + +# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will +# evaluate all C-preprocessor directives found in the sources and include +# files. + +ENABLE_PREPROCESSING = YES + +# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro +# names in the source code. If set to NO (the default) only conditional +# compilation will be performed. Macro expansion can be done in a controlled +# way by setting EXPAND_ONLY_PREDEF to YES. + +MACRO_EXPANSION = YES + +# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES +# then the macro expansion is limited to the macros specified with the +# PREDEFINED and EXPAND_AS_DEFINED tags. + +EXPAND_ONLY_PREDEF = YES + +# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files +# in the INCLUDE_PATH (see below) will be search if a #include is found. + +SEARCH_INCLUDES = YES + +# The INCLUDE_PATH tag can be used to specify one or more directories that +# contain include files that are not input files but should be processed by +# the preprocessor. + +INCLUDE_PATH = + +# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard +# patterns (like *.h and *.hpp) to filter out the header-files in the +# directories. If left blank, the patterns specified with FILE_PATTERNS will +# be used. + +INCLUDE_FILE_PATTERNS = + +# The PREDEFINED tag can be used to specify one or more macro names that +# are defined before the preprocessor is started (similar to the -D option of +# gcc). The argument of the tag is a list of macros of the form: name +# or name=definition (no spaces). If the definition and the = are +# omitted =1 is assumed. To prevent a macro definition from being +# undefined via #undef or recursively expanded use the := operator +# instead of the = operator. + +PREDEFINED =Z3_ast_opt:=Z3_ast Z3_bool_opt:=Z3_bool Z3_func_interp_opt:=Z3_func_interp Z3_model_opt:=Z3_model __out_opt:=__out + +# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then +# this tag can be used to specify a list of macro names that should be expanded. +# The macro definition that is found in the sources will be used. +# Use the PREDEFINED tag if you want to use a different macro definition. + +EXPAND_AS_DEFINED = + +# Z3_ast_opt Z3_bool_opt Z3_func_interp_opt Z3_model_opt __out_opt + +# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then +# doxygen's preprocessor will remove all function-like macros that are alone +# on a line, have an all uppercase name, and do not end with a semicolon. Such +# function macros are typically used for boiler-plate code, and will confuse +# the parser if not removed. + +SKIP_FUNCTION_MACROS = YES + +#--------------------------------------------------------------------------- +# Configuration::additions related to external references +#--------------------------------------------------------------------------- + +# The TAGFILES option can be used to specify one or more tagfiles. +# Optionally an initial location of the external documentation +# can be added for each tagfile. The format of a tag file without +# this location is as follows: +# +# TAGFILES = file1 file2 ... +# Adding location for the tag files is done as follows: +# +# TAGFILES = file1=loc1 "file2 = loc2" ... +# where "loc1" and "loc2" can be relative or absolute paths or +# URLs. If a location is present for each tag, the installdox tool +# does not have to be run to correct the links. +# Note that each tag file must have a unique name +# (where the name does NOT include the path) +# If a tag file is not located in the directory in which doxygen +# is run, you must also specify the path to the tagfile here. + +TAGFILES = + +# When a file name is specified after GENERATE_TAGFILE, doxygen will create +# a tag file that is based on the input files it reads. + +GENERATE_TAGFILE = + +# If the ALLEXTERNALS tag is set to YES all external classes will be listed +# in the class index. If set to NO only the inherited external classes +# will be listed. + +ALLEXTERNALS = NO + +# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed +# in the modules index. If set to NO, only the current project's groups will +# be listed. + +EXTERNAL_GROUPS = YES + +# The PERL_PATH should be the absolute path and name of the perl script +# interpreter (i.e. the result of `which perl'). + +PERL_PATH = /usr/bin/perl + +#--------------------------------------------------------------------------- +# Configuration options related to the dot tool +#--------------------------------------------------------------------------- + +# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will +# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base +# or super classes. Setting the tag to NO turns the diagrams off. Note that +# this option is superseded by the HAVE_DOT option below. This is only a +# fallback. It is recommended to install and use dot, since it yields more +# powerful graphs. + +CLASS_DIAGRAMS = YES + +# You can define message sequence charts within doxygen comments using the \msc +# command. Doxygen will then run the mscgen tool (see +# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the +# documentation. The MSCGEN_PATH tag allows you to specify the directory where +# the mscgen tool resides. If left empty the tool is assumed to be found in the +# default search path. + +MSCGEN_PATH = + +# If set to YES, the inheritance and collaboration graphs will hide +# inheritance and usage relations if the target is undocumented +# or is not a class. + +HIDE_UNDOC_RELATIONS = NO + +# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is +# available from the path. This tool is part of Graphviz, a graph visualization +# toolkit from AT&T and Lucent Bell Labs. The other options in this section +# have no effect if this option is set to NO (the default) + +HAVE_DOT = YES + +# By default doxygen will write a font called FreeSans.ttf to the output +# directory and reference it in all dot files that doxygen generates. This +# font does not include all possible unicode characters however, so when you need +# these (or just want a differently looking font) you can specify the font name +# using DOT_FONTNAME. You need need to make sure dot is able to find the font, +# which can be done by putting it in a standard location or by setting the +# DOTFONTPATH environment variable or by setting DOT_FONTPATH to the directory +# containing the font. + +DOT_FONTNAME = FreeSans + +# The DOT_FONTSIZE tag can be used to set the size of the font of dot graphs. +# The default size is 10pt. + +DOT_FONTSIZE = 10 + +# By default doxygen will tell dot to use the output directory to look for the +# FreeSans.ttf font (which doxygen will put there itself). If you specify a +# different font using DOT_FONTNAME you can set the path where dot +# can find it using this tag. + +DOT_FONTPATH = + +# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect inheritance relations. Setting this tag to YES will force the +# the CLASS_DIAGRAMS tag to NO. + +CLASS_GRAPH = YES + +# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for each documented class showing the direct and +# indirect implementation dependencies (inheritance, containment, and +# class references variables) of the class with other documented classes. + +COLLABORATION_GRAPH = NO + +# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen +# will generate a graph for groups, showing the direct groups dependencies + +GROUP_GRAPHS = YES + +# If the UML_LOOK tag is set to YES doxygen will generate inheritance and +# collaboration diagrams in a style similar to the OMG's Unified Modeling +# Language. + +UML_LOOK = YES + +# If set to YES, the inheritance and collaboration graphs will show the +# relations between templates and their instances. + +TEMPLATE_RELATIONS = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT +# tags are set to YES then doxygen will generate a graph for each documented +# file showing the direct and indirect include dependencies of the file with +# other documented files. + +INCLUDE_GRAPH = YES + +# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and +# HAVE_DOT tags are set to YES then doxygen will generate a graph for each +# documented header file showing the documented files that directly or +# indirectly include this file. + +INCLUDED_BY_GRAPH = YES + +# If the CALL_GRAPH and HAVE_DOT options are set to YES then +# doxygen will generate a call dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable call graphs +# for selected functions only using the \callgraph command. + +CALL_GRAPH = YES + +# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then +# doxygen will generate a caller dependency graph for every global function +# or class method. Note that enabling this option will significantly increase +# the time of a run. So in most cases it will be better to enable caller +# graphs for selected functions only using the \callergraph command. + +CALLER_GRAPH = YES + +# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen +# will graphical hierarchy of all classes instead of a textual one. + +GRAPHICAL_HIERARCHY = YES + +# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES +# then doxygen will show the dependencies a directory has on other directories +# in a graphical way. The dependency relations are determined by the #include +# relations between the files in the directories. + +DIRECTORY_GRAPH = YES + +# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images +# generated by dot. Possible values are png, jpg, or gif +# If left blank png will be used. + +DOT_IMAGE_FORMAT = png + +# The tag DOT_PATH can be used to specify the path where the dot tool can be +# found. If left blank, it is assumed the dot tool can be found in the path. + +DOT_PATH = + +# The DOTFILE_DIRS tag can be used to specify one or more directories that +# contain dot files that are included in the documentation (see the +# \dotfile command). + +DOTFILE_DIRS = + +# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of +# nodes that will be shown in the graph. If the number of nodes in a graph +# becomes larger than this value, doxygen will truncate the graph, which is +# visualized by representing a node as a red box. Note that doxygen if the +# number of direct children of the root node in a graph is already larger than +# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note +# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH. + +DOT_GRAPH_MAX_NODES = 50 + +# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the +# graphs generated by dot. A depth value of 3 means that only nodes reachable +# from the root by following a path via at most 3 edges will be shown. Nodes +# that lay further from the root node will be omitted. Note that setting this +# option to 1 or 2 may greatly reduce the computation time needed for large +# code bases. Also note that the size of a graph can be further restricted by +# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction. + +MAX_DOT_GRAPH_DEPTH = 1000 + +# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent +# background. This is disabled by default, because dot on Windows does not +# seem to support this out of the box. Warning: Depending on the platform used, +# enabling this option may lead to badly anti-aliased labels on the edges of +# a graph (i.e. they become hard to read). + +DOT_TRANSPARENT = NO + +# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output +# files in one run (i.e. multiple -o and -T options on the command line). This +# makes dot run faster, but since only newer versions of dot (>1.8.10) +# support this, this feature is disabled by default. + +DOT_MULTI_TARGETS = NO + +# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will +# generate a legend page explaining the meaning of the various boxes and +# arrows in the dot generated graphs. + +GENERATE_LEGEND = NO + +# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will +# remove the intermediate dot files that are used to generate +# the various graphs. + +DOT_CLEANUP = YES diff --git a/scripts/update_api.py b/scripts/update_api.py index b43c07ea5..3caca21ab 100644 --- a/scripts/update_api.py +++ b/scripts/update_api.py @@ -252,11 +252,11 @@ def param2java(p): k = param_kind(p) if k == OUT: if param_type(p) == INT or param_type(p) == UINT: - return "IntPtr" + return "Integer" elif param_type(p) == INT64 or param_type(p) == UINT64 or param_type(p) >= FIRST_OBJ_ID: - return "LongPtr" + return "Long" elif param_type(p) == STRING: - return "StringPtr" + return "String" else: print "ERROR: unreachable code" assert(False) @@ -496,14 +496,17 @@ def mk_java(): if not is_java_enabled(): return java_dir = get_component('java').src_dir - java_nativef = '%s/Z3Native.java' % java_dir - java_wrapperf = '%s/Z3Native.c' % java_dir + try: + os.mkdir('%s/com/Microsoft/Z3/' % java_dir) + except: + pass # OK if it exists already. + java_nativef = '%s/com/Microsoft/Z3/Native.java' % java_dir + java_wrapperf = '%s/com/Microsoft/Z3/Native.c' % java_dir java_native = open(java_nativef, 'w') java_native.write('// Automatically generated file\n') - java_native.write('public final class Z3Native {\n') - java_native.write(' public static class IntPtr { public int value; }\n') - java_native.write(' public static class LongPtr { public long value; }\n') - java_native.write(' public static class StringPtr { public String value; }\n') + java_native.write('package com.Microsoft.Z3;\n') + java_native.write('public final class Native {\n') + if is_windows(): java_native.write(' static { System.loadLibrary("%s"); }\n' % get_component('java')) else: @@ -521,9 +524,9 @@ def mk_java(): i = i + 1 java_native.write(');\n') java_native.write(' public static void main(String[] args) {\n') - java_native.write(' IntPtr major = new IntPtr(), minor = new IntPtr(), build = new IntPtr(), revision = new IntPtr();\n') + java_native.write(' Integer major = 0, minor = 0, build = 0, revision = 0;\n') java_native.write(' getVersion(major, minor, build, revision);\n') - java_native.write(' System.out.format("Z3 (for Java) %d.%d.%d%n", major.value, minor.value, build.value);\n') + java_native.write(' System.out.format("Z3 (for Java) %d.%d.%d%n", major, minor, build);\n') java_native.write(' }\n') java_native.write('}\n'); java_wrapper = open(java_wrapperf, 'w') diff --git a/src/api/api_arith.cpp b/src/api/api_arith.cpp index e4d687d47..55aef4868 100644 --- a/src/api/api_arith.cpp +++ b/src/api/api_arith.cpp @@ -101,27 +101,14 @@ extern "C" { SET_ERROR_CODE(Z3_INVALID_ARG); RETURN_Z3(0); } - if (mk_c(c)->fparams().m_pre_simplify_expr) { - // Do not use logging here... the function is implemented using API primitives - Z3_ast m1 = Z3_mk_int(c, -1, Z3_get_sort(c, args[0])); - Z3_ast args1[2] = { args[0], 0 }; - for (unsigned i = 1; i < num_args; ++i) { - Z3_ast args2[3] = { m1, args[i] }; - args1[1] = Z3_mk_mul(c, 2, args2); - args1[0] = Z3_mk_add(c, 2, args1); - } - RETURN_Z3(args1[0]); - } - else { - expr* r = to_expr(args[0]); - for (unsigned i = 1; i < num_args; ++i) { - expr* args1[2] = { r, to_expr(args[i]) }; - r = mk_c(c)->m().mk_app(mk_c(c)->get_arith_fid(), OP_SUB, 0, 0, 2, args1); - check_sorts(c, r); - } - mk_c(c)->save_ast_trail(r); - RETURN_Z3(of_expr(r)); + expr* r = to_expr(args[0]); + for (unsigned i = 1; i < num_args; ++i) { + expr* args1[2] = { r, to_expr(args[i]) }; + r = mk_c(c)->m().mk_app(mk_c(c)->get_arith_fid(), OP_SUB, 0, 0, 2, args1); + check_sorts(c, r); } + mk_c(c)->save_ast_trail(r); + RETURN_Z3(of_expr(r)); Z3_CATCH_RETURN(0); } @@ -129,12 +116,6 @@ extern "C" { Z3_TRY; LOG_Z3_mk_unary_minus(c, n); RESET_ERROR_CODE(); - if (mk_c(c)->fparams().m_pre_simplify_expr) { - Z3_ast m1 = Z3_mk_int(c, -1, Z3_get_sort(c, n)); - Z3_ast args[2] = { m1, n }; - Z3_ast r = Z3_mk_mul(c, 2, args); - RETURN_Z3(r); - } MK_UNARY_BODY(Z3_mk_unary_minus, mk_c(c)->get_arith_fid(), OP_UMINUS, SKIP); Z3_CATCH_RETURN(0); } diff --git a/src/api/api_bv.cpp b/src/api/api_bv.cpp index 32df30a64..8126c8e2a 100644 --- a/src/api/api_bv.cpp +++ b/src/api/api_bv.cpp @@ -280,12 +280,6 @@ Z3_ast Z3_API NAME(Z3_context c, unsigned i, Z3_ast n) { \ Z3_TRY; LOG_Z3_mk_bvsub(c, n1, n2); RESET_ERROR_CODE(); - // TODO: Do we really need this pre_simplifier hack? - if (mk_c(c)->fparams().m_pre_simplify_expr) { - Z3_ast m1 = Z3_mk_int(c, -1, Z3_get_sort(c, n2)); - Z3_ast r = Z3_mk_bvadd(c, n1, Z3_mk_bvmul(c, m1, n2)); - RETURN_Z3(r); - } MK_BINARY_BODY(Z3_mk_bvsub, mk_c(c)->get_bv_fid(), OP_BSUB, SKIP); Z3_CATCH_RETURN(0); } @@ -294,12 +288,6 @@ Z3_ast Z3_API NAME(Z3_context c, unsigned i, Z3_ast n) { \ Z3_TRY; LOG_Z3_mk_bvneg(c, n); RESET_ERROR_CODE(); - // TODO: Do we really need this pre_simplifier hack? - if (mk_c(c)->fparams().m_pre_simplify_expr) { - Z3_ast m1 = Z3_mk_int(c, -1, Z3_get_sort(c, n)); - Z3_ast r = Z3_mk_bvmul(c, m1, n); - RETURN_Z3(r); - } MK_UNARY_BODY(Z3_mk_bvneg, mk_c(c)->get_bv_fid(), OP_BNEG, SKIP); Z3_CATCH_RETURN(0); } diff --git a/src/api/dotnet/ASTVector.cs b/src/api/dotnet/ASTVector.cs index 1e66c4b21..f2ca58170 100644 --- a/src/api/dotnet/ASTVector.cs +++ b/src/api/dotnet/ASTVector.cs @@ -51,7 +51,7 @@ namespace Microsoft.Z3 } set { - Contract.Requires(value!= null); + Contract.Requires(value != null); Native.Z3_ast_vector_set(Context.nCtx, NativeObject, i, value.NativeObject); } diff --git a/src/api/dotnet/Version.cs b/src/api/dotnet/Version.cs index 15471c831..6c22ce7fe 100644 --- a/src/api/dotnet/Version.cs +++ b/src/api/dotnet/Version.cs @@ -22,77 +22,77 @@ using System.Diagnostics.Contracts; namespace Microsoft.Z3 { - /// - /// Version information. - /// - /// Note that this class is static. + /// + /// Version information. + /// + /// Note that this class is static. [ContractVerification(true)] public static class Version - { - static Version() { } - - /// - /// The major version - /// - public static uint Major { - get - { - uint major = 0, minor = 0, build = 0, revision = 0; - Native.Z3_get_version(ref major, ref minor, ref build, ref revision); - return major; - } - } + static Version() { } - /// - /// The minor version - /// - public static uint Minor - { - get - { - uint major = 0, minor = 0, build = 0, revision = 0; - Native.Z3_get_version(ref major, ref minor, ref build, ref revision); - return minor; - } - } + /// + /// The major version + /// + public static uint Major + { + get + { + uint major = 0, minor = 0, build = 0, revision = 0; + Native.Z3_get_version(ref major, ref minor, ref build, ref revision); + return major; + } + } - /// - /// The build version - /// - public static uint Build - { - get - { - uint major = 0, minor = 0, build = 0, revision = 0; - Native.Z3_get_version(ref major, ref minor, ref build, ref revision); - return build; - } - } + /// + /// The minor version + /// + public static uint Minor + { + get + { + uint major = 0, minor = 0, build = 0, revision = 0; + Native.Z3_get_version(ref major, ref minor, ref build, ref revision); + return minor; + } + } - /// - /// The revision - /// - public static uint Revision - { - get - { - uint major = 0, minor = 0, build = 0, revision = 0; - Native.Z3_get_version(ref major, ref minor, ref build, ref revision); - return revision; - } - } + /// + /// The build version + /// + public static uint Build + { + get + { + uint major = 0, minor = 0, build = 0, revision = 0; + Native.Z3_get_version(ref major, ref minor, ref build, ref revision); + return build; + } + } - /// - /// A string representation of the version information. - /// - new public static string ToString() - { - Contract.Ensures(Contract.Result() != null); + /// + /// The revision + /// + public static uint Revision + { + get + { + uint major = 0, minor = 0, build = 0, revision = 0; + Native.Z3_get_version(ref major, ref minor, ref build, ref revision); + return revision; + } + } - uint major = 0, minor = 0, build = 0, revision = 0; - Native.Z3_get_version(ref major, ref minor, ref build, ref revision); - return major.ToString() + "." + minor.ToString() + "." + build.ToString() + "." + revision.ToString(); + /// + /// A string representation of the version information. + /// + new public static string ToString() + { + Contract.Ensures(Contract.Result() != null); + + uint major = 0, minor = 0, build = 0, revision = 0; + Native.Z3_get_version(ref major, ref minor, ref build, ref revision); + return major.ToString() + "." + minor.ToString() + "." + build.ToString() + "." + revision.ToString(); + } } - } } diff --git a/src/api/java/com/Microsoft/Z3/AST.java b/src/api/java/com/Microsoft/Z3/AST.java new file mode 100644 index 000000000..9cd3286a2 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/AST.java @@ -0,0 +1,209 @@ +/** + * This file was automatically generated from AST.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ +/* using System.Collections; */ +/* using System.Collections.Generic; */ + + /** + * The abstract syntax tree (AST) class. + **/ + public class AST extends Z3Object + { + /** + * Comparison operator. + * An AST + * An AST + * @return True if and are from the same context + * and represent the same sort; false otherwise. + **/ + /* Overloaded operators are not translated. */ + + /** + * Comparison operator. + * An AST + * An AST + * @return True if and are not from the same context + * or represent different sorts; false otherwise. + **/ + /* Overloaded operators are not translated. */ + + /** + * Object comparison. + **/ + public boolean Equals(object o) + { + AST casted = (AST) o; + if (casted == null) return false; + return this == casted; + } + + /** + * Object Comparison. + * Another AST + * @return Negative if the object should be sorted before , positive if after else zero. + **/ + public int CompareTo(object other) + { + if (other == null) return 1; + AST oAST = (AST) other; + if (oAST == null) + return 1; + else + { + if (Id < oAST.Id) + return -1; + else if (Id > oAST.Id) + return +1; + else + return 0; + } + } + + /** + * The AST's hash code. + * @return A hash code + **/ + public int GetHashCode() + { + return (int)Native.getAstHash(Context.nCtx, NativeObject); + } + + /** + * A unique identifier for the AST (unique among all ASTs). + **/ + public Integer Id() { return Native.getAstId(Context.nCtx, NativeObject); } + + /** + * Translates (copies) the AST to the Context . + * A context + * @return A copy of the AST which is associated with + **/ + public AST Translate(Context ctx) + { + + + + if (ReferenceEquals(Context, ctx)) + return this; + else + return new AST(ctx, Native.translate(Context.nCtx, NativeObject, ctx.nCtx)); + } + + /** + * The kind of the AST. + **/ + public Z3_ast_kind ASTKind() { return (Z3AstKind)Native.getAstKind(Context.nCtx, NativeObject); } + + /** + * Indicates whether the AST is an Expr + **/ + public boolean IsExpr() + { + switch (ASTKind) + { + case Z3AstKind.Z3APPAST: + case Z3AstKind.Z3NUMERALAST: + case Z3AstKind.Z3QUANTIFIERAST: + case Z3AstKind.Z3VARAST: return true; + default: return false; + } + } + + /** + * Indicates whether the AST is a BoundVariable + **/ + public boolean IsVar() { return this.ASTKind == Z3AstKind.Z3VARAST; } + + /** + * Indicates whether the AST is a Quantifier + **/ + public boolean IsQuantifier() { return this.ASTKind == Z3AstKind.Z3QUANTIFIERAST; } + + /** + * Indicates whether the AST is a Sort + **/ + public boolean IsSort() { return this.ASTKind == Z3AstKind.Z3SORTAST; } + + /** + * Indicates whether the AST is a FunctionDeclaration + **/ + public boolean IsFuncDecl() { return this.ASTKind == Z3AstKind.Z3FUNCDECLAST; } + + /** + * A string representation of the AST. + **/ + public String toString() + { + return Native.asttoString(Context.nCtx, NativeObject); + } + + /** + * A string representation of the AST in s-expression notation. + **/ + public String SExpr() + { + + + return Native.asttoString(Context.nCtx, NativeObject); + } + + AST(Context ctx) { super(ctx); } + AST(Context ctx, IntPtr obj) { super(ctx, obj); } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.incRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.decRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + // Console.WriteLine("AST IncRef()"); + if (Context == null) + throw new Z3Exception("inc() called on null context"); + if (o == IntPtr.Zero) + throw new Z3Exception("inc() called on null AST"); + Context.ASTDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + // Console.WriteLine("AST DecRef()"); + if (Context == null) + throw new Z3Exception("dec() called on null context"); + if (o == IntPtr.Zero) + throw new Z3Exception("dec() called on null AST"); + Context.ASTDRQ.Add(o); + super.DecRef(o); + } + + static AST Create(Context ctx, IntPtr obj) + { + + + + switch ((Z3AstKind)Native.getAstKind(ctx.nCtx, obj)) + { + case Z3AstKind.Z3FUNCDECLAST: return new FuncDecl(ctx, obj); + case Z3AstKind.Z3QUANTIFIERAST: return new Quantifier(ctx, obj); + case Z3AstKind.Z3SORTAST: return Sort.Create(ctx, obj); + case Z3AstKind.Z3APPAST: + case Z3AstKind.Z3NUMERALAST: + case Z3AstKind.Z3VARAST: return Expr.Create(ctx, obj); + default: + throw new Z3Exception("Unknown AST kind"); + } + } + } diff --git a/src/api/java/com/Microsoft/Z3/ASTMap.java b/src/api/java/com/Microsoft/Z3/ASTMap.java new file mode 100644 index 000000000..55a100a7b --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/ASTMap.java @@ -0,0 +1,127 @@ +/** + * This file was automatically generated from ASTMap.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Map from AST to AST + **/ + class ASTMap extends Z3Object + { + /** + * Checks whether the map contains the key . + * An AST + * @return True if is a key in the map, false otherwise. + **/ + public boolean Contains(AST k) + { + + + return Native.astMapContains(Context.nCtx, NativeObject, k.NativeObject) != 0; + } + + /** + * Finds the value associated with the key . + * + * This function signs an error when is not a key in the map. + * + * An AST + **/ + public AST Find(AST k) + { + + + + return new AST(Context, Native.astMapFind(Context.nCtx, NativeObject, k.NativeObject)); + } + + /** + * Stores or replaces a new key/value pair in the map. + * The key AST + * The value AST + **/ + public void Insert(AST k, AST v) + { + + + + Native.astMapInsert(Context.nCtx, NativeObject, k.NativeObject, v.NativeObject); + } + + /** + * Erases the key from the map. + * An AST + **/ + public void Erase(AST k) + { + + + Native.astMapErase(Context.nCtx, NativeObject, k.NativeObject); + } + + /** + * Removes all keys from the map. + **/ + public void Reset() + { + Native.astMapReset(Context.nCtx, NativeObject); + } + + /** + * The size of the map + **/ + public Integer Size() { return Native.astMapSize(Context.nCtx, NativeObject); } + + /** + * The keys stored in the map. + **/ + public ASTVector Keys() + { + return new ASTVector(Context, Native.astMapKeys(Context.nCtx, NativeObject)); + } + + /** + * Retrieves a string representation of the map. + **/ + public String toString() + { + return Native.astMaptoString(Context.nCtx, NativeObject); + } + + ASTMap(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + ASTMap(Context ctx) + { super(ctx, Native.mkAstMap(ctx.nCtx)); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.astMapIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.astMapDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ASTMapDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ASTMapDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/ASTVector.java b/src/api/java/com/Microsoft/Z3/ASTVector.java new file mode 100644 index 000000000..c57635289 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/ASTVector.java @@ -0,0 +1,107 @@ +/** + * This file was automatically generated from ASTVector.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Vectors of ASTs. + **/ + class ASTVector extends Z3Object + { + /** + * The size of the vector + **/ + public Integer Size() { return Native.astVectorSize(Context.nCtx, NativeObject); } + + /** + * Retrieves the i-th object in the vector. + * May throw an IndexOutOfBoundsException when is out of range. + * Index + * @return An AST + **/ + public AST this[Integer i]() + { + + + return new AST(Context, Native.astVectorGet(Context.nCtx, NativeObject, i)); + set + { + + + Native.astVectorSet(Context.nCtx, NativeObject, i, value.NativeObject); + } + } + + /** + * Resize the vector to . + * The new size of the vector. + **/ + public void Resize(Integer newSize) + { + Native.astVectorResize(Context.nCtx, NativeObject, newSize); + } + + /** + * Add the AST to the back of the vector. The size + * is increased by 1. + * An AST + **/ + public void Push(AST a) + { + + + Native.astVectorPush(Context.nCtx, NativeObject, a.NativeObject); + } + + /** + * Translates all ASTs in the vector to . + * A context + * @return A new ASTVector + **/ + public ASTVector Translate(Context ctx) + { + + + + return new ASTVector(Context, Native.astVectorTranslate(Context.nCtx, NativeObject, ctx.nCtx)); + } + + /** + * Retrieves a string representation of the vector. + **/ + public String toString() + { + return Native.astVectortoString(Context.nCtx, NativeObject); + } + + ASTVector(Context ctx, IntPtr obj) { super(ctx, obj); } + ASTVector(Context ctx) { super(ctx, Native.mkAstVector(ctx.nCtx)); } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.astVectorIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.astVectorDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ASTVectorDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ASTVectorDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/ApplyResult.java b/src/api/java/com/Microsoft/Z3/ApplyResult.java new file mode 100644 index 000000000..7e5390237 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/ApplyResult.java @@ -0,0 +1,84 @@ +/** + * This file was automatically generated from ApplyResult.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * ApplyResult objects represent the result of an application of a + * tactic to a goal. It contains the subgoals that were produced. + **/ + public class ApplyResult extends Z3Object + { + /** + * The number of Subgoals. + **/ + public Integer NumSubgoals() { return Native.applyResultGetNumSubgoals(Context.nCtx, NativeObject); } + + /** + * Retrieves the subgoals from the ApplyResult. + **/ + public Goal[] Subgoals() + { + + + + Integer n = NumSubgoals; + Goal[] res = new Goal[n]; + for (Integer i = 0; i < n; i++) + res[i] = new Goal(Context, Native.applyResultGetSubgoal(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * Convert a model for the subgoal into a model for the original + * goal g, that the ApplyResult was obtained from. + * @return A model for g + **/ + public Model ConvertModel(Integer i, Model m) + { + + + + return new Model(Context, Native.applyResultConvertModel(Context.nCtx, NativeObject, i, m.NativeObject)); + } + + /** + * A string representation of the ApplyResult. + **/ + public String toString() + { + return Native.applyResulttoString(Context.nCtx, NativeObject); + } + + ApplyResult(Context ctx, IntPtr obj) { super(ctx, obj); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.applyResultIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.applyResultDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ApplyResultDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ApplyResultDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Constructor.java b/src/api/java/com/Microsoft/Z3/Constructor.java new file mode 100644 index 000000000..2f9a2009e --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Constructor.java @@ -0,0 +1,130 @@ +/** + * This file was automatically generated from Constructor.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Constructors are used for datatype sorts. + **/ + public class Constructor extends Z3Object + { + /** + * The number of fields of the constructor. + **/ + public Integer NumFields() { init(); return n; } + + /** + * The function declaration of the constructor. + **/ + public FuncDecl ConstructorDecl() { + + init(); return mConstructorDecl; } + + /** + * The function declaration of the tester. + **/ + public FuncDecl TesterDecl() { + + init(); return mTesterDecl; } + + /** + * The function declarations of the accessors + **/ + public FuncDecl[] AccessorDecls() { + + init(); return mAccessorDecls; } + + /** + * Destructor. + **/ + protected void finalize() + { + Native.delConstructor(Context.nCtx, NativeObject); + } + + + private void ObjectInvariant() + { + + + } + + + private Integer n = 0; + private FuncDecl mTesterDecl = null; + private FuncDecl mConstructorDecl = null; + private FuncDecl[] mAccessorDecls = null; + + Constructor(Context ctx, Symbol name, Symbol recognizer, Symbol[] fieldNames, + Sort[] sorts, Integer[] sortRefs) + { super(ctx); + + + + + n = AST.ArrayLength(fieldNames); + + if (n != AST.ArrayLength(sorts)) + throw new Z3Exception("Number of field names does not match number of sorts"); + if (sortRefs != null && sortRefs.Length != n) + throw new Z3Exception("Number of field names does not match number of sort refs"); + + if (sortRefs == null) sortRefs = new Integer[n]; + + NativeObject = Native.mkConstructor(ctx.nCtx, name.NativeObject, recognizer.NativeObject, + n, + Symbol.ArrayToNative(fieldNames), + Sort.ArrayToNative(sorts), + sortRefs); + + } + + private void init() + { + + + + + if (mTesterDecl != null) return; + IntPtr constructor = IntPtr.Zero; + IntPtr tester = IntPtr.Zero; + IntPtr[] accessors = new IntPtr[n]; + Native.queryConstructor(Context.nCtx, NativeObject, n, constructor, tester, accessors); + mConstructorDecl = new FuncDecl(Context, constructor); + mTesterDecl = new FuncDecl(Context, tester); + mAccessorDecls = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + mAccessorDecls[i] = new FuncDecl(Context, accessors[i]); + } + + } + + /** + * Lists of constructors + **/ + public class ConstructorList extends Z3Object + { + /** + * Destructor. + **/ + protected void finalize() + { + Native.delConstructorList(Context.nCtx, NativeObject); + } + + ConstructorList(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + ConstructorList(Context ctx, Constructor[] constructors) + { super(ctx); + + + + NativeObject = Native.mkConstructorList(Context.nCtx, (Integer)constructors.Length, Constructor.ArrayToNative(constructors)); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Context.java b/src/api/java/com/Microsoft/Z3/Context.java new file mode 100644 index 000000000..471c82120 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Context.java @@ -0,0 +1,3534 @@ +/** + * This file was automatically generated from Context.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ +/* using System.Collections.Generic; */ +/* using System.Runtime.InteropServices; */ + + /** + * The main interaction with Z3 happens via the Context. + **/ + public class Context extends IDisposable + { + /** + * Constructor. + **/ + public Context() + { super(); + mCtx = Native.mkContextRc(IntPtr.Zero); + InitContext(); + } + + /** + * Constructor. + **/ + public Context(Dictionary settings) + { super(); + + + IntPtr cfg = Native.mkConfig(); + for (KeyValuePair.Iterator kv = settings.iterator(); kv.hasNext(); ) + Native.setParamValue(cfg, kv.Key, kv.Value); + mCtx = Native.mkContextRc(cfg); + Native.delConfig(cfg); + InitContext(); + } + + /** + * Creates a new symbol using an integer. + * + * Not all integers can be passed to this function. + * The legal range of unsigned integers is 0 to 2^30-1. + * + **/ + public IntSymbol MkSymbol(int i) + { + + + return new IntSymbol(this, i); + } + + /** + * Create a symbol using a string. + **/ + public StringSymbol MkSymbol(String name) + { + + + return new StringSymbol(this, name); + } + + /** + * Create an array of symbols. + **/ + Symbol[] MkSymbols(String[] names) + { + + + + + + if (names == null) return null; + Symbol[] result = new Symbol[names.Length]; + for (int i = 0; i < names.Length; ++i) result[i] = MkSymbol(names[i]); + return result; + } + + private BoolSort mBooleanSort = null; + private IntSort mIntSort = null; + private RealSort mRealSort = null; + + /** + * Retrieves the Boolean sort of the context. + **/ + public BoolSort BoolSort() + { + + + if (mBooleanSort == null) mBooleanSort = new BoolSort(this); return mBooleanSort; + } + + /** + * Retrieves the Integer sort of the context. + **/ + public IntSort IntSort() + { + + if (mIntSort == null) mIntSort = new IntSort(this); return mIntSort; + } + + + /** + * Retrieves the Real sort of the context. + **/ + /* Overloaded operators are not translated. */ + + /** + * Create a new uninterpreted sort. + **/ + public UninterpretedSort MkUninterpretedSort(Symbol s) + { + + + + CheckContextMatch(s); + return new UninterpretedSort(this, s); + } + + /** + * Create a new uninterpreted sort. + **/ + public UninterpretedSort MkUninterpretedSort(String str) + { + + + return MkUninterpretedSort(MkSymbol(str)); + } + + /** + * Create a new integer sort. + **/ + public IntSort MkIntSort() + { + + + return new IntSort(this); + } + + /** + * Create a real sort. + **/ + public RealSort MkRealSort() + { + + return new RealSort(this); + } + + /** + * Create a new bit-vector sort. + **/ + public BitVecSort MkBitVecSort(Integer size) + { + + + return new BitVecSort(this, size); + } + + /** + * Create a new array sort. + **/ + public ArraySort MkArraySort(Sort domain, Sort range) + { + + + + + CheckContextMatch(domain); + CheckContextMatch(range); + return new ArraySort(this, domain, range); + } + + /** + * Create a new tuple sort. + **/ + public TupleSort MkTupleSort(Symbol name, Symbol[] fieldNames, Sort[] fieldSorts) + { + + + + + + + CheckContextMatch(name); + CheckContextMatch(fieldNames); + CheckContextMatch(fieldSorts); + return new TupleSort(this, name, (Integer)fieldNames.Length, fieldNames, fieldSorts); + } + + /** + * Create a new enumeration sort. + **/ + public EnumSort MkEnumSort(Symbol name, Symbol[] enumNames) + { + + + + + + + CheckContextMatch(name); + CheckContextMatch(enumNames); + return new EnumSort(this, name, enumNames); + } + + /** + * Create a new enumeration sort. + **/ + public EnumSort MkEnumSort(String name, String[] enumNames) + { + + + + return new EnumSort(this, MkSymbol(name), MkSymbols(enumNames)); + } + + /** + * Create a new list sort. + **/ + public ListSort MkListSort(Symbol name, Sort elemSort) + { + + + + + CheckContextMatch(name); + CheckContextMatch(elemSort); + return new ListSort(this, name, elemSort); + } + + /** + * Create a new list sort. + **/ + public ListSort MkListSort(String name, Sort elemSort) + { + + + + CheckContextMatch(elemSort); + return new ListSort(this, MkSymbol(name), elemSort); + } + + /** + * Create a new finite domain sort. + **/ + public FiniteDomainSort MkFiniteDomainSort(Symbol name, ulong size) + { + + + + CheckContextMatch(name); + return new FiniteDomainSort(this, name, size); + } + + /** + * Create a new finite domain sort. + **/ + public FiniteDomainSort MkFiniteDomainSort(String name, ulong size) + { + + + return new FiniteDomainSort(this, MkSymbol(name), size); + } + + + /** + * Create a datatype constructor. + * constructor name + * name of recognizer function. + * names of the constructor fields. + * field sorts, 0 if the field sort refers to a recursive sort. + * reference to datatype sort that is an argument to the constructor; + * if the corresponding sort reference is 0, then the value in sort_refs should be an index + * referring to one of the recursive datatypes that is declared. + **/ + public Constructor MkConstructor(Symbol name, Symbol recognizer, Symbol[] fieldNames, Sort[] sorts, Integer[] sortRefs) + { + + + + + return new Constructor(this, name, recognizer, fieldNames, sorts, sortRefs); + } + + /** + * Create a datatype constructor. + * + * + * + * + * + * @return + **/ + public Constructor MkConstructor(String name, String recognizer, String[] fieldNames, Sort[] sorts, Integer[] sortRefs) + { + + + return new Constructor(this, MkSymbol(name), MkSymbol(recognizer), MkSymbols(fieldNames), sorts, sortRefs); + } + + /** + * Create a new datatype sort. + **/ + public DatatypeSort MkDatatypeSort(Symbol name, Constructor[] constructors) + { + + + + + + + CheckContextMatch(name); + CheckContextMatch(constructors); + return new DatatypeSort(this, name, constructors); + } + + /** + * Create a new datatype sort. + **/ + public DatatypeSort MkDatatypeSort(String name, Constructor[] constructors) + { + + + + + CheckContextMatch(constructors); + return new DatatypeSort(this, MkSymbol(name), constructors); + } + + /** + * Create mutually recursive datatypes. + * names of datatype sorts + * list of constructors, one list per sort. + **/ + public DatatypeSort[] MkDatatypeSorts(Symbol[] names, Constructor[][] c) + { + + + + + + + + CheckContextMatch(names); + Integer n = (Integer)names.Length; + ConstructorList[] cla = new ConstructorList[n]; + IntPtr[] nConstr = new IntPtr[n]; + for (Integer i = 0; i < n; i++) + { + var constructor = c[i]; + + CheckContextMatch(constructor); + cla[i] = new ConstructorList(this, constructor); + nConstr[i] = cla[i].NativeObject; + } + IntPtr[] nRes = new IntPtr[n]; + Native.mkDatatypes(nCtx, n, Symbol.ArrayToNative(names), nRes, nConstr); + DatatypeSort[] res = new DatatypeSort[n]; + for (Integer i = 0; i < n; i++) + res[i] = new DatatypeSort(this, nRes[i]); + return res; + } + + /** + * Create mutually recursive data-types. + * + * + * @return + **/ + public DatatypeSort[] MkDatatypeSorts(String[] names, Constructor[][] c) + { + + + + + + + + return MkDatatypeSorts(MkSymbols(names), c); + } + + + /** + * Creates a new function declaration. + **/ + public FuncDecl MkFuncDecl(Symbol name, Sort[] domain, Sort range) + { + + + + + + CheckContextMatch(name); + CheckContextMatch(domain); + CheckContextMatch(range); + return new FuncDecl(this, name, domain, range); + } + + /** + * Creates a new function declaration. + **/ + public FuncDecl MkFuncDecl(Symbol name, Sort domain, Sort range) + { + + + + + + CheckContextMatch(name); + CheckContextMatch(domain); + CheckContextMatch(range); + Sort[] q = new Sort[] { domain }; + return new FuncDecl(this, name, q, range); + } + + /** + * Creates a new function declaration. + **/ + public FuncDecl MkFuncDecl(String name, Sort[] domain, Sort range) + { + + + + + CheckContextMatch(domain); + CheckContextMatch(range); + return new FuncDecl(this, MkSymbol(name), domain, range); + } + + /** + * Creates a new function declaration. + **/ + public FuncDecl MkFuncDecl(String name, Sort domain, Sort range) + { + + + + + CheckContextMatch(domain); + CheckContextMatch(range); + Sort[] q = new Sort[] { domain }; + return new FuncDecl(this, MkSymbol(name), q, range); + } + + /** + * Creates a fresh function declaration with a name prefixed with . + * + * + **/ + public FuncDecl MkFreshFuncDecl(String prefix, Sort[] domain, Sort range) + { + + + + + CheckContextMatch(domain); + CheckContextMatch(range); + return new FuncDecl(this, prefix, domain, range); + } + + /** + * Creates a new constant function declaration. + **/ + public FuncDecl MkConstDecl(Symbol name, Sort range) + { + + + + + CheckContextMatch(name); + CheckContextMatch(range); + return new FuncDecl(this, name, null, range); + } + + /** + * Creates a new constant function declaration. + **/ + public FuncDecl MkConstDecl(String name, Sort range) + { + + + + CheckContextMatch(range); + return new FuncDecl(this, MkSymbol(name), null, range); + } + + /** + * Creates a fresh constant function declaration with a name prefixed with . + * + * + **/ + public FuncDecl MkFreshConstDecl(String prefix, Sort range) + { + + + + CheckContextMatch(range); + return new FuncDecl(this, prefix, null, range); + } + + /** + * Creates a new bound variable. + * The de-Bruijn index of the variable + * The sort of the variable + **/ + public Expr MkBound(Integer index, Sort ty) + { + + + + return Expr.Create(this, Native.mkBound(nCtx, index, ty.NativeObject)); + } + + /** + * Create a quantifier pattern. + **/ + public Pattern MkPattern(Expr[] terms) + { + + if (terms.Length == 0) + throw new Z3Exception("Cannot create a pattern from zero terms"); + + + + + + IntPtr[] termsNative = AST.ArrayToNative(terms); + return new Pattern(this, Native.mkPattern(nCtx, (Integer)terms.Length, termsNative)); + } + + /** + * Creates a new Constant of sort and named . + **/ + public Expr MkConst(Symbol name, Sort range) + { + + + + + CheckContextMatch(name); + CheckContextMatch(range); + + return Expr.Create(this, Native.mkConst(nCtx, name.NativeObject, range.NativeObject)); + } + + /** + * Creates a new Constant of sort and named . + **/ + public Expr MkConst(String name, Sort range) + { + + + + return MkConst(MkSymbol(name), range); + } + + /** + * Creates a fresh Constant of sort and a + * name prefixed with . + **/ + public Expr MkFreshConst(String prefix, Sort range) + { + + + + CheckContextMatch(range); + return Expr.Create(this, Native.mkFreshConst(nCtx, prefix, range.NativeObject)); + } + + /** + * Creates a fresh constant from the FuncDecl . + * A decl of a 0-arity function + **/ + public Expr MkConst(FuncDecl f) + { + + + + return MkApp(f); + } + + /** + * Create a Boolean constant. + **/ + public BoolExpr MkBoolConst(Symbol name) + { + + + + return (BoolExpr)MkConst(name, BoolSort); + } + + /** + * Create a Boolean constant. + **/ + public BoolExpr MkBoolConst(String name) + { + + + return (BoolExpr)MkConst(MkSymbol(name), BoolSort); + } + + /** + * Creates an integer constant. + **/ + public IntExpr MkIntConst(Symbol name) + { + + + + return (IntExpr)MkConst(name, IntSort); + } + + /** + * Creates an integer constant. + **/ + public IntExpr MkIntConst(String name) + { + + + + return (IntExpr)MkConst(name, IntSort); + } + + /** + * Creates a real constant. + **/ + public RealExpr MkRealConst(Symbol name) + { + + + + return (RealExpr)MkConst(name, RealSort); + } + + /** + * Creates a real constant. + **/ + public RealExpr MkRealConst(String name) + { + + + return (RealExpr)MkConst(name, RealSort); + } + + /** + * Creates a bit-vector constant. + **/ + public BitVecExpr MkBVConst(Symbol name, Integer size) + { + + + + return (BitVecExpr)MkConst(name, MkBitVecSort(size)); + } + + /** + * Creates a bit-vector constant. + **/ + public BitVecExpr MkBVConst(String name, Integer size) + { + + + return (BitVecExpr)MkConst(name, MkBitVecSort(size)); + } + + /** + * Create a new function application. + **/ + public Expr MkApp(FuncDecl f, Expr[] args) + { + + + + + CheckContextMatch(f); + CheckContextMatch(args); + return Expr.Create(this, f, args); + } + + /** + * The true Term. + **/ + public BoolExpr MkTrue() + { + + + return new BoolExpr(this, Native.mkTrue(nCtx)); + } + + /** + * The false Term. + **/ + public BoolExpr MkFalse() + { + + + return new BoolExpr(this, Native.mkFalse(nCtx)); + } + + /** + * Creates a Boolean value. + **/ + public BoolExpr MkBool(boolean value) + { + + + return value ? MkTrue() : MkFalse(); + } + + /** + * Creates the equality = . + **/ + public BoolExpr MkEq(Expr x, Expr y) + { + + + + + CheckContextMatch(x); + CheckContextMatch(y); + return new BoolExpr(this, Native.mkEq(nCtx, x.NativeObject, y.NativeObject)); + } + + /** + * Creates a distinct term. + **/ + public BoolExpr MkDistinct(Expr[] args) + { + + + + + + CheckContextMatch(args); + return new BoolExpr(this, Native.mkDistinct(nCtx, (Integer)args.Length, AST.ArrayToNative(args))); + } + + /** + * Mk an expression representing not(a). + **/ + public BoolExpr MkNot(BoolExpr a) + { + + + + CheckContextMatch(a); + return new BoolExpr(this, Native.mkNot(nCtx, a.NativeObject)); + } + + /** + * Create an expression representing an if-then-else: ite(t1, t2, t3). + * An expression with Boolean sort + * An expression + * An expression with the same sort as + **/ + public Expr MkITE(BoolExpr t1, Expr t2, Expr t3) + { + + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + CheckContextMatch(t3); + return Expr.Create(this, Native.mkIte(nCtx, t1.NativeObject, t2.NativeObject, t3.NativeObject)); + } + + /** + * Create an expression representing t1 iff t2. + **/ + public BoolExpr MkIff(BoolExpr t1, BoolExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkIff(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 -> t2. + **/ + public BoolExpr MkImplies(BoolExpr t1, BoolExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkImplies(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 xor t2. + **/ + public BoolExpr MkXor(BoolExpr t1, BoolExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkXor(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t[0] and t[1] and .... + **/ + public BoolExpr MkAnd(BoolExpr[] t) + { + + + + + CheckContextMatch(t); + return new BoolExpr(this, Native.mkAnd(nCtx, (Integer)t.Length, AST.ArrayToNative(t))); + } + + /** + * Create an expression representing t[0] or t[1] or .... + **/ + public BoolExpr MkOr(BoolExpr[] t) + { + + + + + CheckContextMatch(t); + return new BoolExpr(this, Native.mkOr(nCtx, (Integer)t.Length, AST.ArrayToNative(t))); + } + + /** + * Create an expression representing t[0] + t[1] + .... + **/ + public ArithExpr MkAdd(ArithExpr[] t) + { + + + + + CheckContextMatch(t); + return (ArithExpr)Expr.Create(this, Native.mkAdd(nCtx, (Integer)t.Length, AST.ArrayToNative(t))); + } + + /** + * Create an expression representing t[0] * t[1] * .... + **/ + public ArithExpr MkMul(ArithExpr[] t) + { + + + + + CheckContextMatch(t); + return (ArithExpr)Expr.Create(this, Native.mkMul(nCtx, (Integer)t.Length, AST.ArrayToNative(t))); + } + + /** + * Create an expression representing t[0] - t[1] - .... + **/ + public ArithExpr MkSub(ArithExpr[] t) + { + + + + + CheckContextMatch(t); + return (ArithExpr)Expr.Create(this, Native.mkSub(nCtx, (Integer)t.Length, AST.ArrayToNative(t))); + } + + /** + * Create an expression representing -t. + **/ + public ArithExpr MkUnaryMinus(ArithExpr t) + { + + + + CheckContextMatch(t); + return (ArithExpr)Expr.Create(this, Native.mkUnaryMinus(nCtx, t.NativeObject)); + } + + /** + * Create an expression representing t1 / t2. + **/ + public ArithExpr MkDiv(ArithExpr t1, ArithExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return (ArithExpr)Expr.Create(this, Native.mkDiv(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 mod t2. + * The arguments must have int type. + **/ + public IntExpr MkMod(IntExpr t1, IntExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new IntExpr(this, Native.mkMod(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 rem t2. + * The arguments must have int type. + **/ + public IntExpr MkRem(IntExpr t1, IntExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new IntExpr(this, Native.mkRem(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 ^ t2. + **/ + public ArithExpr MkPower(ArithExpr t1, ArithExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return (ArithExpr)Expr.Create(this, Native.mkPower(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 < t2 + **/ + public BoolExpr MkLt(ArithExpr t1, ArithExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkLt(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 <= t2 + **/ + public BoolExpr MkLe(ArithExpr t1, ArithExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkLe(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 > t2 + **/ + public BoolExpr MkGt(ArithExpr t1, ArithExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkGt(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an expression representing t1 >= t2 + **/ + public BoolExpr MkGe(ArithExpr t1, ArithExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkGe(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Coerce an integer to a real. + * + * There is also a converse operation exposed. It follows the semantics prescribed by the SMT-LIB standard. + * + * You can take the floor of a real by creating an auxiliary integer Term k and + * and asserting MakeInt2Real(k) <= t1 < MkInt2Real(k)+1. + * The argument must be of integer sort. + * + **/ + public RealExpr MkInt2Real(IntExpr t) + { + + + + CheckContextMatch(t); + return new RealExpr(this, Native.mkInt2real(nCtx, t.NativeObject)); + } + + /** + * Coerce a real to an integer. + * + * The semantics of this function follows the SMT-LIB standard for the function to_int. + * The argument must be of real sort. + * + **/ + public IntExpr MkReal2Int(RealExpr t) + { + + + + CheckContextMatch(t); + return new IntExpr(this, Native.mkReal2int(nCtx, t.NativeObject)); + } + + /** + * Creates an expression that checks whether a real number is an integer. + **/ + public BoolExpr MkIsInteger(RealExpr t) + { + + + + CheckContextMatch(t); + return new BoolExpr(this, Native.mkIsInt(nCtx, t.NativeObject)); + } + + /** + * Bitwise negation. + * The argument must have a bit-vector sort. + **/ + public BitVecExpr MkBVNot(BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkBvnot(nCtx, t.NativeObject)); + } + + /** + * Take conjunction of bits in a vector, return vector of length 1. + * The argument must have a bit-vector sort. + **/ + public BitVecExpr MkBVRedAND(BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkBvredand(nCtx, t.NativeObject)); + } + + /** + * Take disjunction of bits in a vector, return vector of length 1. + * The argument must have a bit-vector sort. + **/ + public BitVecExpr MkBVRedOR(BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkBvredor(nCtx, t.NativeObject)); + } + + /** + * Bitwise conjunction. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVAND(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvand(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bitwise disjunction. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVOR(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvor(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bitwise XOR. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVXOR(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvxor(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bitwise NAND. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVNAND(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvnand(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bitwise NOR. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVNOR(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvnor(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bitwise XNOR. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVXNOR(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvxnor(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Standard two's complement unary minus. + * The arguments must have a bit-vector sort. + **/ + public BitVecExpr MkBVNeg(BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkBvneg(nCtx, t.NativeObject)); + } + + /** + * Two's complement addition. + * The arguments must have the same bit-vector sort. + **/ + public BitVecExpr MkBVAdd(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvadd(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement subtraction. + * The arguments must have the same bit-vector sort. + **/ + public BitVecExpr MkBVSub(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvsub(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement multiplication. + * The arguments must have the same bit-vector sort. + **/ + public BitVecExpr MkBVMul(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvmul(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Unsigned division. + * + * It is defined as the floor of t1/t2 if \c t2 is + * different from zero. If t2 is zero, then the result + * is undefined. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVUDiv(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvudiv(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Signed division. + * + * It is defined in the following way: + * + * - The \c floor of t1/t2 if \c t2 is different from zero, and t1*t2 >= 0. + * + * - The \c ceiling of t1/t2 if \c t2 is different from zero, and t1*t2 < 0. + * + * If t2 is zero, then the result is undefined. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVSDiv(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvsdiv(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Unsigned remainder. + * + * It is defined as t1 - (t1 /u t2) * t2, where /u represents unsigned division. + * If t2 is zero, then the result is undefined. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVURem(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvurem(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Signed remainder. + * + * It is defined as t1 - (t1 /s t2) * t2, where /s represents signed division. + * The most significant bit (sign) of the result is equal to the most significant bit of \c t1. + * + * If t2 is zero, then the result is undefined. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVSRem(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvsrem(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement signed remainder (sign follows divisor). + * + * If t2 is zero, then the result is undefined. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVSMod(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvsmod(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Unsigned less-than + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVULT(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvult(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement signed less-than + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVSLT(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvslt(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Unsigned less-than or equal to. + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVULE(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvule(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement signed less-than or equal to. + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVSLE(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvsle(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Unsigned greater than or equal to. + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVUGE(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvuge(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement signed greater than or equal to. + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVSGE(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvsge(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Unsigned greater-than. + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVUGT(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvugt(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Two's complement signed greater-than. + * + * The arguments must have the same bit-vector sort. + * + **/ + public BoolExpr MkBVSGT(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvsgt(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bit-vector concatenation. + * + * The arguments must have a bit-vector sort. + * + * @return + * The result is a bit-vector of size n1+n2, where n1 (n2) + * is the size of t1 (t2). + * + **/ + public BitVecExpr MkConcat(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkConcat(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Bit-vector extraction. + * + * Extract the bits down to from a bitvector of + * size m to yield a new bitvector of size n, where + * n = high - low + 1. + * The argument must have a bit-vector sort. + * + **/ + public BitVecExpr MkExtract(Integer high, Integer low, BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkExtract(nCtx, high, low, t.NativeObject)); + } + + /** + * Bit-vector sign extension. + * + * Sign-extends the given bit-vector to the (signed) equivalent bitvector of + * size m+i, where \c m is the size of the given bit-vector. + * The argument must have a bit-vector sort. + * + **/ + public BitVecExpr MkSignExt(Integer i, BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkSignExt(nCtx, i, t.NativeObject)); + } + + /** + * Bit-vector zero extension. + * + * Extend the given bit-vector with zeros to the (unsigned) equivalent + * bitvector of size m+i, where \c m is the size of the + * given bit-vector. + * The argument must have a bit-vector sort. + * + **/ + public BitVecExpr MkZeroExt(Integer i, BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkZeroExt(nCtx, i, t.NativeObject)); + } + + /** + * Bit-vector repetition. + * + * The argument must have a bit-vector sort. + * + **/ + public BitVecExpr MkRepeat(Integer i, BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkRepeat(nCtx, i, t.NativeObject)); + } + + /** + * Shift left. + * + * It is equivalent to multiplication by 2^x where \c x is the value of . + * + * NB. The semantics of shift operations varies between environments. This + * definition does not necessarily capture directly the semantics of the + * programming language or assembly architecture you are modeling. + * + * The arguments must have a bit-vector sort. + * + **/ + public BitVecExpr MkBVSHL(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvshl(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Logical shift right + * + * It is equivalent to unsigned division by 2^x where \c x is the value of . + * + * NB. The semantics of shift operations varies between environments. This + * definition does not necessarily capture directly the semantics of the + * programming language or assembly architecture you are modeling. + * + * The arguments must have a bit-vector sort. + * + **/ + public BitVecExpr MkBVLSHR(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvlshr(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Arithmetic shift right + * + * It is like logical shift right except that the most significant + * bits of the result always copy the most significant bit of the + * second argument. + * + * NB. The semantics of shift operations varies between environments. This + * definition does not necessarily capture directly the semantics of the + * programming language or assembly architecture you are modeling. + * + * The arguments must have a bit-vector sort. + * + **/ + public BitVecExpr MkBVASHR(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkBvashr(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Rotate Left. + * + * Rotate bits of \c t to the left \c i times. + * The argument must have a bit-vector sort. + * + **/ + public BitVecExpr MkBVRotateLeft(Integer i, BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkRotateLeft(nCtx, i, t.NativeObject)); + } + + /** + * Rotate Right. + * + * Rotate bits of \c t to the right \c i times. + * The argument must have a bit-vector sort. + * + **/ + public BitVecExpr MkBVRotateRight(Integer i, BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkRotateRight(nCtx, i, t.NativeObject)); + } + + /** + * Rotate Left. + * + * Rotate bits of to the left times. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVRotateLeft(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkExtRotateLeft(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Rotate Right. + * + * Rotate bits of to the right times. + * The arguments must have the same bit-vector sort. + * + **/ + public BitVecExpr MkBVRotateRight(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BitVecExpr(this, Native.mkExtRotateRight(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an bit bit-vector from the integer argument . + * + * NB. This function is essentially treated as uninterpreted. + * So you cannot expect Z3 to precisely reflect the semantics of this function + * when solving constraints with this function. + * + * The argument must be of integer sort. + * + **/ + public BitVecExpr MkInt2BV(Integer n, IntExpr t) + { + + + + CheckContextMatch(t); + return new BitVecExpr(this, Native.mkInt2bv(nCtx, n, t.NativeObject)); + } + + /** + * Create an integer from the bit-vector argument . + * + * If \c is_signed is false, then the bit-vector \c t1 is treated as unsigned. + * So the result is non-negative and in the range [0..2^N-1], where + * N are the number of bits in . + * If \c is_signed is true, \c t1 is treated as a signed bit-vector. + * + * NB. This function is essentially treated as uninterpreted. + * So you cannot expect Z3 to precisely reflect the semantics of this function + * when solving constraints with this function. + * + * The argument must be of bit-vector sort. + * + **/ + public IntExpr MkBV2Int(BitVecExpr t, boolean signed) + { + + + + CheckContextMatch(t); + return new IntExpr(this, Native.mkBv2int(nCtx, t.NativeObject, (signed) ? 1 : 0)); + } + + /** + * Create a predicate that checks that the bit-wise addition does not overflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVAddNoOverflow(BitVecExpr t1, BitVecExpr t2, boolean isSigned) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvaddNoOverflow(nCtx, t1.NativeObject, t2.NativeObject, (isSigned) ? 1 : 0)); + } + + /** + * Create a predicate that checks that the bit-wise addition does not underflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVAddNoUnderflow(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvaddNoUnderflow(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create a predicate that checks that the bit-wise subtraction does not overflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVSubNoOverflow(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvsubNoOverflow(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create a predicate that checks that the bit-wise subtraction does not underflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVSubNoUnderflow(BitVecExpr t1, BitVecExpr t2, boolean isSigned) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvsubNoUnderflow(nCtx, t1.NativeObject, t2.NativeObject, (isSigned) ? 1 : 0)); + } + + /** + * Create a predicate that checks that the bit-wise signed division does not overflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVSDivNoOverflow(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvsdivNoOverflow(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create a predicate that checks that the bit-wise negation does not overflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVNegNoOverflow(BitVecExpr t) + { + + + + CheckContextMatch(t); + return new BoolExpr(this, Native.mkBvnegNoOverflow(nCtx, t.NativeObject)); + } + + /** + * Create a predicate that checks that the bit-wise multiplication does not overflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVMulNoOverflow(BitVecExpr t1, BitVecExpr t2, boolean isSigned) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvmulNoOverflow(nCtx, t1.NativeObject, t2.NativeObject, (isSigned) ? 1 : 0)); + } + + /** + * Create a predicate that checks that the bit-wise multiplication does not underflow. + * + * The arguments must be of bit-vector sort. + * + **/ + public BoolExpr MkBVMulNoUnderflow(BitVecExpr t1, BitVecExpr t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new BoolExpr(this, Native.mkBvmulNoUnderflow(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create an array constant. + **/ + public ArrayExpr MkArrayConst(Symbol name, Sort domain, Sort range) + { + + + + + + return (ArrayExpr)MkConst(name, MkArraySort(domain, range)); + } + + /** + * Create an array constant. + **/ + public ArrayExpr MkArrayConst(String name, Sort domain, Sort range) + { + + + + + return (ArrayExpr)MkConst(MkSymbol(name), MkArraySort(domain, range)); + } + + /** + * Array read. + * + * The argument a is the array and i is the index + * of the array that gets read. + * + * The node a must have an array sort [domain -> range], + * and i must have the sort domain. + * The sort of the result is range. + * + * + * + **/ + public Expr MkSelect(ArrayExpr a, Expr i) + { + + + + + CheckContextMatch(a); + CheckContextMatch(i); + return Expr.Create(this, Native.mkSelect(nCtx, a.NativeObject, i.NativeObject)); + } + + /** + * Array update. + * + * The node a must have an array sort [domain -> range], + * i must have sort domain, + * v must have sort range. The sort of the result is [domain -> range]. + * The semantics of this function is given by the theory of arrays described in the SMT-LIB + * standard. See http://smtlib.org for more details. + * The result of this function is an array that is equal to a + * (with respect to select) + * on all indices except for i, where it maps to v + * (and the select of a with + * respect to i may be a different value). + * + * + * + **/ + public ArrayExpr MkStore(ArrayExpr a, Expr i, Expr v) + { + + + + + + CheckContextMatch(a); + CheckContextMatch(i); + CheckContextMatch(v); + return new ArrayExpr(this, Native.mkStore(nCtx, a.NativeObject, i.NativeObject, v.NativeObject)); + } + + /** + * Create a constant array. + * + * The resulting term is an array, such that a selecton an arbitrary index + * produces the value v. + * + * + * + **/ + public ArrayExpr MkConstArray(Sort domain, Expr v) + { + + + + + CheckContextMatch(domain); + CheckContextMatch(v); + return new ArrayExpr(this, Native.mkConstArray(nCtx, domain.NativeObject, v.NativeObject)); + } + + /** + * Maps f on the argument arrays. + * + * Eeach element of args must be of an array sort [domain_i -> range_i]. + * The function declaration f must have type range_1 .. range_n -> range. + * v must have sort range. The sort of the result is [domain_i -> range]. + * + * + * + * + **/ + public ArrayExpr MkMap(FuncDecl f, ArrayExpr[] args) + { + + + + + CheckContextMatch(f); + CheckContextMatch(args); + return (ArrayExpr)Expr.Create(this, Native.mkMap(nCtx, f.NativeObject, AST.ArrayLength(args), AST.ArrayToNative(args))); + } + + /** + * Access the array default value. + * + * Produces the default range value, for arrays that can be represented as + * finite maps with a default range value. + * + **/ + public Expr MkTermArray(ArrayExpr array) + { + + + + CheckContextMatch(array); + return Expr.Create(this, Native.mkArrayDefault(nCtx, array.NativeObject)); + } + + /** + * Create a set type. + **/ + public SetSort MkSetSort(Sort ty) + { + + + + CheckContextMatch(ty); + return new SetSort(this, ty); + } + + /** + * Create an empty set. + **/ + public Expr MkEmptySet(Sort domain) + { + + + + CheckContextMatch(domain); + return Expr.Create(this, Native.mkEmptySet(nCtx, domain.NativeObject)); + } + + /** + * Create the full set. + **/ + public Expr MkFullSet(Sort domain) + { + + + + CheckContextMatch(domain); + return Expr.Create(this, Native.mkFullSet(nCtx, domain.NativeObject)); + } + + /** + * Add an element to the set. + **/ + public Expr MkSetAdd(Expr set, Expr element) + { + + + + + CheckContextMatch(set); + CheckContextMatch(element); + return Expr.Create(this, Native.mkSetAdd(nCtx, set.NativeObject, element.NativeObject)); + } + + + /** + * Remove an element from a set. + **/ + public Expr MkSetDel(Expr set, Expr element) + { + + + + + CheckContextMatch(set); + CheckContextMatch(element); + return Expr.Create(this, Native.mkSetDel(nCtx, set.NativeObject, element.NativeObject)); + } + + /** + * Take the union of a list of sets. + **/ + public Expr MkSetUnion(Expr[] args) + { + + + + CheckContextMatch(args); + return Expr.Create(this, Native.mkSetUnion(nCtx, (Integer)args.Length, AST.ArrayToNative(args))); + } + + /** + * Take the intersection of a list of sets. + **/ + public Expr MkSetIntersection(Expr[] args) + { + + + + + CheckContextMatch(args); + return Expr.Create(this, Native.mkSetIntersect(nCtx, (Integer)args.Length, AST.ArrayToNative(args))); + } + + /** + * Take the difference between two sets. + **/ + public Expr MkSetDifference(Expr arg1, Expr arg2) + { + + + + + CheckContextMatch(arg1); + CheckContextMatch(arg2); + return Expr.Create(this, Native.mkSetDifference(nCtx, arg1.NativeObject, arg2.NativeObject)); + } + + /** + * Take the complement of a set. + **/ + public Expr MkSetComplement(Expr arg) + { + + + + CheckContextMatch(arg); + return Expr.Create(this, Native.mkSetComplement(nCtx, arg.NativeObject)); + } + + /** + * Check for set membership. + **/ + public Expr MkSetMembership(Expr elem, Expr set) + { + + + + + CheckContextMatch(elem); + CheckContextMatch(set); + return Expr.Create(this, Native.mkSetMember(nCtx, elem.NativeObject, set.NativeObject)); + } + + /** + * Check for subsetness of sets. + **/ + public Expr MkSetSubset(Expr arg1, Expr arg2) + { + + + + + CheckContextMatch(arg1); + CheckContextMatch(arg2); + return Expr.Create(this, Native.mkSetSubset(nCtx, arg1.NativeObject, arg2.NativeObject)); + } + + + /** + * Create a Term of a given sort. + * A string representing the Term value in decimal notation. If the given sort is a real, then the Term can be a rational, that is, a string of the form [num]* / [num]*. + * The sort of the numeral. In the current implementation, the given sort can be an int, real, or bit-vectors of arbitrary size. + * @return A Term with value and sort + **/ + public Expr MkNumeral(String v, Sort ty) + { + + + + CheckContextMatch(ty); + return Expr.Create(this, Native.mkNumeral(nCtx, v, ty.NativeObject)); + } + + /** + * Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer. + * It is slightly faster than MakeNumeral since it is not necessary to parse a string. + * Value of the numeral + * Sort of the numeral + * @return A Term with value and type + **/ + public Expr MkNumeral(int v, Sort ty) + { + + + + CheckContextMatch(ty); + return Expr.Create(this, Native.mkInt(nCtx, v, ty.NativeObject)); + } + + /** + * Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer. + * It is slightly faster than MakeNumeral since it is not necessary to parse a string. + * Value of the numeral + * Sort of the numeral + * @return A Term with value and type + **/ + public Expr MkNumeral(Integer v, Sort ty) + { + + + + CheckContextMatch(ty); + return Expr.Create(this, Native.mkUnsignedInt(nCtx, v, ty.NativeObject)); + } + + /** + * Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer. + * It is slightly faster than MakeNumeral since it is not necessary to parse a string. + * Value of the numeral + * Sort of the numeral + * @return A Term with value and type + **/ + public Expr MkNumeral(long v, Sort ty) + { + + + + CheckContextMatch(ty); + return Expr.Create(this, Native.mkInt64(nCtx, v, ty.NativeObject)); + } + + /** + * Create a Term of a given sort. This function can be use to create numerals that fit in a machine integer. + * It is slightly faster than MakeNumeral since it is not necessary to parse a string. + * Value of the numeral + * Sort of the numeral + * @return A Term with value and type + **/ + public Expr MkNumeral(ulong v, Sort ty) + { + + + + CheckContextMatch(ty); + return Expr.Create(this, Native.mkUnsignedInt64(nCtx, v, ty.NativeObject)); + } + + /** + * Create a real from a fraction. + * numerator of rational. + * denominator of rational. + * @return A Term with value / and sort Real + * + **/ + public RatNum MkReal(int num, int den) + { + if (den == 0) + throw new Z3Exception("Denominator is zero"); + + + + + return new RatNum(this, Native.mkReal(nCtx, num, den)); + } + + /** + * Create a real numeral. + * A string representing the Term value in decimal notation. + * @return A Term with value and sort Real + **/ + public RatNum MkReal(String v) + { + + + return new RatNum(this, Native.mkNumeral(nCtx, v, RealSort.NativeObject)); + } + + /** + * Create a real numeral. + * value of the numeral. + * @return A Term with value and sort Real + **/ + public RatNum MkReal(int v) + { + + + return new RatNum(this, Native.mkInt(nCtx, v, RealSort.NativeObject)); + } + + /** + * Create a real numeral. + * value of the numeral. + * @return A Term with value and sort Real + **/ + public RatNum MkReal(Integer v) + { + + + return new RatNum(this, Native.mkUnsignedInt(nCtx, v, RealSort.NativeObject)); + } + + /** + * Create a real numeral. + * value of the numeral. + * @return A Term with value and sort Real + **/ + public RatNum MkReal(long v) + { + + + return new RatNum(this, Native.mkInt64(nCtx, v, RealSort.NativeObject)); + } + + /** + * Create a real numeral. + * value of the numeral. + * @return A Term with value and sort Real + **/ + public RatNum MkReal(ulong v) + { + + + return new RatNum(this, Native.mkUnsignedInt64(nCtx, v, RealSort.NativeObject)); + } + + /** + * Create an integer numeral. + * A string representing the Term value in decimal notation. + **/ + public IntNum MkInt(String v) + { + + + return new IntNum(this, Native.mkNumeral(nCtx, v, IntSort.NativeObject)); + } + + /** + * Create an integer numeral. + * value of the numeral. + * @return A Term with value and sort Integer + **/ + public IntNum MkInt(int v) + { + + + return new IntNum(this, Native.mkInt(nCtx, v, IntSort.NativeObject)); + } + + /** + * Create an integer numeral. + * value of the numeral. + * @return A Term with value and sort Integer + **/ + public IntNum MkInt(Integer v) + { + + + return new IntNum(this, Native.mkUnsignedInt(nCtx, v, IntSort.NativeObject)); + } + + /** + * Create an integer numeral. + * value of the numeral. + * @return A Term with value and sort Integer + **/ + public IntNum MkInt(long v) + { + + + return new IntNum(this, Native.mkInt64(nCtx, v, IntSort.NativeObject)); + } + + /** + * Create an integer numeral. + * value of the numeral. + * @return A Term with value and sort Integer + **/ + public IntNum MkInt(ulong v) + { + + + return new IntNum(this, Native.mkUnsignedInt64(nCtx, v, IntSort.NativeObject)); + } + + /** + * Create a bit-vector numeral. + * A string representing the value in decimal notation. + * the size of the bit-vector + **/ + public BitVecNum MkBV(String v, Integer size) + { + + + return (BitVecNum)MkNumeral(v, MkBitVecSort(size)); + } + + /** + * Create a bit-vector numeral. + * value of the numeral. + * the size of the bit-vector + **/ + public BitVecNum MkBV(int v, Integer size) + { + + + return (BitVecNum)MkNumeral(v, MkBitVecSort(size)); + } + + /** + * Create a bit-vector numeral. + * value of the numeral. + * the size of the bit-vector + **/ + public BitVecNum MkBV(Integer v, Integer size) + { + + + return (BitVecNum)MkNumeral(v, MkBitVecSort(size)); + } + + /** + * Create a bit-vector numeral. + * value of the numeral. + * * the size of the bit-vector + **/ + public BitVecNum MkBV(long v, Integer size) + { + + + return (BitVecNum)MkNumeral(v, MkBitVecSort(size)); + } + + /** + * Create a bit-vector numeral. + * value of the numeral. + * the size of the bit-vector + **/ + public BitVecNum MkBV(ulong v, Integer size) + { + + + return (BitVecNum)MkNumeral(v, MkBitVecSort(size)); + } + + + /** + * Create a universal Quantifier. + * + * Creates a forall formula, where is the weight, + * is an array of patterns, is an array + * with the sorts of the bound variables, is an array with the + * 'names' of the bound variables, and is the body of the + * quantifier. Quantifiers are associated with weights indicating + * the importance of using the quantifier during instantiation. + * + * the sorts of the bound variables. + * names of the bound variables + * the body of the quantifier. + * quantifiers are associated with weights indicating the importance of using the quantifier during instantiation. By default, pass the weight 0. + * array containing the patterns created using MkPattern. + * array containing the anti-patterns created using MkPattern. + * optional symbol to track quantifier. + * optional symbol to track skolem constants. + **/ + public Quantifier MkForall(Sort[] sorts, Symbol[] names, Expr body, Integer weight, Pattern[] patterns, Expr[] noPatterns, Symbol quantifierID, Symbol skolemID) + { + + + + + + + + + + + + return new Quantifier(this, true, sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID); + } + + + /** + * Create a universal Quantifier. + **/ + public Quantifier MkForall(Expr[] boundConstants, Expr body, Integer weight, Pattern[] patterns, Expr[] noPatterns, Symbol quantifierID, Symbol skolemID) + { + + + + + + + + return new Quantifier(this, true, boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID); + } + + /** + * Create an existential Quantifier. + * + **/ + public Quantifier MkExists(Sort[] sorts, Symbol[] names, Expr body, Integer weight, Pattern[] patterns, Expr[] noPatterns, Symbol quantifierID, Symbol skolemID) + { + + + + + + + + + + + return new Quantifier(this, false, sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID); + } + + /** + * Create an existential Quantifier. + **/ + public Quantifier MkExists(Expr[] boundConstants, Expr body, Integer weight, Pattern[] patterns, Expr[] noPatterns, Symbol quantifierID, Symbol skolemID) + { + + + + + + + return new Quantifier(this, false, boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID); + } + + + /** + * Create a Quantifier. + **/ + public Quantifier MkQuantifier(boolean universal, Sort[] sorts, Symbol[] names, Expr body, Integer weight, Pattern[] patterns, Expr[] noPatterns, Symbol quantifierID, Symbol skolemID) + { + + + + + + + + + + + + if (universal) + return MkForall(sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID); + else + return MkExists(sorts, names, body, weight, patterns, noPatterns, quantifierID, skolemID); + } + + + /** + * Create a Quantifier. + **/ + public Quantifier MkQuantifier(boolean universal, Expr[] boundConstants, Expr body, Integer weight, Pattern[] patterns, Expr[] noPatterns, Symbol quantifierID, Symbol skolemID) + { + + + + + + + + if (universal) + return MkForall(boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID); + else + return MkExists(boundConstants, body, weight, patterns, noPatterns, quantifierID, skolemID); + } + + + + /** + * Selects the format used for pretty-printing expressions. + * + * The default mode for pretty printing expressions is to produce + * SMT-LIB style output where common subexpressions are printed + * at each occurrence. The mode is called Z3_PRINT_SMTLIB_FULL. + * To print shared common subexpressions only once, + * use the Z3_PRINT_LOW_LEVEL mode. + * To print in way that conforms to SMT-LIB standards and uses let + * expressions to share common sub-expressions use Z3_PRINT_SMTLIB_COMPLIANT. + * + * + * + * + * + **/ + public void setPrintMode(Z3_ast_print_mode value) { Native.setAstPrintMode(nCtx, Integer(value)); } + + /** + * Convert a benchmark into an SMT-LIB formatted string. + * Name of the benchmark. The argument is optional. + * The benchmark logic. + * The status string (sat, unsat, or unknown) + * Other attributes, such as source, difficulty or category. + * Auxiliary assumptions. + * Formula to be checked for consistency in conjunction with assumptions. + * @return A string representation of the benchmark. + **/ + public String BenchmarkToSMTString(String name, String logic, String status, String attributes, + BoolExpr[] assumptions, BoolExpr formula) + { + + + + + return Native.benchmarkToSmtlibString(nCtx, name, logic, status, attributes, + (Integer)assumptions.Length, AST.ArrayToNative(assumptions), + formula.NativeObject); + } + + /** + * Parse the given string using the SMT-LIB parser. + * + * The symbol table of the parser can be initialized using the given sorts and declarations. + * The symbols in the arrays and + * don't need to match the names of the sorts and declarations in the arrays + * and . This is a useful feature since we can use arbitrary names to + * reference sorts and declarations. + * + **/ + public void ParseSMTLIBString(String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl[] decls) + { + Integer csn = Symbol.ArrayLength(sortNames); + Integer cs = Sort.ArrayLength(sorts); + Integer cdn = Symbol.ArrayLength(declNames); + Integer cd = AST.ArrayLength(decls); + if (csn != cs || cdn != cd) + throw new Z3Exception("Argument size mismatch"); + Native.parseSmtlibString(nCtx, str, + AST.ArrayLength(sorts), Symbol.ArrayToNative(sortNames), AST.ArrayToNative(sorts), + AST.ArrayLength(decls), Symbol.ArrayToNative(declNames), AST.ArrayToNative(decls)); + } + + /** + * Parse the given file using the SMT-LIB parser. + * + **/ + public void ParseSMTLIBFile(String fileName, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl[] decls) + { + Integer csn = Symbol.ArrayLength(sortNames); + Integer cs = Sort.ArrayLength(sorts); + Integer cdn = Symbol.ArrayLength(declNames); + Integer cd = AST.ArrayLength(decls); + if (csn != cs || cdn != cd) + throw new Z3Exception("Argument size mismatch"); + Native.parseSmtlibFile(nCtx, fileName, + AST.ArrayLength(sorts), Symbol.ArrayToNative(sortNames), AST.ArrayToNative(sorts), + AST.ArrayLength(decls), Symbol.ArrayToNative(declNames), AST.ArrayToNative(decls)); + } + + /** + * The number of SMTLIB formulas parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public Integer NumSMTLIBFormulas () { return Native.getSmtlibNumFormulas(nCtx); } + + /** + * The formulas parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public BoolExpr[] SMTLIBFormulas() + { + + + Integer n = NumSMTLIBFormulas; + BoolExpr[] res = new BoolExpr[n]; + for (Integer i = 0; i < n; i++) + res[i] = (BoolExpr)Expr.Create(this, Native.getSmtlibFormula(nCtx, i)); + return res; + } + + /** + * The number of SMTLIB assumptions parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public Integer NumSMTLIBAssumptions () { return Native.getSmtlibNumAssumptions(nCtx); } + + /** + * The assumptions parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public BoolExpr[] SMTLIBAssumptions() + { + + + Integer n = NumSMTLIBAssumptions; + BoolExpr[] res = new BoolExpr[n]; + for (Integer i = 0; i < n; i++) + res[i] = (BoolExpr)Expr.Create(this, Native.getSmtlibAssumption(nCtx, i)); + return res; + } + + /** + * The number of SMTLIB declarations parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public Integer NumSMTLIBDecls () { return Native.getSmtlibNumDecls(nCtx); } + + /** + * The declarations parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public FuncDecl[] SMTLIBDecls() + { + + + Integer n = NumSMTLIBDecls; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + res[i] = new FuncDecl(this, Native.getSmtlibDecl(nCtx, i)); + return res; + } + + /** + * The number of SMTLIB sorts parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public Integer NumSMTLIBSorts () { return Native.getSmtlibNumSorts(nCtx); } + + /** + * The declarations parsed by the last call to ParseSMTLIBString or ParseSMTLIBFile. + **/ + public Sort[] SMTLIBSorts() + { + + + Integer n = NumSMTLIBSorts; + Sort[] res = new Sort[n]; + for (Integer i = 0; i < n; i++) + res[i] = Sort.Create(this, Native.getSmtlibSort(nCtx, i)); + return res; + } + + /** + * Parse the given string using the SMT-LIB2 parser. + * + * @return A conjunction of assertions in the scope (up to push/pop) at the end of the string. + **/ + public BoolExpr ParseSMTLIB2String(String str, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl[] decls) + { + + + Integer csn = Symbol.ArrayLength(sortNames); + Integer cs = Sort.ArrayLength(sorts); + Integer cdn = Symbol.ArrayLength(declNames); + Integer cd = AST.ArrayLength(decls); + if (csn != cs || cdn != cd) + throw new Z3Exception("Argument size mismatch"); + return (BoolExpr)Expr.Create(this, Native.parseSmtlib2String(nCtx, str, + AST.ArrayLength(sorts), Symbol.ArrayToNative(sortNames), AST.ArrayToNative(sorts), + AST.ArrayLength(decls), Symbol.ArrayToNative(declNames), AST.ArrayToNative(decls))); + } + + /** + * Parse the given file using the SMT-LIB2 parser. + * + **/ + public BoolExpr ParseSMTLIB2File(String fileName, Symbol[] sortNames, Sort[] sorts, Symbol[] declNames, FuncDecl[] decls) + { + + + Integer csn = Symbol.ArrayLength(sortNames); + Integer cs = Sort.ArrayLength(sorts); + Integer cdn = Symbol.ArrayLength(declNames); + Integer cd = AST.ArrayLength(decls); + if (csn != cs || cdn != cd) + throw new Z3Exception("Argument size mismatch"); + return (BoolExpr)Expr.Create(this, Native.parseSmtlib2File(nCtx, fileName, + AST.ArrayLength(sorts), Symbol.ArrayToNative(sortNames), AST.ArrayToNative(sorts), + AST.ArrayLength(decls), Symbol.ArrayToNative(declNames), AST.ArrayToNative(decls))); + } + + /** + * Creates a new Goal. + * + * Note that the Context must have been created with proof generation support if + * is set to true here. + * + * Indicates whether model generation should be enabled. + * Indicates whether unsat core generation should be enabled. + * Indicates whether proof generation should be enabled. + **/ + public Goal MkGoal(boolean models, boolean unsatCores, boolean proofs) + { + + + return new Goal(this, models, unsatCores, proofs); + } + + /** + * Creates a new ParameterSet. + **/ + public Params MkParams() + { + + + return new Params(this); + } + + /** + * The number of supported tactics. + **/ + public Integer NumTactics() { return Native.getNumTactics(nCtx); } + + /** + * The names of all supported tactics. + **/ + public String[] TacticNames() + { + + + Integer n = NumTactics; + String[] res = new String[n]; + for (Integer i = 0; i < n; i++) + res[i] = Native.getTacticName(nCtx, i); + return res; + } + + /** + * Returns a string containing a description of the tactic with the given name. + **/ + public String TacticDescription(String name) + { + + + return Native.tacticGetDescr(nCtx, name); + } + + /** + * Creates a new Tactic. + **/ + public Tactic MkTactic(String name) + { + + + return new Tactic(this, name); + } + + /** + * Create a tactic that applies to a Goal and + * then to every subgoal produced by . + **/ + public Tactic AndThen(Tactic t1, Tactic t2, Tactic[] ts) + { + + + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + CheckContextMatch(ts); + + IntPtr last = IntPtr.Zero; + if (ts != null && ts.Length > 0) + { + last = ts[ts.Length - 1].NativeObject; + for (int i = ts.Length - 2; i >= 0; i--) + last = Native.tacticAndThen(nCtx, ts[i].NativeObject, last); + } + if (last != IntPtr.Zero) + { + last = Native.tacticAndThen(nCtx, t2.NativeObject, last); + return new Tactic(this, Native.tacticAndThen(nCtx, t1.NativeObject, last)); + } + else + return new Tactic(this, Native.tacticAndThen(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create a tactic that applies to a Goal and + * then to every subgoal produced by . + * + * Shorthand for AndThen. + * + **/ + public Tactic Then(Tactic t1, Tactic t2, Tactic[] ts) + { + + + + + + return AndThen(t1, t2, ts); + } + + /** + * Create a tactic that first applies to a Goal and + * if it fails then returns the result of applied to the Goal. + **/ + public Tactic OrElse(Tactic t1, Tactic t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new Tactic(this, Native.tacticOrElse(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create a tactic that applies to a goal for milliseconds. + * + * If does not terminate within milliseconds, then it fails. + * + **/ + public Tactic TryFor(Tactic t, Integer ms) + { + + + + CheckContextMatch(t); + return new Tactic(this, Native.tacticTryFor(nCtx, t.NativeObject, ms)); + } + + /** + * Create a tactic that applies to a given goal if the probe + * evaluates to true. + * + * If evaluates to false, then the new tactic behaves like the skip tactic. + * + **/ + public Tactic When(Probe p, Tactic t) + { + + + + + CheckContextMatch(t); + CheckContextMatch(p); + return new Tactic(this, Native.tacticWhen(nCtx, p.NativeObject, t.NativeObject)); + } + + /** + * Create a tactic that applies to a given goal if the probe + * evaluates to true and otherwise. + **/ + public Tactic Cond(Probe p, Tactic t1, Tactic t2) + { + + + + + + CheckContextMatch(p); + CheckContextMatch(t1); + CheckContextMatch(t2); + return new Tactic(this, Native.tacticCond(nCtx, p.NativeObject, t1.NativeObject, t2.NativeObject)); + } + + /** + * Create a tactic that keeps applying until the goal is not + * modified anymore or the maximum number of iterations is reached. + **/ + public Tactic Repeat(Tactic t, Integer max) + { + + + + CheckContextMatch(t); + return new Tactic(this, Native.tacticRepeat(nCtx, t.NativeObject, max)); + } + + /** + * Create a tactic that just returns the given goal. + **/ + public Tactic Skip() + { + + + return new Tactic(this, Native.tacticSkip(nCtx)); + } + + /** + * Create a tactic always fails. + **/ + public Tactic Fail() + { + + + return new Tactic(this, Native.tacticFail(nCtx)); + } + + /** + * Create a tactic that fails if the probe evaluates to false. + **/ + public Tactic FailIf(Probe p) + { + + + + CheckContextMatch(p); + return new Tactic(this, Native.tacticFailIf(nCtx, p.NativeObject)); + } + + /** + * Create a tactic that fails if the goal is not triviall satisfiable (i.e., empty) + * or trivially unsatisfiable (i.e., contains `false'). + **/ + public Tactic FailIfNotDecided() + { + + + return new Tactic(this, Native.tacticFailIfNotDecided(nCtx)); + } + + /** + * Create a tactic that applies using the given set of parameters . + **/ + public Tactic UsingParams(Tactic t, Params p) + { + + + + + CheckContextMatch(t); + CheckContextMatch(p); + return new Tactic(this, Native.tacticUsingParams(nCtx, t.NativeObject, p.NativeObject)); + } + + /** + * Create a tactic that applies using the given set of parameters . + * Alias for UsingParams + **/ + public Tactic With(Tactic t, Params p) + { + + + + + return UsingParams(t, p); + } + + /** + * Create a tactic that applies the given tactics in parallel. + **/ + public Tactic ParOr(Tactic[] t) + { + + + + CheckContextMatch(t); + return new Tactic(this, Native.tacticParOr(nCtx, Tactic.ArrayLength(t), Tactic.ArrayToNative(t))); + } + + /** + * Create a tactic that applies to a given goal and then + * to every subgoal produced by . The subgoals are processed in parallel. + **/ + public Tactic ParAndThen(Tactic t1, Tactic t2) + { + + + + + CheckContextMatch(t1); + CheckContextMatch(t2); + return new Tactic(this, Native.tacticParAndThen(nCtx, t1.NativeObject, t2.NativeObject)); + } + + /** + * Interrupt the execution of a Z3 procedure. + * This procedure can be used to interrupt: solvers, simplifiers and tactics. + **/ + public void Interrupt() + { + Native.interrupt(nCtx); + } + + /** + * The number of supported Probes. + **/ + public Integer NumProbes() { return Native.getNumProbes(nCtx); } + + /** + * The names of all supported Probes. + **/ + public String[] ProbeNames() + { + + + Integer n = NumProbes; + String[] res = new String[n]; + for (Integer i = 0; i < n; i++) + res[i] = Native.getProbeName(nCtx, i); + return res; + } + + /** + * Returns a string containing a description of the probe with the given name. + **/ + public String ProbeDescription(String name) + { + + + return Native.probeGetDescr(nCtx, name); + } + + /** + * Creates a new Probe. + **/ + public Probe MkProbe(String name) + { + + + return new Probe(this, name); + } + + /** + * Create a probe that always evaluates to . + **/ + public Probe Const(double val) + { + + + return new Probe(this, Native.probeConst(nCtx, val)); + } + + /** + * Create a probe that evaluates to "true" when the value returned by + * is less than the value returned by + **/ + public Probe Lt(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeLt(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value returned by + * is greater than the value returned by + **/ + public Probe Gt(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeGt(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value returned by + * is less than or equal the value returned by + **/ + public Probe Le(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeLe(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value returned by + * is greater than or equal the value returned by + **/ + public Probe Ge(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeGe(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value returned by + * is equal to the value returned by + **/ + public Probe Eq(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeEq(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value + * and evaluate to "true". + **/ + public Probe And(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeAnd(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value + * or evaluate to "true". + **/ + public Probe Or(Probe p1, Probe p2) + { + + + + + CheckContextMatch(p1); + CheckContextMatch(p2); + return new Probe(this, Native.probeOr(nCtx, p1.NativeObject, p2.NativeObject)); + } + + /** + * Create a probe that evaluates to "true" when the value + * does not evaluate to "true". + **/ + public Probe Not(Probe p) + { + + + + CheckContextMatch(p); + return new Probe(this, Native.probeNot(nCtx, p.NativeObject)); + } + + /** + * Creates a new (incremental) solver. + * + * This solver also uses a set of builtin tactics for handling the first + * check-sat command, and check-sat commands that take more than a given + * number of milliseconds to be solved. + * + **/ + public Solver MkSolver(Symbol logic) + { + + + if (logic == null) + return new Solver(this, Native.mkSolver(nCtx)); + else + return new Solver(this, Native.mkSolverForLogic(nCtx, logic.NativeObject)); + } + + /** + * Creates a new (incremental) solver. + * + **/ + public Solver MkSolver(String logic) + { + + + return MkSolver(MkSymbol(logic)); + } + + /** + * Creates a new (incremental) solver. + **/ + public Solver MkSimpleSolver() + { + + + return new Solver(this, Native.mkSimpleSolver(nCtx)); + } + + /** + * Creates a solver that is implemented using the given tactic. + * + * The solver supports the commands Push and Pop, but it + * will always solve each check from scratch. + * + **/ + public Solver MkSolver(Tactic t) + { + + + + return new Solver(this, Native.mkSolverFromTactic(nCtx, t.NativeObject)); + } + + /** + * Create a Fixedpoint context. + **/ + public Fixedpoint MkFixedpoint() + { + + + return new Fixedpoint(this); + } + + + /** + * Wraps an AST. + * This function is used for transitions between native and + * managed objects. Note that must be a + * native object obtained from Z3 (e.g., through ) + * and that it must have a correct reference count (see e.g., + * . + * + * The native pointer to wrap. + **/ + public AST WrapAST(IntPtr nativeObject) + { + + return AST.Create(this, nativeObject); + } + + /** + * Unwraps an AST. + * This function is used for transitions between native and + * managed objects. It returns the native pointer to the AST. Note that + * AST objects are reference counted and unwrapping an AST disables automatic + * reference counting, i.e., all references to the IntPtr that is returned + * must be handled externally and through native calls (see e.g., + * ). + * + * The AST to unwrap. + **/ + public IntPtr UnwrapAST(AST a) + { + return a.NativeObject; + } + + /** + * Return a string describing all available parameters to Expr.Simplify. + **/ + public String SimplifyHelp() + { + + + return Native.simplifyGetHelp(nCtx); + } + + /** + * Retrieves parameter descriptions for simplifier. + **/ + public ParamDescrs SimplifyParameterDescriptions() { return new ParamDescrs(this, Native.simplifyGetParamDescrs(nCtx)); } + + /** + * Enable/disable printing of warning messages to the console. + * Note that this function is static and effects the behaviour of + * all contexts globally. + **/ + public static void ToggleWarningMessages(boolean enabled) + { + Native.toggleWarningMessages((enabled) ? 1 : 0); + } + + ///// + ///// A delegate which is executed when an error is raised. + ///// + ///// + ///// Note that it is possible for memory leaks to occur if error handlers + ///// throw exceptions. + ///// + //public delegate void ErrorHandler(Context ctx, Z3ErrorCode errorCode, String errorString); + + ///// + ///// The OnError event. + ///// + //public event ErrorHandler OnError = null; + + /** + * Update a mutable configuration parameter. + * + * The list of all configuration parameters can be obtained using the Z3 executable: + * z3.exe -ini? + * Only a few configuration parameters are mutable once the context is created. + * An exception is thrown when trying to modify an immutable parameter. + * + * + **/ + public void UpdateParamValue(String id, String value) + { + Native.updateParamValue(nCtx, id, value); + } + + /** + * Get a configuration parameter. + * + * Returns null if the parameter value does not exist. + * + * + **/ + public String GetParamValue(String id) + { + IntPtr res = IntPtr.Zero; + int r = Native.getParamValue(nCtx, id, out res); + if (r == (int)Z3Lboolean.Z3LFALSE) + return null; + else + return Marshal.PtrtoStringAnsi(res); + } + + + IntPtr mCtx = IntPtr.Zero; + Native.errorHandler mNErrHandler = null; + IntPtr nCtx () { return mCtx; } + + void NativeErrorHandler(IntPtr ctx, Z3ErrorCode errorCode) + { + // Do-nothing error handler. The wrappers in Z3.Native will throw exceptions upon errors. + } + + void InitContext() + { + PrintMode = Z3AstPrintMode.Z3PRINTSMTLIB2COMPLIANT; + mNErrHandler = new Native.errorHandler(NativeErrorHandler); // keep reference so it doesn't get collected. + Native.setErrorHandler(mCtx, mNErrHandler); + GC.SuppressFinalize(this); + } + + void CheckContextMatch(Z3Object other) + { + + + if (!ReferenceEquals(this, other.Context)) + throw new Z3Exception("Context mismatch"); + } + + void CheckContextMatch(Z3Object[] arr) + { + + + if (arr != null) + { + for (Z3Object.Iterator a = arr.iterator(); a.hasNext(); ) + { + // It was an assume, now we added the precondition, and we made it into an assert + CheckContextMatch(a); + } + } + } + + private void ObjectInvariant() + { + + + + + + + + + + + + + + + + } + + private AST.DecRefQueue mASTDRQ = new AST.DecRefQueue(); + private ASTMap.DecRefQueue mASTMapDRQ = new ASTMap.DecRefQueue(); + private ASTVector.DecRefQueue mASTVectorDRQ = new ASTVector.DecRefQueue(); + private ApplyResult.DecRefQueue mApplyResultDRQ = new ApplyResult.DecRefQueue(); + private FuncInterp.Entry.DecRefQueue mFuncEntryDRQ = new FuncInterp.Entry.DecRefQueue(); + private FuncInterp.DecRefQueue mFuncInterpDRQ = new FuncInterp.DecRefQueue(); + private Goal.DecRefQueue mGoalDRQ = new Goal.DecRefQueue(); + private Model.DecRefQueue mModelDRQ = new Model.DecRefQueue(); + private Params.DecRefQueue mParamsDRQ = new Params.DecRefQueue(); + private ParamDescrs.DecRefQueue mParamDescrsDRQ = new ParamDescrs.DecRefQueue(); + private Probe.DecRefQueue mProbeDRQ = new Probe.DecRefQueue(); + private Solver.DecRefQueue mSolverDRQ = new Solver.DecRefQueue(); + private Statistics.DecRefQueue mStatisticsDRQ = new Statistics.DecRefQueue(); + private Tactic.DecRefQueue mTacticDRQ = new Tactic.DecRefQueue(); + private Fixedpoint.DecRefQueue mFixedpointDRQ = new Fixedpoint.DecRefQueue(); + + AST.DecRefQueue AST_DRQ () { Contract.Ensures(Contract.Result() != null); return mASTDRQ; } + ASTMap.DecRefQueue ASTMap_DRQ () { Contract.Ensures(Contract.Result() != null); return mASTMapDRQ; } + ASTVector.DecRefQueue ASTVector_DRQ () { Contract.Ensures(Contract.Result() != null); return mASTVectorDRQ; } + ApplyResult.DecRefQueue ApplyResult_DRQ () { Contract.Ensures(Contract.Result() != null); return mApplyResultDRQ; } + FuncInterp.Entry.DecRefQueue FuncEntry_DRQ () { Contract.Ensures(Contract.Result() != null); return mFuncEntryDRQ; } + FuncInterp.DecRefQueue FuncInterp_DRQ () { Contract.Ensures(Contract.Result() != null); return mFuncInterpDRQ; } + Goal.DecRefQueue Goal_DRQ () { Contract.Ensures(Contract.Result() != null); return mGoalDRQ; } + Model.DecRefQueue Model_DRQ () { Contract.Ensures(Contract.Result() != null); return mModelDRQ; } + Params.DecRefQueue Params_DRQ () { Contract.Ensures(Contract.Result() != null); return mParamsDRQ; } + ParamDescrs.DecRefQueue ParamDescrs_DRQ () { Contract.Ensures(Contract.Result() != null); return mParamDescrsDRQ; } + Probe.DecRefQueue Probe_DRQ () { Contract.Ensures(Contract.Result() != null); return mProbeDRQ; } + Solver.DecRefQueue Solver_DRQ () { Contract.Ensures(Contract.Result() != null); return mSolverDRQ; } + Statistics.DecRefQueue Statistics_DRQ () { Contract.Ensures(Contract.Result() != null); return mStatisticsDRQ; } + Tactic.DecRefQueue Tactic_DRQ () { Contract.Ensures(Contract.Result() != null); return mTacticDRQ; } + Fixedpoint.DecRefQueue Fixedpoint_DRQ () { Contract.Ensures(Contract.Result() != null); return mFixedpointDRQ; } + + + Integer refCount = 0; + + /** + * Finalizer. + **/ + protected void finalize() + { + // Console.WriteLine("Context Finalizer from " + System.Threading.Thread.CurrentThread.ManagedThreadId); + Dispose(); + + if (refCount == 0) + { + mNErrHandler = null; + Native.delContext(mCtx); + mCtx = IntPtr.Zero; + } + else + GC.ReRegisterForFinalize(this); + } + + /** + * Disposes of the context. + **/ + public void Dispose() + { + // Console.WriteLine("Context Dispose from " + System.Threading.Thread.CurrentThread.ManagedThreadId); + ASTDRQ.Clear(this); + ASTMapDRQ.Clear(this); + ASTVectorDRQ.Clear(this); + ApplyResultDRQ.Clear(this); + FuncEntryDRQ.Clear(this); + FuncInterpDRQ.Clear(this); + GoalDRQ.Clear(this); + ModelDRQ.Clear(this); + ParamsDRQ.Clear(this); + ProbeDRQ.Clear(this); + SolverDRQ.Clear(this); + StatisticsDRQ.Clear(this); + TacticDRQ.Clear(this); + FixedpointDRQ.Clear(this); + + mBooleanSort = null; + mIntSort = null; + mRealSort = null; + } + } diff --git a/src/api/java/com/Microsoft/Z3/DecRefQUeue.java b/src/api/java/com/Microsoft/Z3/DecRefQUeue.java new file mode 100644 index 000000000..1e1f13881 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/DecRefQUeue.java @@ -0,0 +1,50 @@ +/** + * This file was automatically generated from DecRefQUeue.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ +/* using System.Collections; */ +/* using System.Collections.Generic; */ +/* using System.Threading; */ + + abstract class DecRefQueue + + private void ObjectInvariant() + + + + readonly protected Object mLock = new Object(); + readonly protected List mQueue = new List(); + const Integer mMoveLimit = 1024; + + public abstract void IncRef(Context ctx, IntPtr obj); + public abstract void DecRef(Context ctx, IntPtr obj); + + public void IncAndClear(Context ctx, IntPtr o) + + + IncRef(ctx, o); + if (mQueue.Count >= mMoveLimit) Clear(ctx); + + public void Add(IntPtr o) + if (o == IntPtr.Zero) return; + + lock (mLock) + mQueue.Add(o); + + public void Clear(Context ctx) + + + lock (mLock) + for (IntPtr.Iterator o = mQueue.iterator(); o.hasNext(); ) + DecRef(ctx, o); + mQueue.Clear(); + + abstract class DecRefQueueContracts : DecRefQueue + public void IncRef(Context ctx, IntPtr obj) + + + public void DecRef(Context ctx, IntPtr obj) + diff --git a/src/api/java/com/Microsoft/Z3/Expr.java b/src/api/java/com/Microsoft/Z3/Expr.java new file mode 100644 index 000000000..480f5f6b6 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Expr.java @@ -0,0 +1,428 @@ +/** + * This file was automatically generated from Expr.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Expressions are terms. + **/ + public class Expr extends AST + { + /** + * Returns a simplified version of the expression. + * A set of parameters to configure the simplifier + * + **/ + public Expr Simplify(Params p) + { + + + if (p == null) + return Expr.Create(Context, Native.simplify(Context.nCtx, NativeObject)); + else + return Expr.Create(Context, Native.simplifyEx(Context.nCtx, NativeObject, p.NativeObject)); + } + + /** + * The function declaration of the function that is applied in this expression. + **/ + public FuncDecl FuncDecl() { + + return new FuncDecl(Context, Native.getAppDecl(Context.nCtx, NativeObject)); } + + /** + * Indicates whether the expression is the true or false expression + * or something else (Z3_L_UNDEF). + **/ + public Z3_lboolean BoolValue() { return (Z3Lboolean)Native.getBooleanValue(Context.nCtx, NativeObject); } + + /** + * The number of arguments of the expression. + **/ + public Integer NumArgs() { return Native.getAppNumArgs(Context.nCtx, NativeObject); } + + /** + * The arguments of the expression. + **/ + public Expr[] Args() + { + + + Integer n = NumArgs; + Expr[] res = new Expr[n]; + for (Integer i = 0; i < n; i++) + res[i] = Expr.Create(Context, Native.getAppArg(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * Update the arguments of the expression using the arguments + * The number of new arguments should coincide with the current number of arguments. + **/ + public void Update(Expr[] args) + { + + + + Context.CheckContextMatch(args); + if (args.Length != NumArgs) + throw new Z3Exception("Number of arguments does not match"); + NativeObject = Native.updateTerm(Context.nCtx, NativeObject, (Integer)args.Length, Expr.ArrayToNative(args)); + } + + /** + * Substitute every occurrence of from[i] in the expression with to[i], for i smaller than num_exprs. + * + * The result is the new expression. The arrays from and to must have size num_exprs. + * For every i smaller than num_exprs, we must have that + * sort of from[i] must be equal to sort of to[i]. + * + **/ + public Expr Substitute(Expr[] from, Expr[] to) + { + + + + + + + Context.CheckContextMatch(from); + Context.CheckContextMatch(to); + if (from.Length != to.Length) + throw new Z3Exception("Argument sizes do not match"); + return Expr.Create(Context, Native.substitute(Context.nCtx, NativeObject, (Integer)from.Length, Expr.ArrayToNative(from), Expr.ArrayToNative(to))); + } + + /** + * Substitute every occurrence of from in the expression with to. + * + **/ + public Expr Substitute(Expr from, Expr to) + { + + + + + return Substitute(new Expr[] { from }, new Expr[] { to }); + } + + /** + * Substitute the free variables in the expression with the expressions in + * + * For every i smaller than num_exprs, the variable with de-Bruijn index i is replaced with term to[i]. + * + **/ + public Expr SubstituteVars(Expr[] to) + { + + + + + Context.CheckContextMatch(to); + return Expr.Create(Context, Native.substituteVars(Context.nCtx, NativeObject, (Integer)to.Length, Expr.ArrayToNative(to))); + } + + /** + * Translates (copies) the term to the Context . + * A context + * @return A copy of the term which is associated with + **/ + public Expr Translate(Context ctx) + { + + + + if (ReferenceEquals(Context, ctx)) + return this; + else + return Expr.Create(ctx, Native.translate(Context.nCtx, NativeObject, ctx.nCtx)); + } + + /** + * Returns a string representation of the expression. + **/ + public String toString() + { + return super.toString(); + } + + /** + * Indicates whether the term is a numeral + **/ + public boolean IsNumeral() { return Native.isNumeralAst(Context.nCtx, NativeObject) != 0; } + + /** + * Indicates whether the term is well-sorted. + * @return True if the term is well-sorted, false otherwise. + **/ + public boolean IsWellSorted() { return Native.isWellSorted(Context.nCtx, NativeObject) != 0; } + + /** + * The Sort of the term. + **/ + public Sort Sort() { + + return Sort.Create(Context, Native.getSort(Context.nCtx, NativeObject)); } + + /** + * Indicates whether the term represents a constant. + **/ + public boolean IsConst() { return IsExpr && NumArgs == 0 && FuncDecl.DomainSize == 0; } + + /** + * Indicates whether the term is an integer numeral. + **/ + public boolean IsIntNum() { return IsNumeral && IsInt; } + + /** + * Indicates whether the term is a real numeral. + **/ + public boolean IsRatNum() { return IsNumeral && IsReal; } + + /** + * Indicates whether the term is an algebraic number + **/ + public boolean IsAlgebraicNumber() { return Native.isAlgebraicNumber(Context.nCtx, NativeObject) != 0; } + + + /** + * Indicates whether the term has Boolean sort. + **/ + public boolean IsBool() + { + return (IsExpr && + Native.isEqSort(Context.nCtx, + Native.mkBooleanSort(Context.nCtx), + Native.getSort(Context.nCtx, NativeObject)) != 0); + } + + /** + * Indicates whether the term is the constant true. + **/ + /* Overloaded operators are not translated. */ + } + + /** + * Indicates whether the term is of sort real. + **/ + public boolean IsReal() { return Native.getSortKind(Context.nCtx, Native.getSort(Context.nCtx, NativeObject)) == (Integer)Z3SortKind.Z3REALSORT; } + + /** + * Indicates whether the term is an arithmetic numeral. + **/ + /* Overloaded operators are not translated. */ + } + + /** + * Indicates whether the term is an array store. + * It satisfies select(store(a,i,v),j) = if i = j then v else select(a,j). + * Array store takes at least 3 arguments. + **/ + /* Overloaded operators are not translated. */ + + /** + * Indicates whether the term is a bit-vector numeral + **/ + /* Overloaded operators are not translated. */ + } + + /** + * Indicates whether the term is an relation store + * + * Insert a record into a relation. + * The function takes n+1 arguments, where the first argument is the relation and the remaining n elements + * correspond to the n columns of the relation. + * + **/ + /* Overloaded operators are not translated. */ + } + + /** + * Indicates whether the term is a less than predicate over a finite domain. + **/ + /* Overloaded operators are not translated. */ + } + + /** Constructor for Expr + **/ + protected Expr(Context ctx) { super(ctx); } + /** Constructor for Expr + **/ + protected Expr(Context ctx, IntPtr obj) { super(ctx, obj); } + + void CheckNativeObject(IntPtr obj) + { + if (Native.isApp(Context.nCtx, obj) == 0 && + (Z3AstKind)Native.getAstKind(Context.nCtx, obj) != Z3AstKind.Z3VARAST && + (Z3AstKind)Native.getAstKind(Context.nCtx, obj) != Z3AstKind.Z3QUANTIFIERAST) + throw new Z3Exception("Underlying object is not a term"); + super.CheckNativeObject(obj); + } + + static Expr Create(Context ctx, FuncDecl f, params Expr[] arguments) + { + + + + + IntPtr obj = Native.mkApp(ctx.nCtx, f.NativeObject, + AST.ArrayLength(arguments), + AST.ArrayToNative(arguments)); + return Create(ctx, obj); + } + + new static Expr Create(Context ctx, IntPtr obj) + { + + + + Z3AstKind k = (Z3AstKind)Native.getAstKind(ctx.nCtx, obj); + if (k == Z3AstKind.Z3QUANTIFIERAST) + return new Quantifier(ctx, obj); + IntPtr s = Native.getSort(ctx.nCtx, obj); + Z3SortKind sk = (Z3SortKind)Native.getSortKind(ctx.nCtx, s); + + if (Native.isAlgebraicNumber(ctx.nCtx, obj) != 0) // is this a numeral ast? + return new AlgebraicNum(ctx, obj); + + if (Native.isNumeralAst(ctx.nCtx, obj) != 0) + { + switch (sk) + { + case Z3SortKind.Z3INTSORT: return new IntNum(ctx, obj); + case Z3SortKind.Z3REALSORT: return new RatNum(ctx, obj); + case Z3SortKind.Z3BVSORT: return new BitVecNum(ctx, obj); + } + } + + switch (sk) + { + case Z3SortKind.Z3BOOLSORT: return new BoolExpr(ctx, obj); + case Z3SortKind.Z3INTSORT: return new IntExpr(ctx, obj); + case Z3SortKind.Z3REALSORT: return new RealExpr(ctx, obj); + case Z3SortKind.Z3BVSORT: return new BitVecExpr(ctx, obj); + case Z3SortKind.Z3ARRAYSORT: return new ArrayExpr(ctx, obj); + case Z3SortKind.Z3DATATYPESORT: return new DatatypeExpr(ctx, obj); + } + + return new Expr(ctx, obj); + } + } + + /** + * Boolean expressions + **/ + public class BoolExpr extends Expr + { + /** Constructor for BoolExpr + **/ + protected BoolExpr(Context ctx) { super(ctx); } + /** Constructor for BoolExpr + **/ + BoolExpr(Context ctx, IntPtr obj) { super(ctx, obj); } + } + + /** + * Arithmetic expressions (int/real) + **/ + public class ArithExpr extends Expr + { + /** Constructor for ArithExpr + **/ + protected ArithExpr(Context ctx) + { super(ctx); + + } + ArithExpr(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } + + /** + * Int expressions + **/ + public class IntExpr extends ArithExpr + { + /** Constructor for IntExpr + **/ + protected IntExpr(Context ctx) + { super(ctx); + + } + IntExpr(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } + + /** + * Real expressions + **/ + public class RealExpr extends ArithExpr + { + /** Constructor for RealExpr + **/ + protected RealExpr(Context ctx) + { super(ctx); + + } + RealExpr(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } + + /** + * Bit-vector expressions + **/ + public class BitVecExpr extends Expr + { + + /** + * The size of the sort of a bit-vector term. + **/ + public Integer SortSize() { return ((BitVecSort)Sort).Size; } + + /** Constructor for BitVecExpr + **/ + protected BitVecExpr(Context ctx) { super(ctx); } + BitVecExpr(Context ctx, IntPtr obj) { super(ctx, obj); } + } + + /** + * Array expressions + **/ + public class ArrayExpr extends Expr + { + /** Constructor for ArrayExpr + **/ + protected ArrayExpr(Context ctx) + { super(ctx); + + } + ArrayExpr(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } + + /** + * Datatype expressions + **/ + public class DatatypeExpr extends Expr + { + /** Constructor for DatatypeExpr + **/ + protected DatatypeExpr(Context ctx) + { super(ctx); + + } + DatatypeExpr(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } diff --git a/src/api/java/com/Microsoft/Z3/Fixedpoint.java b/src/api/java/com/Microsoft/Z3/Fixedpoint.java new file mode 100644 index 000000000..9d4f61c94 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Fixedpoint.java @@ -0,0 +1,300 @@ +/** + * This file was automatically generated from Fixedpoint.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Object for managing fixedpoints + **/ + public class Fixedpoint extends Z3Object + { + + /** + * A string that describes all available fixedpoint solver parameters. + **/ + public String Help() + { + + return Native.fixedpointGetHelp(Context.nCtx, NativeObject); + } + + /** + * Sets the fixedpoint solver parameters. + **/ + public void setParameters(Params value) + { + + Context.CheckContextMatch(value); + Native.fixedpointSetParams(Context.nCtx, NativeObject, value.NativeObject); + } + + /** + * Retrieves parameter descriptions for Fixedpoint solver. + **/ + public ParamDescrs ParameterDescriptions() { return new ParamDescrs(Context, Native.fixedpointGetParamDescrs(Context.nCtx, NativeObject)); } + + + /** + * Assert a constraint (or multiple) into the fixedpoint solver. + **/ + public void Assert(BoolExpr[] constraints) + { + + + + Context.CheckContextMatch(constraints); + for (BoolExpr.Iterator a = constraints.iterator(); a.hasNext(); ) + { + Native.fixedpointAssert(Context.nCtx, NativeObject, a.NativeObject); + } + } + + /** + * Register predicate as recursive relation. + **/ + public void RegisterRelation(FuncDecl f) + { + + + Context.CheckContextMatch(f); + Native.fixedpointRegisterRelation(Context.nCtx, NativeObject, f.NativeObject); + } + + /** + * Add rule into the fixedpoint solver. + **/ + public void AddRule(BoolExpr rule, Symbol name) + { + + + Context.CheckContextMatch(rule); + Native.fixedpointAddRule(Context.nCtx, NativeObject, rule.NativeObject, AST.GetNativeObject(name)); + } + + /** + * Add table fact to the fixedpoint solver. + **/ + public void AddFact(FuncDecl pred, Integer[] args) + { + + + + Context.CheckContextMatch(pred); + Native.fixedpointAddFact(Context.nCtx, NativeObject, pred.NativeObject, (Integer)args.Length, args); + } + + /** + * Query the fixedpoint solver. + * A query is a conjunction of constraints. The constraints may include the recursively defined relations. + * The query is satisfiable if there is an instance of the query variables and a derivation for it. + * The query is unsatisfiable if there are no derivations satisfying the query variables. + **/ + public Status Query(BoolExpr query) + { + + + Context.CheckContextMatch(query); + Z3Lboolean r = (Z3Lboolean)Native.fixedpointQuery(Context.nCtx, NativeObject, query.NativeObject); + switch (r) + { + case Z3Lboolean.Z3LTRUE: return Status.SATISFIABLE; + case Z3Lboolean.Z3LFALSE: return Status.UNSATISFIABLE; + default: return Status.UNKNOWN; + } + } + + /** + * Query the fixedpoint solver. + * A query is an array of relations. + * The query is satisfiable if there is an instance of some relation that is non-empty. + * The query is unsatisfiable if there are no derivations satisfying any of the relations. + **/ + public Status Query(FuncDecl[] relations) + { + + + + Context.CheckContextMatch(relations); + Z3Lboolean r = (Z3Lboolean)Native.fixedpointQueryRelations(Context.nCtx, NativeObject, + AST.ArrayLength(relations), AST.ArrayToNative(relations)); + switch (r) + { + case Z3Lboolean.Z3LTRUE: return Status.SATISFIABLE; + case Z3Lboolean.Z3LFALSE: return Status.UNSATISFIABLE; + default: return Status.UNKNOWN; + } + } + + /** + * Creates a backtracking point. + * + **/ + public void Push() + { + Native.fixedpointPush(Context.nCtx, NativeObject); + } + + /** + * Backtrack one backtracking point. + * Note that an exception is thrown if Pop is called without a corresponding Push + * + **/ + public void Pop() + { + Native.fixedpointPop(Context.nCtx, NativeObject); + } + + + /** + * Update named rule into in the fixedpoint solver. + **/ + public void UpdateRule(BoolExpr rule, Symbol name) + { + + + Context.CheckContextMatch(rule); + Native.fixedpointUpdateRule(Context.nCtx, NativeObject, rule.NativeObject, AST.GetNativeObject(name)); + } + + /** + * Retrieve satisfying instance or instances of solver, + * or definitions for the recursive predicates that show unsatisfiability. + **/ + public Expr GetAnswer() + { + IntPtr ans = Native.fixedpointGetAnswer(Context.nCtx, NativeObject); + return (ans == IntPtr.Zero) ? null : Expr.Create(Context, ans); + } + + /** + * Retrieve explanation why fixedpoint engine returned status Unknown. + **/ + public String GetReasonUnknown() + { + + + return Native.fixedpointGetReasonUnknown(Context.nCtx, NativeObject); + } + + /** + * Retrieve the number of levels explored for a given predicate. + **/ + public Integer GetNumLevels(FuncDecl predicate) + { + return Native.fixedpointGetNumLevels(Context.nCtx, NativeObject, predicate.NativeObject); + } + + /** + * Retrieve the cover of a predicate. + **/ + public Expr GetCoverDelta(int level, FuncDecl predicate) + { + IntPtr res = Native.fixedpointGetCoverDelta(Context.nCtx, NativeObject, level, predicate.NativeObject); + return (res == IntPtr.Zero) ? null : Expr.Create(Context, res); + } + + /** + * Add property about the predicate. + * The property is added at level. + **/ + public void AddCover(int level, FuncDecl predicate, Expr property) + { + Native.fixedpointAddCover(Context.nCtx, NativeObject, level, predicate.NativeObject, property.NativeObject); + } + + /** + * Retrieve internal string representation of fixedpoint object. + **/ + public String toString() + { + return Native.fixedpointtoString(Context.nCtx, NativeObject, 0, null); + } + + /** + * Instrument the Datalog engine on which table representation to use for recursive predicate. + **/ + public void SetPredicateRepresentation(FuncDecl f, Symbol[] kinds) + { + + + Native.fixedpointSetPredicateRepresentation(Context.nCtx, NativeObject, + f.NativeObject, AST.ArrayLength(kinds), Symbol.ArrayToNative(kinds)); + + } + + /** + * Convert benchmark given as set of axioms, rules and queries to a string. + **/ + public String toString(BoolExpr[] queries) + { + + return Native.fixedpointtoString(Context.nCtx, NativeObject, + AST.ArrayLength(queries), AST.ArrayToNative(queries)); + } + + /** + * Retrieve set of rules added to fixedpoint context. + **/ + public BoolExpr[] Rules {() + + + ASTVector v = new ASTVector(Context, Native.fixedpointGetRules(Context.nCtx, NativeObject)); + Integer n = v.Size; + BoolExpr[] res = new BoolExpr[n]; + for (Integer i = 0; i < n; i++) + res[i] = new BoolExpr(Context, v[i].NativeObject); + return res; + } + + /** + * Retrieve set of assertions added to fixedpoint context. + **/ + public BoolExpr[] Assertions {() + + + ASTVector v = new ASTVector(Context, Native.fixedpointGetAssertions(Context.nCtx, NativeObject)); + Integer n = v.Size; + BoolExpr[] res = new BoolExpr[n]; + for (Integer i = 0; i < n; i++) + res[i] = new BoolExpr(Context, v[i].NativeObject); + return res; + } + + + Fixedpoint(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + Fixedpoint(Context ctx) + { super(ctx, Native.mkFixedpoint(ctx.nCtx)); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.fixedpointIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.fixedpointDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.FixedpointDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.FixedpointDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/FuncDecl.java b/src/api/java/com/Microsoft/Z3/FuncDecl.java new file mode 100644 index 000000000..afd171813 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/FuncDecl.java @@ -0,0 +1,257 @@ +/** + * This file was automatically generated from FuncDecl.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Function declarations. + **/ + public class FuncDecl extends AST + { + /** + * Comparison operator. + * @return True if and share the same context and are equal, false otherwise. + **/ + /* Overloaded operators are not translated. */ + + /** + * Comparison operator. + * @return True if and do not share the same context or are not equal, false otherwise. + **/ + /* Overloaded operators are not translated. */ + + /** + * Object comparison. + **/ + public boolean Equals(object o) + { + FuncDecl casted = o as FuncDecl; + if (casted == null) return false; + return this == casted; + } + + /** + * A hash code. + **/ + public int GetHashCode() + { + return super.GetHashCode(); + } + + /** + * A string representations of the function declaration. + **/ + public String toString() + { + return Native.funcDecltoString(Context.nCtx, NativeObject); + } + + /** + * Returns a unique identifier for the function declaration. + **/ + new public Integer Id() { return Native.getFuncDeclId(Context.nCtx, NativeObject); } + + /** + * The arity of the function declaration + **/ + public Integer Arity() { return Native.getArity(Context.nCtx, NativeObject); } + + /** + * The size of the domain of the function declaration + * + **/ + public Integer DomainSize() { return Native.getDomainSize(Context.nCtx, NativeObject); } + + /** + * The domain of the function declaration + **/ + public Sort[] Domain() + { + + + var n = DomainSize; + + Sort[] res = new Sort[n]; + for (Integer i = 0; i < n; i++) + res[i] = Sort.Create(Context, Native.getDomain(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The range of the function declaration + **/ + public Sort Range() { + + return Sort.Create(Context, Native.getRange(Context.nCtx, NativeObject)); } + + /** + * The kind of the function declaration. + **/ + public Z3_decl_kind DeclKind() { return (Z3DeclKind)Native.getDeclKind(Context.nCtx, NativeObject); } + + /** + * The name of the function declaration + **/ + public Symbol Name() { + + return Symbol.Create(Context, Native.getDeclName(Context.nCtx, NativeObject)); } + + /** + * The number of parameters of the function declaration + **/ + public Integer NumParameters() { return Native.getDeclNumParameters(Context.nCtx, NativeObject); } + + /** + * The parameters of the function declaration + **/ + public Parameter[] Parameters() + { + + + Integer num = NumParameters; + Parameter[] res = new Parameter[num]; + for (Integer i = 0; i < num; i++) + { + Z3ParameterKind k = (Z3ParameterKind)Native.getDeclParameterKind(Context.nCtx, NativeObject, i); + switch (k) + { + case Z3ParameterKind.Z3PARAMETERINT: + res[i] = new Parameter(k, Native.getDeclIntParameter(Context.nCtx, NativeObject, i)); + break; + case Z3ParameterKind.Z3PARAMETERDOUBLE: + res[i] = new Parameter(k, Native.getDeclDoubleParameter(Context.nCtx, NativeObject, i)); + break; + case Z3ParameterKind.Z3PARAMETERSYMBOL: + res[i] = new Parameter(k, Symbol.Create(Context, Native.getDeclSymbolParameter(Context.nCtx, NativeObject, i))); + break; + case Z3ParameterKind.Z3PARAMETERSORT: + res[i] = new Parameter(k, Sort.Create(Context, Native.getDeclSortParameter(Context.nCtx, NativeObject, i))); + break; + case Z3ParameterKind.Z3PARAMETERAST: + res[i] = new Parameter(k, new AST(Context, Native.getDeclAstParameter(Context.nCtx, NativeObject, i))); + break; + case Z3ParameterKind.Z3PARAMETERFUNCDECL: + res[i] = new Parameter(k, new FuncDecl(Context, Native.getDeclFuncDeclParameter(Context.nCtx, NativeObject, i))); + break; + case Z3ParameterKind.Z3PARAMETERRATIONAL: + res[i] = new Parameter(k, Native.getDeclRationalParameter(Context.nCtx, NativeObject, i)); + break; + default: + throw new Z3Exception("Unknown function declaration parameter kind encountered"); + } + return res; + } + } + + /** + * Function declarations can have Parameters associated with them. + **/ + public class Parameter + { + private Z3ParameterKind kind; + private int i; + private double d; + private Symbol sym; + private Sort srt; + private AST ast; + private FuncDecl fd; + private String r; + + /**The int value of the parameter. + **/ + /* Overloaded operators are not translated. */ + + Parameter(Z3ParameterKind k, double d) + { + this.kind = k; + this.d = d; + } + + Parameter(Z3ParameterKind k, Symbol s) + { + this.kind = k; + this.sym = s; + } + + Parameter(Z3ParameterKind k, Sort s) + { + this.kind = k; + this.srt = s; + } + + Parameter(Z3ParameterKind k, AST a) + { + this.kind = k; + this.ast = a; + } + + Parameter(Z3ParameterKind k, FuncDecl fd) + { + this.kind = k; + this.fd = fd; + } + + Parameter(Z3ParameterKind k, String r) + { + this.kind = k; + this.r = r; + } + } + + FuncDecl(Context ctx, IntPtr obj) { super(ctx, obj); + + } + + FuncDecl(Context ctx, Symbol name, Sort[] domain, Sort range) + : base(ctx, Native.mkFuncDecl(ctx.nCtx, name.NativeObject, + AST.ArrayLength(domain), AST.ArrayToNative(domain), + range.NativeObject)) + + + + } + + FuncDecl(Context ctx, String prefix, Sort[] domain, Sort range) + : base(ctx, Native.mkFreshFuncDecl(ctx.nCtx, prefix, + AST.ArrayLength(domain), AST.ArrayToNative(domain), + range.NativeObject)) + + + } + + void CheckNativeObject(IntPtr obj) + { + if (Native.getAstKind(Context.nCtx, obj) != (Integer)Z3AstKind.Z3FUNCDECLAST) + throw new Z3Exception("Underlying object is not a function declaration"); + super.CheckNativeObject(obj); + } + + /** + * Create expression that applies function to arguments. + * + * @return + **/ + public Expr this[params() lic Expr this[params Expr[] args] + public Expr this[params() { + + + return Apply(args); + } + + /** + * Create expression that applies function to arguments. + * + * @return + **/ + public Expr Apply(Expr[] args) + { + + + Context.CheckContextMatch(args); + return Expr.Create(Context, this, args); + } + + } diff --git a/src/api/java/com/Microsoft/Z3/FuncInterp.java b/src/api/java/com/Microsoft/Z3/FuncInterp.java new file mode 100644 index 000000000..e6b5dd7f1 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/FuncInterp.java @@ -0,0 +1,177 @@ +/** + * This file was automatically generated from FuncInterp.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * A function interpretation is represented as a finite map and an 'else' value. + * Each entry in the finite map represents the value of a function given a set of arguments. + **/ + public class FuncInterp extends Z3Object + { + /** + * An Entry object represents an element in the finite map used to encode + * a function interpretation. + **/ + public class Entry extends Z3Object + { + /** + * Return the (symbolic) value of this entry. + **/ + public Expr Value() { + + return Expr.Create(Context, Native.funcEntryGetValue(Context.nCtx, NativeObject)); } + + /** + * The number of arguments of the entry. + **/ + public Integer NumArgs() { return Native.funcEntryGetNumArgs(Context.nCtx, NativeObject); } + + /** + * The arguments of the function entry. + **/ + public Expr[] Args() + { + + + + Integer n = NumArgs; + Expr[] res = new Expr[n]; + for (Integer i = 0; i < n; i++) + res[i] = Expr.Create(Context, Native.funcEntryGetArg(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * A string representation of the function entry. + **/ + public String toString() + { + Integer n = NumArgs; + String res = "["; + Expr[] args = Args; + for (Integer i = 0; i < n; i++) + res += args[i] + ", "; + return res + Value + "]"; + } + + Entry(Context ctx, IntPtr obj) { super(ctx, obj); } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.funcEntryIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.funcEntryDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.FuncEntryDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.FuncEntryDRQ.Add(o); + super.DecRef(o); + } + }; + + /** + * The number of entries in the function interpretation. + **/ + public Integer NumEntries() { return Native.funcInterpGetNumEntries(Context.nCtx, NativeObject); } + + /** + * The entries in the function interpretation + **/ + public Entry[] Entries() + { + + Contract.Ensures(Contract.ForAll(0, Contract.Result().Length, + j => Contract.Result()[j] != null)); + + Integer n = NumEntries; + Entry[] res = new Entry[n]; + for (Integer i = 0; i < n; i++) + res[i] = new Entry(Context, Native.funcInterpGetEntry(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The (symbolic) `else' value of the function interpretation. + **/ + public Expr Else() { + + + return Expr.Create(Context, Native.funcInterpGetElse(Context.nCtx, NativeObject)); } + + /** + * The arity of the function interpretation + **/ + public Integer Arity() { return Native.funcInterpGetArity(Context.nCtx, NativeObject); } + + /** + * A string representation of the function interpretation. + **/ + public String toString() + { + String res = ""; + res += "["; + for (Entry.Iterator e = Entries.iterator(); e.hasNext(); ) + { + Integer n = e.NumArgs; + if (n > 1) res += "["; + Expr[] args = e.Args; + for (Integer i = 0; i < n; i++) + { + if (i != 0) res += ", "; + res += args[i]; + } + if (n > 1) res += "]"; + res += " -> " + e.Value + ", "; + } + res += "else -> " + Else; + res += "]"; + return res; + } + + FuncInterp(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.funcInterpIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.funcInterpDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.FuncInterpDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.FuncInterpDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Goal.java b/src/api/java/com/Microsoft/Z3/Goal.java new file mode 100644 index 000000000..0042d2bac --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Goal.java @@ -0,0 +1,182 @@ +/** + * This file was automatically generated from Goal.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * A goal (aka problem). A goal is essentially a set + * of formulas, that can be solved and/or transformed using + * tactics and solvers. + **/ + public class Goal extends Z3Object + { + /** + * The precision of the goal. + * + * Goals can be transformed using over and under approximations. + * An under approximation is applied when the objective is to find a model for a given goal. + * An over approximation is applied when the objective is to find a proof for a given goal. + * + **/ + public Z3_goal_prec Precision() { return (Z3GoalPrec)Native.goalPrecision(Context.nCtx, NativeObject); } + + /** + * Indicates whether the goal is precise. + **/ + public boolean IsPrecise() { return Precision == Z3GoalPrec.Z3GOALPRECISE; } + /** + * Indicates whether the goal is an under-approximation. + **/ + public boolean IsUnderApproximation() { return Precision == Z3GoalPrec.Z3GOALUNDER; } + + /** + * Indicates whether the goal is an over-approximation. + **/ + public boolean IsOverApproximation() { return Precision == Z3GoalPrec.Z3GOALOVER; } + + /** + * Indicates whether the goal is garbage (i.e., the product of over- and under-approximations). + **/ + public boolean IsGarbage() { return Precision == Z3GoalPrec.Z3GOALUNDEROVER; } + + /** + * Adds the to the given goal. + **/ + public void Assert(BoolExpr[] constraints) + { + + + + Context.CheckContextMatch(constraints); + for (BoolExpr.Iterator c = constraints.iterator(); c.hasNext(); ) + { + // It was an assume, now made an assert just to be sure we do not regress + Native.goalAssert(Context.nCtx, NativeObject, c.NativeObject); + } + } + + /** + * Indicates whether the goal contains `false'. + **/ + public boolean Inconsistent() { return Native.goalInconsistent(Context.nCtx, NativeObject) != 0; } + + /** + * The depth of the goal. + * + * This tracks how many transformations were applied to it. + * + **/ + public Integer Depth() { return Native.goalDepth(Context.nCtx, NativeObject); } + + /** + * Erases all formulas from the given goal. + **/ + public void Reset() + { + Native.goalReset(Context.nCtx, NativeObject); + } + + /** + * The number of formulas in the goal. + **/ + public Integer Size() { return Native.goalSize(Context.nCtx, NativeObject); } + + /** + * The formulas in the goal. + **/ + public BoolExpr[] Formulas() + { + + + Integer n = Size; + BoolExpr[] res = new BoolExpr[n]; + for (Integer i = 0; i < n; i++) + res[i] = new BoolExpr(Context, Native.goalFormula(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The number of formulas, subformulas and terms in the goal. + **/ + public Integer NumExprs() { return Native.goalNumExprs(Context.nCtx, NativeObject); } + + /** + * Indicates whether the goal is empty, and it is precise or the product of an under approximation. + **/ + public boolean IsDecidedSat() { return Native.goalIsDecidedSat(Context.nCtx, NativeObject) != 0; } + + /** + * Indicates whether the goal contains `false', and it is precise or the product of an over approximation. + **/ + public boolean IsDecidedUnsat() { return Native.goalIsDecidedUnsat(Context.nCtx, NativeObject) != 0; } + + /** + * Translates (copies) the Goal to the target Context . + **/ + public Goal Translate(Context ctx) + { + + + return new Goal(ctx, Native.goalTranslate(Context.nCtx, NativeObject, ctx.nCtx)); + } + + /** + * Simplifies the goal. + * Essentially invokes the `simplify' tactic on the goal. + **/ + public Goal Simplify(Params p) + { + Tactic t = Context.MkTactic("simplify"); + ApplyResult res = t.Apply(this, p); + + if (res.NumSubgoals == 0) + return Context.MkGoal(); + else + return res.Subgoals[0]; + } + + /** + * Goal to string conversion. + * @return A string representation of the Goal. + **/ + public String toString() + { + return Native.goaltoString(Context.nCtx, NativeObject); + } + + Goal(Context ctx, IntPtr obj) { super(ctx, obj); } + + Goal(Context ctx, boolean models, boolean unsatCores, boolean proofs) + { super(ctx, Native.mkGoal(ctx.nCtx, (models); ? 1 : 0, (unsatCores) ? 1 : 0, (proofs) ? 1 : 0)) + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.goalIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.goalDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.GoalDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.GoalDRQ.Add(o); + super.DecRef(o); + } + + } diff --git a/src/api/java/com/Microsoft/Z3/IDisposable.java b/src/api/java/com/Microsoft/Z3/IDisposable.java new file mode 100644 index 000000000..03885d1e7 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/IDisposable.java @@ -0,0 +1,25 @@ +/*++ +Copyright (c) 2012 Microsoft Corporation + +Module Name: + + IDisposable.java + +Abstract: + + Compatability interface (C# -> Java) + +Author: + + Christoph Wintersteiger (cwinter) 2012-03-16 + +Notes: + +--*/ + +package com.Microsoft.Z3; + +public class IDisposable +{ + public void Dispose() {} +} diff --git a/src/api/java/com/Microsoft/Z3/Log.java b/src/api/java/com/Microsoft/Z3/Log.java new file mode 100644 index 000000000..28a9e015e --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Log.java @@ -0,0 +1,60 @@ +/** + * This file was automatically generated from Log.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Interaction logging for Z3. + * + * Note that this is a global, static log and if multiple Context + * objects are created, it logs the interaction with all of them. + * + **/ + public final class Log + { + private boolean mIsOpen = false; + + /** + * Open an interaction log file. + * the name of the file to open + * @return True if opening the log file succeeds, false otherwise. + **/ + public boolean Open(String filename) + { + mIsOpen = true; + return Native.openLog(filename) == 1; + } + + /** + * Closes the interaction log. + **/ + public void Close() + { + mIsOpen = false; + Native.closeLog(); + } + + /** + * Appends the user-provided string to the interaction log. + **/ + public void Append(String s) + { + + + if (!mIsOpen) + throw new Z3Exception("Log cannot be closed."); + Native.appendLog(s); + } + + /** + * Checks whether the interaction log is opened. + * @return True if the interaction log is open, false otherwise. + **/ + public boolean isOpen() + { + return mIsOpen; + } + } diff --git a/src/api/java/com/Microsoft/Z3/Model.java b/src/api/java/com/Microsoft/Z3/Model.java new file mode 100644 index 000000000..467d5e566 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Model.java @@ -0,0 +1,279 @@ +/** + * This file was automatically generated from Model.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * A Model contains interpretations (assignments) of constants and functions. + **/ + public class Model extends Z3Object + { + /** + * Retrieves the interpretation (the assignment) of in the model. + * A Constant + * @return An expression if the constant has an interpretation in the model, null otherwise. + **/ + public Expr ConstInterp(Expr a) + { + + + Context.CheckContextMatch(a); + return ConstInterp(a.FuncDecl); + } + + /** + * Retrieves the interpretation (the assignment) of in the model. + * A function declaration of zero arity + * @return An expression if the function has an interpretation in the model, null otherwise. + **/ + public Expr ConstInterp(FuncDecl f) + { + + + Context.CheckContextMatch(f); + if (f.Arity != 0 || + Native.getSortKind(Context.nCtx, Native.getRange(Context.nCtx, f.NativeObject)) == (Integer)Z3SortKind.Z3ARRAYSORT) + throw new Z3Exception("Non-zero arity functions and arrays have FunctionInterpretations as a model. Use FuncInterp."); + + IntPtr n = Native.modelGetConstInterp(Context.nCtx, NativeObject, f.NativeObject); + if (n == IntPtr.Zero) + return null; + else + return Expr.Create(Context, n); + } + + /** + * Retrieves the interpretation (the assignment) of a non-constant in the model. + * A function declaration of non-zero arity + * @return A FunctionInterpretation if the function has an interpretation in the model, null otherwise. + **/ + public FuncInterp FuncInterp(FuncDecl f) + { + + + Context.CheckContextMatch(f); + + Z3SortKind sk = (Z3SortKind)Native.getSortKind(Context.nCtx, Native.getRange(Context.nCtx, f.NativeObject)); + + if (f.Arity == 0) + { + IntPtr n = Native.modelGetConstInterp(Context.nCtx, NativeObject, f.NativeObject); + + if (sk == Z3SortKind.Z3ARRAYSORT) + { + if (n == IntPtr.Zero) + return null; + else + { + if (Native.isAsArray(Context.nCtx, n) == 0) + throw new Z3Exception("Argument was not an array constant"); + IntPtr fd = Native.getAsArrayFuncDecl(Context.nCtx, n); + return FuncInterp(new FuncDecl(Context, fd)); + } + } + else + { + throw new Z3Exception("Constant functions do not have a function interpretation; use ConstInterp"); + } + } + else + { + IntPtr n = Native.modelGetFuncInterp(Context.nCtx, NativeObject, f.NativeObject); + if (n == IntPtr.Zero) + return null; + else + return new FuncInterp(Context, n); + } + } + + /** + * The number of constants that have an interpretation in the model. + **/ + public Integer NumConsts() { return Native.modelGetNumConsts(Context.nCtx, NativeObject); } + + /** + * The function declarations of the constants in the model. + **/ + public FuncDecl[] ConstDecls() + { + + + Integer n = NumConsts; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + res[i] = new FuncDecl(Context, Native.modelGetConstDecl(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The number of function interpretations in the model. + **/ + public Integer NumFuncs() { return Native.modelGetNumFuncs(Context.nCtx, NativeObject); } + + /** + * The function declarations of the function interpretations in the model. + **/ + public FuncDecl[] FuncDecls() + { + + + Integer n = NumFuncs; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + res[i] = new FuncDecl(Context, Native.modelGetFuncDecl(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * All symbols that have an interpretation in the model. + **/ + public FuncDecl[] Decls() + { + + + var nFuncs = NumFuncs; + var nConsts = NumConsts; + Integer n = nFuncs + nConsts; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < nConsts; i++) + res[i] = new FuncDecl(Context, Native.modelGetConstDecl(Context.nCtx, NativeObject, i)); + for (Integer i = 0; i < nFuncs; i++) + res[nConsts + i] = new FuncDecl(Context, Native.modelGetFuncDecl(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * A ModelEvaluationFailedException is thrown when an expression cannot be evaluated by the model. + **/ + public class ModelEvaluationFailedException extends Z3Exception + { + /** + * An exception that is thrown when model evaluation fails. + **/ + public ModelEvaluationFailedException() { super(); } + } + + /** + * Evaluates the expression in the current model. + * + * This function may fail if contains quantifiers, + * is partial (MODEL_PARTIAL enabled), or if is not well-sorted. + * In this case a ModelEvaluationFailedException is thrown. + * + * An expression + * + * When this flag is enabled, a model value will be assigned to any constant + * or function that does not have an interpretation in the model. + * + * @return The evaluation of in the model. + **/ + public Expr Eval(Expr t, boolean completion) + { + + + + IntPtr v = IntPtr.Zero; + if (Native.modelEval(Context.nCtx, NativeObject, t.NativeObject, (completion) ? 1 : 0, v) == 0) + throw new ModelEvaluationFailedException(); + else + return Expr.Create(Context, v); + } + + /** + * Alias for Eval. + **/ + public Expr Evaluate(Expr t, boolean completion) + { + + + + return Eval(t, completion); + } + + /** + * The number of uninterpreted sorts that the model has an interpretation for. + **/ + public Integer NumSorts () { return Native.modelGetNumSorts(Context.nCtx, NativeObject); } + + /** + * The uninterpreted sorts that the model has an interpretation for. + * + * Z3 also provides an intepretation for uninterpreted sorts used in a formula. + * The interpretation for a sort is a finite set of distinct values. We say this finite set is + * the "universe" of the sort. + * + * + * + **/ + public Sort[] Sorts() + { + + + Integer n = NumSorts; + Sort[] res = new Sort[n]; + for (Integer i = 0; i < n; i++) + res[i] = Sort.Create(Context, Native.modelGetSort(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The finite set of distinct values that represent the interpretation for sort . + * + * An uninterpreted sort + * @return An array of expressions, where each is an element of the universe of + **/ + public Expr[] SortUniverse(Sort s) + { + + + + ASTVector nUniv = new ASTVector(Context, Native.modelGetSortUniverse(Context.nCtx, NativeObject, s.NativeObject)); + Integer n = nUniv.Size; + Expr[] res = new Expr[n]; + for (Integer i = 0; i < n; i++) + res[i] = Expr.Create(Context, nUniv[i].NativeObject); + return res; + } + + /** + * Conversion of models to strings. + * @return A string representation of the model. + **/ + public String toString() + { + return Native.modeltoString(Context.nCtx, NativeObject); + } + + Model(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.modelIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.modelDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ModelDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ModelDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Native.c b/src/api/java/com/Microsoft/Z3/Native.c new file mode 100644 index 000000000..653e32bc5 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Native.c @@ -0,0 +1,2259 @@ +// Automatically generated file +#include +#include +#include"z3.h" +#ifdef __cplusplus +extern "C" { +#endif +JNIEXPORT jlong JNICALL Java_Z3Native_mkConfig(JNIEnv * jenv, jclass cls) { + Z3_config result = Z3_mk_config(); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_delConfig(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_del_config((Z3_config)a0); +} +JNIEXPORT void JNICALL Java_Z3Native_setParamValue(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jstring a2) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_string _a2 = (Z3_string) jenv->GetStringUTFChars(a2, NULL); + Z3_set_param_value((Z3_config)a0, _a1, _a2); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkContext(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_context result = Z3_mk_context((Z3_config)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkContextRc(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_context result = Z3_mk_context_rc((Z3_config)a0); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_delContext(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_del_context((Z3_context)a0); +} +JNIEXPORT void JNICALL Java_Z3Native_incRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_inc_ref((Z3_context)a0, (Z3_ast)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_decRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_dec_ref((Z3_context)a0, (Z3_ast)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_updateParamValue(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jstring a2) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_string _a2 = (Z3_string) jenv->GetStringUTFChars(a2, NULL); + Z3_update_param_value((Z3_context)a0, _a1, _a2); +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getParamValue(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jobject a2) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_string _a2; + Z3_bool result = Z3_get_param_value((Z3_context)a0, _a1, &_a2); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a2, fid, (jlong) _a2); + } + return (jboolean) result; +} +JNIEXPORT void JNICALL Java_Z3Native_interrupt(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_interrupt((Z3_context)a0); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkParams(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_params result = Z3_mk_params((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_paramsIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_params_inc_ref((Z3_context)a0, (Z3_params)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_paramsDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_params_dec_ref((Z3_context)a0, (Z3_params)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_paramsSetBool(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jboolean a3) { + Z3_params_set_bool((Z3_context)a0, (Z3_params)a1, (Z3_symbol)a2, (Z3_bool)a3); +} +JNIEXPORT void JNICALL Java_Z3Native_paramsSetUint(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jint a3) { + Z3_params_set_uint((Z3_context)a0, (Z3_params)a1, (Z3_symbol)a2, (unsigned)a3); +} +JNIEXPORT void JNICALL Java_Z3Native_paramsSetDouble(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jdouble a3) { + Z3_params_set_double((Z3_context)a0, (Z3_params)a1, (Z3_symbol)a2, (double)a3); +} +JNIEXPORT void JNICALL Java_Z3Native_paramsSetSymbol(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_params_set_symbol((Z3_context)a0, (Z3_params)a1, (Z3_symbol)a2, (Z3_symbol)a3); +} +JNIEXPORT jstring JNICALL Java_Z3Native_paramsToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_params_to_string((Z3_context)a0, (Z3_params)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT void JNICALL Java_Z3Native_paramsValidate(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_params_validate((Z3_context)a0, (Z3_params)a1, (Z3_param_descrs)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_paramDescrsIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_param_descrs_inc_ref((Z3_context)a0, (Z3_param_descrs)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_paramDescrsDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_param_descrs_dec_ref((Z3_context)a0, (Z3_param_descrs)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_paramDescrsGetKind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + unsigned result = Z3_param_descrs_get_kind((Z3_context)a0, (Z3_param_descrs)a1, (Z3_symbol)a2); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_paramDescrsSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_param_descrs_size((Z3_context)a0, (Z3_param_descrs)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_paramDescrsGetName(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_symbol result = Z3_param_descrs_get_name((Z3_context)a0, (Z3_param_descrs)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_paramDescrsToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_param_descrs_to_string((Z3_context)a0, (Z3_param_descrs)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkIntSymbol(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_symbol result = Z3_mk_int_symbol((Z3_context)a0, (int)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkStringSymbol(JNIEnv * jenv, jclass cls, jlong a0, jstring a1) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_symbol result = Z3_mk_string_symbol((Z3_context)a0, _a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkUninterpretedSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_sort result = Z3_mk_uninterpreted_sort((Z3_context)a0, (Z3_symbol)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBoolSort(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_sort result = Z3_mk_bool_sort((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkIntSort(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_sort result = Z3_mk_int_sort((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkRealSort(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_sort result = Z3_mk_real_sort((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvSort(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_sort result = Z3_mk_bv_sort((Z3_context)a0, (unsigned)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFiniteDomainSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_sort result = Z3_mk_finite_domain_sort((Z3_context)a0, (Z3_symbol)a1, (__uint64)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkArraySort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_sort result = Z3_mk_array_sort((Z3_context)a0, (Z3_sort)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkTupleSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3, jlongArray a4, jobject a5, jlongArray a6) { + Z3_symbol * _a3 = (Z3_symbol *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a4 = (Z3_sort *) jenv->GetLongArrayElements(a4, NULL); + Z3_func_decl _a5; + Z3_func_decl * _a6 = (Z3_func_decl *) malloc(((unsigned)a2) * sizeof(Z3_func_decl)); + Z3_sort result = Z3_mk_tuple_sort((Z3_context)a0, (Z3_symbol)a1, (unsigned)a2, _a3, _a4, &_a5, _a6); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + { + jclass mc = jenv->GetObjectClass(a5); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a5, fid, (jlong) _a5); + } + jenv->SetLongArrayRegion(a6, 0, (jsize)a2, (jlong *) _a6); + free(_a6); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkEnumerationSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3, jlongArray a4, jlongArray a5) { + Z3_symbol * _a3 = (Z3_symbol *) jenv->GetLongArrayElements(a3, NULL); + Z3_func_decl * _a4 = (Z3_func_decl *) malloc(((unsigned)a2) * sizeof(Z3_func_decl)); + Z3_func_decl * _a5 = (Z3_func_decl *) malloc(((unsigned)a2) * sizeof(Z3_func_decl)); + Z3_sort result = Z3_mk_enumeration_sort((Z3_context)a0, (Z3_symbol)a1, (unsigned)a2, _a3, _a4, _a5); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->SetLongArrayRegion(a4, 0, (jsize)a2, (jlong *) _a4); + free(_a4); + jenv->SetLongArrayRegion(a5, 0, (jsize)a2, (jlong *) _a5); + free(_a5); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkListSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jobject a3, jobject a4, jobject a5, jobject a6, jobject a7, jobject a8) { + Z3_func_decl _a3; + Z3_func_decl _a4; + Z3_func_decl _a5; + Z3_func_decl _a6; + Z3_func_decl _a7; + Z3_func_decl _a8; + Z3_sort result = Z3_mk_list_sort((Z3_context)a0, (Z3_symbol)a1, (Z3_sort)a2, &_a3, &_a4, &_a5, &_a6, &_a7, &_a8); + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + { + jclass mc = jenv->GetObjectClass(a4); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a4, fid, (jlong) _a4); + } + { + jclass mc = jenv->GetObjectClass(a5); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a5, fid, (jlong) _a5); + } + { + jclass mc = jenv->GetObjectClass(a6); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a6, fid, (jlong) _a6); + } + { + jclass mc = jenv->GetObjectClass(a7); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a7, fid, (jlong) _a7); + } + { + jclass mc = jenv->GetObjectClass(a8); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a8, fid, (jlong) _a8); + } + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkConstructor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jint a3, jlongArray a4, jlongArray a5, jintArray a6) { + Z3_symbol * _a4 = (Z3_symbol *) jenv->GetLongArrayElements(a4, NULL); + Z3_sort * _a5 = (Z3_sort *) jenv->GetLongArrayElements(a5, NULL); + unsigned * _a6 = (unsigned *) jenv->GetIntArrayElements(a6, NULL); + Z3_constructor result = Z3_mk_constructor((Z3_context)a0, (Z3_symbol)a1, (Z3_symbol)a2, (unsigned)a3, _a4, _a5, _a6); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a5, (jlong *) _a5, JNI_ABORT); + jenv->ReleaseIntArrayElements(a6, (jint *) _a6, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_delConstructor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_del_constructor((Z3_context)a0, (Z3_constructor)a1); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkDatatype(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_constructor * _a3 = (Z3_constructor *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort result = Z3_mk_datatype((Z3_context)a0, (Z3_symbol)a1, (unsigned)a2, _a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkConstructorList(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_constructor * _a2 = (Z3_constructor *) jenv->GetLongArrayElements(a2, NULL); + Z3_constructor_list result = Z3_mk_constructor_list((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_delConstructorList(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_del_constructor_list((Z3_context)a0, (Z3_constructor_list)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_mkDatatypes(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2, jlongArray a3, jlongArray a4) { + Z3_symbol * _a2 = (Z3_symbol *) jenv->GetLongArrayElements(a2, NULL); + Z3_sort * _a3 = (Z3_sort *) malloc(((unsigned)a1) * sizeof(Z3_sort)); + Z3_constructor_list * _a4 = (Z3_constructor_list *) jenv->GetLongArrayElements(a4, NULL); + Z3_mk_datatypes((Z3_context)a0, (unsigned)a1, _a2, _a3, _a4); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + jenv->SetLongArrayRegion(a3, 0, (jsize)a1, (jlong *) _a3); + free(_a3); +} +JNIEXPORT void JNICALL Java_Z3Native_queryConstructor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jobject a3, jobject a4, jlongArray a5) { + Z3_func_decl _a3; + Z3_func_decl _a4; + Z3_func_decl * _a5 = (Z3_func_decl *) malloc(((unsigned)a2) * sizeof(Z3_func_decl)); + Z3_query_constructor((Z3_context)a0, (Z3_constructor)a1, (unsigned)a2, &_a3, &_a4, _a5); + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + { + jclass mc = jenv->GetObjectClass(a4); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a4, fid, (jlong) _a4); + } + jenv->SetLongArrayRegion(a5, 0, (jsize)a2, (jlong *) _a5); + free(_a5); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3, jlong a4) { + Z3_sort * _a3 = (Z3_sort *) jenv->GetLongArrayElements(a3, NULL); + Z3_func_decl result = Z3_mk_func_decl((Z3_context)a0, (Z3_symbol)a1, (unsigned)a2, _a3, (Z3_sort)a4); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkApp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + Z3_ast result = Z3_mk_app((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkConst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_const((Z3_context)a0, (Z3_symbol)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFreshFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jint a2, jlongArray a3, jlong a4) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_sort * _a3 = (Z3_sort *) jenv->GetLongArrayElements(a3, NULL); + Z3_func_decl result = Z3_mk_fresh_func_decl((Z3_context)a0, _a1, (unsigned)a2, _a3, (Z3_sort)a4); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFreshConst(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jlong a2) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_ast result = Z3_mk_fresh_const((Z3_context)a0, _a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkTrue(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_ast result = Z3_mk_true((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFalse(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_ast result = Z3_mk_false((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkEq(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_eq((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkDistinct(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_distinct((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkNot(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_not((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkIte(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_ast result = Z3_mk_ite((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2, (Z3_ast)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkIff(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_iff((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkImplies(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_implies((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkXor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_xor((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkAnd(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_and((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkOr(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_or((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkAdd(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_add((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkMul(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_mul((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSub(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_sub((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkUnaryMinus(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_unary_minus((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkDiv(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_div((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkMod(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_mod((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkRem(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_rem((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkPower(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_power((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkLt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_lt((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkLe(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_le((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkGt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_gt((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkGe(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_ge((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkInt2real(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_int2real((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkReal2int(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_real2int((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkIsInt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_is_int((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvnot(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_bvnot((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvredand(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_bvredand((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvredor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_bvredor((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvand(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvand((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvor((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvxor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvxor((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvnand(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvnand((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvnor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvnor((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvxnor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvxnor((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvneg(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_bvneg((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvadd(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvadd((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsub(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsub((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvmul(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvmul((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvudiv(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvudiv((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsdiv(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsdiv((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvurem(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvurem((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsrem(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsrem((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsmod(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsmod((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvult(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvult((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvslt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvslt((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvule(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvule((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsle(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsle((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvuge(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvuge((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsge(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsge((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvugt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvugt((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsgt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsgt((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkConcat(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_concat((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkExtract(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jint a2, jlong a3) { + Z3_ast result = Z3_mk_extract((Z3_context)a0, (unsigned)a1, (unsigned)a2, (Z3_ast)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSignExt(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_sign_ext((Z3_context)a0, (unsigned)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkZeroExt(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_zero_ext((Z3_context)a0, (unsigned)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkRepeat(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_repeat((Z3_context)a0, (unsigned)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvshl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvshl((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvlshr(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvlshr((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvashr(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvashr((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkRotateLeft(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_rotate_left((Z3_context)a0, (unsigned)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkRotateRight(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_rotate_right((Z3_context)a0, (unsigned)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkExtRotateLeft(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_ext_rotate_left((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkExtRotateRight(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_ext_rotate_right((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkInt2bv(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_int2bv((Z3_context)a0, (unsigned)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBv2int(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jboolean a2) { + Z3_ast result = Z3_mk_bv2int((Z3_context)a0, (Z3_ast)a1, (Z3_bool)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvaddNoOverflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jboolean a3) { + Z3_ast result = Z3_mk_bvadd_no_overflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2, (Z3_bool)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvaddNoUnderflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvadd_no_underflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsubNoOverflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsub_no_overflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsubNoUnderflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jboolean a3) { + Z3_ast result = Z3_mk_bvsub_no_underflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2, (Z3_bool)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvsdivNoOverflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvsdiv_no_overflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvnegNoOverflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_bvneg_no_overflow((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvmulNoOverflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jboolean a3) { + Z3_ast result = Z3_mk_bvmul_no_overflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2, (Z3_bool)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBvmulNoUnderflow(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_bvmul_no_underflow((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSelect(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_select((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkStore(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_ast result = Z3_mk_store((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2, (Z3_ast)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkConstArray(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_const_array((Z3_context)a0, (Z3_sort)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkMap(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + Z3_ast result = Z3_mk_map((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkArrayDefault(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_array_default((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_sort result = Z3_mk_set_sort((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkEmptySet(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_empty_set((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFullSet(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_full_set((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetAdd(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_set_add((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetDel(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_set_del((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetUnion(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_set_union((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetIntersect(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_ast result = Z3_mk_set_intersect((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetDifference(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_set_difference((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetComplement(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_mk_set_complement((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetMember(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_set_member((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSetSubset(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_set_subset((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkNumeral(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jlong a2) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_ast result = Z3_mk_numeral((Z3_context)a0, _a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkReal(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jint a2) { + Z3_ast result = Z3_mk_real((Z3_context)a0, (int)a1, (int)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkInt(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_int((Z3_context)a0, (int)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkUnsignedInt(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_unsigned_int((Z3_context)a0, (unsigned)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkInt64(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_int64((Z3_context)a0, (__int64)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkUnsignedInt64(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_mk_unsigned_int64((Z3_context)a0, (__uint64)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkPattern(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_pattern result = Z3_mk_pattern((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkBound(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlong a2) { + Z3_ast result = Z3_mk_bound((Z3_context)a0, (unsigned)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkForall(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jint a2, jlongArray a3, jint a4, jlongArray a5, jlongArray a6, jlong a7) { + Z3_pattern * _a3 = (Z3_pattern *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a5 = (Z3_sort *) jenv->GetLongArrayElements(a5, NULL); + Z3_symbol * _a6 = (Z3_symbol *) jenv->GetLongArrayElements(a6, NULL); + Z3_ast result = Z3_mk_forall((Z3_context)a0, (unsigned)a1, (unsigned)a2, _a3, (unsigned)a4, _a5, _a6, (Z3_ast)a7); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a5, (jlong *) _a5, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkExists(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jint a2, jlongArray a3, jint a4, jlongArray a5, jlongArray a6, jlong a7) { + Z3_pattern * _a3 = (Z3_pattern *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a5 = (Z3_sort *) jenv->GetLongArrayElements(a5, NULL); + Z3_symbol * _a6 = (Z3_symbol *) jenv->GetLongArrayElements(a6, NULL); + Z3_ast result = Z3_mk_exists((Z3_context)a0, (unsigned)a1, (unsigned)a2, _a3, (unsigned)a4, _a5, _a6, (Z3_ast)a7); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a5, (jlong *) _a5, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkQuantifier(JNIEnv * jenv, jclass cls, jlong a0, jboolean a1, jint a2, jint a3, jlongArray a4, jint a5, jlongArray a6, jlongArray a7, jlong a8) { + Z3_pattern * _a4 = (Z3_pattern *) jenv->GetLongArrayElements(a4, NULL); + Z3_sort * _a6 = (Z3_sort *) jenv->GetLongArrayElements(a6, NULL); + Z3_symbol * _a7 = (Z3_symbol *) jenv->GetLongArrayElements(a7, NULL); + Z3_ast result = Z3_mk_quantifier((Z3_context)a0, (Z3_bool)a1, (unsigned)a2, (unsigned)a3, _a4, (unsigned)a5, _a6, _a7, (Z3_ast)a8); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a7, (jlong *) _a7, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkQuantifierEx(JNIEnv * jenv, jclass cls, jlong a0, jboolean a1, jint a2, jlong a3, jlong a4, jint a5, jlongArray a6, jint a7, jlongArray a8, jint a9, jlongArray a10, jlongArray a11, jlong a12) { + Z3_pattern * _a6 = (Z3_pattern *) jenv->GetLongArrayElements(a6, NULL); + Z3_ast * _a8 = (Z3_ast *) jenv->GetLongArrayElements(a8, NULL); + Z3_sort * _a10 = (Z3_sort *) jenv->GetLongArrayElements(a10, NULL); + Z3_symbol * _a11 = (Z3_symbol *) jenv->GetLongArrayElements(a11, NULL); + Z3_ast result = Z3_mk_quantifier_ex((Z3_context)a0, (Z3_bool)a1, (unsigned)a2, (Z3_symbol)a3, (Z3_symbol)a4, (unsigned)a5, _a6, (unsigned)a7, _a8, (unsigned)a9, _a10, _a11, (Z3_ast)a12); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a8, (jlong *) _a8, JNI_ABORT); + jenv->ReleaseLongArrayElements(a10, (jlong *) _a10, JNI_ABORT); + jenv->ReleaseLongArrayElements(a11, (jlong *) _a11, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkForallConst(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jint a2, jlongArray a3, jint a4, jlongArray a5, jlong a6) { + Z3_app * _a3 = (Z3_app *) jenv->GetLongArrayElements(a3, NULL); + Z3_pattern * _a5 = (Z3_pattern *) jenv->GetLongArrayElements(a5, NULL); + Z3_ast result = Z3_mk_forall_const((Z3_context)a0, (unsigned)a1, (unsigned)a2, _a3, (unsigned)a4, _a5, (Z3_ast)a6); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a5, (jlong *) _a5, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkExistsConst(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jint a2, jlongArray a3, jint a4, jlongArray a5, jlong a6) { + Z3_app * _a3 = (Z3_app *) jenv->GetLongArrayElements(a3, NULL); + Z3_pattern * _a5 = (Z3_pattern *) jenv->GetLongArrayElements(a5, NULL); + Z3_ast result = Z3_mk_exists_const((Z3_context)a0, (unsigned)a1, (unsigned)a2, _a3, (unsigned)a4, _a5, (Z3_ast)a6); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a5, (jlong *) _a5, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkQuantifierConst(JNIEnv * jenv, jclass cls, jlong a0, jboolean a1, jint a2, jint a3, jlongArray a4, jint a5, jlongArray a6, jlong a7) { + Z3_app * _a4 = (Z3_app *) jenv->GetLongArrayElements(a4, NULL); + Z3_pattern * _a6 = (Z3_pattern *) jenv->GetLongArrayElements(a6, NULL); + Z3_ast result = Z3_mk_quantifier_const((Z3_context)a0, (Z3_bool)a1, (unsigned)a2, (unsigned)a3, _a4, (unsigned)a5, _a6, (Z3_ast)a7); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkQuantifierConstEx(JNIEnv * jenv, jclass cls, jlong a0, jboolean a1, jint a2, jlong a3, jlong a4, jint a5, jlongArray a6, jint a7, jlongArray a8, jint a9, jlongArray a10, jlong a11) { + Z3_app * _a6 = (Z3_app *) jenv->GetLongArrayElements(a6, NULL); + Z3_pattern * _a8 = (Z3_pattern *) jenv->GetLongArrayElements(a8, NULL); + Z3_ast * _a10 = (Z3_ast *) jenv->GetLongArrayElements(a10, NULL); + Z3_ast result = Z3_mk_quantifier_const_ex((Z3_context)a0, (Z3_bool)a1, (unsigned)a2, (Z3_symbol)a3, (Z3_symbol)a4, (unsigned)a5, _a6, (unsigned)a7, _a8, (unsigned)a9, _a10, (Z3_ast)a11); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a8, (jlong *) _a8, JNI_ABORT); + jenv->ReleaseLongArrayElements(a10, (jlong *) _a10, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSymbolKind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_symbol_kind((Z3_context)a0, (Z3_symbol)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSymbolInt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + int result = Z3_get_symbol_int((Z3_context)a0, (Z3_symbol)a1); + return (jint) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_getSymbolString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_get_symbol_string((Z3_context)a0, (Z3_symbol)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_getSortName(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_symbol result = Z3_get_sort_name((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSortId(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_sort_id((Z3_context)a0, (Z3_sort)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_sortToAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_sort_to_ast((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isEqSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_bool result = Z3_is_eq_sort((Z3_context)a0, (Z3_sort)a1, (Z3_sort)a2); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSortKind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_sort_kind((Z3_context)a0, (Z3_sort)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getBvSortSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_bv_sort_size((Z3_context)a0, (Z3_sort)a1); + return (jint) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getFiniteDomainSortSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2) { + __uint64 _a2; + Z3_bool result = Z3_get_finite_domain_sort_size((Z3_context)a0, (Z3_sort)a1, &_a2); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a2, fid, (jlong) _a2); + } + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getArraySortDomain(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_sort result = Z3_get_array_sort_domain((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getArraySortRange(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_sort result = Z3_get_array_sort_range((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getTupleSortMkDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_decl result = Z3_get_tuple_sort_mk_decl((Z3_context)a0, (Z3_sort)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getTupleSortNumFields(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_tuple_sort_num_fields((Z3_context)a0, (Z3_sort)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getTupleSortFieldDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_get_tuple_sort_field_decl((Z3_context)a0, (Z3_sort)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getDatatypeSortNumConstructors(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_datatype_sort_num_constructors((Z3_context)a0, (Z3_sort)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDatatypeSortConstructor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_get_datatype_sort_constructor((Z3_context)a0, (Z3_sort)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDatatypeSortRecognizer(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_get_datatype_sort_recognizer((Z3_context)a0, (Z3_sort)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDatatypeSortConstructorAccessor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jint a3) { + Z3_func_decl result = Z3_get_datatype_sort_constructor_accessor((Z3_context)a0, (Z3_sort)a1, (unsigned)a2, (unsigned)a3); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getRelationArity(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_relation_arity((Z3_context)a0, (Z3_sort)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getRelationColumn(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_sort result = Z3_get_relation_column((Z3_context)a0, (Z3_sort)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_funcDeclToAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_func_decl_to_ast((Z3_context)a0, (Z3_func_decl)a1); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isEqFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_bool result = Z3_is_eq_func_decl((Z3_context)a0, (Z3_func_decl)a1, (Z3_func_decl)a2); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getFuncDeclId(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_func_decl_id((Z3_context)a0, (Z3_func_decl)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDeclName(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_symbol result = Z3_get_decl_name((Z3_context)a0, (Z3_func_decl)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getDeclKind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_decl_kind((Z3_context)a0, (Z3_func_decl)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getDomainSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_domain_size((Z3_context)a0, (Z3_func_decl)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getArity(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_arity((Z3_context)a0, (Z3_func_decl)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDomain(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_sort result = Z3_get_domain((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getRange(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_sort result = Z3_get_range((Z3_context)a0, (Z3_func_decl)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getDeclNumParameters(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_decl_num_parameters((Z3_context)a0, (Z3_func_decl)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getDeclParameterKind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + unsigned result = Z3_get_decl_parameter_kind((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getDeclIntParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + int result = Z3_get_decl_int_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jint) result; +} +JNIEXPORT jdouble JNICALL Java_Z3Native_getDeclDoubleParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + double result = Z3_get_decl_double_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jdouble) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDeclSymbolParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_symbol result = Z3_get_decl_symbol_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDeclSortParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_sort result = Z3_get_decl_sort_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDeclAstParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_decl_ast_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDeclFuncDeclParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_get_decl_func_decl_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_getDeclRationalParameter(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_string result = Z3_get_decl_rational_parameter((Z3_context)a0, (Z3_func_decl)a1, (unsigned)a2); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_appToAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_app_to_ast((Z3_context)a0, (Z3_app)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getAppDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_decl result = Z3_get_app_decl((Z3_context)a0, (Z3_app)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getAppNumArgs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_app_num_args((Z3_context)a0, (Z3_app)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getAppArg(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_app_arg((Z3_context)a0, (Z3_app)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isEqAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_bool result = Z3_is_eq_ast((Z3_context)a0, (Z3_ast)a1, (Z3_ast)a2); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getAstId(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_ast_id((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getAstHash(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_ast_hash((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_sort result = Z3_get_sort((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isWellSorted(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_is_well_sorted((Z3_context)a0, (Z3_ast)a1); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getBoolValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_bool_value((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getAstKind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_ast_kind((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isApp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_is_app((Z3_context)a0, (Z3_ast)a1); + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isNumeralAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_is_numeral_ast((Z3_context)a0, (Z3_ast)a1); + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isAlgebraicNumber(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_is_algebraic_number((Z3_context)a0, (Z3_ast)a1); + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_toApp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_app result = Z3_to_app((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_toFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_decl result = Z3_to_func_decl((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_getNumeralString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_get_numeral_string((Z3_context)a0, (Z3_ast)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_getNumeralDecimalString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_string result = Z3_get_numeral_decimal_string((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_getNumerator(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_get_numerator((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getDenominator(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_get_denominator((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getNumeralSmall(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2, jobject a3) { + __int64 _a2; + __int64 _a3; + Z3_bool result = Z3_get_numeral_small((Z3_context)a0, (Z3_ast)a1, &_a2, &_a3); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a2, fid, (jlong) _a2); + } + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getNumeralInt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2) { + int _a2; + Z3_bool result = Z3_get_numeral_int((Z3_context)a0, (Z3_ast)a1, &_a2); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a2, fid, (jint) _a2); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getNumeralUint(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2) { + unsigned _a2; + Z3_bool result = Z3_get_numeral_uint((Z3_context)a0, (Z3_ast)a1, &_a2); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a2, fid, (jint) _a2); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getNumeralUint64(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2) { + __uint64 _a2; + Z3_bool result = Z3_get_numeral_uint64((Z3_context)a0, (Z3_ast)a1, &_a2); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a2, fid, (jlong) _a2); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getNumeralInt64(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2) { + __int64 _a2; + Z3_bool result = Z3_get_numeral_int64((Z3_context)a0, (Z3_ast)a1, &_a2); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a2, fid, (jlong) _a2); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_getNumeralRationalInt64(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jobject a2, jobject a3) { + __int64 _a2; + __int64 _a3; + Z3_bool result = Z3_get_numeral_rational_int64((Z3_context)a0, (Z3_ast)a1, &_a2, &_a3); + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a2, fid, (jlong) _a2); + } + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getAlgebraicNumberLower(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_algebraic_number_lower((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getAlgebraicNumberUpper(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_algebraic_number_upper((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_patternToAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_pattern_to_ast((Z3_context)a0, (Z3_pattern)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getPatternNumTerms(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_pattern_num_terms((Z3_context)a0, (Z3_pattern)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getPattern(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_pattern((Z3_context)a0, (Z3_pattern)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getIndexValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_index_value((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isQuantifierForall(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_is_quantifier_forall((Z3_context)a0, (Z3_ast)a1); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getQuantifierWeight(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_quantifier_weight((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getQuantifierNumPatterns(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_quantifier_num_patterns((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getQuantifierPatternAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_pattern result = Z3_get_quantifier_pattern_ast((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getQuantifierNumNoPatterns(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_quantifier_num_no_patterns((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getQuantifierNoPatternAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_quantifier_no_pattern_ast((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getQuantifierNumBound(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_quantifier_num_bound((Z3_context)a0, (Z3_ast)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getQuantifierBoundName(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_symbol result = Z3_get_quantifier_bound_name((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getQuantifierBoundSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_sort result = Z3_get_quantifier_bound_sort((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getQuantifierBody(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_get_quantifier_body((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_simplify(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_simplify((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_simplifyEx(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_simplify_ex((Z3_context)a0, (Z3_ast)a1, (Z3_params)a2); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_simplifyGetHelp(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_string result = Z3_simplify_get_help((Z3_context)a0); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_simplifyGetParamDescrs(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_param_descrs result = Z3_simplify_get_param_descrs((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_updateTerm(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + Z3_ast result = Z3_update_term((Z3_context)a0, (Z3_ast)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_substitute(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3, jlongArray a4) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + Z3_ast * _a4 = (Z3_ast *) jenv->GetLongArrayElements(a4, NULL); + Z3_ast result = Z3_substitute((Z3_context)a0, (Z3_ast)a1, (unsigned)a2, _a3, _a4); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_substituteVars(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + Z3_ast result = Z3_substitute_vars((Z3_context)a0, (Z3_ast)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_translate(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_translate((Z3_context)a0, (Z3_ast)a1, (Z3_context)a2); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_modelIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_model_inc_ref((Z3_context)a0, (Z3_model)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_modelDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_model_dec_ref((Z3_context)a0, (Z3_model)a1); +} +JNIEXPORT jboolean JNICALL Java_Z3Native_modelEval(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jboolean a3, jobject a4) { + Z3_ast _a4; + Z3_bool result = Z3_model_eval((Z3_context)a0, (Z3_model)a1, (Z3_ast)a2, (Z3_bool)a3, &_a4); + { + jclass mc = jenv->GetObjectClass(a4); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a4, fid, (jlong) _a4); + } + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_modelGetConstInterp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_model_get_const_interp((Z3_context)a0, (Z3_model)a1, (Z3_func_decl)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_modelGetFuncInterp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_func_interp result = Z3_model_get_func_interp((Z3_context)a0, (Z3_model)a1, (Z3_func_decl)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_modelGetNumConsts(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_model_get_num_consts((Z3_context)a0, (Z3_model)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_modelGetConstDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_model_get_const_decl((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_modelGetNumFuncs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_model_get_num_funcs((Z3_context)a0, (Z3_model)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_modelGetFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_model_get_func_decl((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_modelGetNumSorts(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_model_get_num_sorts((Z3_context)a0, (Z3_model)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_modelGetSort(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_sort result = Z3_model_get_sort((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_modelGetSortUniverse(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast_vector result = Z3_model_get_sort_universe((Z3_context)a0, (Z3_model)a1, (Z3_sort)a2); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isAsArray(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_is_as_array((Z3_context)a0, (Z3_ast)a1); + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getAsArrayFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_decl result = Z3_get_as_array_func_decl((Z3_context)a0, (Z3_ast)a1); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_funcInterpIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_interp_inc_ref((Z3_context)a0, (Z3_func_interp)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_funcInterpDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_interp_dec_ref((Z3_context)a0, (Z3_func_interp)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_funcInterpGetNumEntries(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_func_interp_get_num_entries((Z3_context)a0, (Z3_func_interp)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_funcInterpGetEntry(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_entry result = Z3_func_interp_get_entry((Z3_context)a0, (Z3_func_interp)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_funcInterpGetElse(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_func_interp_get_else((Z3_context)a0, (Z3_func_interp)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_funcInterpGetArity(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_func_interp_get_arity((Z3_context)a0, (Z3_func_interp)a1); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_funcEntryIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_entry_inc_ref((Z3_context)a0, (Z3_func_entry)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_funcEntryDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_func_entry_dec_ref((Z3_context)a0, (Z3_func_entry)a1); +} +JNIEXPORT jlong JNICALL Java_Z3Native_funcEntryGetValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_func_entry_get_value((Z3_context)a0, (Z3_func_entry)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_funcEntryGetNumArgs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_func_entry_get_num_args((Z3_context)a0, (Z3_func_entry)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_funcEntryGetArg(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_func_entry_get_arg((Z3_context)a0, (Z3_func_entry)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_openLog(JNIEnv * jenv, jclass cls, jstring a0) { + Z3_string _a0 = (Z3_string) jenv->GetStringUTFChars(a0, NULL); + int result = Z3_open_log(_a0); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_appendLog(JNIEnv * jenv, jclass cls, jstring a0) { + Z3_string _a0 = (Z3_string) jenv->GetStringUTFChars(a0, NULL); + Z3_append_log(_a0); +} +JNIEXPORT void JNICALL Java_Z3Native_closeLog(JNIEnv * jenv, jclass cls) { + Z3_close_log(); +} +JNIEXPORT void JNICALL Java_Z3Native_toggleWarningMessages(JNIEnv * jenv, jclass cls, jboolean a0) { + Z3_toggle_warning_messages((Z3_bool)a0); +} +JNIEXPORT void JNICALL Java_Z3Native_setAstPrintMode(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_set_ast_print_mode((Z3_context)a0, (Z3_ast_print_mode)a1); +} +JNIEXPORT jstring JNICALL Java_Z3Native_astToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_ast_to_string((Z3_context)a0, (Z3_ast)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_patternToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_pattern_to_string((Z3_context)a0, (Z3_pattern)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_sortToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_sort_to_string((Z3_context)a0, (Z3_sort)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_funcDeclToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_func_decl_to_string((Z3_context)a0, (Z3_func_decl)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_modelToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_model_to_string((Z3_context)a0, (Z3_model)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_benchmarkToSmtlibString(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jstring a2, jstring a3, jstring a4, jint a5, jlongArray a6, jlong a7) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_string _a2 = (Z3_string) jenv->GetStringUTFChars(a2, NULL); + Z3_string _a3 = (Z3_string) jenv->GetStringUTFChars(a3, NULL); + Z3_string _a4 = (Z3_string) jenv->GetStringUTFChars(a4, NULL); + Z3_ast * _a6 = (Z3_ast *) jenv->GetLongArrayElements(a6, NULL); + Z3_string result = Z3_benchmark_to_smtlib_string((Z3_context)a0, _a1, _a2, _a3, _a4, (unsigned)a5, _a6, (Z3_ast)a7); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_parseSmtlib2String(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jint a2, jlongArray a3, jlongArray a4, jint a5, jlongArray a6, jlongArray a7) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_symbol * _a3 = (Z3_symbol *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a4 = (Z3_sort *) jenv->GetLongArrayElements(a4, NULL); + Z3_symbol * _a6 = (Z3_symbol *) jenv->GetLongArrayElements(a6, NULL); + Z3_func_decl * _a7 = (Z3_func_decl *) jenv->GetLongArrayElements(a7, NULL); + Z3_ast result = Z3_parse_smtlib2_string((Z3_context)a0, _a1, (unsigned)a2, _a3, _a4, (unsigned)a5, _a6, _a7); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a7, (jlong *) _a7, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_parseSmtlib2File(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jint a2, jlongArray a3, jlongArray a4, jint a5, jlongArray a6, jlongArray a7) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_symbol * _a3 = (Z3_symbol *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a4 = (Z3_sort *) jenv->GetLongArrayElements(a4, NULL); + Z3_symbol * _a6 = (Z3_symbol *) jenv->GetLongArrayElements(a6, NULL); + Z3_func_decl * _a7 = (Z3_func_decl *) jenv->GetLongArrayElements(a7, NULL); + Z3_ast result = Z3_parse_smtlib2_file((Z3_context)a0, _a1, (unsigned)a2, _a3, _a4, (unsigned)a5, _a6, _a7); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a7, (jlong *) _a7, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_parseSmtlibString(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jint a2, jlongArray a3, jlongArray a4, jint a5, jlongArray a6, jlongArray a7) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_symbol * _a3 = (Z3_symbol *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a4 = (Z3_sort *) jenv->GetLongArrayElements(a4, NULL); + Z3_symbol * _a6 = (Z3_symbol *) jenv->GetLongArrayElements(a6, NULL); + Z3_func_decl * _a7 = (Z3_func_decl *) jenv->GetLongArrayElements(a7, NULL); + Z3_parse_smtlib_string((Z3_context)a0, _a1, (unsigned)a2, _a3, _a4, (unsigned)a5, _a6, _a7); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a7, (jlong *) _a7, JNI_ABORT); +} +JNIEXPORT void JNICALL Java_Z3Native_parseSmtlibFile(JNIEnv * jenv, jclass cls, jlong a0, jstring a1, jint a2, jlongArray a3, jlongArray a4, jint a5, jlongArray a6, jlongArray a7) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_symbol * _a3 = (Z3_symbol *) jenv->GetLongArrayElements(a3, NULL); + Z3_sort * _a4 = (Z3_sort *) jenv->GetLongArrayElements(a4, NULL); + Z3_symbol * _a6 = (Z3_symbol *) jenv->GetLongArrayElements(a6, NULL); + Z3_func_decl * _a7 = (Z3_func_decl *) jenv->GetLongArrayElements(a7, NULL); + Z3_parse_smtlib_file((Z3_context)a0, _a1, (unsigned)a2, _a3, _a4, (unsigned)a5, _a6, _a7); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + jenv->ReleaseLongArrayElements(a6, (jlong *) _a6, JNI_ABORT); + jenv->ReleaseLongArrayElements(a7, (jlong *) _a7, JNI_ABORT); +} +JNIEXPORT jint JNICALL Java_Z3Native_getSmtlibNumFormulas(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_smtlib_num_formulas((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getSmtlibFormula(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_ast result = Z3_get_smtlib_formula((Z3_context)a0, (unsigned)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSmtlibNumAssumptions(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_smtlib_num_assumptions((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getSmtlibAssumption(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_ast result = Z3_get_smtlib_assumption((Z3_context)a0, (unsigned)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSmtlibNumDecls(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_smtlib_num_decls((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getSmtlibDecl(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_func_decl result = Z3_get_smtlib_decl((Z3_context)a0, (unsigned)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getSmtlibNumSorts(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_smtlib_num_sorts((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getSmtlibSort(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_sort result = Z3_get_smtlib_sort((Z3_context)a0, (unsigned)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_getSmtlibError(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_string result = Z3_get_smtlib_error((Z3_context)a0); + return jenv->NewStringUTF(result); +} +JNIEXPORT jint JNICALL Java_Z3Native_getErrorCode(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_error_code((Z3_context)a0); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_setError(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_set_error((Z3_context)a0, (Z3_error_code)a1); +} +JNIEXPORT jstring JNICALL Java_Z3Native_getErrorMsg(JNIEnv * jenv, jclass cls, jint a0) { + Z3_string result = Z3_get_error_msg((Z3_error_code)a0); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_getErrorMsgEx(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_string result = Z3_get_error_msg_ex((Z3_context)a0, (Z3_error_code)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT void JNICALL Java_Z3Native_getVersion(JNIEnv * jenv, jclass cls, jobject a0, jobject a1, jobject a2, jobject a3) { + unsigned _a0; + unsigned _a1; + unsigned _a2; + unsigned _a3; + Z3_get_version(&_a0, &_a1, &_a2, &_a3); + { + jclass mc = jenv->GetObjectClass(a0); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a0, fid, (jint) _a0); + } + { + jclass mc = jenv->GetObjectClass(a1); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a1, fid, (jint) _a1); + } + { + jclass mc = jenv->GetObjectClass(a2); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a2, fid, (jint) _a2); + } + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a3, fid, (jint) _a3); + } +} +JNIEXPORT void JNICALL Java_Z3Native_enableTrace(JNIEnv * jenv, jclass cls, jstring a0) { + Z3_string _a0 = (Z3_string) jenv->GetStringUTFChars(a0, NULL); + Z3_enable_trace(_a0); +} +JNIEXPORT void JNICALL Java_Z3Native_disableTrace(JNIEnv * jenv, jclass cls, jstring a0) { + Z3_string _a0 = (Z3_string) jenv->GetStringUTFChars(a0, NULL); + Z3_disable_trace(_a0); +} +JNIEXPORT void JNICALL Java_Z3Native_resetMemory(JNIEnv * jenv, jclass cls) { + Z3_reset_memory(); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkFixedpoint(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_fixedpoint result = Z3_mk_fixedpoint((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_fixedpoint_inc_ref((Z3_context)a0, (Z3_fixedpoint)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_fixedpoint_dec_ref((Z3_context)a0, (Z3_fixedpoint)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointAddRule(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_fixedpoint_add_rule((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_ast)a2, (Z3_symbol)a3); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointAddFact(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jint a3, jintArray a4) { + unsigned * _a4 = (unsigned *) jenv->GetIntArrayElements(a4, NULL); + Z3_fixedpoint_add_fact((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_func_decl)a2, (unsigned)a3, _a4); + jenv->ReleaseIntArrayElements(a4, (jint *) _a4, JNI_ABORT); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointAssert(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_fixedpoint_assert((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_ast)a2); +} +JNIEXPORT jint JNICALL Java_Z3Native_fixedpointQuery(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + int result = Z3_fixedpoint_query((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_ast)a2); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_fixedpointQueryRelations(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_func_decl * _a3 = (Z3_func_decl *) jenv->GetLongArrayElements(a3, NULL); + int result = Z3_fixedpoint_query_relations((Z3_context)a0, (Z3_fixedpoint)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointGetAnswer(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_fixedpoint_get_answer((Z3_context)a0, (Z3_fixedpoint)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_fixedpointGetReasonUnknown(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_fixedpoint_get_reason_unknown((Z3_context)a0, (Z3_fixedpoint)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointUpdateRule(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_fixedpoint_update_rule((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_ast)a2, (Z3_symbol)a3); +} +JNIEXPORT jint JNICALL Java_Z3Native_fixedpointGetNumLevels(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + unsigned result = Z3_fixedpoint_get_num_levels((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_func_decl)a2); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointGetCoverDelta(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlong a3) { + Z3_ast result = Z3_fixedpoint_get_cover_delta((Z3_context)a0, (Z3_fixedpoint)a1, (int)a2, (Z3_func_decl)a3); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointAddCover(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlong a3, jlong a4) { + Z3_fixedpoint_add_cover((Z3_context)a0, (Z3_fixedpoint)a1, (int)a2, (Z3_func_decl)a3, (Z3_ast)a4); +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointGetStatistics(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_stats result = Z3_fixedpoint_get_statistics((Z3_context)a0, (Z3_fixedpoint)a1); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointRegisterRelation(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_fixedpoint_register_relation((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_func_decl)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointSetPredicateRepresentation(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jint a3, jlongArray a4) { + Z3_symbol * _a4 = (Z3_symbol *) jenv->GetLongArrayElements(a4, NULL); + Z3_fixedpoint_set_predicate_representation((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_func_decl)a2, (unsigned)a3, _a4); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointGetRules(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector result = Z3_fixedpoint_get_rules((Z3_context)a0, (Z3_fixedpoint)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointGetAssertions(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector result = Z3_fixedpoint_get_assertions((Z3_context)a0, (Z3_fixedpoint)a1); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointSetParams(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_fixedpoint_set_params((Z3_context)a0, (Z3_fixedpoint)a1, (Z3_params)a2); +} +JNIEXPORT jstring JNICALL Java_Z3Native_fixedpointGetHelp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_fixedpoint_get_help((Z3_context)a0, (Z3_fixedpoint)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointGetParamDescrs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_param_descrs result = Z3_fixedpoint_get_param_descrs((Z3_context)a0, (Z3_fixedpoint)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_fixedpointToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + Z3_string result = Z3_fixedpoint_to_string((Z3_context)a0, (Z3_fixedpoint)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointFromString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jstring a2) { + Z3_string _a2 = (Z3_string) jenv->GetStringUTFChars(a2, NULL); + Z3_ast_vector result = Z3_fixedpoint_from_string((Z3_context)a0, (Z3_fixedpoint)a1, _a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_fixedpointFromFile(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jstring a2) { + Z3_string _a2 = (Z3_string) jenv->GetStringUTFChars(a2, NULL); + Z3_ast_vector result = Z3_fixedpoint_from_file((Z3_context)a0, (Z3_fixedpoint)a1, _a2); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointPush(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_fixedpoint_push((Z3_context)a0, (Z3_fixedpoint)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_fixedpointPop(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_fixedpoint_pop((Z3_context)a0, (Z3_fixedpoint)a1); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkAstVector(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_ast_vector result = Z3_mk_ast_vector((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_astVectorIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector_inc_ref((Z3_context)a0, (Z3_ast_vector)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_astVectorDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector_dec_ref((Z3_context)a0, (Z3_ast_vector)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_astVectorSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_ast_vector_size((Z3_context)a0, (Z3_ast_vector)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_astVectorGet(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_ast_vector_get((Z3_context)a0, (Z3_ast_vector)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_astVectorSet(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlong a3) { + Z3_ast_vector_set((Z3_context)a0, (Z3_ast_vector)a1, (unsigned)a2, (Z3_ast)a3); +} +JNIEXPORT void JNICALL Java_Z3Native_astVectorResize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast_vector_resize((Z3_context)a0, (Z3_ast_vector)a1, (unsigned)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_astVectorPush(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast_vector_push((Z3_context)a0, (Z3_ast_vector)a1, (Z3_ast)a2); +} +JNIEXPORT jlong JNICALL Java_Z3Native_astVectorTranslate(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast_vector result = Z3_ast_vector_translate((Z3_context)a0, (Z3_ast_vector)a1, (Z3_context)a2); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_astVectorToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_ast_vector_to_string((Z3_context)a0, (Z3_ast_vector)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkAstMap(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_ast_map result = Z3_mk_ast_map((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_astMapIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_map_inc_ref((Z3_context)a0, (Z3_ast_map)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_astMapDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_map_dec_ref((Z3_context)a0, (Z3_ast_map)a1); +} +JNIEXPORT jboolean JNICALL Java_Z3Native_astMapContains(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_bool result = Z3_ast_map_contains((Z3_context)a0, (Z3_ast_map)a1, (Z3_ast)a2); + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_astMapFind(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast result = Z3_ast_map_find((Z3_context)a0, (Z3_ast_map)a1, (Z3_ast)a2); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_astMapInsert(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_ast_map_insert((Z3_context)a0, (Z3_ast_map)a1, (Z3_ast)a2, (Z3_ast)a3); +} +JNIEXPORT void JNICALL Java_Z3Native_astMapErase(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_ast_map_erase((Z3_context)a0, (Z3_ast_map)a1, (Z3_ast)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_astMapReset(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_map_reset((Z3_context)a0, (Z3_ast_map)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_astMapSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_ast_map_size((Z3_context)a0, (Z3_ast_map)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_astMapKeys(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector result = Z3_ast_map_keys((Z3_context)a0, (Z3_ast_map)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_astMapToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_ast_map_to_string((Z3_context)a0, (Z3_ast_map)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkGoal(JNIEnv * jenv, jclass cls, jlong a0, jboolean a1, jboolean a2, jboolean a3) { + Z3_goal result = Z3_mk_goal((Z3_context)a0, (Z3_bool)a1, (Z3_bool)a2, (Z3_bool)a3); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_goalIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_goal_inc_ref((Z3_context)a0, (Z3_goal)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_goalDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_goal_dec_ref((Z3_context)a0, (Z3_goal)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_goalPrecision(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_goal_precision((Z3_context)a0, (Z3_goal)a1); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_goalAssert(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_goal_assert((Z3_context)a0, (Z3_goal)a1, (Z3_ast)a2); +} +JNIEXPORT jboolean JNICALL Java_Z3Native_goalInconsistent(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_goal_inconsistent((Z3_context)a0, (Z3_goal)a1); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_goalDepth(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_goal_depth((Z3_context)a0, (Z3_goal)a1); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_goalReset(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_goal_reset((Z3_context)a0, (Z3_goal)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_goalSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_goal_size((Z3_context)a0, (Z3_goal)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_goalFormula(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_goal_formula((Z3_context)a0, (Z3_goal)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_goalNumExprs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_goal_num_exprs((Z3_context)a0, (Z3_goal)a1); + return (jint) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_goalIsDecidedSat(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_goal_is_decided_sat((Z3_context)a0, (Z3_goal)a1); + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_goalIsDecidedUnsat(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_bool result = Z3_goal_is_decided_unsat((Z3_context)a0, (Z3_goal)a1); + return (jboolean) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_goalTranslate(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_goal result = Z3_goal_translate((Z3_context)a0, (Z3_goal)a1, (Z3_context)a2); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_goalToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_goal_to_string((Z3_context)a0, (Z3_goal)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkTactic(JNIEnv * jenv, jclass cls, jlong a0, jstring a1) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_tactic result = Z3_mk_tactic((Z3_context)a0, _a1); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_tacticIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_tactic_inc_ref((Z3_context)a0, (Z3_tactic)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_tacticDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_tactic_dec_ref((Z3_context)a0, (Z3_tactic)a1); +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkProbe(JNIEnv * jenv, jclass cls, jlong a0, jstring a1) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_probe result = Z3_mk_probe((Z3_context)a0, _a1); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_probeIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_probe_inc_ref((Z3_context)a0, (Z3_probe)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_probeDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_probe_dec_ref((Z3_context)a0, (Z3_probe)a1); +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticAndThen(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_tactic result = Z3_tactic_and_then((Z3_context)a0, (Z3_tactic)a1, (Z3_tactic)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticOrElse(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_tactic result = Z3_tactic_or_else((Z3_context)a0, (Z3_tactic)a1, (Z3_tactic)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticParOr(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2) { + Z3_tactic * _a2 = (Z3_tactic *) jenv->GetLongArrayElements(a2, NULL); + Z3_tactic result = Z3_tactic_par_or((Z3_context)a0, (unsigned)a1, _a2); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticParAndThen(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_tactic result = Z3_tactic_par_and_then((Z3_context)a0, (Z3_tactic)a1, (Z3_tactic)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticTryFor(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_tactic result = Z3_tactic_try_for((Z3_context)a0, (Z3_tactic)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticWhen(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_tactic result = Z3_tactic_when((Z3_context)a0, (Z3_probe)a1, (Z3_tactic)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticCond(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_tactic result = Z3_tactic_cond((Z3_context)a0, (Z3_probe)a1, (Z3_tactic)a2, (Z3_tactic)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticRepeat(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_tactic result = Z3_tactic_repeat((Z3_context)a0, (Z3_tactic)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticSkip(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_tactic result = Z3_tactic_skip((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticFail(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_tactic result = Z3_tactic_fail((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticFailIf(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_tactic result = Z3_tactic_fail_if((Z3_context)a0, (Z3_probe)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticFailIfNotDecided(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_tactic result = Z3_tactic_fail_if_not_decided((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticUsingParams(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_tactic result = Z3_tactic_using_params((Z3_context)a0, (Z3_tactic)a1, (Z3_params)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeConst(JNIEnv * jenv, jclass cls, jlong a0, jdouble a1) { + Z3_probe result = Z3_probe_const((Z3_context)a0, (double)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeLt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_lt((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeGt(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_gt((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeLe(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_le((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeGe(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_ge((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeEq(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_eq((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeAnd(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_and((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeOr(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_probe result = Z3_probe_or((Z3_context)a0, (Z3_probe)a1, (Z3_probe)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_probeNot(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_probe result = Z3_probe_not((Z3_context)a0, (Z3_probe)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getNumTactics(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_num_tactics((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_getTacticName(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_string result = Z3_get_tactic_name((Z3_context)a0, (unsigned)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jint JNICALL Java_Z3Native_getNumProbes(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_num_probes((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_getProbeName(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_string result = Z3_get_probe_name((Z3_context)a0, (unsigned)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_tacticGetHelp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_tactic_get_help((Z3_context)a0, (Z3_tactic)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticGetParamDescrs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_param_descrs result = Z3_tactic_get_param_descrs((Z3_context)a0, (Z3_tactic)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_tacticGetDescr(JNIEnv * jenv, jclass cls, jlong a0, jstring a1) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_string result = Z3_tactic_get_descr((Z3_context)a0, _a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_probeGetDescr(JNIEnv * jenv, jclass cls, jlong a0, jstring a1) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_string result = Z3_probe_get_descr((Z3_context)a0, _a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jdouble JNICALL Java_Z3Native_probeApply(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + double result = Z3_probe_apply((Z3_context)a0, (Z3_probe)a1, (Z3_goal)a2); + return (jdouble) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticApply(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_apply_result result = Z3_tactic_apply((Z3_context)a0, (Z3_tactic)a1, (Z3_goal)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_tacticApplyEx(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_apply_result result = Z3_tactic_apply_ex((Z3_context)a0, (Z3_tactic)a1, (Z3_goal)a2, (Z3_params)a3); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_applyResultIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_apply_result_inc_ref((Z3_context)a0, (Z3_apply_result)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_applyResultDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_apply_result_dec_ref((Z3_context)a0, (Z3_apply_result)a1); +} +JNIEXPORT jstring JNICALL Java_Z3Native_applyResultToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_apply_result_to_string((Z3_context)a0, (Z3_apply_result)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jint JNICALL Java_Z3Native_applyResultGetNumSubgoals(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_apply_result_get_num_subgoals((Z3_context)a0, (Z3_apply_result)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_applyResultGetSubgoal(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_goal result = Z3_apply_result_get_subgoal((Z3_context)a0, (Z3_apply_result)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_applyResultConvertModel(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlong a3) { + Z3_model result = Z3_apply_result_convert_model((Z3_context)a0, (Z3_apply_result)a1, (unsigned)a2, (Z3_model)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSolver(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_solver result = Z3_mk_solver((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSimpleSolver(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_solver result = Z3_mk_simple_solver((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSolverForLogic(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_solver result = Z3_mk_solver_for_logic((Z3_context)a0, (Z3_symbol)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkSolverFromTactic(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_solver result = Z3_mk_solver_from_tactic((Z3_context)a0, (Z3_tactic)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_solverGetHelp(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_solver_get_help((Z3_context)a0, (Z3_solver)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_solverGetParamDescrs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_param_descrs result = Z3_solver_get_param_descrs((Z3_context)a0, (Z3_solver)a1); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_solverSetParams(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_solver_set_params((Z3_context)a0, (Z3_solver)a1, (Z3_params)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_solverIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_solver_inc_ref((Z3_context)a0, (Z3_solver)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_solverDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_solver_dec_ref((Z3_context)a0, (Z3_solver)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_solverPush(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_solver_push((Z3_context)a0, (Z3_solver)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_solverPop(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_solver_pop((Z3_context)a0, (Z3_solver)a1, (unsigned)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_solverReset(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_solver_reset((Z3_context)a0, (Z3_solver)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_solverGetNumScopes(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_solver_get_num_scopes((Z3_context)a0, (Z3_solver)a1); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_solverAssert(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2) { + Z3_solver_assert((Z3_context)a0, (Z3_solver)a1, (Z3_ast)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_solverAssertAndTrack(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jlong a3) { + Z3_solver_assert_and_track((Z3_context)a0, (Z3_solver)a1, (Z3_ast)a2, (Z3_ast)a3); +} +JNIEXPORT jlong JNICALL Java_Z3Native_solverGetAssertions(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector result = Z3_solver_get_assertions((Z3_context)a0, (Z3_solver)a1); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_solverCheck(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + int result = Z3_solver_check((Z3_context)a0, (Z3_solver)a1); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_solverCheckAssumptions(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3) { + Z3_ast * _a3 = (Z3_ast *) jenv->GetLongArrayElements(a3, NULL); + int result = Z3_solver_check_assumptions((Z3_context)a0, (Z3_solver)a1, (unsigned)a2, _a3); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_solverGetModel(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_model result = Z3_solver_get_model((Z3_context)a0, (Z3_solver)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_solverGetProof(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast result = Z3_solver_get_proof((Z3_context)a0, (Z3_solver)a1); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_solverGetUnsatCore(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_ast_vector result = Z3_solver_get_unsat_core((Z3_context)a0, (Z3_solver)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_solverGetReasonUnknown(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_solver_get_reason_unknown((Z3_context)a0, (Z3_solver)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_solverGetStatistics(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_stats result = Z3_solver_get_statistics((Z3_context)a0, (Z3_solver)a1); + return (jlong) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_solverToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_solver_to_string((Z3_context)a0, (Z3_solver)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_statsToString(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_string result = Z3_stats_to_string((Z3_context)a0, (Z3_stats)a1); + return jenv->NewStringUTF(result); +} +JNIEXPORT void JNICALL Java_Z3Native_statsIncRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_stats_inc_ref((Z3_context)a0, (Z3_stats)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_statsDecRef(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_stats_dec_ref((Z3_context)a0, (Z3_stats)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_statsSize(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_stats_size((Z3_context)a0, (Z3_stats)a1); + return (jint) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_statsGetKey(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_string result = Z3_stats_get_key((Z3_context)a0, (Z3_stats)a1, (unsigned)a2); + return jenv->NewStringUTF(result); +} +JNIEXPORT jboolean JNICALL Java_Z3Native_statsIsUint(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_bool result = Z3_stats_is_uint((Z3_context)a0, (Z3_stats)a1, (unsigned)a2); + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_statsIsDouble(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_bool result = Z3_stats_is_double((Z3_context)a0, (Z3_stats)a1, (unsigned)a2); + return (jboolean) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_statsGetUintValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + unsigned result = Z3_stats_get_uint_value((Z3_context)a0, (Z3_stats)a1, (unsigned)a2); + return (jint) result; +} +JNIEXPORT jdouble JNICALL Java_Z3Native_statsGetDoubleValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + double result = Z3_stats_get_double_value((Z3_context)a0, (Z3_stats)a1, (unsigned)a2); + return (jdouble) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkInjectiveFunction(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jlongArray a3, jlong a4) { + Z3_sort * _a3 = (Z3_sort *) jenv->GetLongArrayElements(a3, NULL); + Z3_func_decl result = Z3_mk_injective_function((Z3_context)a0, (Z3_symbol)a1, (unsigned)a2, _a3, (Z3_sort)a4); + jenv->ReleaseLongArrayElements(a3, (jlong *) _a3, JNI_ABORT); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_setLogic(JNIEnv * jenv, jclass cls, jlong a0, jstring a1) { + Z3_string _a1 = (Z3_string) jenv->GetStringUTFChars(a1, NULL); + Z3_set_logic((Z3_context)a0, _a1); +} +JNIEXPORT void JNICALL Java_Z3Native_push(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_push((Z3_context)a0); +} +JNIEXPORT void JNICALL Java_Z3Native_pop(JNIEnv * jenv, jclass cls, jlong a0, jint a1) { + Z3_pop((Z3_context)a0, (unsigned)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_getNumScopes(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_num_scopes((Z3_context)a0); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_persistAst(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_persist_ast((Z3_context)a0, (Z3_ast)a1, (unsigned)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_assertCnstr(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_assert_cnstr((Z3_context)a0, (Z3_ast)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_checkAndGetModel(JNIEnv * jenv, jclass cls, jlong a0, jobject a1) { + Z3_model _a1; + int result = Z3_check_and_get_model((Z3_context)a0, &_a1); + { + jclass mc = jenv->GetObjectClass(a1); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a1, fid, (jlong) _a1); + } + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_check(JNIEnv * jenv, jclass cls, jlong a0) { + int result = Z3_check((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_checkAssumptions(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2, jobject a3, jobject a4, jobject a5, jlongArray a6) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + Z3_model _a3; + Z3_ast _a4; + unsigned _a5; + Z3_ast * _a6 = (Z3_ast *) malloc(((unsigned)a1) * sizeof(Z3_ast)); + int result = Z3_check_assumptions((Z3_context)a0, (unsigned)a1, _a2, &_a3, &_a4, &_a5, _a6); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + { + jclass mc = jenv->GetObjectClass(a4); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a4, fid, (jlong) _a4); + } + { + jclass mc = jenv->GetObjectClass(a5); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a5, fid, (jint) _a5); + } + jenv->SetLongArrayRegion(a6, 0, (jsize)a1, (jlong *) _a6); + free(_a6); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getImpliedEqualities(JNIEnv * jenv, jclass cls, jlong a0, jint a1, jlongArray a2, jintArray a3) { + Z3_ast * _a2 = (Z3_ast *) jenv->GetLongArrayElements(a2, NULL); + unsigned * _a3 = (unsigned *) malloc(((unsigned)a1) * sizeof(unsigned)); + unsigned result = Z3_get_implied_equalities((Z3_context)a0, (unsigned)a1, _a2, _a3); + jenv->ReleaseLongArrayElements(a2, (jlong *) _a2, JNI_ABORT); + jenv->SetIntArrayRegion(a3, 0, (jsize)a1, (jint *) _a3); + free(_a3); + return (jint) result; +} +JNIEXPORT void JNICALL Java_Z3Native_delModel(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_del_model((Z3_context)a0, (Z3_model)a1); +} +JNIEXPORT void JNICALL Java_Z3Native_softCheckCancel(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_soft_check_cancel((Z3_context)a0); +} +JNIEXPORT jint JNICALL Java_Z3Native_getSearchFailure(JNIEnv * jenv, jclass cls, jlong a0) { + unsigned result = Z3_get_search_failure((Z3_context)a0); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_mkLabel(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jboolean a2, jlong a3) { + Z3_ast result = Z3_mk_label((Z3_context)a0, (Z3_symbol)a1, (Z3_bool)a2, (Z3_ast)a3); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getRelevantLabels(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_literals result = Z3_get_relevant_labels((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getRelevantLiterals(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_literals result = Z3_get_relevant_literals((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getGuessedLiterals(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_literals result = Z3_get_guessed_literals((Z3_context)a0); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_delLiterals(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_del_literals((Z3_context)a0, (Z3_literals)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_getNumLiterals(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_num_literals((Z3_context)a0, (Z3_literals)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getLabelSymbol(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_symbol result = Z3_get_label_symbol((Z3_context)a0, (Z3_literals)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getLiteral(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_literal((Z3_context)a0, (Z3_literals)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT void JNICALL Java_Z3Native_disableLiteral(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_disable_literal((Z3_context)a0, (Z3_literals)a1, (unsigned)a2); +} +JNIEXPORT void JNICALL Java_Z3Native_blockLiterals(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + Z3_block_literals((Z3_context)a0, (Z3_literals)a1); +} +JNIEXPORT jint JNICALL Java_Z3Native_getModelNumConstants(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_model_num_constants((Z3_context)a0, (Z3_model)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getModelConstant(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_get_model_constant((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getModelNumFuncs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1) { + unsigned result = Z3_get_model_num_funcs((Z3_context)a0, (Z3_model)a1); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getModelFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_func_decl result = Z3_get_model_func_decl((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_evalFuncDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jobject a3) { + Z3_ast _a3; + Z3_bool result = Z3_eval_func_decl((Z3_context)a0, (Z3_model)a1, (Z3_func_decl)a2, &_a3); + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_isArrayValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jobject a3) { + unsigned _a3; + Z3_bool result = Z3_is_array_value((Z3_context)a0, (Z3_model)a1, (Z3_ast)a2, &_a3); + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "I"); + jenv->SetIntField(a3, fid, (jint) _a3); + } + return (jboolean) result; +} +JNIEXPORT void JNICALL Java_Z3Native_getArrayValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jint a3, jlongArray a4, jlongArray a5, jobject a6) { + Z3_ast * _a4 = (Z3_ast *) malloc(((unsigned)a3) * sizeof(Z3_ast)); + Z3_ast * _a5 = (Z3_ast *) malloc(((unsigned)a3) * sizeof(Z3_ast)); + Z3_ast _a6; + Z3_get_array_value((Z3_context)a0, (Z3_model)a1, (Z3_ast)a2, (unsigned)a3, _a4, _a5, &_a6); + jenv->SetLongArrayRegion(a4, 0, (jsize)a3, (jlong *) _a4); + free(_a4); + jenv->SetLongArrayRegion(a5, 0, (jsize)a3, (jlong *) _a5); + free(_a5); + { + jclass mc = jenv->GetObjectClass(a6); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a6, fid, (jlong) _a6); + } +} +JNIEXPORT jlong JNICALL Java_Z3Native_getModelFuncElse(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + Z3_ast result = Z3_get_model_func_else((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jlong) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getModelFuncNumEntries(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2) { + unsigned result = Z3_get_model_func_num_entries((Z3_context)a0, (Z3_model)a1, (unsigned)a2); + return (jint) result; +} +JNIEXPORT jint JNICALL Java_Z3Native_getModelFuncEntryNumArgs(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jint a3) { + unsigned result = Z3_get_model_func_entry_num_args((Z3_context)a0, (Z3_model)a1, (unsigned)a2, (unsigned)a3); + return (jint) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getModelFuncEntryArg(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jint a3, jint a4) { + Z3_ast result = Z3_get_model_func_entry_arg((Z3_context)a0, (Z3_model)a1, (unsigned)a2, (unsigned)a3, (unsigned)a4); + return (jlong) result; +} +JNIEXPORT jlong JNICALL Java_Z3Native_getModelFuncEntryValue(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jint a2, jint a3) { + Z3_ast result = Z3_get_model_func_entry_value((Z3_context)a0, (Z3_model)a1, (unsigned)a2, (unsigned)a3); + return (jlong) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_eval(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jobject a3) { + Z3_ast _a3; + Z3_bool result = Z3_eval((Z3_context)a0, (Z3_model)a1, (Z3_ast)a2, &_a3); + { + jclass mc = jenv->GetObjectClass(a3); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a3, fid, (jlong) _a3); + } + return (jboolean) result; +} +JNIEXPORT jboolean JNICALL Java_Z3Native_evalDecl(JNIEnv * jenv, jclass cls, jlong a0, jlong a1, jlong a2, jint a3, jlongArray a4, jobject a5) { + Z3_ast * _a4 = (Z3_ast *) jenv->GetLongArrayElements(a4, NULL); + Z3_ast _a5; + Z3_bool result = Z3_eval_decl((Z3_context)a0, (Z3_model)a1, (Z3_func_decl)a2, (unsigned)a3, _a4, &_a5); + jenv->ReleaseLongArrayElements(a4, (jlong *) _a4, JNI_ABORT); + { + jclass mc = jenv->GetObjectClass(a5); + jfieldID fid = jenv->GetFieldID(mc, "value", "J"); + jenv->SetLongField(a5, fid, (jlong) _a5); + } + return (jboolean) result; +} +JNIEXPORT jstring JNICALL Java_Z3Native_contextToString(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_string result = Z3_context_to_string((Z3_context)a0); + return jenv->NewStringUTF(result); +} +JNIEXPORT jstring JNICALL Java_Z3Native_statisticsToString(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_string result = Z3_statistics_to_string((Z3_context)a0); + return jenv->NewStringUTF(result); +} +JNIEXPORT jlong JNICALL Java_Z3Native_getContextAssignment(JNIEnv * jenv, jclass cls, jlong a0) { + Z3_ast result = Z3_get_context_assignment((Z3_context)a0); + return (jlong) result; +} +#ifdef __cplusplus +} +#endif diff --git a/src/api/java/com/Microsoft/Z3/Native.class b/src/api/java/com/Microsoft/Z3/Native.class new file mode 100644 index 000000000..04e71cfb4 Binary files /dev/null and b/src/api/java/com/Microsoft/Z3/Native.class differ diff --git a/src/api/java/com/Microsoft/Z3/Native.java b/src/api/java/com/Microsoft/Z3/Native.java new file mode 100644 index 000000000..564b5cb6f --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Native.java @@ -0,0 +1,494 @@ +// Automatically generated file +package com.Microsoft.Z3; +public final class Native { + static { System.loadLibrary(""); } + public static native long mkConfig(); + public static native void delConfig(long a0); + public static native void setParamValue(long a0, String a1, String a2); + public static native long mkContext(long a0); + public static native long mkContextRc(long a0); + public static native void delContext(long a0); + public static native void incRef(long a0, long a1); + public static native void decRef(long a0, long a1); + public static native void updateParamValue(long a0, String a1, String a2); + public static native boolean getParamValue(long a0, String a1, String a2); + public static native void interrupt(long a0); + public static native long mkParams(long a0); + public static native void paramsIncRef(long a0, long a1); + public static native void paramsDecRef(long a0, long a1); + public static native void paramsSetBool(long a0, long a1, long a2, boolean a3); + public static native void paramsSetUint(long a0, long a1, long a2, int a3); + public static native void paramsSetDouble(long a0, long a1, long a2, double a3); + public static native void paramsSetSymbol(long a0, long a1, long a2, long a3); + public static native String paramsToString(long a0, long a1); + public static native void paramsValidate(long a0, long a1, long a2); + public static native void paramDescrsIncRef(long a0, long a1); + public static native void paramDescrsDecRef(long a0, long a1); + public static native int paramDescrsGetKind(long a0, long a1, long a2); + public static native int paramDescrsSize(long a0, long a1); + public static native long paramDescrsGetName(long a0, long a1, int a2); + public static native String paramDescrsToString(long a0, long a1); + public static native long mkIntSymbol(long a0, int a1); + public static native long mkStringSymbol(long a0, String a1); + public static native long mkUninterpretedSort(long a0, long a1); + public static native long mkBoolSort(long a0); + public static native long mkIntSort(long a0); + public static native long mkRealSort(long a0); + public static native long mkBvSort(long a0, int a1); + public static native long mkFiniteDomainSort(long a0, long a1, long a2); + public static native long mkArraySort(long a0, long a1, long a2); + public static native long mkTupleSort(long a0, long a1, int a2, long[] a3, long[] a4, Long a5, long[] a6); + public static native long mkEnumerationSort(long a0, long a1, int a2, long[] a3, long[] a4, long[] a5); + public static native long mkListSort(long a0, long a1, long a2, Long a3, Long a4, Long a5, Long a6, Long a7, Long a8); + public static native long mkConstructor(long a0, long a1, long a2, int a3, long[] a4, long[] a5, int[] a6); + public static native void delConstructor(long a0, long a1); + public static native long mkDatatype(long a0, long a1, int a2, long[] a3); + public static native long mkConstructorList(long a0, int a1, long[] a2); + public static native void delConstructorList(long a0, long a1); + public static native void mkDatatypes(long a0, int a1, long[] a2, long[] a3, long[] a4); + public static native void queryConstructor(long a0, long a1, int a2, Long a3, Long a4, long[] a5); + public static native long mkFuncDecl(long a0, long a1, int a2, long[] a3, long a4); + public static native long mkApp(long a0, long a1, int a2, long[] a3); + public static native long mkConst(long a0, long a1, long a2); + public static native long mkFreshFuncDecl(long a0, String a1, int a2, long[] a3, long a4); + public static native long mkFreshConst(long a0, String a1, long a2); + public static native long mkTrue(long a0); + public static native long mkFalse(long a0); + public static native long mkEq(long a0, long a1, long a2); + public static native long mkDistinct(long a0, int a1, long[] a2); + public static native long mkNot(long a0, long a1); + public static native long mkIte(long a0, long a1, long a2, long a3); + public static native long mkIff(long a0, long a1, long a2); + public static native long mkImplies(long a0, long a1, long a2); + public static native long mkXor(long a0, long a1, long a2); + public static native long mkAnd(long a0, int a1, long[] a2); + public static native long mkOr(long a0, int a1, long[] a2); + public static native long mkAdd(long a0, int a1, long[] a2); + public static native long mkMul(long a0, int a1, long[] a2); + public static native long mkSub(long a0, int a1, long[] a2); + public static native long mkUnaryMinus(long a0, long a1); + public static native long mkDiv(long a0, long a1, long a2); + public static native long mkMod(long a0, long a1, long a2); + public static native long mkRem(long a0, long a1, long a2); + public static native long mkPower(long a0, long a1, long a2); + public static native long mkLt(long a0, long a1, long a2); + public static native long mkLe(long a0, long a1, long a2); + public static native long mkGt(long a0, long a1, long a2); + public static native long mkGe(long a0, long a1, long a2); + public static native long mkInt2real(long a0, long a1); + public static native long mkReal2int(long a0, long a1); + public static native long mkIsInt(long a0, long a1); + public static native long mkBvnot(long a0, long a1); + public static native long mkBvredand(long a0, long a1); + public static native long mkBvredor(long a0, long a1); + public static native long mkBvand(long a0, long a1, long a2); + public static native long mkBvor(long a0, long a1, long a2); + public static native long mkBvxor(long a0, long a1, long a2); + public static native long mkBvnand(long a0, long a1, long a2); + public static native long mkBvnor(long a0, long a1, long a2); + public static native long mkBvxnor(long a0, long a1, long a2); + public static native long mkBvneg(long a0, long a1); + public static native long mkBvadd(long a0, long a1, long a2); + public static native long mkBvsub(long a0, long a1, long a2); + public static native long mkBvmul(long a0, long a1, long a2); + public static native long mkBvudiv(long a0, long a1, long a2); + public static native long mkBvsdiv(long a0, long a1, long a2); + public static native long mkBvurem(long a0, long a1, long a2); + public static native long mkBvsrem(long a0, long a1, long a2); + public static native long mkBvsmod(long a0, long a1, long a2); + public static native long mkBvult(long a0, long a1, long a2); + public static native long mkBvslt(long a0, long a1, long a2); + public static native long mkBvule(long a0, long a1, long a2); + public static native long mkBvsle(long a0, long a1, long a2); + public static native long mkBvuge(long a0, long a1, long a2); + public static native long mkBvsge(long a0, long a1, long a2); + public static native long mkBvugt(long a0, long a1, long a2); + public static native long mkBvsgt(long a0, long a1, long a2); + public static native long mkConcat(long a0, long a1, long a2); + public static native long mkExtract(long a0, int a1, int a2, long a3); + public static native long mkSignExt(long a0, int a1, long a2); + public static native long mkZeroExt(long a0, int a1, long a2); + public static native long mkRepeat(long a0, int a1, long a2); + public static native long mkBvshl(long a0, long a1, long a2); + public static native long mkBvlshr(long a0, long a1, long a2); + public static native long mkBvashr(long a0, long a1, long a2); + public static native long mkRotateLeft(long a0, int a1, long a2); + public static native long mkRotateRight(long a0, int a1, long a2); + public static native long mkExtRotateLeft(long a0, long a1, long a2); + public static native long mkExtRotateRight(long a0, long a1, long a2); + public static native long mkInt2bv(long a0, int a1, long a2); + public static native long mkBv2int(long a0, long a1, boolean a2); + public static native long mkBvaddNoOverflow(long a0, long a1, long a2, boolean a3); + public static native long mkBvaddNoUnderflow(long a0, long a1, long a2); + public static native long mkBvsubNoOverflow(long a0, long a1, long a2); + public static native long mkBvsubNoUnderflow(long a0, long a1, long a2, boolean a3); + public static native long mkBvsdivNoOverflow(long a0, long a1, long a2); + public static native long mkBvnegNoOverflow(long a0, long a1); + public static native long mkBvmulNoOverflow(long a0, long a1, long a2, boolean a3); + public static native long mkBvmulNoUnderflow(long a0, long a1, long a2); + public static native long mkSelect(long a0, long a1, long a2); + public static native long mkStore(long a0, long a1, long a2, long a3); + public static native long mkConstArray(long a0, long a1, long a2); + public static native long mkMap(long a0, long a1, int a2, long[] a3); + public static native long mkArrayDefault(long a0, long a1); + public static native long mkSetSort(long a0, long a1); + public static native long mkEmptySet(long a0, long a1); + public static native long mkFullSet(long a0, long a1); + public static native long mkSetAdd(long a0, long a1, long a2); + public static native long mkSetDel(long a0, long a1, long a2); + public static native long mkSetUnion(long a0, int a1, long[] a2); + public static native long mkSetIntersect(long a0, int a1, long[] a2); + public static native long mkSetDifference(long a0, long a1, long a2); + public static native long mkSetComplement(long a0, long a1); + public static native long mkSetMember(long a0, long a1, long a2); + public static native long mkSetSubset(long a0, long a1, long a2); + public static native long mkNumeral(long a0, String a1, long a2); + public static native long mkReal(long a0, int a1, int a2); + public static native long mkInt(long a0, int a1, long a2); + public static native long mkUnsignedInt(long a0, int a1, long a2); + public static native long mkInt64(long a0, long a1, long a2); + public static native long mkUnsignedInt64(long a0, long a1, long a2); + public static native long mkPattern(long a0, int a1, long[] a2); + public static native long mkBound(long a0, int a1, long a2); + public static native long mkForall(long a0, int a1, int a2, long[] a3, int a4, long[] a5, long[] a6, long a7); + public static native long mkExists(long a0, int a1, int a2, long[] a3, int a4, long[] a5, long[] a6, long a7); + public static native long mkQuantifier(long a0, boolean a1, int a2, int a3, long[] a4, int a5, long[] a6, long[] a7, long a8); + public static native long mkQuantifierEx(long a0, boolean a1, int a2, long a3, long a4, int a5, long[] a6, int a7, long[] a8, int a9, long[] a10, long[] a11, long a12); + public static native long mkForallConst(long a0, int a1, int a2, long[] a3, int a4, long[] a5, long a6); + public static native long mkExistsConst(long a0, int a1, int a2, long[] a3, int a4, long[] a5, long a6); + public static native long mkQuantifierConst(long a0, boolean a1, int a2, int a3, long[] a4, int a5, long[] a6, long a7); + public static native long mkQuantifierConstEx(long a0, boolean a1, int a2, long a3, long a4, int a5, long[] a6, int a7, long[] a8, int a9, long[] a10, long a11); + public static native int getSymbolKind(long a0, long a1); + public static native int getSymbolInt(long a0, long a1); + public static native String getSymbolString(long a0, long a1); + public static native long getSortName(long a0, long a1); + public static native int getSortId(long a0, long a1); + public static native long sortToAst(long a0, long a1); + public static native boolean isEqSort(long a0, long a1, long a2); + public static native int getSortKind(long a0, long a1); + public static native int getBvSortSize(long a0, long a1); + public static native boolean getFiniteDomainSortSize(long a0, long a1, Long a2); + public static native long getArraySortDomain(long a0, long a1); + public static native long getArraySortRange(long a0, long a1); + public static native long getTupleSortMkDecl(long a0, long a1); + public static native int getTupleSortNumFields(long a0, long a1); + public static native long getTupleSortFieldDecl(long a0, long a1, int a2); + public static native int getDatatypeSortNumConstructors(long a0, long a1); + public static native long getDatatypeSortConstructor(long a0, long a1, int a2); + public static native long getDatatypeSortRecognizer(long a0, long a1, int a2); + public static native long getDatatypeSortConstructorAccessor(long a0, long a1, int a2, int a3); + public static native int getRelationArity(long a0, long a1); + public static native long getRelationColumn(long a0, long a1, int a2); + public static native long funcDeclToAst(long a0, long a1); + public static native boolean isEqFuncDecl(long a0, long a1, long a2); + public static native int getFuncDeclId(long a0, long a1); + public static native long getDeclName(long a0, long a1); + public static native int getDeclKind(long a0, long a1); + public static native int getDomainSize(long a0, long a1); + public static native int getArity(long a0, long a1); + public static native long getDomain(long a0, long a1, int a2); + public static native long getRange(long a0, long a1); + public static native int getDeclNumParameters(long a0, long a1); + public static native int getDeclParameterKind(long a0, long a1, int a2); + public static native int getDeclIntParameter(long a0, long a1, int a2); + public static native double getDeclDoubleParameter(long a0, long a1, int a2); + public static native long getDeclSymbolParameter(long a0, long a1, int a2); + public static native long getDeclSortParameter(long a0, long a1, int a2); + public static native long getDeclAstParameter(long a0, long a1, int a2); + public static native long getDeclFuncDeclParameter(long a0, long a1, int a2); + public static native String getDeclRationalParameter(long a0, long a1, int a2); + public static native long appToAst(long a0, long a1); + public static native long getAppDecl(long a0, long a1); + public static native int getAppNumArgs(long a0, long a1); + public static native long getAppArg(long a0, long a1, int a2); + public static native boolean isEqAst(long a0, long a1, long a2); + public static native int getAstId(long a0, long a1); + public static native int getAstHash(long a0, long a1); + public static native long getSort(long a0, long a1); + public static native boolean isWellSorted(long a0, long a1); + public static native int getBoolValue(long a0, long a1); + public static native int getAstKind(long a0, long a1); + public static native boolean isApp(long a0, long a1); + public static native boolean isNumeralAst(long a0, long a1); + public static native boolean isAlgebraicNumber(long a0, long a1); + public static native long toApp(long a0, long a1); + public static native long toFuncDecl(long a0, long a1); + public static native String getNumeralString(long a0, long a1); + public static native String getNumeralDecimalString(long a0, long a1, int a2); + public static native long getNumerator(long a0, long a1); + public static native long getDenominator(long a0, long a1); + public static native boolean getNumeralSmall(long a0, long a1, Long a2, Long a3); + public static native boolean getNumeralInt(long a0, long a1, Integer a2); + public static native boolean getNumeralUint(long a0, long a1, Integer a2); + public static native boolean getNumeralUint64(long a0, long a1, Long a2); + public static native boolean getNumeralInt64(long a0, long a1, Long a2); + public static native boolean getNumeralRationalInt64(long a0, long a1, Long a2, Long a3); + public static native long getAlgebraicNumberLower(long a0, long a1, int a2); + public static native long getAlgebraicNumberUpper(long a0, long a1, int a2); + public static native long patternToAst(long a0, long a1); + public static native int getPatternNumTerms(long a0, long a1); + public static native long getPattern(long a0, long a1, int a2); + public static native int getIndexValue(long a0, long a1); + public static native boolean isQuantifierForall(long a0, long a1); + public static native int getQuantifierWeight(long a0, long a1); + public static native int getQuantifierNumPatterns(long a0, long a1); + public static native long getQuantifierPatternAst(long a0, long a1, int a2); + public static native int getQuantifierNumNoPatterns(long a0, long a1); + public static native long getQuantifierNoPatternAst(long a0, long a1, int a2); + public static native int getQuantifierNumBound(long a0, long a1); + public static native long getQuantifierBoundName(long a0, long a1, int a2); + public static native long getQuantifierBoundSort(long a0, long a1, int a2); + public static native long getQuantifierBody(long a0, long a1); + public static native long simplify(long a0, long a1); + public static native long simplifyEx(long a0, long a1, long a2); + public static native String simplifyGetHelp(long a0); + public static native long simplifyGetParamDescrs(long a0); + public static native long updateTerm(long a0, long a1, int a2, long[] a3); + public static native long substitute(long a0, long a1, int a2, long[] a3, long[] a4); + public static native long substituteVars(long a0, long a1, int a2, long[] a3); + public static native long translate(long a0, long a1, long a2); + public static native void modelIncRef(long a0, long a1); + public static native void modelDecRef(long a0, long a1); + public static native boolean modelEval(long a0, long a1, long a2, boolean a3, Long a4); + public static native long modelGetConstInterp(long a0, long a1, long a2); + public static native long modelGetFuncInterp(long a0, long a1, long a2); + public static native int modelGetNumConsts(long a0, long a1); + public static native long modelGetConstDecl(long a0, long a1, int a2); + public static native int modelGetNumFuncs(long a0, long a1); + public static native long modelGetFuncDecl(long a0, long a1, int a2); + public static native int modelGetNumSorts(long a0, long a1); + public static native long modelGetSort(long a0, long a1, int a2); + public static native long modelGetSortUniverse(long a0, long a1, long a2); + public static native boolean isAsArray(long a0, long a1); + public static native long getAsArrayFuncDecl(long a0, long a1); + public static native void funcInterpIncRef(long a0, long a1); + public static native void funcInterpDecRef(long a0, long a1); + public static native int funcInterpGetNumEntries(long a0, long a1); + public static native long funcInterpGetEntry(long a0, long a1, int a2); + public static native long funcInterpGetElse(long a0, long a1); + public static native int funcInterpGetArity(long a0, long a1); + public static native void funcEntryIncRef(long a0, long a1); + public static native void funcEntryDecRef(long a0, long a1); + public static native long funcEntryGetValue(long a0, long a1); + public static native int funcEntryGetNumArgs(long a0, long a1); + public static native long funcEntryGetArg(long a0, long a1, int a2); + public static native int openLog(String a0); + public static native void appendLog(String a0); + public static native void closeLog(); + public static native void toggleWarningMessages(boolean a0); + public static native void setAstPrintMode(long a0, int a1); + public static native String astToString(long a0, long a1); + public static native String patternToString(long a0, long a1); + public static native String sortToString(long a0, long a1); + public static native String funcDeclToString(long a0, long a1); + public static native String modelToString(long a0, long a1); + public static native String benchmarkToSmtlibString(long a0, String a1, String a2, String a3, String a4, int a5, long[] a6, long a7); + public static native long parseSmtlib2String(long a0, String a1, int a2, long[] a3, long[] a4, int a5, long[] a6, long[] a7); + public static native long parseSmtlib2File(long a0, String a1, int a2, long[] a3, long[] a4, int a5, long[] a6, long[] a7); + public static native void parseSmtlibString(long a0, String a1, int a2, long[] a3, long[] a4, int a5, long[] a6, long[] a7); + public static native void parseSmtlibFile(long a0, String a1, int a2, long[] a3, long[] a4, int a5, long[] a6, long[] a7); + public static native int getSmtlibNumFormulas(long a0); + public static native long getSmtlibFormula(long a0, int a1); + public static native int getSmtlibNumAssumptions(long a0); + public static native long getSmtlibAssumption(long a0, int a1); + public static native int getSmtlibNumDecls(long a0); + public static native long getSmtlibDecl(long a0, int a1); + public static native int getSmtlibNumSorts(long a0); + public static native long getSmtlibSort(long a0, int a1); + public static native String getSmtlibError(long a0); + public static native int getErrorCode(long a0); + public static native void setError(long a0, int a1); + public static native String getErrorMsg(int a0); + public static native String getErrorMsgEx(long a0, int a1); + public static native void getVersion(Integer a0, Integer a1, Integer a2, Integer a3); + public static native void enableTrace(String a0); + public static native void disableTrace(String a0); + public static native void resetMemory(); + public static native long mkFixedpoint(long a0); + public static native void fixedpointIncRef(long a0, long a1); + public static native void fixedpointDecRef(long a0, long a1); + public static native void fixedpointAddRule(long a0, long a1, long a2, long a3); + public static native void fixedpointAddFact(long a0, long a1, long a2, int a3, int[] a4); + public static native void fixedpointAssert(long a0, long a1, long a2); + public static native int fixedpointQuery(long a0, long a1, long a2); + public static native int fixedpointQueryRelations(long a0, long a1, int a2, long[] a3); + public static native long fixedpointGetAnswer(long a0, long a1); + public static native String fixedpointGetReasonUnknown(long a0, long a1); + public static native void fixedpointUpdateRule(long a0, long a1, long a2, long a3); + public static native int fixedpointGetNumLevels(long a0, long a1, long a2); + public static native long fixedpointGetCoverDelta(long a0, long a1, int a2, long a3); + public static native void fixedpointAddCover(long a0, long a1, int a2, long a3, long a4); + public static native long fixedpointGetStatistics(long a0, long a1); + public static native void fixedpointRegisterRelation(long a0, long a1, long a2); + public static native void fixedpointSetPredicateRepresentation(long a0, long a1, long a2, int a3, long[] a4); + public static native long fixedpointGetRules(long a0, long a1); + public static native long fixedpointGetAssertions(long a0, long a1); + public static native void fixedpointSetParams(long a0, long a1, long a2); + public static native String fixedpointGetHelp(long a0, long a1); + public static native long fixedpointGetParamDescrs(long a0, long a1); + public static native String fixedpointToString(long a0, long a1, int a2, long[] a3); + public static native long fixedpointFromString(long a0, long a1, String a2); + public static native long fixedpointFromFile(long a0, long a1, String a2); + public static native void fixedpointPush(long a0, long a1); + public static native void fixedpointPop(long a0, long a1); + public static native long mkAstVector(long a0); + public static native void astVectorIncRef(long a0, long a1); + public static native void astVectorDecRef(long a0, long a1); + public static native int astVectorSize(long a0, long a1); + public static native long astVectorGet(long a0, long a1, int a2); + public static native void astVectorSet(long a0, long a1, int a2, long a3); + public static native void astVectorResize(long a0, long a1, int a2); + public static native void astVectorPush(long a0, long a1, long a2); + public static native long astVectorTranslate(long a0, long a1, long a2); + public static native String astVectorToString(long a0, long a1); + public static native long mkAstMap(long a0); + public static native void astMapIncRef(long a0, long a1); + public static native void astMapDecRef(long a0, long a1); + public static native boolean astMapContains(long a0, long a1, long a2); + public static native long astMapFind(long a0, long a1, long a2); + public static native void astMapInsert(long a0, long a1, long a2, long a3); + public static native void astMapErase(long a0, long a1, long a2); + public static native void astMapReset(long a0, long a1); + public static native int astMapSize(long a0, long a1); + public static native long astMapKeys(long a0, long a1); + public static native String astMapToString(long a0, long a1); + public static native long mkGoal(long a0, boolean a1, boolean a2, boolean a3); + public static native void goalIncRef(long a0, long a1); + public static native void goalDecRef(long a0, long a1); + public static native int goalPrecision(long a0, long a1); + public static native void goalAssert(long a0, long a1, long a2); + public static native boolean goalInconsistent(long a0, long a1); + public static native int goalDepth(long a0, long a1); + public static native void goalReset(long a0, long a1); + public static native int goalSize(long a0, long a1); + public static native long goalFormula(long a0, long a1, int a2); + public static native int goalNumExprs(long a0, long a1); + public static native boolean goalIsDecidedSat(long a0, long a1); + public static native boolean goalIsDecidedUnsat(long a0, long a1); + public static native long goalTranslate(long a0, long a1, long a2); + public static native String goalToString(long a0, long a1); + public static native long mkTactic(long a0, String a1); + public static native void tacticIncRef(long a0, long a1); + public static native void tacticDecRef(long a0, long a1); + public static native long mkProbe(long a0, String a1); + public static native void probeIncRef(long a0, long a1); + public static native void probeDecRef(long a0, long a1); + public static native long tacticAndThen(long a0, long a1, long a2); + public static native long tacticOrElse(long a0, long a1, long a2); + public static native long tacticParOr(long a0, int a1, long[] a2); + public static native long tacticParAndThen(long a0, long a1, long a2); + public static native long tacticTryFor(long a0, long a1, int a2); + public static native long tacticWhen(long a0, long a1, long a2); + public static native long tacticCond(long a0, long a1, long a2, long a3); + public static native long tacticRepeat(long a0, long a1, int a2); + public static native long tacticSkip(long a0); + public static native long tacticFail(long a0); + public static native long tacticFailIf(long a0, long a1); + public static native long tacticFailIfNotDecided(long a0); + public static native long tacticUsingParams(long a0, long a1, long a2); + public static native long probeConst(long a0, double a1); + public static native long probeLt(long a0, long a1, long a2); + public static native long probeGt(long a0, long a1, long a2); + public static native long probeLe(long a0, long a1, long a2); + public static native long probeGe(long a0, long a1, long a2); + public static native long probeEq(long a0, long a1, long a2); + public static native long probeAnd(long a0, long a1, long a2); + public static native long probeOr(long a0, long a1, long a2); + public static native long probeNot(long a0, long a1); + public static native int getNumTactics(long a0); + public static native String getTacticName(long a0, int a1); + public static native int getNumProbes(long a0); + public static native String getProbeName(long a0, int a1); + public static native String tacticGetHelp(long a0, long a1); + public static native long tacticGetParamDescrs(long a0, long a1); + public static native String tacticGetDescr(long a0, String a1); + public static native String probeGetDescr(long a0, String a1); + public static native double probeApply(long a0, long a1, long a2); + public static native long tacticApply(long a0, long a1, long a2); + public static native long tacticApplyEx(long a0, long a1, long a2, long a3); + public static native void applyResultIncRef(long a0, long a1); + public static native void applyResultDecRef(long a0, long a1); + public static native String applyResultToString(long a0, long a1); + public static native int applyResultGetNumSubgoals(long a0, long a1); + public static native long applyResultGetSubgoal(long a0, long a1, int a2); + public static native long applyResultConvertModel(long a0, long a1, int a2, long a3); + public static native long mkSolver(long a0); + public static native long mkSimpleSolver(long a0); + public static native long mkSolverForLogic(long a0, long a1); + public static native long mkSolverFromTactic(long a0, long a1); + public static native String solverGetHelp(long a0, long a1); + public static native long solverGetParamDescrs(long a0, long a1); + public static native void solverSetParams(long a0, long a1, long a2); + public static native void solverIncRef(long a0, long a1); + public static native void solverDecRef(long a0, long a1); + public static native void solverPush(long a0, long a1); + public static native void solverPop(long a0, long a1, int a2); + public static native void solverReset(long a0, long a1); + public static native int solverGetNumScopes(long a0, long a1); + public static native void solverAssert(long a0, long a1, long a2); + public static native void solverAssertAndTrack(long a0, long a1, long a2, long a3); + public static native long solverGetAssertions(long a0, long a1); + public static native int solverCheck(long a0, long a1); + public static native int solverCheckAssumptions(long a0, long a1, int a2, long[] a3); + public static native long solverGetModel(long a0, long a1); + public static native long solverGetProof(long a0, long a1); + public static native long solverGetUnsatCore(long a0, long a1); + public static native String solverGetReasonUnknown(long a0, long a1); + public static native long solverGetStatistics(long a0, long a1); + public static native String solverToString(long a0, long a1); + public static native String statsToString(long a0, long a1); + public static native void statsIncRef(long a0, long a1); + public static native void statsDecRef(long a0, long a1); + public static native int statsSize(long a0, long a1); + public static native String statsGetKey(long a0, long a1, int a2); + public static native boolean statsIsUint(long a0, long a1, int a2); + public static native boolean statsIsDouble(long a0, long a1, int a2); + public static native int statsGetUintValue(long a0, long a1, int a2); + public static native double statsGetDoubleValue(long a0, long a1, int a2); + public static native long mkInjectiveFunction(long a0, long a1, int a2, long[] a3, long a4); + public static native void setLogic(long a0, String a1); + public static native void push(long a0); + public static native void pop(long a0, int a1); + public static native int getNumScopes(long a0); + public static native void persistAst(long a0, long a1, int a2); + public static native void assertCnstr(long a0, long a1); + public static native int checkAndGetModel(long a0, Long a1); + public static native int check(long a0); + public static native int checkAssumptions(long a0, int a1, long[] a2, Long a3, Long a4, Integer a5, long[] a6); + public static native int getImpliedEqualities(long a0, int a1, long[] a2, int[] a3); + public static native void delModel(long a0, long a1); + public static native void softCheckCancel(long a0); + public static native int getSearchFailure(long a0); + public static native long mkLabel(long a0, long a1, boolean a2, long a3); + public static native long getRelevantLabels(long a0); + public static native long getRelevantLiterals(long a0); + public static native long getGuessedLiterals(long a0); + public static native void delLiterals(long a0, long a1); + public static native int getNumLiterals(long a0, long a1); + public static native long getLabelSymbol(long a0, long a1, int a2); + public static native long getLiteral(long a0, long a1, int a2); + public static native void disableLiteral(long a0, long a1, int a2); + public static native void blockLiterals(long a0, long a1); + public static native int getModelNumConstants(long a0, long a1); + public static native long getModelConstant(long a0, long a1, int a2); + public static native int getModelNumFuncs(long a0, long a1); + public static native long getModelFuncDecl(long a0, long a1, int a2); + public static native boolean evalFuncDecl(long a0, long a1, long a2, Long a3); + public static native boolean isArrayValue(long a0, long a1, long a2, Integer a3); + public static native void getArrayValue(long a0, long a1, long a2, int a3, long[] a4, long[] a5, Long a6); + public static native long getModelFuncElse(long a0, long a1, int a2); + public static native int getModelFuncNumEntries(long a0, long a1, int a2); + public static native int getModelFuncEntryNumArgs(long a0, long a1, int a2, int a3); + public static native long getModelFuncEntryArg(long a0, long a1, int a2, int a3, int a4); + public static native long getModelFuncEntryValue(long a0, long a1, int a2, int a3); + public static native boolean eval(long a0, long a1, long a2, Long a3); + public static native boolean evalDecl(long a0, long a1, long a2, int a3, long[] a4, Long a5); + public static native String contextToString(long a0); + public static native String statisticsToString(long a0); + public static native long getContextAssignment(long a0); + public static void main(String[] args) { + Integer major = 0, minor = 0, build = 0, revision = 0; + getVersion(major, minor, build, revision); + System.out.format("Z3 (for Java) %d.%d.%d%n", major, minor, build); + } +} diff --git a/src/api/java/com/Microsoft/Z3/Numeral.java b/src/api/java/com/Microsoft/Z3/Numeral.java new file mode 100644 index 000000000..5f9291b51 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Numeral.java @@ -0,0 +1,262 @@ +/** + * This file was automatically generated from Numeral.cs + **/ + +package com.Microsoft.Z3; +/* using System; */ + +/* using System.Numerics; */ + + /** + * Integer Numerals + **/ + public class IntNum extends IntExpr + { + + IntNum(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + + /** + * Retrieve the 64-bit unsigned integer value. + **/ + public UInt64 UInt64() + { + UInt64 res = 0; + if (Native.getNumeralInteger64(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not a 64 bit unsigned"); + return res; + } + + /** + * Retrieve the int value. + **/ + public int Int() + { + int res = 0; + if (Native.getNumeralInt(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not an int"); + return res; + } + + /** + * Retrieve the 64-bit int value. + **/ + public Int64 Int64() + { + Int64 res = 0; + if (Native.getNumeralInt64(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not an int64"); + return res; + } + + /** + * Retrieve the int value. + **/ + public Integer UInt() + { + Integer res = 0; + if (Native.getNumeralInteger(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not a Integer"); + return res; + } + + /** + * Retrieve the BigInteger value. + **/ + public BigInteger BigInteger() + { + return BigInteger.Parse(this.toString()); + } + + /** + * Returns a string representation of the numeral. + **/ + public String toString() + { + return Native.getNumeralString(Context.nCtx, NativeObject); + } + } + + /** + * Rational Numerals + **/ + public class RatNum extends RealExpr + { + /** + * The numerator of a rational numeral. + **/ + public IntNum Numerator() { + + + return new IntNum(Context, Native.getNumerator(Context.nCtx, NativeObject)); } + + /** + * The denominator of a rational numeral. + **/ + public IntNum Denominator() { + + + return new IntNum(Context, Native.getDenominator(Context.nCtx, NativeObject)); } + + /** + * Converts the numerator of the rational to a BigInteger + **/ + public BigInteger BigIntNumerator() + { + IntNum n = Numerator; + return BigInteger.Parse(n.toString()); + } + + /** + * Converts the denominator of the rational to a BigInteger + **/ + public BigInteger BigIntDenominator() + { + IntNum n = Denominator; + return BigInteger.Parse(n.toString()); + } + + /** + * Returns a string representation in decimal notation. + * The result has at most decimal places. + **/ + public String ToDecimalString(Integer precision) + { + return Native.getNumeralDecimalString(Context.nCtx, NativeObject, precision); + } + + /** + * Returns a string representation of the numeral. + **/ + public String toString() + { + return Native.getNumeralString(Context.nCtx, NativeObject); + } + + RatNum(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } + + + /** + * Bit-vector numerals + **/ + public class BitVecNum extends BitVecExpr + { + /** + * Retrieve the 64-bit unsigned integer value. + **/ + public UInt64 UInt64() + { + UInt64 res = 0; + if (Native.getNumeralInteger64(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not a 64 bit unsigned"); + return res; + } + + /** + * Retrieve the int value. + **/ + public int Int() + { + int res = 0; + if (Native.getNumeralInt(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not an int"); + return res; + } + + /** + * Retrieve the 64-bit int value. + **/ + public Int64 Int64() + { + Int64 res = 0; + if (Native.getNumeralInt64(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not an int64"); + return res; + } + + /** + * Retrieve the int value. + **/ + public Integer UInt() + { + Integer res = 0; + if (Native.getNumeralInteger(Context.nCtx, NativeObject, res) == 0) + throw new Z3Exception("Numeral is not a Integer"); + return res; + } + + /** + * Retrieve the BigInteger value. + **/ + public BigInteger BigInteger() + { + return BigInteger.Parse(this.toString()); + } + + /** + * Returns a string representation of the numeral. + **/ + public String toString() + { + return Native.getNumeralString(Context.nCtx, NativeObject); + } + + BitVecNum(Context ctx, IntPtr obj) { super(ctx, obj); } + } + + /** + * Algebraic numbers + **/ + public class AlgebraicNum extends ArithExpr + { + /** + * Return a upper bound for a given real algebraic number. + * The interval isolating the number is smaller than 1/10^. + * + * the precision of the result + * @return A numeral Expr of sort Real + **/ + public RatNum ToUpper(Integer precision) + { + + + return new RatNum(Context, Native.getAlgebraicNumberUpper(Context.nCtx, NativeObject, precision)); + } + + /** + * Return a lower bound for the given real algebraic number. + * The interval isolating the number is smaller than 1/10^. + * + * + * @return A numeral Expr of sort Real + **/ + public RatNum ToLower(Integer precision) + { + + + return new RatNum(Context, Native.getAlgebraicNumberLower(Context.nCtx, NativeObject, precision)); + } + + /** + * Returns a string representation in decimal notation. + * The result has at most decimal places. + **/ + public String ToDecimal(Integer precision) + { + + + return Native.getNumeralDecimalString(Context.nCtx, NativeObject, precision); + } + + AlgebraicNum(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } diff --git a/src/api/java/com/Microsoft/Z3/ParamDescrs.java b/src/api/java/com/Microsoft/Z3/ParamDescrs.java new file mode 100644 index 000000000..c4e9d4be4 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/ParamDescrs.java @@ -0,0 +1,87 @@ +/** + * This file was automatically generated from ParamDescrs.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * A ParamDescrs describes a set of parameters. + **/ + public class ParamDescrs extends Z3Object + { + /** + * validate a set of parameters. + **/ + public void Validate(Params p) + { + + Native.paramsValidate(Context.nCtx, p.NativeObject, NativeObject); + } + + /** + * Retrieve kind of parameter. + **/ + public Z3ParamKind GetKind(Symbol name) + { + + return (Z3ParamKind)Native.paramDescrsGetKind(Context.nCtx, NativeObject, name.NativeObject); + } + + /** + * Retrieve all names of parameters. + **/ + public Symbol[] Names() + { + Integer sz = Native.paramDescrsSize(Context.nCtx, NativeObject); + Symbol[] names = new Symbol[sz]; + for (Integer i = 0; i < sz; ++i) { + names[i] = Symbol.Create(Context, Native.paramDescrsGetName(Context.nCtx, NativeObject, i)); + return names; + } + } + + /** + * The size of the ParamDescrs. + **/ + public Integer Size() { return Native.paramDescrsSize(Context.nCtx, NativeObject); } + + /** + * Retrieves a string representation of the ParamDescrs. + **/ + public String toString() + { + return Native.paramDescrstoString(Context.nCtx, NativeObject); + } + + ParamDescrs(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.paramDescrsIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.paramDescrsDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ParamDescrsDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ParamDescrsDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Params.java b/src/api/java/com/Microsoft/Z3/Params.java new file mode 100644 index 000000000..0dd320778 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Params.java @@ -0,0 +1,126 @@ +/** + * This file was automatically generated from Params.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * A ParameterSet represents a configuration in the form of Symbol/value pairs. + **/ + public class Params extends Z3Object + { + /** + * Adds a parameter setting. + **/ + public void Add(Symbol name, boolean value) + { + + + Native.paramsSetBoolean(Context.nCtx, NativeObject, name.NativeObject, (value) ? 1 : 0); + } + + /** + * Adds a parameter setting. + **/ + public void Add(Symbol name, Integer value) + { + + + Native.paramsSetInteger(Context.nCtx, NativeObject, name.NativeObject, value); + } + + /** + * Adds a parameter setting. + **/ + public void Add(Symbol name, double value) + { + + + Native.paramsSetDouble(Context.nCtx, NativeObject, name.NativeObject, value); + } + + /** + * Adds a parameter setting. + **/ + public void Add(Symbol name, Symbol value) + { + + + + Native.paramsSetSymbol(Context.nCtx, NativeObject, name.NativeObject, value.NativeObject); + } + + /** + * Adds a parameter setting. + **/ + public void Add(String name, boolean value) + { + Native.paramsSetBoolean(Context.nCtx, NativeObject, Context.MkSymbol(name).NativeObject, (value) ? 1 : 0); + } + + /** + * Adds a parameter setting. + **/ + public void Add(String name, Integer value) + { + Native.paramsSetInteger(Context.nCtx, NativeObject, Context.MkSymbol(name).NativeObject, value); + } + + /** + * Adds a parameter setting. + **/ + public void Add(String name, double value) + { + Native.paramsSetDouble(Context.nCtx, NativeObject, Context.MkSymbol(name).NativeObject, value); + } + + /** + * Adds a parameter setting. + **/ + public void Add(String name, Symbol value) + { + + + Native.paramsSetSymbol(Context.nCtx, NativeObject, Context.MkSymbol(name).NativeObject, value.NativeObject); + } + + /** + * A string representation of the parameter set. + **/ + public String toString() + { + return Native.paramstoString(Context.nCtx, NativeObject); + } + + Params(Context ctx) + { super(ctx, Native.mkParams(ctx.nCtx)); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.paramsIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.paramsDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ParamsDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ParamsDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Pattern.java b/src/api/java/com/Microsoft/Z3/Pattern.java new file mode 100644 index 000000000..6bd1ef811 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Pattern.java @@ -0,0 +1,48 @@ +/** + * This file was automatically generated from Pattern.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ +/* using System.Runtime.InteropServices; */ + + /** + * Patterns comprise a list of terms. The list should be + * non-empty. If the list comprises of more than one term, it is + * also called a multi-pattern. + **/ + public class Pattern extends AST + { + /** + * The number of terms in the pattern. + **/ + public Integer NumTerms() { return Native.getPatternNumTerms(Context.nCtx, NativeObject); } + + /** + * The terms in the pattern. + **/ + public Expr[] Terms() + { + + + Integer n = NumTerms; + Expr[] res = new Expr[n]; + for (Integer i = 0; i < n; i++) + res[i] = Expr.Create(Context, Native.getPattern(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * A string representation of the pattern. + **/ + public String toString() + { + return Native.patterntoString(Context.nCtx, NativeObject); + } + + Pattern(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } diff --git a/src/api/java/com/Microsoft/Z3/Probe.java b/src/api/java/com/Microsoft/Z3/Probe.java new file mode 100644 index 000000000..c651edb86 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Probe.java @@ -0,0 +1,72 @@ +/** + * This file was automatically generated from Probe.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ +/* using System.Runtime.InteropServices; */ + + /** + * Probes are used to inspect a goal (aka problem) and collect information that may be used to decide + * which solver and/or preprocessing step will be used. + * The complete list of probes may be obtained using the procedures Context.NumProbes + * and Context.ProbeNames. + * It may also be obtained using the command (help-tactics) in the SMT 2.0 front-end. + **/ + public class Probe extends Z3Object + { + /** + * Execute the probe over the goal. + * @return A probe always produce a double value. + * "Boolean" probes return 0.0 for false, and a value different from 0.0 for true. + **/ + public double Apply(Goal g) + { + + + Context.CheckContextMatch(g); + return Native.probeApply(Context.nCtx, NativeObject, g.NativeObject); + } + + /** + * Apply the probe to a goal. + **/ + public double this[Goal() + + + return Apply(g); } } + + Probe(Context ctx, IntPtr obj) + { super(ctx, obj); + + Probe(Context ctx, String name) + { super(ctx, Native.mkProbe(ctx.nCtx, name)); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.probeIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.probeDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.ProbeDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.ProbeDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Quantifier.java b/src/api/java/com/Microsoft/Z3/Quantifier.java new file mode 100644 index 000000000..1a279aff0 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Quantifier.java @@ -0,0 +1,198 @@ +/** + * This file was automatically generated from Quantifier.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Quantifier expressions. + **/ + public class Quantifier extends BoolExpr + { + /** + * Indicates whether the quantifier is universal. + **/ + public boolean IsUniversal() { return Native.isQuantifierForall(Context.nCtx, NativeObject) != 0; } + + /** + * Indicates whether the quantifier is existential. + **/ + public boolean IsExistential() { return !IsUniversal; } + + /** + * The weight of the quantifier. + **/ + public Integer Weight() { return Native.getQuantifierWeight(Context.nCtx, NativeObject); } + + /** + * The number of patterns. + **/ + public Integer NumPatterns() { return Native.getQuantifierNumPatterns(Context.nCtx, NativeObject); } + + /** + * The patterns. + **/ + public Pattern[] Patterns() + { + + + Integer n = NumPatterns; + Pattern[] res = new Pattern[n]; + for (Integer i = 0; i < n; i++) + res[i] = new Pattern(Context, Native.getQuantifierPatternAst(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The number of no-patterns. + **/ + public Integer NumNoPatterns() { return Native.getQuantifierNumNoPatterns(Context.nCtx, NativeObject); } + + /** + * The no-patterns. + **/ + public Pattern[] NoPatterns() + { + + + Integer n = NumNoPatterns; + Pattern[] res = new Pattern[n]; + for (Integer i = 0; i < n; i++) + res[i] = new Pattern(Context, Native.getQuantifierNoPatternAst(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The number of bound variables. + **/ + public Integer NumBound() { return Native.getQuantifierNumBound(Context.nCtx, NativeObject); } + + /** + * The symbols for the bound variables. + **/ + public Symbol[] BoundVariableNames() + { + + + Integer n = NumBound; + Symbol[] res = new Symbol[n]; + for (Integer i = 0; i < n; i++) + res[i] = Symbol.Create(Context, Native.getQuantifierBoundName(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The sorts of the bound variables. + **/ + public Sort[] BoundVariableSorts() + { + + + Integer n = NumBound; + Sort[] res = new Sort[n]; + for (Integer i = 0; i < n; i++) + res[i] = Sort.Create(Context, Native.getQuantifierBoundSort(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The body of the quantifier. + **/ + public BoolExpr Body() { + + + return new BoolExpr(Context, Native.getQuantifierBody(Context.nCtx, NativeObject)); } + + Quantifier(Context ctx, boolean isForall, Sort[] sorts, Symbol[] names, Expr body, + Integer weight = 1, Pattern[] patterns = null, Expr[] noPatterns = null, + Symbol quantifierID = null, Symbol skolemID = null + ) + { super(ctx); + + + + + + + + + + + Context.CheckContextMatch(patterns); + Context.CheckContextMatch(noPatterns); + Context.CheckContextMatch(sorts); + Context.CheckContextMatch(names); + Context.CheckContextMatch(body); + + if (sorts.Length != names.Length) + throw new Z3Exception("Number of sorts does not match number of names"); + + IntPtr[] Patterns = AST.ArrayToNative(patterns); + + if (noPatterns == null && quantifierID == null && skolemID == null) + { + NativeObject = Native.mkQuantifier(ctx.nCtx, (isForall) ? 1 : 0, weight, + AST.ArrayLength(patterns), AST.ArrayToNative(patterns), + AST.ArrayLength(sorts), AST.ArrayToNative(sorts), + Symbol.ArrayToNative(names), + body.NativeObject); + } + else + { + NativeObject = Native.mkQuantifierEx(ctx.nCtx, (isForall) ? 1 : 0, weight, + AST.GetNativeObject(quantifierID), AST.GetNativeObject(skolemID), + AST.ArrayLength(patterns), AST.ArrayToNative(patterns), + AST.ArrayLength(noPatterns), AST.ArrayToNative(noPatterns), + AST.ArrayLength(sorts), AST.ArrayToNative(sorts), + Symbol.ArrayToNative(names), + body.NativeObject); + } + } + + Quantifier(Context ctx, boolean isForall, Expr[] bound, Expr body, + Integer weight = 1, Pattern[] patterns = null, Expr[] noPatterns = null, + Symbol quantifierID = null, Symbol skolemID = null + ) + { super(ctx); + + + + + + + + Context.CheckContextMatch(noPatterns); + Context.CheckContextMatch(patterns); + //Context.CheckContextMatch(bound); + Context.CheckContextMatch(body); + + if (noPatterns == null && quantifierID == null && skolemID == null) + { + NativeObject = Native.mkQuantifierConst(ctx.nCtx, (isForall) ? 1 : 0, weight, + AST.ArrayLength(bound), AST.ArrayToNative(bound), + AST.ArrayLength(patterns), AST.ArrayToNative(patterns), + body.NativeObject); + } + else + { + NativeObject = Native.mkQuantifierConstEx(ctx.nCtx, (isForall) ? 1 : 0, weight, + AST.GetNativeObject(quantifierID), AST.GetNativeObject(skolemID), + AST.ArrayLength(bound), AST.ArrayToNative(bound), + AST.ArrayLength(patterns), AST.ArrayToNative(patterns), + AST.ArrayLength(noPatterns), AST.ArrayToNative(noPatterns), + body.NativeObject); + } + } + + + Quantifier(Context ctx, IntPtr obj) { super(ctx, obj); } + + void CheckNativeObject(IntPtr obj) + { + if ((Z3AstKind)Native.getAstKind(Context.nCtx, obj) != Z3AstKind.Z3QUANTIFIERAST) + throw new Z3Exception("Underlying object is not a quantifier"); + super.CheckNativeObject(obj); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Solver.java b/src/api/java/com/Microsoft/Z3/Solver.java new file mode 100644 index 000000000..a28687722 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Solver.java @@ -0,0 +1,247 @@ +/** + * This file was automatically generated from Solver.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Solvers. + **/ + public class Solver extends Z3Object + { + /** + * A string that describes all available solver parameters. + **/ + public String Help() + { + + + return Native.solverGetHelp(Context.nCtx, NativeObject); + } + + /** + * Sets the solver parameters. + **/ + public void setParameters(Params value) + { + + + Context.CheckContextMatch(value); + Native.solverSetParams(Context.nCtx, NativeObject, value.NativeObject); + } + + /** + * Retrieves parameter descriptions for solver. + **/ + public ParamDescrs ParameterDescriptions() { return new ParamDescrs(Context, Native.solverGetParamDescrs(Context.nCtx, NativeObject)); } + + + /** + * The current number of backtracking points (scopes). + * + * + **/ + public Integer NumScopes() { return Native.solverGetNumScopes(Context.nCtx, NativeObject); } + + /** + * Creates a backtracking point. + * + **/ + public void Push() + { + Native.solverPush(Context.nCtx, NativeObject); + } + + /** + * Backtracks backtracking points. + * Note that an exception is thrown if is not smaller than NumScopes + * + **/ + public void Pop(Integer n) + { + Native.solverPop(Context.nCtx, NativeObject, n); + } + + /** + * Resets the Solver. + * This removes all assertions from the solver. + **/ + public void Reset() + { + Native.solverReset(Context.nCtx, NativeObject); + } + + /** + * Assert a constraint (or multiple) into the solver. + **/ + public void Assert(BoolExpr[] constraints) + { + + + + Context.CheckContextMatch(constraints); + for (BoolExpr.Iterator a = constraints.iterator(); a.hasNext(); ) + { + Native.solverAssert(Context.nCtx, NativeObject, a.NativeObject); + } + } + + /** + * The number of assertions in the solver. + **/ + public Integer NumAssertions() + { + ASTVector ass = new ASTVector(Context, Native.solverGetAssertions(Context.nCtx, NativeObject)); + return ass.Size; + } + + /** + * The set of asserted formulas. + **/ + public BoolExpr[] Assertions() + { + + + ASTVector ass = new ASTVector(Context, Native.solverGetAssertions(Context.nCtx, NativeObject)); + Integer n = ass.Size; + BoolExpr[] res = new BoolExpr[n]; + for (Integer i = 0; i < n; i++) + res[i] = new BoolExpr(Context, ass[i].NativeObject); + return res; + } + + /** + * Checks whether the assertions in the solver are consistent or not. + * + * + * + * + * + **/ + public Status Check(Expr[] assumptions) + { + Z3Lboolean r; + if (assumptions == null) + r = (Z3Lboolean)Native.solverCheck(Context.nCtx, NativeObject); + else + r = (Z3Lboolean)Native.solverCheckAssumptions(Context.nCtx, NativeObject, (Integer)assumptions.Length, AST.ArrayToNative(assumptions)); + switch (r) + { + case Z3Lboolean.Z3LTRUE: return Status.SATISFIABLE; + case Z3Lboolean.Z3LFALSE: return Status.UNSATISFIABLE; + default: return Status.UNKNOWN; + } + } + + /** + * The model of the last Check. + * + * The result is null if Check was not invoked before, + * if its results was not SATISFIABLE, or if model production is not enabled. + * + **/ + public Model Model() + { + IntPtr x = Native.solverGetModel(Context.nCtx, NativeObject); + if (x == IntPtr.Zero) + return null; + else + return new Model(Context, x); + } + + /** + * The proof of the last Check. + * + * The result is null if Check was not invoked before, + * if its results was not UNSATISFIABLE, or if proof production is disabled. + * + **/ + public Expr Proof() + { + IntPtr x = Native.solverGetProof(Context.nCtx, NativeObject); + if (x == IntPtr.Zero) + return null; + else + return Expr.Create(Context, x); + } + + /** + * The unsat core of the last Check. + * + * The unsat core is a subset of Assertions + * The result is empty if Check was not invoked before, + * if its results was not UNSATISFIABLE, or if core production is disabled. + * + **/ + public Expr[] UnsatCore() + { + + + ASTVector core = new ASTVector(Context, Native.solverGetUnsatCore(Context.nCtx, NativeObject)); + Integer n = core.Size; + Expr[] res = new Expr[n]; + for (Integer i = 0; i < n; i++) + res[i] = Expr.Create(Context, core[i].NativeObject); + return res; + } + + /** + * A brief justification of why the last call to Check returned UNKNOWN. + **/ + public String ReasonUnknown() + { + + + return Native.solverGetReasonUnknown(Context.nCtx, NativeObject); + } + + /** + * Solver statistics. + **/ + public Statistics Statistics() + { + + + return new Statistics(Context, Native.solverGetStatistics(Context.nCtx, NativeObject)); + } + + /** + * A string representation of the solver. + **/ + public String toString() + { + return Native.solvertoString(Context.nCtx, NativeObject); + } + + Solver(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.solverIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.solverDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.SolverDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.SolverDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Sort.java b/src/api/java/com/Microsoft/Z3/Sort.java new file mode 100644 index 000000000..f75624f1a --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Sort.java @@ -0,0 +1,579 @@ +/** + * This file was automatically generated from Sort.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * The Sort class implements type information for ASTs. + **/ + public class Sort extends AST + { + /** + * Comparison operator. + * A Sort + * A Sort + * @return True if and are from the same context + * and represent the same sort; false otherwise. + **/ + /* Overloaded operators are not translated. */ + + /** + * Comparison operator. + * A Sort + * A Sort + * @return True if and are not from the same context + * or represent different sorts; false otherwise. + **/ + /* Overloaded operators are not translated. */ + + /** + * Equality operator for objects of type Sort. + * + * @return + **/ + public boolean Equals(object o) + { + Sort casted = o as Sort; + if (casted == null) return false; + return this == casted; + } + + /** + * Hash code generation for Sorts + * @return A hash code + **/ + public int GetHashCode() + { + return super.GetHashCode(); + } + + /** + * Returns a unique identifier for the sort. + **/ + new public Integer Id() { return Native.getSortId(Context.nCtx, NativeObject); } + + /** + * The kind of the sort. + **/ + public Z3_sort_kind SortKind() { return (Z3SortKind)Native.getSortKind(Context.nCtx, NativeObject); } + + /** + * The name of the sort + **/ + public Symbol Name() { + + return Symbol.Create(Context, Native.getSortName(Context.nCtx, NativeObject)); } + + /** + * A string representation of the sort. + **/ + public String toString() + { + return Native.sorttoString(Context.nCtx, NativeObject); + } + + /** + * Sort constructor + **/ + protected Sort(Context ctx) { super(ctx); } + Sort(Context ctx, IntPtr obj) { super(ctx, obj); } + + void CheckNativeObject(IntPtr obj) + { + if (Native.getAstKind(Context.nCtx, obj) != (Integer)Z3AstKind.Z3SORTAST) + throw new Z3Exception("Underlying object is not a sort"); + super.CheckNativeObject(obj); + } + + new static Sort Create(Context ctx, IntPtr obj) + { + + + + switch ((Z3SortKind)Native.getSortKind(ctx.nCtx, obj)) + { + case Z3SortKind.Z3ARRAYSORT: return new ArraySort(ctx, obj); + case Z3SortKind.Z3BOOLSORT: return new BoolSort(ctx, obj); + case Z3SortKind.Z3BVSORT: return new BitVecSort(ctx, obj); + case Z3SortKind.Z3DATATYPESORT: return new DatatypeSort(ctx, obj); + case Z3SortKind.Z3INTSORT: return new IntSort(ctx, obj); + case Z3SortKind.Z3REALSORT: return new RealSort(ctx, obj); + case Z3SortKind.Z3UNINTERPRETEDSORT: return new UninterpretedSort(ctx, obj); + case Z3SortKind.Z3FINITEDOMAINSORT: return new FiniteDomainSort(ctx, obj); + case Z3SortKind.Z3RELATIONSORT: return new RelationSort(ctx, obj); + default: + throw new Z3Exception("Unknown sort kind"); + } + } + } + + /** + * A Boolean sort. + **/ + public class BoolSort extends Sort + { + BoolSort(Context ctx, IntPtr obj) { super(ctx, obj); } + BoolSort(Context ctx) { super(ctx, Native.mkBooleanSort(ctx.nCtx)); } + }; + + /** + * An arithmetic sort, i.e., Int or Real. + **/ + public class ArithSort extends Sort + { + ArithSort(Context ctx, IntPtr obj) { super(ctx, obj); } + }; + + /** + * An Integer sort + **/ + public class IntSort extends ArithSort + { + IntSort(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + IntSort(Context ctx) + { super(ctx, Native.mkIntSort(ctx.nCtx)); + + } + } + + /** + * A real sort + **/ + public class RealSort extends ArithSort + { + RealSort(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + RealSort(Context ctx) + { super(ctx, Native.mkRealSort(ctx.nCtx)); + + } + } + + /** + * Bit-vector sorts. + **/ + public class BitVecSort extends Sort + { + /** + * The size of the bit-vector sort. + **/ + public Integer Size() { return Native.getBvSortSize(Context.nCtx, NativeObject); } + + BitVecSort(Context ctx, IntPtr obj) { super(ctx, obj); } + BitVecSort(Context ctx, Integer size) { super(ctx, Native.mkBvSort(ctx.nCtx, size)); } + }; + + /** + * Array sorts. + **/ + public class ArraySort extends Sort + { + /** + * The domain of the array sort. + **/ + public Sort Domain() { + + + return Sort.Create(Context, Native.getArraySortDomain(Context.nCtx, NativeObject)); } + + /** + * The range of the array sort. + **/ + public Sort Range() { + + + return Sort.Create(Context, Native.getArraySortRange(Context.nCtx, NativeObject)); } + + ArraySort(Context ctx, IntPtr obj) { super(ctx, obj); } + ArraySort(Context ctx, Sort domain, Sort range) + { super(ctx, Native.mkArraySort(ctx.nCtx, domain.NativeObject, range.NativeObject)); + + + + } + }; + + /** + * Datatype sorts. + **/ + public class DatatypeSort extends Sort + { + /** + * The number of constructors of the datatype sort. + **/ + public Integer NumConstructors() { return Native.getDatatypeSortNumConstructors(Context.nCtx, NativeObject); } + + /** + * The constructors. + **/ + public FuncDecl[] Constructors() + { + + + Integer n = NumConstructors; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + res[i] = new FuncDecl(Context, Native.getDatatypeSortConstructor(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The recognizers. + **/ + public FuncDecl[] Recognizers() + { + + + Integer n = NumConstructors; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + res[i] = new FuncDecl(Context, Native.getDatatypeSortRecognizer(Context.nCtx, NativeObject, i)); + return res; + } + + /** + * The constructor accessors. + **/ + public FuncDecl[][] Accessors() + { + + + Integer n = NumConstructors; + FuncDecl[][] res = new FuncDecl[n][]; + for (Integer i = 0; i < n; i++) + { + FuncDecl fd = new FuncDecl(Context, Native.getDatatypeSortConstructor(Context.nCtx, NativeObject, i)); + Integer ds = fd.DomainSize; + FuncDecl[] tmp = new FuncDecl[ds]; + for (Integer j = 0; j < ds; j++) + tmp[j] = new FuncDecl(Context, Native.getDatatypeSortConstructorAccessor(Context.nCtx, NativeObject, i, j)); + res[i] = tmp; + return res; + } + } + + DatatypeSort(Context ctx, IntPtr obj) { super(ctx, obj); } + + DatatypeSort(Context ctx, Symbol name, Constructor[] constructors) + { super(ctx, Native.mkDatatype(ctx.nCtx, name.NativeObject, (Integer)constructors.Length, ArrayToNative(constructors))); + + + + } + }; + + /** + * Uninterpreted Sorts + **/ + public class UninterpretedSort extends Sort + { + UninterpretedSort(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + UninterpretedSort(Context ctx, Symbol s) + { super(ctx, Native.mkUninterpretedSort(ctx.nCtx, s.NativeObject)); + + + } + } + + /** + * Tuple sorts. + **/ + public class TupleSort extends Sort + { + /** + * The constructor function of the tuple. + **/ + public FuncDecl MkDecl() { + + + return new FuncDecl(Context, Native.getTupleSortMkDecl(Context.nCtx, NativeObject)); } + + /** + * The number of fields in the tuple. + **/ + public Integer NumFields() { return Native.getTupleSortNumFields(Context.nCtx, NativeObject); } + + /** + * The field declarations. + **/ + public FuncDecl[] FieldDecls() + { + + + Integer n = NumFields; + FuncDecl[] res = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + res[i] = new FuncDecl(Context, Native.getTupleSortFieldDecl(Context.nCtx, NativeObject, i)); + return res; + } + + TupleSort(Context ctx, Symbol name, Integer numFields, Symbol[] fieldNames, Sort[] fieldSorts) + { super(ctx); + + + + IntPtr t = IntPtr.Zero; + NativeObject = Native.mkTupleSort(ctx.nCtx, name.NativeObject, numFields, + Symbol.ArrayToNative(fieldNames), AST.ArrayToNative(fieldSorts), + t, new IntPtr[numFields]); + } + }; + + /** + * Enumeration sorts. + **/ + public class EnumSort extends Sort + { + /** + * The function declarations of the constants in the enumeration. + **/ + public FuncDecl[] ConstDecls() { + + + return Constdecls; } + + /** + * The constants in the enumeration. + **/ + public Expr[] Consts() { + + + return Consts; } + + /** + * The test predicates for the constants in the enumeration. + **/ + public FuncDecl[] TesterDecls() { + + + return Testerdecls; + } + + + private void ObjectInvariant() + { + + + + } + + + + private FuncDecl[] Constdecls = null, Testerdecls = null; + private Expr[] Consts = null; + + EnumSort(Context ctx, Symbol name, Symbol[] enumNames) + { super(ctx); + + + + + int n = enumNames.Length; + IntPtr[] nConstdecls = new IntPtr[n]; + IntPtr[] nTesters = new IntPtr[n]; + NativeObject = Native.mkEnumerationSort(ctx.nCtx, name.NativeObject, (Integer)n, + Symbol.ArrayToNative(enumNames), nConstdecls, nTesters); + Constdecls = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + Constdecls[i] = new FuncDecl(ctx, nConstdecls[i]); + Testerdecls = new FuncDecl[n]; + for (Integer i = 0; i < n; i++) + Testerdecls[i] = new FuncDecl(ctx, nTesters[i]); + Consts = new Expr[n]; + for (Integer i = 0; i < n; i++) + Consts[i] = ctx.MkApp(Constdecls[i]); + } + }; + + /** + * List sorts. + **/ + public class ListSort extends Sort + { + /** + * The declaration of the nil function of this list sort. + **/ + public FuncDecl NilDecl() + + return nilDecl; } } + + /** + * The empty list. + **/ + public Expr Nil() + { + + return nilConst; + } + + /** + * The declaration of the isNil function of this list sort. + **/ + public FuncDecl IsNilDecl() + { + + return isNilDecl; + } + + /** + * The declaration of the cons function of this list sort. + **/ + public FuncDecl ConsDecl() + { + + return consDecl; + } + + /** + * The declaration of the isCons function of this list sort. + * + **/ + public FuncDecl IsConsDecl() + { + + return isConsDecl; + } + + /** + * The declaration of the head function of this list sort. + **/ + public FuncDecl HeadDecl() + { + + return headDecl; + } + + /** + * The declaration of the tail function of this list sort. + **/ + public FuncDecl TailDecl() + { + + return tailDecl; + } + + + private void ObjectInvariant() + { + + + + + + + + } + + + + private FuncDecl nilDecl, isNilDecl, consDecl, isConsDecl, headDecl, tailDecl; + private Expr nilConst; + + ListSort(Context ctx, Symbol name, Sort elemSort) + { super(ctx); + + + + + IntPtr inil = IntPtr.Zero, + iisnil = IntPtr.Zero, + icons = IntPtr.Zero, + iiscons = IntPtr.Zero, + ihead = IntPtr.Zero, + itail = IntPtr.Zero; + + NativeObject = Native.mkListSort(ctx.nCtx, name.NativeObject, elemSort.NativeObject, + inil, iisnil, icons, iiscons, ihead, itail); + nilDecl = new FuncDecl(ctx, inil); + isNilDecl = new FuncDecl(ctx, iisnil); + consDecl = new FuncDecl(ctx, icons); + isConsDecl = new FuncDecl(ctx, iiscons); + headDecl = new FuncDecl(ctx, ihead); + tailDecl = new FuncDecl(ctx, itail); + nilConst = ctx.MkConst(nilDecl); + } + }; + + /** + * Relation sorts. + **/ + public class RelationSort extends Sort + { + /** + * The arity of the relation sort. + **/ + public Integer Arity() { return Native.getRelationArity(Context.nCtx, NativeObject); } + + /** + * The sorts of the columns of the relation sort. + **/ + public Sort[] ColumnSorts() + { + + + if (mColumnSorts != null) + return mColumnSorts; + + Integer n = Arity; + Sort[] res = new Sort[n]; + for (Integer i = 0; i < n; i++) + res[i] = Sort.Create(Context, Native.getRelationColumn(Context.nCtx, NativeObject, i)); + return res; + } + + private Sort[] mColumnSorts = null; + + RelationSort(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + } + + /** + * Finite domain sorts. + **/ + public class FiniteDomainSort extends Sort + { + /** + * The size of the finite domain sort. + **/ + public ulong Size() { ulong res = 0; Native.getFiniteDomainSortSize(Context.nCtx, NativeObject, ref res); return res; } + + FiniteDomainSort(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + FiniteDomainSort(Context ctx, Symbol name, ulong size) + { super(ctx, Native.mkFiniteDomainSort(ctx.nCtx, name.NativeObject, size)); + + + + } + } + + /** + * Set sorts. + **/ + public class SetSort extends Sort + { + SetSort(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + SetSort(Context ctx, Sort ty) + { super(ctx, Native.mkSetSort(ctx.nCtx, ty.NativeObject)); + + + } + } diff --git a/src/api/java/com/Microsoft/Z3/Statistics.java b/src/api/java/com/Microsoft/Z3/Statistics.java new file mode 100644 index 000000000..0e509a5d9 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Statistics.java @@ -0,0 +1,167 @@ +/** + * This file was automatically generated from Statistics.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Objects of this class track statistical information about solvers. + **/ + public class Statistics extends Z3Object + { + /** + * Statistical data is organized into pairs of [Key, Entry], where every + * Entry is either a DoubleEntry or a UIntEntry + **/ + public class Entry + { + /** + * The key of the entry. + **/ + /** + * The uint-value of the entry. + **/ + public Integer UIntValue() { return mInteger; } + /** + * The double-value of the entry. + **/ + public double DoubleValue() { return mDouble; } + /** + * True if the entry is uint-valued. + **/ + public boolean IsUInt() { return mIsInteger; } + /** + * True if the entry is double-valued. + **/ + public boolean IsDouble() { return mIsDouble; } + + /** + * The string representation of the the entry's value. + **/ + public String Value() + { + + + if (IsUInt) + return mInteger.toString(); + else if (IsDouble) + return mDouble.toString(); + else + throw new Z3Exception("Unknown statistical entry type"); + } + + /** + * The string representation of the Entry. + **/ + public String toString() + { + return Key + ": " + Value; + } + + private boolean mIsInteger = false; + private boolean mIsDouble = false; + private Integer mInteger = 0; + private double mDouble = 0.0; + Entry(String k, Integer v) { Key = k; mIsInteger = true; mInteger = v; } + Entry(String k, double v) { Key = k; mIsDouble = true; mDouble = v; } + } + + /** + * A string representation of the statistical data. + **/ + public String toString() + { + return Native.statstoString(Context.nCtx, NativeObject); + } + + /** + * The number of statistical data. + **/ + public Integer Size() { return Native.statsSize(Context.nCtx, NativeObject); } + + /** + * The data entries. + **/ + public Entry[] Entries() + { + + + + + Integer n = Size; + Entry[] res = new Entry[n]; + for (Integer i = 0; i < n; i++) + { + Entry e; + String k = Native.statsGetKey(Context.nCtx, NativeObject, i); + if (Native.statsIsInteger(Context.nCtx, NativeObject, i) != 0) + e = new Entry(k, Native.statsGetIntegerValue(Context.nCtx, NativeObject, i)); + else if (Native.statsIsDouble(Context.nCtx, NativeObject, i) != 0) + e = new Entry(k, Native.statsGetDoubleValue(Context.nCtx, NativeObject, i)); + else + throw new Z3Exception("Unknown data entry value"); + res[i] = e; + return res; + } + } + + /** + * The statistical counters. + **/ + public String[] Keys() + { + + + Integer n = Size; + String[] res = new String[n]; + for (Integer i = 0; i < n; i++) + res[i] = Native.statsGetKey(Context.nCtx, NativeObject, i); + return res; + } + + /** + * The value of a particular statistical counter. + * Returns null if the key is unknown. + **/ + public Entry this[String key]() + { + Integer n = Size; + Entry[] es = Entries; + for (Integer i = 0; i < n; i++) + if (es[i].Key == key) + return es[i]; + return null; + } + + Statistics(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.statsIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.statsDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.StatisticsDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.StatisticsDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Status.java b/src/api/java/com/Microsoft/Z3/Status.java new file mode 100644 index 000000000..86c902285 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Status.java @@ -0,0 +1,26 @@ +/** + * This file was automatically generated from Status.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Status values. + **/ + /** + * Used to signify an unsatisfiable status. + **/ + UNSATISFIABLE = -1, + + /** + * Used to signify an unknown status. + **/ + UNKNOWN = 0, + + /** + * Used to signify a satisfiable status. + **/ + SATISFIABLE = 1 + diff --git a/src/api/java/com/Microsoft/Z3/Symbol.java b/src/api/java/com/Microsoft/Z3/Symbol.java new file mode 100644 index 000000000..0023bc670 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Symbol.java @@ -0,0 +1,140 @@ +/** + * This file was automatically generated from Symbol.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ +/* using System.Runtime.InteropServices; */ + + /** + * Symbols are used to name several term and type constructors. + **/ + public class Symbol extends Z3Object + { + /** + * The kind of the symbol (int or string) + **/ + protected Z3SymbolKind Kind + { + get { return (Z3SymbolKind)Native.getSymbolKind(Context.nCtx, NativeObject); } + } + + /** + * Indicates whether the symbol is of Int kind + **/ + public boolean IsIntSymbol() + { + return Kind == Z3SymbolKind.Z3INTSYMBOL; + } + + /** + * Indicates whether the symbol is of string kind. + **/ + public boolean IsStringSymbol() + { + return Kind == Z3SymbolKind.Z3STRINGSYMBOL; + } + + /** + * A string representation of the symbol. + **/ + public String toString() + { + if (IsIntSymbol()) + return ((IntSymbol)this).Int.toString(); + else if (IsStringSymbol()) + return ((StringSymbol)this).String; + else + throw new Z3Exception("Unknown symbol kind encountered"); + } + + /** + * Symbol constructor + **/ + protected Symbol(Context ctx, IntPtr obj) { super(ctx, obj); + + } + + static Symbol Create(Context ctx, IntPtr obj) + { + + + + switch ((Z3SymbolKind)Native.getSymbolKind(ctx.nCtx, obj)) + { + case Z3SymbolKind.Z3INTSYMBOL: return new IntSymbol(ctx, obj); + case Z3SymbolKind.Z3STRINGSYMBOL: return new StringSymbol(ctx, obj); + default: + throw new Z3Exception("Unknown symbol kind encountered"); + } + } + } + + /** + * Numbered symbols + **/ + public class IntSymbol extends Symbol + { + /** + * The int value of the symbol. + * Throws an exception if the symbol is not of int kind. + **/ + public int Int() + { + if (!IsIntSymbol()) + throw new Z3Exception("Int requested from non-Int symbol"); + return Native.getSymbolInt(Context.nCtx, NativeObject); + } + + IntSymbol(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + IntSymbol(Context ctx, int i) + { super(ctx, Native.mkIntSymbol(ctx.nCtx, i)); + + } + + void CheckNativeObject(IntPtr obj) + { + if ((Z3SymbolKind)Native.getSymbolKind(Context.nCtx, obj) != Z3SymbolKind.Z3INTSYMBOL) + throw new Z3Exception("Symbol is not of integer kind"); + super.CheckNativeObject(obj); + } + } + + /** + * Named symbols + **/ + public class StringSymbol extends Symbol + { + /** + * The string value of the symbol. + * Throws an exception if the symbol is not of string kind. + **/ + public String String() + { + + + if (!IsStringSymbol()) + throw new Z3Exception("String requested from non-String symbol"); + return Native.getSymbolString(Context.nCtx, NativeObject); + } + + StringSymbol(Context ctx, IntPtr obj) { super(ctx, obj); + + } + + StringSymbol(Context ctx, String s) { super(ctx, Native.mkStringSymbol(ctx.nCtx, s)); + + } + + void CheckNativeObject(IntPtr obj) + { + if ((Z3SymbolKind)Native.getSymbolKind(Context.nCtx, obj) != Z3SymbolKind.Z3STRINGSYMBOL) + throw new Z3Exception("Symbol is not of String kind"); + + super.CheckNativeObject(obj); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Tactic.java b/src/api/java/com/Microsoft/Z3/Tactic.java new file mode 100644 index 000000000..a73d1faa7 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Tactic.java @@ -0,0 +1,107 @@ +/** + * This file was automatically generated from Tactic.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Tactics are the basic building block for creating custom solvers for specific problem domains. + * The complete list of tactics may be obtained using Context.NumTactics + * and Context.TacticNames. + * It may also be obtained using the command (help-tactics) in the SMT 2.0 front-end. + **/ + public class Tactic extends Z3Object + { + /** + * A string containing a description of parameters accepted by the tactic. + **/ + public String Help() + { + + + return Native.tacticGetHelp(Context.nCtx, NativeObject); + } + + + /** + * Retrieves parameter descriptions for Tactics. + **/ + public ParamDescrs ParameterDescriptions() { return new ParamDescrs(Context, Native.tacticGetParamDescrs(Context.nCtx, NativeObject)); } + + + /** + * Execute the tactic over the goal. + **/ + public ApplyResult Apply(Goal g, Params p) + { + + + + Context.CheckContextMatch(g); + if (p == null) + return new ApplyResult(Context, Native.tacticApply(Context.nCtx, NativeObject, g.NativeObject)); + else + { + Context.CheckContextMatch(p); + return new ApplyResult(Context, Native.tacticApplyEx(Context.nCtx, NativeObject, g.NativeObject, p.NativeObject)); + } + } + + /** + * Apply the tactic to a goal. + **/ + public ApplyResult this[Goal g]() + { + + + + return Apply(g); + } + + /** + * Creates a solver that is implemented using the given tactic. + * + **/ + public Solver Solver() + { + + + return Context.MkSolver(this); + } + + Tactic(Context ctx, IntPtr obj) + { super(ctx, obj); + + } + Tactic(Context ctx, String name) + { super(ctx, Native.mkTactic(ctx.nCtx, name)); + + } + + class DecRefQueue extends Z3.DecRefQueue + { + public void IncRef(Context ctx, IntPtr obj) + { + Native.tacticIncRef(ctx.nCtx, obj); + } + + public void DecRef(Context ctx, IntPtr obj) + { + Native.tacticDecRef(ctx.nCtx, obj); + } + }; + + void IncRef(IntPtr o) + { + Context.TacticDRQ.IncAndClear(Context, o); + super.IncRef(o); + } + + void DecRef(IntPtr o) + { + Context.TacticDRQ.Add(o); + super.DecRef(o); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Version.class b/src/api/java/com/Microsoft/Z3/Version.class new file mode 100644 index 000000000..472674ff6 Binary files /dev/null and b/src/api/java/com/Microsoft/Z3/Version.class differ diff --git a/src/api/java/com/Microsoft/Z3/Version.java b/src/api/java/com/Microsoft/Z3/Version.java new file mode 100644 index 000000000..c6384df02 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Version.java @@ -0,0 +1,68 @@ +/** + * This file was automatically generated from Version.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Version information. + * Note that this class is static. + **/ + public final class Version + { + Version() { } + + /** + * The major version + **/ + public Integer Major() + { + Integer major = 0, minor = 0, build = 0, revision = 0; + Native.getVersion(major, minor, build, revision); + return major; + } + + /** + * The minor version + **/ + public Integer Minor() + { + Integer major = 0, minor = 0, build = 0, revision = 0; + Native.getVersion(major, minor, build, revision); + return minor; + } + + /** + * The build version + **/ + public Integer Build() + { + Integer major = 0, minor = 0, build = 0, revision = 0; + Native.getVersion(major, minor, build, revision); + return build; + } + + /** + * The revision + **/ + public Integer Revision() + { + Integer major = 0, minor = 0, build = 0, revision = 0; + Native.getVersion(major, minor, build, revision); + return revision; + } + + /** + * A string representation of the version information. + **/ + public String toString() + { + + + Integer major = 0, minor = 0, build = 0, revision = 0; + Native.getVersion(major, minor, build, revision); + return major.toString() + "." + minor.toString() + "." + build.toString() + "." + revision.toString(); + } + } diff --git a/src/api/java/com/Microsoft/Z3/Z3Exception.java b/src/api/java/com/Microsoft/Z3/Z3Exception.java new file mode 100644 index 000000000..0e05add87 --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Z3Exception.java @@ -0,0 +1,28 @@ +/** + * This file was automatically generated from Z3Exception.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * The exception base class for error reporting from Z3 + **/ + public class Z3Exception extends Exception + { + /** + * Constructor. + **/ + public Z3Exception() { super(); } + + /** + * Constructor. + **/ + public Z3Exception(String message) { super(message); } + + /** + * Constructor. + **/ + public Z3Exception(String message, System.Exception inner) { super(message, inner); } + } diff --git a/src/api/java/com/Microsoft/Z3/Z3Object.java b/src/api/java/com/Microsoft/Z3/Z3Object.java new file mode 100644 index 000000000..980f200ef --- /dev/null +++ b/src/api/java/com/Microsoft/Z3/Z3Object.java @@ -0,0 +1,120 @@ +/** + * This file was automatically generated from Z3Object.cs + **/ + +package com.Microsoft.Z3; + +/* using System; */ + + /** + * Internal base class for interfacing with native Z3 objects. + * Should not be used externally. + **/ + public class Z3Object extends IDisposable + { + /** + * Finalizer. + **/ + protected void finalize() + { + Dispose(); + } + + /** + * Disposes of the underlying native Z3 object. + **/ + public void Dispose() + { + if (mNObj != IntPtr.Zero) + { + DecRef(mNObj); + mNObj = IntPtr.Zero; + } + + if (mCtx != null) + { + mCtx.refCount--; + if (mCtx.refCount == 0) + GC.ReRegisterForFinalize(mCtx); + mCtx = null; + } + + GC.SuppressFinalize(this); + } + + + private void ObjectInvariant() + { + + } + + + private Context mCtx = null; + private IntPtr mNObj = IntPtr.Zero; + + Z3Object(Context ctx) + { + + + ctx.refCount++; + mCtx = ctx; + } + + Z3Object(Context ctx, IntPtr obj) + { + + + ctx.refCount++; + mCtx = ctx; + IncRef(obj); + mNObj = obj; + } + + void IncRef(IntPtr o) { } + void DecRef(IntPtr o) { } + + void CheckNativeObject(IntPtr obj) { } + + IntPtr NativeObject + { + get { return mNObj; } + set + { + if (value != IntPtr.Zero) { CheckNativeObject(value); IncRef(value); } + if (mNObj != IntPtr.Zero) { DecRef(mNObj); } + mNObj = value; + } + } + + static IntPtr GetNativeObject(Z3Object s) + { + if (s == null) return new IntPtr(); + return s.NativeObject; + } + + Context Context + { + get + { + + return mCtx; + } + } + + static IntPtr[] ArrayToNative(Z3Object[] a) + { + + + + if (a == null) return null; + IntPtr[] an = new IntPtr[a.Length]; + for (Integer i = 0; i < a.Length; i++) + if (a[i] != null) an[i] = a[i].NativeObject; + return an; + } + + static Integer ArrayLength(Z3Object[] a) + { + return (a == null)?0:(Integer)a.Length; + } + } diff --git a/src/api/java/mk_java.py b/src/api/java/mk_java.py new file mode 100644 index 000000000..fc69fa9b5 --- /dev/null +++ b/src/api/java/mk_java.py @@ -0,0 +1,233 @@ +############################################ +# Copyright (c) 2012 Microsoft Corporation +# +# Auxiliary scripts for generating Java bindings +# from the managed API. +# +# Author: Christoph M. Wintersteiger (cwinter) +############################################ + +CS="../dotnet/" +EXT=".cs" +EXCLUDE=["Enumerations.cs", "Native.cs", "AssemblyInfo.cs"] +OUTDIR="com/Microsoft/Z3/" + +import os +import fileinput +import string +import re + +def mk_java_bindings(): + print "Generating Java bindings (from C# bindings in " + CS + ")." + for root, dirs, files in os.walk(CS): + for fn in files: + if not fn in EXCLUDE and fn.endswith(EXT): + translate(fn) + +def subst_getters(s, getters): + for g in getters: + s = s.replace(g, g + "()") + +def type_replace(s): + s = s.replace("bool", "boolean") + s = s.replace("uint", "Integer") + s = s.replace("string", "String") + return s + +def rename_native(s): + a = re.sub("Native.Z3_(?P\w+)", "Native.\g", s) + lc_callback = lambda pat: pat.group("id").upper() + return re.sub("_(?P\w)", lc_callback, a) + + +def translate(filename): + tgtfn = OUTDIR + filename.replace(EXT, ".java") + print "Translating " + filename + " to " + tgtfn + tgt = open(tgtfn, "w") + in_header = 0 + in_class = 0 + in_static_class = 0 + in_javadoc = 0 + lastindent = 0 + skip_brace = 0 + in_getter = "" + in_getter_type = "" + in_unsupported = 0 + getters = [] + for line in fileinput.input(os.path.join(CS, filename)): + s = string.rstrip(string.lstrip(line)) + if in_javadoc: + if s.startswith("///"): + lastindent = line.find(s); + if s.startswith("/// "): + pass + else: + a = line + a = a.replace("", "") + a = a.replace("", "") + a = a.replace("///"," *") + a = a.replace("","@return ") + a = a.replace("","") + tgt.write(a) + else: + t = "" + for i in range(0, lastindent): + t += " " + tgt.write(t + " **/\n") + in_javadoc = 0 + + if in_unsupported: + if s == "}": + in_unsupported = 0 + elif not in_javadoc: + if not in_header and s.find("/*++") != -1: + in_header = 1 + tgt.write("/**\n") + elif in_header and s.startswith("--*/"): + in_header = 0 + tgt.write(" * This file was automatically generated from " + filename + " \n") + tgt.write(" **/\n") + tgt.write("\npackage com.Microsoft.Z3;\n") + + elif in_header == 1: + # tgt.write(" * " + line.replace(filename, tgtfn)) + pass + elif s.startswith("using"): + if s.find("System.Diagnostics.Contracts") == -1: + tgt.write("/* " + s + " */\n") + elif s.startswith("namespace"): + pass + elif s.startswith("public") and s.find("operator") and (s.find("==") != -1 or s.find("!=") != -1): + t = "" + for i in range(0, line.find(s)+1): + t += " " + tgt.write(t + "/* Overloaded operators are not translated. */\n") + in_unsupported = 1; + elif s.startswith("public class") or s.startswith("internal class"): + a = line.replace(":", "extends").replace("internal ", "") + a = a.replace(", IComparable", "") + tgt.write(a) + in_class = 1 + in_static_class = 0 + elif s.startswith("public static class"): + tgt.write(line.replace(":", "extends").replace("static", "final")) + in_class = 1 + in_static_class = 1 + elif s.startswith("/// "): + tgt.write(line.replace("/// ", "/**")) + in_javadoc = 1 + elif skip_brace and s == "{": + skip_brace = 0 + elif s.find("public") != -1 and s.find("class") == -1 and s.find("event") == -1 and s.find("(") == -1: + tokens = s.split(" ") + print "# TOKENS: " + str(len(tokens)) + if len(tokens) == 3: + in_getter = tokens[2] + in_getter_type = type_replace((tokens[0] + " " + tokens[1])) + if in_static_class: + in_getter_type = in_getter_type.replace("static", "") + lastindent = line.find(s) + skip_brace = 1 + elif len(tokens) == 4: + in_getter = tokens[3] + in_getter_type = type_replace(tokens[0] + " " + tokens[1] + " " + tokens[2]) + if in_static_class: + in_getter_type = in_getter_type.replace("static", "") + lastindent = line.find(s) + skip_brace = 1 + else: + in_getter = tokens[2] + in_getter_type = type_replace(tokens[0] + " " + tokens[1]) + if in_static_class: + in_getter_type = in_getter_type.replace("static", "") + rest = s[s.find("get ") + 4:-1] + subst_getters(rest, getters) + rest = type_replace(rest) + rest = rename_native(rest) + t = "" + for i in range(0, lastindent): + t += " " + tgt.write(t + in_getter_type + " " + in_getter + "() " + rest + "\n") + getters.append(in_getter) + print "ACC: " + s + " --> " + in_getter + elif s.find("{ get {") != -1: + line = type_replace(line) + line = line.replace("internal ", "") + d = line[0:line.find("{ get")] + rest = line[line.find("{ get")+5:] + rest = rest.replace("} }", "}") + subst_getters(rest, getters) + rest = rename_native(rest) + tgt.write(d + "()" + rest) + print "ACC: " + s + " --> " + in_getter + elif in_getter != "" and s.startswith("get"): + t = "" + for i in range(0, lastindent): + t += " " + if len(s) > 3: rest = s[3:] + else: rest = "" + subst_getters(rest, getters) + rest = type_replace(rest) + rest = rename_native(rest) + tgt.write(t + in_getter_type + " " + in_getter + "() " + rest + "\n") + elif in_getter != "" and s.startswith("set"): + t = "" + for i in range(0, lastindent): + t += " " + if len(s) > 3: rest = type_replace(s[3:]) + else: rest = "" + subst_getters(rest, getters) + rest = rest.replace("(Integer)value", "Integer(value)") + rest = type_replace(rest) + rest = rename_native(rest) + ac_acc = in_getter_type[:in_getter_type.find(' ')] + ac_type = in_getter_type[in_getter_type.find(' ')+1:] + tgt.write(t + ac_acc + " void set" + in_getter + "(" + ac_type + " value) " + rest + "\n") + elif in_getter != "" and s == "}": + in_getter = "" + in_getter_type == "" + skip_brace = 0 + elif s.startswith("uint ") and s.find("=") == -1: + line = line.replace("uint", "Integer", line) + line = re.sub("(?P\w+)(?P[,;])", "\g\g", line) + tgt.write(line); + elif (not in_class and (s.startswith("{") or s.startswith("}"))) or s.startswith("[") or s.startswith("#"): + # print "Skipping: " + s; + pass + elif line == "}\n": + pass + else: + # indent = line.find(s) + if line.find(": base") != -1: + line = re.sub(": base\((?P

[\w,.\(\) ]*)\)", "{ super(\g

);", line) + if line.find("; {") != -1: + line = line.replace("; {", ";") + else: + skip_brace = 1 + if s.startswith("public"): + line = re.sub(" = [\w.]+(?P[,;\)])", "\g", line) + line = re.sub("(?P[\(, ])params ", "\g", line) + line = line.replace("base.", "super.") + a = type_replace(line) + a = re.sub("Contract.\w+\([\s\S]*\);", "", a) + a = rename_native(a) + a = re.sub("~\w+\(\)", "protected void finalize()", a) + a = re.sub("foreach\s*\((?P[\w <>,]+)\s+(?P\w+)\s+in\s+(?P\w+)\)", + "for (\g.Iterator \g = \g.iterator(); \g.hasNext(); )", a) + a = a.replace("readonly private", "private") + a = a.replace("new public", "public") + a = a.replace("ToString", "toString") + a = a.replace("internal ", "") + a = a.replace("override ", "") + a = a.replace("virtual ", "") + a = a.replace("o as AST", "(AST) o") + a = a.replace("other as AST", "(AST) other") + if in_static_class: + a = a.replace("static", "") + a = re.sub("ref (?P\w+)", "\g", a) + subst_getters(a, getters) + tgt.write(a) + + tgt.close() + +mk_java_bindings() diff --git a/src/ast/rewriter/bit_blaster/eager_bit_blaster.cpp b/src/ast/rewriter/bit_blaster/eager_bit_blaster.cpp deleted file mode 100644 index 2c7cab462..000000000 --- a/src/ast/rewriter/bit_blaster/eager_bit_blaster.cpp +++ /dev/null @@ -1,436 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - eager_bit_blaster.cpp - -Abstract: - - - -Author: - - Leonardo de Moura (leonardo) 2008-10-02. - -Revision History: - ---*/ - -#include"ast_ll_pp.h" -#include"eager_bit_blaster.h" - -eager_bit_blaster::basic_plugin::basic_plugin(ast_manager & m, eager_bit_blaster::bv_plugin & p, basic_simplifier_plugin & s): - simplifier_plugin(symbol("basic"), m), - m_main(p), - m_s(s) { -} - -eager_bit_blaster::basic_plugin::~basic_plugin() { -} - -bool eager_bit_blaster::basic_plugin::reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) { - if (f->get_decl_kind() == OP_ITE) { - SASSERT(num_args == 3); - return m_main.reduce_ite(args[0], args[1], args[2], result); - } - else if (f->get_decl_kind() == OP_NOT) { - // the internalizer assumes there is not double negation (not (not x)) - SASSERT(num_args == 1); - m_s.mk_not(args[0], result); - return true; - } - return false; -} - -eager_bit_blaster::bv_plugin::bv_plugin(ast_manager & m, bit_blaster_params const & p): - simplifier_plugin(symbol("bv"), m), - m_util(m), - m_bb(m, p), - m_s(m) { -} - -eager_bit_blaster::bv_plugin::~bv_plugin() { -} - -void eager_bit_blaster::bv_plugin::get_bits(expr * n, expr_ref_vector & out_bits) { - rational val; - unsigned bv_size; - if (m_util.is_numeral(n, val, bv_size)) { - TRACE("eager_bb_bug", tout << "bv_size: " << bv_size << "\n";); - m_bb.num2bits(val, bv_size, out_bits); - SASSERT(out_bits.size() == bv_size); - } - else if (m_util.is_mkbv(n)) { - out_bits.append(to_app(n)->get_num_args(), to_app(n)->get_args()); - } - else { - unsigned bv_size = m_util.get_bv_size(n); - for (unsigned i = 0; i < bv_size; i++) { - parameter p(i); - out_bits.push_back(m_manager.mk_app(get_family_id(), OP_BIT2BOOL, 1, &p, 1, &n)); - } - SASSERT(bv_size == out_bits.size()); - } -} - -inline app * eager_bit_blaster::bv_plugin::mk_mkbv(expr_ref_vector const & bits) { -#ifdef Z3DEBUG - for (unsigned i = 0; i < bits.size(); i++) { - expr * b = bits.get(i); - SASSERT(!m_manager.is_not(b) || !m_manager.is_not(to_app(b)->get_arg(0))); - } -#endif - return m_manager.mk_app(get_family_id(), OP_MKBV, bits.size(), bits.c_ptr()); -} - -#define MK_UNARY_REDUCE(OP, BB_OP) \ -void eager_bit_blaster::bv_plugin::OP(expr * arg, expr_ref & result) { \ - expr_ref_vector bits(m_manager); \ - get_bits(arg, bits); \ - expr_ref_vector out_bits(m_manager); \ - m_bb.BB_OP(bits.size(), bits.c_ptr(), out_bits); \ - result = mk_mkbv(out_bits); \ -} - -#define MK_BIN_REDUCE(OP, BB_OP) \ -void eager_bit_blaster::bv_plugin::OP(expr * arg1, expr * arg2, expr_ref & result) { \ - expr_ref_vector bits1(m_manager); \ - expr_ref_vector bits2(m_manager); \ - get_bits(arg1, bits1); \ - get_bits(arg2, bits2); \ - expr_ref_vector out_bits(m_manager); \ - m_bb.BB_OP(bits1.size(), bits1.c_ptr(), bits2.c_ptr(), out_bits); \ - result = mk_mkbv(out_bits); \ -} - -#define MK_BIN_AC_FLAT_REDUCE(OP, BIN_OP, S_OP, BB_OP) \ -MK_BIN_REDUCE(BIN_OP, BB_OP); \ -void eager_bit_blaster::bv_plugin::OP(unsigned num_args, expr * const * args, expr_ref & result) { \ - SASSERT(num_args > 0); \ - if (num_args == 2) { \ - BIN_OP(args[0], args[1], result); \ - return; \ - } \ - \ - ptr_buffer args_bits; \ - for (unsigned i = 0; i < num_args; i++) { \ - expr_ref_vector * bits = alloc(expr_ref_vector, m_manager); \ - get_bits(args[i], *bits); \ - args_bits.push_back(bits); \ - } \ - \ - unsigned bv_size = m_util.get_bv_size(args[0]); \ - expr_ref_vector new_bits(m_manager); \ - for (unsigned i = 0; i < bv_size; i++) { \ - expr_ref_vector arg_bits(m_manager); \ - for (unsigned j = 0; j < num_args; j++) \ - arg_bits.push_back(args_bits[j]->get(i)); \ - expr_ref new_bit(m_manager); \ - m_s.S_OP(arg_bits.size(), arg_bits.c_ptr(), new_bit); \ - new_bits.push_back(new_bit); \ - } \ - result = mk_mkbv(new_bits); \ - std::for_each(args_bits.begin(), args_bits.end(), delete_proc()); \ -} - -#define MK_BIN_AC_REDUCE(OP, BIN_OP, BB_OP) \ -MK_BIN_REDUCE(BIN_OP, BB_OP); \ -void eager_bit_blaster::bv_plugin::OP(unsigned num_args, expr * const * args, expr_ref & result) { \ - SASSERT(num_args > 0); \ - result = args[0]; \ - for (unsigned i = 1; i < num_args; i++) { \ - expr_ref new_result(m_manager); \ - BIN_OP(result.get(), args[i], new_result); \ - result = new_result; \ - } \ -} - -#define MK_BIN_PRED_REDUCE(OP, BB_OP) \ -void eager_bit_blaster::bv_plugin::OP(expr * arg1, expr * arg2, expr_ref & result) { \ - expr_ref_vector bits1(m_manager); \ - expr_ref_vector bits2(m_manager); \ - get_bits(arg1, bits1); \ - get_bits(arg2, bits2); \ - m_bb.BB_OP(bits1.size(), bits1.c_ptr(), bits2.c_ptr(), result); \ -} - -#define MK_PARAMETRIC_UNARY_REDUCE(OP, BB_OP) \ -void eager_bit_blaster::bv_plugin::OP(expr * arg, unsigned n, expr_ref & result) { \ - expr_ref_vector bits(m_manager); \ - get_bits(arg, bits); \ - expr_ref_vector out_bits(m_manager); \ - m_bb.BB_OP(bits.size(), bits.c_ptr(), n, out_bits); \ - result = mk_mkbv(out_bits); \ -} - -MK_UNARY_REDUCE(reduce_not, mk_not); -MK_BIN_AC_FLAT_REDUCE(reduce_or, reduce_bin_or, mk_or, mk_or); -MK_BIN_AC_FLAT_REDUCE(reduce_and, reduce_bin_and, mk_and, mk_and); -MK_BIN_AC_FLAT_REDUCE(reduce_nor, reduce_bin_nor, mk_nor, mk_nor); -MK_BIN_AC_FLAT_REDUCE(reduce_nand, reduce_bin_nand, mk_nand, mk_nand); -MK_BIN_REDUCE(reduce_xor, mk_xor); -MK_BIN_REDUCE(reduce_xnor, mk_xnor); -MK_UNARY_REDUCE(reduce_neg, mk_neg); -MK_BIN_AC_REDUCE(reduce_add, reduce_bin_add, mk_adder); -MK_BIN_AC_REDUCE(reduce_mul, reduce_bin_mul, mk_multiplier); -MK_BIN_PRED_REDUCE(reduce_sle, mk_sle); -MK_BIN_PRED_REDUCE(reduce_ule, mk_ule); -MK_PARAMETRIC_UNARY_REDUCE(reduce_rotate_left, mk_rotate_left); -MK_PARAMETRIC_UNARY_REDUCE(reduce_rotate_right, mk_rotate_right); -MK_PARAMETRIC_UNARY_REDUCE(reduce_sign_extend, mk_sign_extend); -MK_PARAMETRIC_UNARY_REDUCE(reduce_zero_extend, mk_zero_extend); -MK_UNARY_REDUCE(reduce_redor, mk_redor); -MK_UNARY_REDUCE(reduce_redand, mk_redand); -MK_BIN_REDUCE(reduce_shl, mk_shl); -MK_BIN_REDUCE(reduce_ashr, mk_ashr); -MK_BIN_REDUCE(reduce_lshr, mk_lshr); -MK_BIN_REDUCE(reduce_comp, mk_comp); -MK_BIN_REDUCE(reduce_udiv, mk_udiv); -MK_BIN_REDUCE(reduce_urem, mk_urem); -MK_BIN_REDUCE(reduce_sdiv, mk_sdiv); -MK_BIN_REDUCE(reduce_srem, mk_srem); -MK_BIN_REDUCE(reduce_smod, mk_smod); - -void eager_bit_blaster::bv_plugin::reduce_extract(unsigned start, unsigned end, expr * arg, expr_ref & result) { - expr_ref_vector bits(m_manager); - get_bits(arg, bits); - expr_ref_vector out_bits(m_manager); - for (unsigned i = start; i <= end; ++i) - out_bits.push_back(bits.get(i)); - result = mk_mkbv(out_bits); -} - -void eager_bit_blaster::bv_plugin::reduce_concat(unsigned num_args, expr * const * args, expr_ref & result) { - expr_ref_vector out_bits(m_manager); - unsigned i = num_args; - while (i > 0) { - i--; - expr_ref_vector bits(m_manager); - get_bits(args[i], bits); - out_bits.append(bits.size(), bits.c_ptr()); - } - result = mk_mkbv(out_bits); -} - -bool eager_bit_blaster::bv_plugin::reduce_ite(expr * arg1, expr * arg2, expr * arg3, expr_ref & result) { - sort * s = m_manager.get_sort(arg2); - if (!m_util.is_bv_sort(s)) - return false; - expr_ref_vector bits1(m_manager); - expr_ref_vector bits2(m_manager); - get_bits(arg2, bits1); - get_bits(arg3, bits2); - SASSERT(bits1.size() == bits2.size()); - expr_ref_vector out_bits(m_manager); - unsigned bv_size = bits1.size(); - for (unsigned i = 0; i < bv_size; i++) { - expr_ref new_bit(m_manager); - m_s.mk_ite(arg1, bits1.get(i), bits2.get(i), new_bit); - out_bits.push_back(new_bit); - } - result = mk_mkbv(out_bits); - return true; -} - -bool eager_bit_blaster::bv_plugin::reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result) { - bv_op_kind k = static_cast(f->get_decl_kind()); - switch (k) { - case OP_BNOT: - SASSERT(num_args == 1); - reduce_not(args[0], result); - return true; - case OP_BOR: - reduce_or(num_args, args, result); - return true; - case OP_BAND: - reduce_and(num_args, args, result); - return true; - case OP_BNOR: - reduce_nor(num_args, args, result); - return true; - case OP_BNAND: - reduce_nand(num_args, args, result); - return true; - case OP_BXOR: - SASSERT(num_args == 2); - reduce_xor(args[0], args[1], result); - return true; - case OP_BXNOR: - SASSERT(num_args == 2); - reduce_xnor(args[0], args[1], result); - return true; - case OP_BNEG: - SASSERT(num_args == 1); - reduce_neg(args[0], result); - return true; - case OP_BADD: - reduce_add(num_args, args, result); - return true; - case OP_BMUL: - reduce_mul(num_args, args, result); - return true; - case OP_BIT1: - case OP_BIT0: - case OP_BSUB: - // I'm assuming the expressions were simplified before invoking this method. - UNREACHABLE(); - return false; - case OP_BSDIV: - case OP_BUDIV: - case OP_BSREM: - case OP_BUREM: - case OP_BSMOD: - // I'm assuming the expressions were simplified before invoking this method. - UNREACHABLE(); - return false; - case OP_BSDIV0: - case OP_BUDIV0: - case OP_BSREM0: - case OP_BUREM0: - case OP_BSMOD0: - // do nothing... these are uninterpreted - return true; - case OP_BSDIV_I: - SASSERT(num_args == 2); - reduce_sdiv(args[0], args[1], result); - return true; - case OP_BUDIV_I: - SASSERT(num_args == 2); - reduce_udiv(args[0], args[1], result); - return true; - case OP_BSREM_I: - SASSERT(num_args == 2); - reduce_srem(args[0], args[1], result); - return true; - case OP_BUREM_I: - SASSERT(num_args == 2); - reduce_urem(args[0], args[1], result); - return true; - case OP_BSMOD_I: - SASSERT(num_args == 2); - reduce_smod(args[0], args[1], result); - return true; - case OP_ULEQ: - SASSERT(num_args == 2); - reduce_ule(args[0], args[1], result); - return true; - case OP_SLEQ: - SASSERT(num_args == 2); - reduce_sle(args[0], args[1], result); - return true; - case OP_UGEQ: - case OP_SGEQ: - case OP_ULT: - case OP_SLT: - case OP_UGT: - case OP_SGT: - // I'm assuming the expressions were simplified before invoking this method. - UNREACHABLE(); - return false; - case OP_EXTRACT: - SASSERT(num_args == 1); - reduce_extract(f->get_parameter(1).get_int(), f->get_parameter(0).get_int(), args[0], result); - return true; - case OP_CONCAT: - reduce_concat(num_args, args, result); - return true; - case OP_SIGN_EXT: - SASSERT(num_args == 1); - reduce_sign_extend(args[0], f->get_parameter(0).get_int(), result); - return true; - case OP_ZERO_EXT: - SASSERT(num_args == 1); - reduce_zero_extend(args[0], f->get_parameter(0).get_int(), result); - return true; - case OP_REPEAT: - UNREACHABLE(); - return false; - case OP_BREDOR: - SASSERT(num_args == 1); - reduce_redor(args[0], result); - return true; - case OP_BREDAND: - SASSERT(num_args == 1); - reduce_redand(args[0], result); - return true; - case OP_BCOMP: - SASSERT(num_args == 2); - reduce_comp(args[0], args[1], result); - return true; - case OP_BSHL: - SASSERT(num_args == 2); - reduce_shl(args[0], args[1], result); - return true; - case OP_BLSHR: - SASSERT(num_args == 2); - reduce_lshr(args[0], args[1], result); - return true; - case OP_BASHR: - SASSERT(num_args == 2); - reduce_ashr(args[0], args[1], result); - return true; - case OP_ROTATE_LEFT: - SASSERT(num_args == 1); - reduce_rotate_left(args[0], f->get_parameter(0).get_int(), result); - return true; - case OP_ROTATE_RIGHT: - SASSERT(num_args == 1); - reduce_rotate_right(args[0], f->get_parameter(0).get_int(), result); - return true; - default: - return false; - } -} - -bool eager_bit_blaster::bv_plugin::reduce_eq(expr * lhs, expr * rhs, expr_ref & result) { - TRACE("eager_bb_eq", tout << mk_ll_pp(lhs, m_manager) << "\n" << mk_ll_pp(rhs, m_manager) << "\n";); - SASSERT(m_util.get_bv_size(lhs) == m_util.get_bv_size(rhs)); - expr_ref_vector bits1(m_manager); - expr_ref_vector bits2(m_manager); - get_bits(lhs, bits1); - get_bits(rhs, bits2); - SASSERT(bits1.size() == bits2.size()); - m_bb.mk_eq(bits1.size(), bits1.c_ptr(), bits2.c_ptr(), result); - return true; -} - -bool eager_bit_blaster::bv_plugin::reduce_distinct(unsigned num_args, expr * const * args, expr_ref & result) { - if (num_args <= 1) { - result = m_manager.mk_true(); - } - if (num_args == 2) { - expr_ref tmp(m_manager); - reduce_eq(args[0], args[1], tmp); - m_s.mk_not(tmp, result); - } - else { - expr_ref_vector new_args(m_manager); - for (unsigned i = 0; i < num_args - 1; i++) { - expr * a1 = args[i]; - for (unsigned j = i + 1; j < num_args; j++) { - expr * a2 = args[j]; - expr_ref tmp1(m_manager); - reduce_eq(a1, a2, tmp1); - expr_ref tmp2(m_manager); - m_s.mk_not(tmp1, tmp2); - new_args.push_back(tmp2); - } - } - m_s.mk_and(new_args.size(), new_args.c_ptr(), result); - } - return true; -} - -eager_bit_blaster::eager_bit_blaster(ast_manager & m, bit_blaster_params const & p): - m_simplifier(m) { - m_simplifier.enable_ac_support(false); - bv_plugin * bv_p = alloc(bv_plugin, m, p); - m_simplifier.register_plugin(bv_p); - m_simplifier.register_plugin(alloc(basic_plugin, m, *bv_p, bv_p->get_basic_simplifier())); -} - -void eager_bit_blaster::operator()(expr * s, expr_ref & r, proof_ref & p) { - m_simplifier.operator()(s, r, p); -} - diff --git a/src/ast/rewriter/bit_blaster/eager_bit_blaster.h b/src/ast/rewriter/bit_blaster/eager_bit_blaster.h deleted file mode 100644 index d3d0284d1..000000000 --- a/src/ast/rewriter/bit_blaster/eager_bit_blaster.h +++ /dev/null @@ -1,107 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - eager_bit_blaster.h - -Abstract: - - - -Author: - - Leonardo de Moura (leonardo) 2008-10-02. - -Revision History: - ---*/ -#ifndef _EAGER_BIT_BLASTER_H_ -#define _EAGER_BIT_BLASTER_H_ - -#include"bv_decl_plugin.h" -#include"bit_blaster.h" -#include"simplifier.h" -#include"basic_simplifier_plugin.h" - -class eager_bit_blaster { - - class bv_plugin : public simplifier_plugin { - bv_util m_util; - bit_blaster m_bb; - basic_simplifier_plugin m_s; - - void get_bits(expr * n, expr_ref_vector & out_bits); - app * mk_mkbv(expr_ref_vector const & bits); - - void reduce_not(expr * arg, expr_ref & result); - void reduce_bin_or(expr * arg1, expr * arg2, expr_ref & result); - void reduce_or(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_bin_and(expr * arg1, expr * arg2, expr_ref & result); - void reduce_and(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_bin_nor(expr * arg1, expr * arg2, expr_ref & result); - void reduce_nor(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_bin_nand(expr * arg1, expr * arg2, expr_ref & result); - void reduce_nand(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_xor(expr * arg1, expr * arg2, expr_ref & result); - void reduce_xnor(expr * arg1, expr * arg2, expr_ref & result); - - void reduce_neg(expr * arg, expr_ref & result); - void reduce_bin_add(expr * arg1, expr * arg2, expr_ref & result); - void reduce_add(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_bin_mul(expr * arg1, expr * arg2, expr_ref & result); - void reduce_mul(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_sdiv(expr * arg1, expr * arg2, expr_ref & result); - void reduce_udiv(expr * arg1, expr * arg2, expr_ref & result); - void reduce_srem(expr * arg1, expr * arg2, expr_ref & result); - void reduce_urem(expr * arg1, expr * arg2, expr_ref & result); - void reduce_smod(expr * arg1, expr * arg2, expr_ref & result); - void reduce_sle(expr * arg1, expr * arg2, expr_ref & result); - void reduce_ule(expr * arg1, expr * arg2, expr_ref & result); - - void reduce_concat(unsigned num_args, expr * const * args, expr_ref & result); - void reduce_extract(unsigned start, unsigned end, expr * arg, expr_ref & result); - - void reduce_redor(expr * arg, expr_ref & result); - void reduce_redand(expr * arg, expr_ref & result); - - void reduce_comp(expr * arg1, expr * arg2, expr_ref & result); - void reduce_shl(expr * arg1, expr * arg2, expr_ref & result); - void reduce_ashr(expr * arg1, expr * arg2, expr_ref & result); - void reduce_lshr(expr * arg1, expr * arg2, expr_ref & result); - - void reduce_rotate_left(expr * arg, unsigned n, expr_ref & result); - void reduce_rotate_right(expr * arg, unsigned n, expr_ref & result); - void reduce_sign_extend(expr * arg, unsigned n, expr_ref & result); - void reduce_zero_extend(expr * arg, unsigned n, expr_ref & result); - - public: - bv_plugin(ast_manager & m, bit_blaster_params const & p); - virtual ~bv_plugin(); - virtual bool reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result); - virtual bool reduce_eq(expr * lhs, expr * rhs, expr_ref & result); - virtual bool reduce_distinct(unsigned num_args, expr * const * args, expr_ref & result); - basic_simplifier_plugin & get_basic_simplifier() { return m_s; } - bool reduce_ite(expr * arg1, expr * arg2, expr * arg3, expr_ref & result); - }; - - /** - \brief Plugin for handling the term-ite. - */ - class basic_plugin : public simplifier_plugin { - bv_plugin & m_main; - basic_simplifier_plugin & m_s; - public: - basic_plugin(ast_manager & m, bv_plugin & p, basic_simplifier_plugin & s); - virtual ~basic_plugin(); - virtual bool reduce(func_decl * f, unsigned num_args, expr * const * args, expr_ref & result); - }; - - simplifier m_simplifier; -public: - eager_bit_blaster(ast_manager & m, bit_blaster_params const & p); - void operator()(expr * s, expr_ref & r, proof_ref & p); -}; - -#endif /* _EAGER_BIT_BLASTER_H_ */ - diff --git a/src/front_end_params/bit_blaster_params.h b/src/front_end_params/bit_blaster_params.h index b56be35db..8196774ca 100644 --- a/src/front_end_params/bit_blaster_params.h +++ b/src/front_end_params/bit_blaster_params.h @@ -22,16 +22,13 @@ Revision History: #include"ini_file.h" struct bit_blaster_params { - bool m_bb_eager; bool m_bb_ext_gates; bool m_bb_quantifiers; bit_blaster_params(): - m_bb_eager(false), m_bb_ext_gates(false), m_bb_quantifiers(false) { } void register_params(ini_params & p) { - p.register_bool_param("BB_EAGER", m_bb_eager, "eager bit blasting"); p.register_bool_param("BB_EXT_GATES", m_bb_ext_gates, "use extended gates during bit-blasting"); p.register_bool_param("BB_QUANTIFIERS", m_bb_quantifiers, "convert bit-vectors to Booleans in quantifiers"); } diff --git a/src/front_end_params/front_end_params.cpp b/src/front_end_params/front_end_params.cpp index 2dc037e1b..b445f0ba8 100644 --- a/src/front_end_params/front_end_params.cpp +++ b/src/front_end_params/front_end_params.cpp @@ -21,12 +21,9 @@ Revision History: void front_end_params::register_params(ini_params & p) { p.register_param_vector(m_param_vector.get()); preprocessor_params::register_params(p); - spc_params::register_params(p); smt_params::register_params(p); parser_params::register_params(p); arith_simplifier_params::register_params(p); - p.register_int_param("ENGINE", 0, 2, reinterpret_cast(m_engine), "0: SMT solver, 1: Superposition prover, 2: EPR solver, true"); - z3_solver_params::register_params(p); model_params::register_params(p); p.register_unsigned_param("MAX_COUNTEREXAMPLES", m_max_num_cex, "set the maximum number of counterexamples when using Simplify front end"); @@ -45,7 +42,6 @@ void front_end_params::register_params(ini_params & p) { p.register_int_param("PROOF_MODE", 0, 2, reinterpret_cast(m_proof_mode), "select proof generation mode: 0 - disabled, 1 - coarse grain, 2 - fine grain"); p.register_bool_param("TRACE", m_trace, "enable tracing for the Axiom Profiler tool"); p.register_string_param("TRACE_FILE_NAME", m_trace_file_name, "tracing file name"); - p.register_bool_param("IGNORE_SETPARAMETER", m_ignore_setparameter, "ignore (SETPARAMETER ...) commands in Simplify format input"); p.register_bool_param("ASYNC_COMMANDS", m_async_commands, "enable/disable support for asynchronous commands in the Simplify front-end."); p.register_bool_param("DISPLAY_CONFIG", m_display_config, "display configuration used by Z3"); diff --git a/src/front_end_params/front_end_params.h b/src/front_end_params/front_end_params.h index d13c01076..f9e62cd01 100644 --- a/src/front_end_params/front_end_params.h +++ b/src/front_end_params/front_end_params.h @@ -22,25 +22,16 @@ Revision History: #include"ini_file.h" #include"ast.h" #include"preprocessor_params.h" -#include"spc_params.h" #include"smt_params.h" #include"pp_params.h" #include"parser_params.h" #include"arith_simplifier_params.h" -#include"z3_solver_params.h" #include"model_params.h" -enum engine { - ENG_SMT, - ENG_SPC, - ENG_EPR -}; - -struct front_end_params : public preprocessor_params, public spc_params, public smt_params, public parser_params, - public arith_simplifier_params, public z3_solver_params, public model_params +struct front_end_params : public preprocessor_params, public smt_params, public parser_params, + public arith_simplifier_params, public model_params { ref m_param_vector; - engine m_engine; unsigned m_max_num_cex; // maximum number of counterexamples bool m_at_labels_cex; // only use labels which contains the @ symbol when building multiple counterexamples. bool m_check_at_labels; // check that @ labels are inserted to generate unique counter-examples. @@ -66,7 +57,6 @@ struct front_end_params : public preprocessor_params, public spc_params, public bool m_trace; std::string m_trace_file_name; std::fstream* m_trace_stream; - bool m_ignore_setparameter; bool m_async_commands; bool m_display_config; bool m_user_theory_preprocess_axioms; @@ -75,7 +65,6 @@ struct front_end_params : public preprocessor_params, public spc_params, public front_end_params(): m_param_vector(alloc(param_vector, this)), - m_engine(ENG_SMT), m_max_num_cex(1), m_at_labels_cex(false), m_check_at_labels(false), @@ -109,7 +98,6 @@ struct front_end_params : public preprocessor_params, public spc_params, public m_trace(false), m_trace_file_name("z3.log"), m_trace_stream(NULL), - m_ignore_setparameter(false), m_async_commands(true), m_display_config(false), m_user_theory_preprocess_axioms(false), diff --git a/src/front_end_params/order_params.cpp b/src/front_end_params/order_params.cpp deleted file mode 100644 index 47fee103d..000000000 --- a/src/front_end_params/order_params.cpp +++ /dev/null @@ -1,27 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - order_params.cpp - -Abstract: - - Term ordering parameters. - -Author: - - Leonardo de Moura (leonardo) 2008-01-28. - -Revision History: - ---*/ -#include"order_params.h" - -void order_params::register_params(ini_params & p) { - p.register_symbol_list_param("PRECEDENCE", m_order_precedence, "describe a (partial) precedence for the term ordering used in the Superposition Calculus module. The precedence is lists of function symbols. Example: PRECEDENCE=\"(f, g, h)\""); - p.register_symbol_list_param("PRECEDENCE_GEN", m_order_precedence_gen, "describe how a total precedence order is generated. The generator is a sequence of simple (partial) orders with an optional '-' (indicating the next (partial) order should be inverted). The available simple (partial) orders are: user (the order specified by precedence); arity; interpreted (interpreted function symbols are considered smaller); definition (defined function symbols are considered bigger); frequency; arbitrary (total arbitrary order generated by Z3). Example: PRECEDENCE_GEN=\"user interpreted - arity arbitraty\""); - p.register_symbol_nat_list_param("ORDER_WEIGHTS", m_order_weights, "describe a (partial) assignment of weights to function symbols for term orderings (e.g., KBO). The assigment is a list of pairs of the form f:n where f is a string and n is a natural. Example: WEIGHTS=\"(f:1, g:2, h:3)\""); - p.register_unsigned_param("ORDER_VAR_WEIGHT", m_order_var_weight, "weight of variables in term orderings (e.g., KBO)"); - p.register_int_param("ORDER", 0, 1, reinterpret_cast(m_order_kind), "Term ordering: 0 - KBO, 1 - LPO"); -} diff --git a/src/front_end_params/order_params.h b/src/front_end_params/order_params.h deleted file mode 100644 index 17b7fa238..000000000 --- a/src/front_end_params/order_params.h +++ /dev/null @@ -1,44 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - order_params.h - -Abstract: - - Term ordering parameters. - -Author: - - Leonardo de Moura (leonardo) 2008-01-28. - -Revision History: - ---*/ -#ifndef _ORDER_PARAMS_H_ -#define _ORDER_PARAMS_H_ - -#include"ini_file.h" - -enum order_kind { - ORD_KBO, - ORD_LPO -}; - -struct order_params { - svector m_order_precedence; - svector m_order_precedence_gen; - svector m_order_weights; - unsigned m_order_var_weight; - order_kind m_order_kind; - - order_params(): - m_order_var_weight(1), - m_order_kind(ORD_KBO) { - } - - void register_params(ini_params & p); -}; - -#endif /* _ORDER_PARAMS_H_ */ diff --git a/src/front_end_params/spc_params.cpp b/src/front_end_params/spc_params.cpp deleted file mode 100644 index 248b73962..000000000 --- a/src/front_end_params/spc_params.cpp +++ /dev/null @@ -1,37 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - spc_params.cpp - -Abstract: - - - -Author: - - Leonardo de Moura (leonardo) 2008-02-08. - -Revision History: - ---*/ -#include"spc_params.h" - -void spc_params::register_params(ini_params & p) { - order_params::register_params(p); - p.register_unsigned_param("SPC_MIN_FUNC_FREQ_SUBSUMPTION_INDEX",m_min_func_freq_subsumption_index, - "minimal number of occurrences (in clauses) for a function symbol to be considered for subsumption indexing."); - p.register_unsigned_param("SPC_MAX_SUBSUMPTION_INDEX_FEATURES", m_max_subsumption_index_features, - "maximum number of features to be used for subsumption index."); - p.register_unsigned_param("SPC_INITIAL_SUBSUMPTION_INDEX_OPT", m_initial_subsumption_index_opt, - "after how many processed clauses the subsumption index is optimized."); - p.register_double_param("SPC_FACTOR_SUBSUMPTION_INDEX_OPT", m_factor_subsumption_index_opt, - "after each optimization the threshold for optimization is increased by this factor. See INITIAL_SUBSUMPTION_INDEX_OPT."); - p.register_bool_param("SPC_BS", m_backward_subsumption, "Enable/disable backward subsumption in the superposition engine"); - p.register_bool_param("SPC_ES", m_equality_subsumption, "Enable/disable equality resolution in the superposition engine"); - p.register_unsigned_param("SPC_NUM_ITERATIONS", m_spc_num_iterations); - p.register_bool_param("SPC_TRACE", m_spc_trace); -} - - diff --git a/src/front_end_params/spc_params.h b/src/front_end_params/spc_params.h deleted file mode 100644 index bb5232ef4..000000000 --- a/src/front_end_params/spc_params.h +++ /dev/null @@ -1,49 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - spc_params.h - -Abstract: - - Parameters for the Superposition Calculus Engine - -Author: - - Leonardo de Moura (leonardo) 2008-02-08. - -Revision History: - ---*/ -#ifndef _SPC_PARAMS_H_ -#define _SPC_PARAMS_H_ - -#include"order_params.h" - -struct spc_params : public order_params { - unsigned m_min_func_freq_subsumption_index; - unsigned m_max_subsumption_index_features; - unsigned m_initial_subsumption_index_opt; - double m_factor_subsumption_index_opt; - bool m_backward_subsumption; - bool m_equality_subsumption; - unsigned m_spc_num_iterations; - bool m_spc_trace; - - spc_params(): - m_min_func_freq_subsumption_index(100), - m_max_subsumption_index_features(32), - m_initial_subsumption_index_opt(1000), - m_factor_subsumption_index_opt(1.5), - m_backward_subsumption(true), - m_equality_subsumption(true), - m_spc_num_iterations(1000), - m_spc_trace(false) { - } - - void register_params(ini_params & p); -}; - -#endif /* _SPC_PARAMS_H_ */ - diff --git a/src/front_end_params/z3_solver_params.cpp b/src/front_end_params/z3_solver_params.cpp deleted file mode 100644 index cdc3fa23b..000000000 --- a/src/front_end_params/z3_solver_params.cpp +++ /dev/null @@ -1,30 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - z3_solver_params.cpp - -Abstract: - - - -Author: - - Leonardo de Moura (leonardo) 2007-06-11. - -Revision History: - ---*/ - -#include"z3_solver_params.h" - -void z3_solver_params::register_params(ini_params & p) { - p.register_bool_param("Z3_SOLVER_LL_PP", m_ast_ll_pp, "pretty print asserted constraints using low-level printer (Z3 input format specific)"); - p.register_bool_param("Z3_SOLVER_SMT_PP", m_ast_smt_pp, "pretty print asserted constraints using SMT printer (Z3 input format specific)"); - p.register_bool_param("PRE_SIMPLIFY_EXPR", m_pre_simplify_expr, "pre-simplify expressions when created over the API (example: -x -> (* -1 x))"); - p.register_string_param("SMTLIB_TRACE_PATH", m_smtlib_trace_path, "path for converting Z3 formulas to SMTLIB benchmarks"); - p.register_string_param("SMTLIB_SOURCE_INFO", m_smtlib_source_info, "additional source info to add to SMTLIB benchmark"); - p.register_string_param("SMTLIB_CATEGORY", m_smtlib_category, "additional category info to add to SMTLIB benchmark"); -} - diff --git a/src/front_end_params/z3_solver_params.h b/src/front_end_params/z3_solver_params.h deleted file mode 100644 index 5ff211387..000000000 --- a/src/front_end_params/z3_solver_params.h +++ /dev/null @@ -1,44 +0,0 @@ -/*++ -Copyright (c) 2006 Microsoft Corporation - -Module Name: - - z3_solver_params.h - -Abstract: - - - -Author: - - Leonardo de Moura (leonardo) 2007-06-11. - -Revision History: - ---*/ -#ifndef _Z3_SOLVER_PARAMS_H_ -#define _Z3_SOLVER_PARAMS_H_ - -#include"ini_file.h" - -struct z3_solver_params { - bool m_ast_ll_pp; - bool m_ast_smt_pp; - bool m_pre_simplify_expr; - std::string m_smtlib_trace_path; - std::string m_smtlib_source_info; - std::string m_smtlib_category; - - z3_solver_params(): - m_ast_ll_pp(false), - m_ast_smt_pp(false), - m_pre_simplify_expr(false), - m_smtlib_trace_path(""), - m_smtlib_source_info(""), - m_smtlib_category("") - {} - void register_params(ini_params & p); -}; - -#endif /* _Z3_SOLVER_PARAMS_H_ */ - diff --git a/src/smt/asserted_formulas.cpp b/src/smt/asserted_formulas.cpp index 4a6cfd85d..6fdfc0488 100644 --- a/src/smt/asserted_formulas.cpp +++ b/src/smt/asserted_formulas.cpp @@ -40,7 +40,6 @@ Revision History: #include"der.h" #include"elim_bounds.h" #include"warning.h" -#include"eager_bit_blaster.h" #include"bit2int.h" #include"distribute_forall.h" #include"quasi_macros.h" @@ -340,13 +339,9 @@ void asserted_formulas::reduce() { INVOKE(m_params.m_quasi_macros && has_quantifiers(), apply_quasi_macros()); INVOKE(m_params.m_simplify_bit2int, apply_bit2int()); INVOKE(m_params.m_eliminate_bounds && has_quantifiers(), cheap_quant_fourier_motzkin()); - INVOKE(!m_params.m_bb_eager && has_quantifiers() && m_params.m_ematching, infer_patterns()); INVOKE(m_params.m_max_bv_sharing && has_bv(), max_bv_sharing()); INVOKE(m_params.m_bb_quantifiers, elim_bvs_from_quantifiers()); - INVOKE(m_params.m_bb_eager, apply_eager_bit_blaster()); - INVOKE(m_params.m_bb_eager && m_params.m_nnf_cnf, nnf_cnf()); // bit-blaster destroys CNF INVOKE(m_params.m_bb_quantifiers && m_params.m_der && has_quantifiers(), apply_der()); // bit-vector elimination + bit-blasting creates new opportunities for der. - INVOKE(m_params.m_bb_eager && has_quantifiers() && m_params.m_ematching, infer_patterns()); // temporary HACK: make sure that arith & bv are list-assoc // this may destroy some simplification steps such as max_bv_sharing reduce_asserted_formulas(); @@ -1434,8 +1429,6 @@ bool asserted_formulas::quant_elim() { return false; } -MK_SIMPLIFIER(apply_eager_bit_blaster, eager_bit_blaster functor(m_manager, m_params), "eager_bb", "eager bit blasting", false); - MK_SIMPLIFIER(elim_bvs_from_quantifiers, bv_elim_star functor(m_manager), "bv_elim", "eliminate bit-vectors from quantifiers", true); #define LIFT_ITE(NAME, FUNCTOR, MSG) \ diff --git a/src/smt/asserted_formulas.h b/src/smt/asserted_formulas.h index 94bb41682..6689e8235 100644 --- a/src/smt/asserted_formulas.h +++ b/src/smt/asserted_formulas.h @@ -94,7 +94,6 @@ class asserted_formulas { void apply_demodulators(); void apply_quasi_macros(); void nnf_cnf(); - bool apply_eager_bit_blaster(); void infer_patterns(); void eliminate_term_ite(); void reduce_and_solve();