Releases: Deducteam/lambdapi
2.1.0
CHANGES:
Added
-
In Logic/, a library of logics.
-
The command export to translate signatures to the lp or dk files formats.
-
New release of the VSCode extension.
-
A small tutorial in tests/OK/tutorial.lp.
-
The why3 tactic handles universal and existential quantifiers through
two new builtins ("ex" and "all"). Codewise, it requires a new
translation from encoded types to Why3 types. -
Tems may be placeholders. Placeholders are holes in the
concrete syntax. They are refined into metavariables. Placeholders
cannot appear nonlinearly in terms. From A Bidirectional Refinement
Algorithm..., p. 31,Non linear placeholders are not allowed since two occurrences could be
in contexts that bind different set of variables and instantiation with
terms that live in one context would make no sense in the other one.
Changed
-
Moved the files tool/hrs.ml and tool/xtc.ml into the new export/ directory.
-
Because placeholders are simple holes, the term
_ → _is scoped
into a full dependent productΠ x: M, NwhereNis a metavariable
that depend onx(see filetests/OK/767.lp) -
Type checking is slower following #696 because of refinement (not only
the type but also the term must be destructured and rebuilt),master refiner holide 7:0 11:33 iprover 5:58 6:50
Removed
-
The command beautify superseded by the new command export.
-
Unused variable warning: whether a variable is used or not cannot be
decided while scoping (following #696) since placeholders that do not
depend on variables may be refined later into metavariables that may
depend on them. -
Metavariables cannot be referenced by their name anymore, hence the
syntax?M.[x;y]is obsolete, but?0.[x;y]isn't.
2.0.0
CHANGES:
Release of the VSCode extension on the Marketplace (2021-12-10)
- Add
editors/vscode/CHANGES.mdandeditors/vscode/CONTRIBUTING.md. - Update documentation and README.md files.
Structured proof scripts (2021-12-07)
A tactic replacing the current goal by n new goals must be followed by n proof scripts enclosed in curly brackets. For instance, instead of writing induction; /* case 0 */ t1; ..; tm; /* case s */ q1; ..; qn, we must now write induction {t1; ..; tm} {q1; ..; qn}.
Exception for tactics not really changing the current goal like "have": /* proof of u */ have h: t; /* proof of t */ t1; ..; tm; /* proof of u continued */ q1; ..; qn must now be written have h: t {t1; ..; tm}; q1; ..; qn.
Other modifications in the grammar:
- Curly brackets are reserved for proof script structuration.
- Implicit arguments must be declared using square brackets instead of curly brackets: we must write
[a:Set]instead of{a:Set}. - Term environments and rewrite patterns must be preceded by a dot: we must now write
$f.[x]instead of$f[x]. - The
focuscommand is removed since it breaks structuration.
Improve and simplify LP lexer (2021-12-07)
- allow nested comments (fix #710)
- replace everywhere
%Sby\"%s\" - move checking compatibility with Bindlib of identifiers from lexer to scope
- move
is_keywordfromlexertopretty - move
package.mlfromcommon/toparsing/ - change
Config.map_dirfield type to(Path.t * string) list,
Library.add_mappingtype toPath.t * string -> unit
and Compile.compile argumentlmtype toPath.t * string
Update dkParser to be in sync with dkcheck (2021-11-30)
Add option --record-time (2021-11-30)
Improve evaluation and convertibility test (2021-06-02)
- fix
_LLetby calling mk_LLet - substitute arguments in TEnv's at construction time (mk_TEnv)
- improve eq_modulo to avoid calling whnf when possible
- use
Eval.pure_eq_moduloin Infer and Unif (fix #693)
Improve logs (2021-06-01)
- add Base.out = Format.fprintf
- uniformize printing code using Base.out
- rename oc arguments into ppf
- complete Term.pp_term
- improve some functions in Debug.D
- improve logging messages in Infer by adding a level argument
Better handling of let's (2021-05-26)
- mk_LLet removes useless let's
- rename Eval.config into strat
- factorize whnf_beta and whnf
- fix handling of variable unfoldings in whnf_stk
- optimize context lookup by using a map
- gather problem, context, map and rewrite into a record data type
- abstract whnf in hnf, snf and eq_modulo
- fix typing of let's
- improve printing
Interface Improvements (2021-05-20)
- Error messages are shown in logs buffer
- Improvements in behaviour of Emacs interface
- New shortcuts
C-c C-kandC-c C-rfor killing and reconnecting to the
LSP server
Record metavariable creation and instantiation during scoping, type inference and unification (2021-05-20)
- the record type problem gets a new field metas, and all its fields are now mutable
- many functions now take as argument a problem
- the functions infer_noexn, check_noexn and check_sort are moved to Query
(they do not need to take a solver as argument anymore) - in Unif, add_constr was defined twice; this is now fixed
- the modules Meta in Term and LibTerm are moved to the new file libMeta
- various mli files are created
- in Unif, initial is removed and instantiation is allowed to generate new constraints
Bugfixes in rewriting engine (2021-05-06)
- Add tests on product matching
- Fixed scoping of product in LHS
- Wildcard created during tree compilation are the most general ones, any free
variable may appear. - Updated documentation of decision trees
Factorize type rw_patt (2021-04-07)
The types Term.rw_patt and Syntax.p_rw_patt_aux are merged into a
single polymorphic type Syntax.rw_patt.
API modification (2021-04-07)
Several functions are exposed,
Parsing.Scope.rule_of_pre_rule: converts a pre rewriting rule into a
rewriting rule,Handle.Command.handle: now processes proof data,Handle.Command.get_proof_data: is the old handle,Handle.Compile.compile_with: allows to provide a command handler to compile
modules
Add commutative and associative-commutative symbols (2021-04-07)
-
Add
term.mliand turn thetermtype into a private type so that
term constructors are not exported anymore (they are available for
pattern-matching though). For constructing terms, one now needs to
use the provided construction functionsmk_VariforVari,
mk_ApplforAppl, etc. -
Move some functions
LibTermtoTerm, in particularget_args,
add_argsandcmp_term. -
Rename the field
sym_treeintosym_dtree. -
Redefine the type
rhsas(term_env, term) Bindlib.mbinder
instead of(term_env, term) Bindlib.mbinder * intso that the old
rhsneeds to be replaced byrhs * intin a few places.
Improvements in some tactics (2021-04-05)
- fix
have - improve the behavior of
apply assumenot needed beforereflexivityanymoreassumechecks that identifiers are distinctsolve: simplify goals afterwardslibTerm: permute arguments ofunbind_name, and addadd_args_mapandunbind2_namesyntax: addcheck_notinandcheck_distinct- split
misc/listings.texintomisc/lambdapi.texandmisc/example.tex
Extend command inductive to strictly-positive inductive types (2021-04-02)
Renamings (2021-04-01)
./tools/->./misc./src/core/tree_types.ml->./src/core/tree_type.ml
Do not unescape identifiers anymore, and move scope.ml from Core to Parsing (2021-03-30)
- escaped regular identifiers are automatically unescaped in lexing
- unescaping is done in filenames only
Escape.add_prefixandEscape.add_suffixallow to correctly extend potentially escaped identifiers- move
scope.mlfromCoretoParsing
Forbid bound variable names ending with a positive integer with leading zeros since there are not compatible with Bindlib (2021-03-29)
Fix #341: remove spurious warnings on bound variables (2021-03-29)
-
scope.ml:- the inner functions of scope are brought to the top-level
scope_term_with_paramsis introduced: it is similar toscope_termbut does not check that top-level bound variables are used_Meta_Typeis moved toenv.mlasfresh_meta_type
-
command.ml:- use
scope_term_with_paramsand check that parameters are indeed used get_implicitnessmoved tosyntax.mlasget_impl_term- fix implicit arguments computation in case of no type by introducing
Syntax.get_impl_params_list
- use
-
in various places: use
pp_varinstead ofBindlib.name_of -
replace expo argument in scoping and handling by boolean telling if private symbols are allowed
-
allow private symbols in queries
Introduce new_tvar = Bindlib.new_var mkfree (2021-03-26)
Add tactic generalize, and rename tactic simpl into simplify (2021-03-25)
Use Dune for opam integration (2021-03-25)
- Content of
lambdapi.opamis moved todune-projectand the former is
generated usingdune build @install. - Vim files are installed in
opamprefix using dune. - The emacs mode is declared as a sub-package.
Add tactic have (2021-03-24)
Compatibility with Why3 1.4.0
Add tactic simpl <id> for unfolding a specific symbol only (2021-03-22)
and slightly improve Ctxt.def_of
Bug fixes (2021-03-22)
- fix type inference in the case of an application (t u) where the type of t is not a product yet (uncomment code commented in #596)
- fix the order in which emacs prints hypotheses
- fix opam dependencies: add constraint why3 <= 1.3.3
Fix and improve inverse image computation (2021-03-16)
- fix and improve in
inverse.mlthe computation of the inverse image of a term wrt an injective function (no unification rule is needed anymore in common examples, fix #342) - fix management of "initial" constraints in unification (initial is now a global variable updated whenever a new constraint is added)
- when applying a unification rule, add constraints on types too (fix #466)
- turn
Infer.make_prodintoInfer.set_to_prod - add pp_constrs for printing lists of constraints
- make time printing optional
- improve visualization of debugging data using colors:
. blue: top-level type inference/checking
. magenta: new constraint
. green: constraint to solve
. yellow: data from signature or context
. red: instantiations (and handled commands)
Add tactic admit (2021-03-12)
- rename command
admitintoadmitted admitted: admit the initial goal instead of the remaining goals (when the proof is an opaque definition)- move code on
admitfromcommand.mltotactic.ml - add tactic
admit(fix #380)
As a consequence, tactics can change the signature state now.
Improvements in type inference, unification and printing (2021-03-11)
- improve type inference and unification
- add flag
"print_meta_args" - print metavariables unescaped, add parentheses in domains
- replace
(current_sign()).sign_pathbycurrent_path() - improve logging:
. debug +h now prints data on type inference/checking
. provide time of type inference/checking and constraint solving
. give more feedback when instantiation fails
Remove set keyword (2021-03-04)
Various bug fixes (2021-03-02)
- allow matching on abstraction/product type annotations (fix #573)
- Infer: do not check constraint duplication and return constraints in the order they have been added (fix #579)
- inductive type symbols are now declared as constant (fix #580)
- fix parsing and printing of unification rules
- Extra.files returns only the files that satisfy some user-defined condition
- tests/ok_ko.ml: test only .dk and .lp files
- Pretty: checking that identifiers are LP keywords is now optional (useful for debug)