All notable changes to this project will be documented in this file.
- Support for eager evaluation in both interpreter (
--eager-evaloption) and compiler. - Reorganized documentation and added a lot of new material, including a tutorial.
- Apply Google Java format with Maven.
- Various improvements to the code generator.
- Better error reporting for type arity mismatch.
- Clean up CI.
- Better, more consistent CLI options for interpreter and generated code.
- Lexing of arithmetic expressions without spaces.
- Various (rare) interpreter bugs.
- Various bugs in the C++ runtime and generated code.
- Support for compilation to Souffle/C++ (
--codegenoption).
- Removed built-in functions
substituteandis_free.
- Support for
bv_to_int,int_to_bv,bv_extract, andbv_concatformula constructors. - More string manipulation and inspection functions (
substring,string_length,char_at,string_to_list,list_to_string,string_to_i32, andstring_to_i64). - Allow argument annotations in relation declarations.
- Option to output relations to disk (
@diskannotation). - Explicit annotation
@edbfor EDB relations.
- New and improved command line interface.
- New syntax for relation declarations (
relinstead ofinputandoutput). - Removed
@externalannotation (replaced by@disk).
- Incorrect (non-
smt) types for formula constructors. - Various lacunae in documentation.
- Various bugs (including some type checking bugs).
- Give line numbers with parse exceptions.
- Signature of
get_model(takes a list of propositions now)
- Bug in the naive (call-reset) SMT solver strategy.
- Bug in
let funexpressions.
- Eager semi-naive evaluation algorithm.
- SMT manager that uses push and pop.
- Naive SMT manager that does not do any form of caching.
- Optimal index selection.
- Ability to interface with different solvers and set logic.
- Accept .tsv fact files instead of .csv files.
- Allow ML variables to be lowercase.
- The
debugSmtoption logs SMT calls to separate files by solver, instead of printing them to same stream. - Removed
is_valid_optand changed signature ofis_sat_optto take a list ofbool smtterms.
- Concurrency bug in the memoization of parameterized constructor symbols.
- Bug in the recording of rule evaluation diagnostics.
- Bug in the "freshening" of
let funexpressions.
- Support for
foldterms. - Options to restrict which results are printed after evaluation.
- Nested, variable-capturing functions (i.e.,
let funexpressions). - Added generic serialization function
to_string. - Preliminary (and undocumented) option to compile Formulog program to C++ instead of interpreting it.
- Do not require parentheses around tuple types.
- Do not reorder literals in rules (in order to preserve soundness of flow-sensitive type checking).
- Changed the names of some string-related built-in functions (
strcatis nowstring_concatandstrcmpis nowstring_cmp). - Removed built-in function
string_of_i32.
- Made Antlr parser faster by simplifying grammar.
- Changed precedence of infix cons operator (i.e.,
::). - Added parameterized constructor symbols to fix type soundness issues arising from the non-determinate type signatures of some formula constructors.
- Made type checking flow-sensitive to soundly handle destruction of user-defined constructors in formulas.
- Support wild card term
??when "invoking" predicates as functions. - Constant array constructor
array_const(from Z3's theory of arrays). - Ability to do partial magic set rewriting with annotations
@bottomupand@topdown. - Demand transformation simplification for magic set rewriting (following Tekle and Liu [2010]).
- Support for record types.
- Support external input facts via annotation
@external. - Support sequential runtime (for debugging) via
sequentialsystem property. - Support existential anonymous variables in negated atoms.
- Increased the amount of information printed with the
debugMstoption. - Allow ML-style expressions to occur as logic programming terms.
- Prefix names of automatically-generated ADT testers and getters with
#. - Removed syntax highlighting for solver variables.
- Don't require periods after declarations and function definitions.
- Print thread name during SMT debugging.
- Make sure that the same SMT call is never made twice (with the same timeout).
- Fixed bug with applying type substitutions that contain mappings to (possibly nested) type variables.
- Updated name of formula type in Vim syntax file.
- Fixed a couple bugs in SMT-LIB parser.
- Fixed bug with missing case in unification algorithm.
- Boolean operators now short circuit.
- Reject programs that use top-down rewriting in combination with IDB predicates in the ML fragment.
- Make sure that EDB relations are maintained during top-down rewriting, even when they are only referenced in the ML fragment.
- Everything (initial release).