package logtk
Core types and algorithms for logic
Install
Dune Dependency
Authors
Maintainers
Sources
2.1.tar.gz
md5=e72de75e9f0f87da9e6e8c0a4d4c89f9
sha512=81becfc9badd686ab3692cd9312172aa4c4e3581b110e81770bb01e0ffbc1eb8495d0dd6d43b98f3d06e6b8c8a338174c13ebafb4e9849a3ddf89f9a3a72c287
doc/CHANGELOG.html
Changelog
2.1
- add
logtk.arith
sub-library, using either zarith or num implemented two new calculi (with corresponding term orders):
- Superposition with first-class Booleans [https://link.springer.com/chapter/10.1007/978-3-030-79876-5_22]
- Superposition for full HOL [https://link.springer.com/chapter/10.1007/978-3-030-79876-5_23]
- old 'Case' rules are removed and replaced with corresponding 'BoolHoist' rules
- a new system for selection of Boolean subterms (--bool-select)
- many modes for Boolean reasoning (--boolean-reasoning)
a whole set of SAT-inspired pre- and inprocessing techniques:
- Blocked clause elimination
- Nonsingular predicate elimination with definition set recognition
- Hidden literal elimination
- Quasipure literal elimination
- fixed various issues in handling clause weight, priority and literal selection heuristics
- improved communication with backend
- better (complete) support for renaming common subformulas
- profiling that emits catapult traces (if env contains
TEF=1
)
2.0
- new complete HO unification algorithm [https://drops.dagstuhl.de/opus/volltexte/2020/12327]
- new system for handling dynamic clausification (--lazy-cnf options)
- many new clause weight, clause priority and literal heuristics (see help for full list)
- added SinE algorithm and made it work with higher-order problems
- added triggered Boolean instantiation (--trigger-bool-inst)
- added support for Bhayat and Reger's combinatory calculus (with corresponding order) [https://link.springer.com/chapter/10.1007%2F978-3-030-51074-9_16]
- improved Leibniz and Andrews equality elimination
- new modes for primitive instantiation
- added support for "Boolean" equality resolution and factoring [https://matryoshka-project.github.io/pubs/ho_bools_paper.pdf]
- added support for non-native treatment of equality predicate (--eq-encode)
- added "early bird" modes (during dynamic clausification) for primitive instantiation (--ho-prim-enum-early-bird)
- require at least OCaml 4.07 (for
seq
functions) - remove all arithmetic handling from [Cru 2015]
- in type inference, enforce that type declarations are prenex polymorphic
1.5.1
- compatibility with ocaml 4.08
- move to sneeuwballen organization
- migrate to dune
- changes in HO
- use msat.0.8
- migrate to
iter
instead ofsequence
- make build a bit more robust wrt warn-error
- add travis CI
- perf improvements
- perf: use profile=release
- make floor (and co) a function from real to real
- two bugfixes for polymorphic function types
- fix(demo): update resolution demo so it builds again
- fix(superposition): do not try to rewrite type arguments
- chore: update opam files to 2.0
- move to alcotest for tests
- improve ho selection restrictions
- perf: optimize
debugf
function (closes #21) - support more cases in THF parser
- less selection restrictions for lfhol-calculi
- cli option for fool
- bugfix: KBO variable balance for applied variables
- In TPTP, interpret untyped variables as $i, not as a fresh type variable
- Don't rewrite heads in subsumption module
- complete variables one-by-one in complete_eq_args (ArgCong)
- dont rewrite heads in the presence of type variables or nonmonotonicity
- loosen assertion in whnf_deref_rec
- Use type arguments in orderings
- missing supatvars flag should switch off hidden supatvars
1.5
- be compatible with sequence >= 1.0
- cli option to switch off maximal number of variables per clause
- Dockerfile and instructions to build a docker image
- add eta-reduction to
LLTerm
- update phases API + params so it's easier to use from utop
- move to jbuilder
- fail early when unifying a variable and a polymorphic constant
- More realistic test to expose a bug in unification of polymorphic terms
- upper bound on msat and deps on logtk
- fix for llprover (use congruence correctly for poly equalities)
- printer for congruence
- cache llproof checking result, display it in llproof-printing
- refactor proof checker to look more like a tableaux prover + dot printing
- llprover: hack to allow checking of rewriting steps that occur under binders
- split proof checker into its own module
LLProver
- add linear expressions and arith predicates in
LLTerm
- make demodulation more robust
- bugfix in
Type.apply
for polymorphic type arguments - stop positive extensionality rule from removing type arguments
- moved detection for "distinct object" syntax into TypeInference
- omit type declarations for distinct objects in TPTP output
- bugfix restrict_to_scope: recursive call when variable already in scope
- bugfix: type of polymorphic application in app_encode tool
- bugfix: app_encode extensionality axiom needs type arguments
fo_detector
tool to count problems with applied variables- clean up Subst module
- bugfix: wrong polymorphic types in returned unifier
- remove hornet from makefile, improve logitest targets
- remove hornet
- better type error messages
- make
Subst.apply
tailrec - "int" mode for variable purification
- bugfix: unquote identifiers in TPTP parser
1.4
- remove inlining on parsers
- cli option for ext-neg rule
- add
--check-types
for checking types deeply in new clauses - Add ExistsConst (??) and ForallConst (!!) to TPTP parser
- TPTP parser: allow function types as THF terms
- add cli option
-bt
(alias for--backtraces
) - completion of equalities with λ-abstractions as RHS in type inference
- THF parser: allow for
@
applications in types - cli flag for ext_pos
- App encode: binary for app-encoding HO applications into FO
- bugfix in ho unification
- in unification, fix order in which bound variables are added to env
- bugfix in unification (would produce wrong type)
- do not simplify in demodulation
- Add StarExec instructions to readme
- bugfixes
app_encode
- β-normalize rewrite rules that are eq-completed
- uniform output of “SZS status” instead of “SZS Status”
- auto flattening of applications in STerm
- fix
examples/ho/extensionality1.zf
by forbidding some HO demodulations - fix tag managing (and therefore proof checking) for
Lit.is_absurd
- bugfix in proof checking related to instantiation
- bugfix in NPDtree
- more elegant and robust sup-at-var condition
- sup-at-var condition with polymorphism
- remove literal comparison by constraint
- no selection of literals containing ho variables
- Stricter sup-at-vars condition
- purify naked variables
1.3
- experimental proof checking with
--check
(and--dot-llproof <file>
) does not work on all proofs, ignores arith and fails on demodulation under lambdas, for now. - experimental HO branches from Alex Bentkamp (@benti), including advanced term orderings and variations on higher-order lambda-free superposition
- parser for a fragment of dedukti
- end-to-end proof output, starting from input statements
- large refactoring of
Proof
, withProof.result
being object-like - get rid of dependency on
tip-parser
- bugfix: prevent superposition on non-closed terms (from Geoff)
- Rename
--purify
to--ho-purify
- don't do sup at vars by default
Replace kbo and rpo6 by their lambda-free counter-parts
- Length-Lexicographic symbol status; Merge redundant term_to_head definitions
- length-lexicographic comparison for lfhokbo
- mandatory args for skolem constants (to not depend on choice)
- KBO with argument coefficients
- Blanchette's lambda-free higher order KBO (by @benti)
- Rename IDOrBuiltin to Head
- Blanchette's lambda-free higher-order RPO (by @benti)
1.2
- some HO support (with pattern unification)
- only ignore positive version of
x=y → …
, not other equational rules - remove remnants of orphan criterion
- add
pp_in
signature in many modules - demodulation under lambdas
- HO pattern unification
- add positive extensionality rule in HO
- add eta-reduction, enabled by default
- allow superposition to operate on non-closed terms
- better random generator for HO terms
- only perform primitive enum on clauses with low penalty
- primitive enumeration of predicate variables
- in FOOL, only extract closed terms to toplevel
- add
Lambda
module with WHNF and SNF - proper skolemization in negative extensionality rule
- bugfixes for
Multiset
- use logitest for tests
- remove
orient
tool - full ZF printing, with proof output and proper commenting
- better stats and options for arith; cli option for
redundant_by_ineq
- add polarized rewriting
rewrite foo => bar
- fix bug in AC for non-FO terms (closes #13)
- introduce attribute for SOS (set of support)
- propagate attributes properly in CNF and type inference
- in induction, only keep inductive clusters(!)
- basic TPTP THF parser; update TPTP parser to support THF, remove ambiguities
- update literal ordering to have a basic approximation for rational lits
- add
ho-complete-eq
for completing positive equations - block eq-resolution and destr-eq-res on shielded variables
- in induction,
x=y
puts x and y in same cluster - branch using full HO unification
- branch using combinators for HO functions
- detect
.tptp
files as TPTP - in
Cnf
, rewritef=λ x.t
into∀x. f x=t
- add
calculi/Higher_order
module; disable completeness if HO - declare missing rule
C (proj-1 x)…(proj-n x) --> x
for cstors - associate a rewrite rule to inductive type's projectors
- option for dumping sat solver logs into a file
1.1
- calculus for rational arith
- do not simplify too eagerly before trying induction
- add optional fuel limit on term rewriting
- disable orphan criterion by default
- remove age in clause queues; make FIFO queue simpler
- re-strenghten again eq-subsumption, by using anti-unification
- generalization on variables occurring both in active and passive pos in induction
- add
ArLiteral
to generate arbitrary literals - disable
trivial-ineq
for arith, by default - new clause queue, "almost-bfs"
- induction: simplify goals before doing cut on them
- apply exhaustiveness only for non-rec datatypes
- refactor
Test_prop
to use narrowing, instead of smallcheck - in arith, remove completeness in case of
--no-arith
, too - use a weight
α·ω+β
in (T)KBO precedence; use classify_cst for weights - have some warnings in .zf files if identifiers are used undeclared
- normalize term
a=b
into the corresponding literal - do not do sub-inductions in clauses with positive lemma(s) in trail
- only do induction on active positions (or under uninterpreted syms)
- add pattern-matching and
if/then/else
to .zf native format - add
Test_prop
in core library, with basic smallcheck - add arithmetic to ZF parser
- bugfix in zipper: stornger purification avoid some spurious saturations
- in induction, only perform sub-induction in an already inductive clause
- rename
libzipperposition
back intologtk
, fix some compat issues - improvements in
Unif.unif_list_com
and IArray - use new
FV_tree
in zipperposition - add
FV_tree
structure, a new implem of feature vectors - skolemization re-uses variables names, but lowercase
- add warn-error @8
- add dimacs dump for the SAT solver
- extract proof from SAT solver
- update to containers 1.0
- use a simpler
Hash
module - use result everywhere, ditch variant-based error type
- add
forall (x y : ty). …
syntax (close #4 again) - more concise syntax for
pi (a:type)(b:type).…
(close #4) - collapse
Πx:type.… → type
intotype→…→type
- lambda-lifting in
Cnf.flatten
to deal with anonymous functions - fix type inference for higher-order applications (
var args
) - basic parsing of arith operators and constants for TIP
- end-to-end proof tracing, simpler Statement, remove StatementSrc
- make
def-as-rewrite
true by default - add
let
to core terms - add
ite
andmatch
in STerm and TypedSTerm - add
Fool
calculus for dealing with boolean subterms - more rules in
basic_simplification
- remove everything about the meta-prover
- bugfix in
sat_solver
for evaluating 0-level lits - allow boolean rewrite rules of the form
t
or~ t
- automatic re-generalization of non-induction variables in strengthening
1.0
- rewrite induction
- rewrite typechecking and CNF with new intermediate typed AST
- merge logtk into zipperposition again
- TIP parser
- remove hashconsed strings, use
ID
instead - in TPTP, role "lemma" will be considered as a proper lemma
- share subproofs obtained from SAT solver
- better heuristic in ClauseQueue for deep inductive clauses
- add an
include
statement for ZF - properly use Msat proofs in
Avatar.simplify_trail
- make proof handling in
Sat_solver
transparent - make
Dtree
bounded in depth - add a new "AC" attribute in ZF, extend attribute system
- add
SClause
, unfunctorizeBBox,ProofStep,Trail
, use Msat proofs - implement term narrowing (+ add some profiling)
- term and clause rewriting (deduction modulo)
- tests: use OUnit2
- Cnf: conversion of prop rewrite rules requires polarization
- optimize
injectivity_destruct{+,-}
: disregard type (dis)equations - move almost everything from Zipperposition to Phases_impl
- introduce Phases, a monadic description of the steps taken by main
- make induction enabled by default
- add translation of inductive problems in .zf
- rename
type_check_tptp
intotype_check
(several input formats) - conditional compilation of the prover itself (for debugging the library)
- add
warn
in Util, add colors inUtil.debug
- update Hashcons, with global state, and alternative impl with Hashtbl
- move printing exception, factor code, rename
cnf_of_tptp
- options for choosing the input format (zf/tptp)
- new parser and lexer for a ML-like format,
ZF
- simpler, more efficient
Superposition.compare_literals_subsumption
- change
FOTerm.Classic
so thatApp
merges type and term arguments - introduce TypedSTerm.Meta for destructive unification
- add a Binder module
- split Symbol into Symbol and Builtin
- distinction debug/debugf
- big change: use a pack again for core library
- refactor: rename
PrologTerm
intoSTerm
(simple term) - move src/base to src/core
- refactor: use
equal
andcompare
- refactoring: change some types, fix warning, Format everywhere
- move
pelletier_problems
intoexamples
; addtests/
dir with script
0.8
breaking
- breaking: remove
Type.tType
, makes no sense in the end - breaking:
HOterm
: replaceTyAt
withTyLift
(lifts a type to a term) - breaking: add explicit
forall/exists
toHOTerm
, remove rigid var case
non-breaking
- fix bug in Type Inference
- more error reporting using
Printexc
and backtraces (requiresocaml >= 4.01
) - improve printers
- fix bug in
HOterm.open_at
- convert
@τ
intoτ
in type inference, if required (application) parser_ho
:- accept
(var:type)
as a term - fix ambiguities, parse
@a
(type lifted to term) - now lifts types to terms
- fix parser so it handles forall/exists and has no ambiguity
- accept
- rename some constructors (prefixed with 'Logtk' because of overkill sed)
- bugfix in builtin.theory
- meta-prover: remove rigidification, use explicit quantifiers, udpdate builtin.theory
- meta-prover: use sections for debug, forbid rigid vars in axioms/theories
- add function in meta-prover encoding
- update vim syntax for theory files
- add a few functions to
HOTerm
- printer in meta/encoding
- enable logtk.meta by default
0.7
- breaking: remove array utils from
LogktUtil
, useCCArray
instead - breaking: remove list utils from
LogktUtil
, useCCList
instead - vim support for theory files
- fix bug in
solving/Lpo
(fresh names collision) - fix logtk.solving, using Msat rather than (patched) aez
Skolem.clear_skolem_cache
Util.debugf
for Format-based debugging- small fixes post-0.6.2
0.6.2
- fix the list of modules in API doc
- fix in
Precedence
: use symbol equality - add general info in two cases of
parsers.ast_tptp
:TypeDecl
andNewType
- fix quick tests
- more recent
opam
file Skolem
: instantiation functions- better printing of types (de Bruijn) in foterms
- use
Sequence
rather thanCCSequence
0.6.1
breaking
- remove
-pack
forLogtk
, renamed modules from<Foo>
toLogtk<Foo>
(to use 4.02s module aliasing) - remove useless
-def-limit
argument to the CNF - use
-no-alias-deps
when compiling
non-breaking
- fix
parsers/Util_tptp.find_file
behavior w.r.t$TPTP
env variable - do not rename atomic formulas in
CNF
(close #1) FeatureVector.{iter,fold}
implemented- flush
stdout
on debug - add
Options.mk_global_opts
, deprecatingOptions.global_opts
- section mechanism for
Util.debug
(inUtil.Section
) with inheritance - bugfix in
Precedence.Constr.invfreq
- update arbitrary instances to use
qcheck-0.3
'sfix_fuel
combinator PartialOrder
(andPrecedence
) give more details when the ordering is not total- new functions in the precedence
- new modules
Precedence_intf
,Ordering_intf
,PartialOrder_intf
0.6
- do not depend on
CCError.t
arity - require
bytes
to keep compatibility with< 4.02
(String.init
too recent) Skolem
: at creation, now possible to specify prefix for Tseitin atomsUtil
: removed a String.create deprecation warningFeatureVector.Make.retrieve_alpha_equiv
- opam file (for easy development version)
0.5.4
- better CNF (with more accurate criterion to choose whether to rename formulas)
Util.set_{memory,time}_limit
- remove old files
0.5.3
FOTerm.weight
Type.depth
- KBO checks that weights are
> 0
- use a flag in
Formula.simplify
, for memoization; makes CNF fast again on some examples - expose
ScopedTerm.flags
Precedence
: make it possible to choose/change the weight fun- updated README to favor opam
0.5.2
- demo program
resolution1.ml
- oasis:
--enable-demo
flag - arithmetic binary predicates are polymorphic (
$sum
, etc) - target in Makefile to update
@next_release
tags refactor:
- unification now works with two (optional) DB environments in which bound variables of both terms live.
- matching: parameter
?allow_open
is now used properly in rewriting and indexing
unif.res_head
- N-ary unification now uses
Sequence
(simpler, more efficient)
0.5.1
- sort list of modules in
doc/api_intro.txt
- code cleanup in
ScopedTerm.Seq
, less closures, simpler - bugfix in
scopedTerm.DB.open_vars
(shift variables!) - profiling information in CNF
- safety check in CNF: clauses must be closed (!)
- bugfix:
Formula.is_closed
- fix printing of Type in TPTP
- add
PrologTerm.Syntactic
constructor (in place ofSimpleApp
which doesn't make much sense) - cleanup: check i>=0 for bvar/var in ScopedTerm, share a common
fresh_var generator
- simplified and factorized some code (share term containers)
0.5
- module
Sourced
; removedFormula.sourced
and the likes - changed printing of arith variables
- simplify interface for De Bruijn in ScopedTerm; more compact implementation using iterators
- safe API for type inference, using the error monad
CCError.t
everywhere (also inUtil_tptp
)
0.4
cleanup:
- remove submodules,
lib/Monad
, and many symlinks - replace
Monad.Err
withCCError
- remove submodules,
- explicit dependency of logtk on
sequence
andcontainers
logtk_parsers
depends on menhir as a build tool- fix issues with build system (
solving
flag) - substitution membership for views
- changed hash function
- use lib
benchmark
rather thanbench
- use the new
CCHash
api for hash functions that take and returnint64
values - add
Signature.is_empty
- profiling annotations
- printing of
NPDtree
into dot - use
CCList
andCCKList
(in unification) - allow to protect some variables in
Unif.Unary.match_same_scope
- perf improvement: useless buffer allocation in
Util.debug
Multiset
:- printer, qtest, and new comparison function
- API change, now a functor dealing with very large multiplicities of elements using
Zarith
ForallTy
constructor- function
Comparison.dominates
bugfixes:
- do not rename variables for skolemized formulas (otherwise variables won't match)
Formula.simplify
Unif.Unary.eq
Comparison.@>>
FOTerm.head
arith_hook
printer inFOTerm
- enable
bin_annot
- printer hooks in formulas
Unif
: equality up to substitution implemented- in
NPDTree
, do not captureNot_found
that could be raised by the user callback - lexicographic combinators in
Comparison
- module
lib/IArray
for immutable arrays (previously used in Multiset) - more abstract requirement for Clause index (feature vector...)
- cli flag to disable ordering generation in hysteresis
- hooks for
Cnf
note: git log --no-merges previous_version..HEAD --pretty=%s