-
File renamings and splittings:
lpLexer
->escape
,lpLexer
console
->base
,extra
,debug
,error
,console
module
->filename
,path
,library
cliconf
->config
install_cmd
->install
init_cmd
->init
-
Improve handling of escaped identifiers in
escape.ml
and fix printing -
Improve
tests/ok_ko.ml
to allow sub-directories intests/OK/
ortests/KO/
-
File renamings:
terms
->term
basics
->libTerm
tactics
->tactic
queries
->query
stubs
->realpath
files
->module
handle
->command
-
Core
library divided into the following sub-libraries:Common
that contains shared basic files (pos
,console
,module
andpackage
)Parsing
that contains everything related to parsing (syntax
,pretty
, lexers and parser)Handle
that usesCore
to type check commands and modules (containsquery
,tactic
,command
,compile
,inductive
,rewrite
,proof
andwhy3_tactic
)Tool
that provides miscellaneous tools that useCore
(external
,hrs
,xtc
,tree_graphviz
,sr
)
Replace Earley by Menhir, Pratter and Sedlex
Syntax modifications:
-
Add multi-lines comments
/*
...*/
. -
Commands and tactics must now be ended by a semi-colon
;
. -
The syntax
λx y z: nat, ...
with multiple variables is not authorised anymore, butλ(x y z: nat), ...
is, as well asλ x : N, t
with a single variable. -
In unification rules, the right hand-side must now be enclosed between square brackets, so
set unif_rule $x + $y ≡ 0 ↪ $x ≡ 0; $y ≡ 0
becomes
set unif_rule $x + $y ≡ 0 ↪ [ $x ≡ 0; $y ≡ 0 ];
-
set declared
has been removed. -
Any (depending on accepted codepoints) UTF8 identifier is by default valid. Warning: string
λx
is now a valid identifier. Hence, expressionλx, t
isn't valid, butλ x, t
is. -
Declared quantifiers now need a backquote to be applied. The syntax
`f x, t
representsf (λ x, t)
(and a fortiorif {T} (λ x, t)
). -
assert
always takes a turnstile (or vdash) to specify a (even empty) context, so the syntax isassert ⊢ t: A;
-
The minus sign
-
in the rewrite tactic has been replaced by the keywordleft
.
Code modifications:
-
Parsing and handling are interleaved (except in the LSP server): the parser returns a stream of parsed commands. Requesting an item of the stream parses one command in the file.
-
The type
pp_hint
is renamed tonotation
and moved tosign.ml
. -
Notations (that is, ex-
pp_hint
) are kept in aSymMap
, which allowed to simplify some code insig_state.ml
andsign.ml
. -
Positions are not lazy anymore, because Sedlex doesn't use lazy positions.
-
p_terms
do not haveP_BinO
andP_UnaO
constructors anymore.
changes in the syntax:
- definition -> symbol
- theorem -> opaque symbol
- proof -> begin
- qed -> end
- Added
sequential
keyword for symbol declarations - Removed
--keep-rule-order
option
$F
is shorthand for$F[]
- Empty environment mandatory under binders
Allow users to match on product Πx: t, u
and on the domain of binders.
- Allow users to declare a symbol [f] as quantifier. Then, [f x,t] stands for [f(λx,t)].
Introduction of unification rules, taken from http://www.cs.unibo.it/~asperti/PAPERS/tphol09.pdf. A unification rule can be set with
set unif_rule t ≡ u ↪ v ≡ w, x ≡ y
- Pretty-printing hints managed in signature state now.
→
is replaced by↪
in rewriting rules,&
is replaced by$
for pattern variables in rewriting rules,- the syntax
rule ... and ...
becomesrule ... with ...
, ⇒
is replaced by→
for implication, and∀
is replaced byΠ
for the dependent product type
Adding let-bindings to the terms structure.
- Contexts can now contain term definitions.
- Unification is carried out with a context.
- Reduction functions (
whnf
,hnf
,snf
&c.) are called with a context. - Type annotation for
let
in the concrete syntax.
- Use
Stdlib
instead ofPervasives
(enforced by sanity checks). - Rely on
stdlib-shims
to provideStdlib
on older version of OCaml.
- New module system.
- Revised command line arguments parsing and introduce subcommands.
- LSP server is now a Lambdapi subcommand: run with
lambdapi lsp
. - New
--no-warning
option (fixes #296).
Simplification of the decision tree structure
- trees do not depend on term variables;
- tree constructor type depends on generated at compile-time branch-wise unique integral identifiers;
- graph output is more consistent: variables are the same in the nodes and the leaves.
Introducing protected and private symbols.
Introducing the why3
tactic to call external provers.
First major release of Lambdapi. It introduces:
- a new syntax for developing proofs in the system,
- basic support for infix operators,
- call to external confluence checker with the same API as Dedukti,
- more things.
- Consolidate the LSP OPAM package into the main one (@ejgallego)
First release of Lambdapi.