diff --git a/src/frontends/lean/CMakeLists.txt b/src/frontends/lean/CMakeLists.txt
index e77373320..6a9d6972b 100644
--- a/src/frontends/lean/CMakeLists.txt
+++ b/src/frontends/lean/CMakeLists.txt
@@ -3,7 +3,7 @@ scanner.cpp parse_table.cpp parser_config.cpp parser.cpp
parser_pos_provider.cpp builtin_cmds.cpp builtin_exprs.cpp
server.cpp notation_cmd.cpp calc.cpp
decl_cmds.cpp util.cpp inductive_cmd.cpp elaborator.cpp
-dependencies.cpp parser_bindings.cpp proof_qed_ext.cpp
+dependencies.cpp parser_bindings.cpp begin_end_ext.cpp
class.cpp pp_options.cpp tactic_hint.cpp pp.cpp theorem_queue.cpp
structure_cmd.cpp info_manager.cpp noinfo.cpp)
diff --git a/src/frontends/lean/proof_qed_ext.cpp b/src/frontends/lean/begin_end_ext.cpp
similarity index 57%
rename from src/frontends/lean/proof_qed_ext.cpp
rename to src/frontends/lean/begin_end_ext.cpp
index d344198a2..6b69b9878 100644
--- a/src/frontends/lean/proof_qed_ext.cpp
+++ b/src/frontends/lean/begin_end_ext.cpp
@@ -14,22 +14,22 @@ Author: Leonardo de Moura
namespace lean {
// This (scoped) environment extension allows us to set a tactic to be applied before every element
-// in a proof ... qed block
-struct pq_entry {
+// in a begin ... end block
+struct be_entry {
bool m_accumulate; // if true, then accumulate the new tactic, if false replace
expr m_tac;
- pq_entry():m_accumulate(false) {}
- pq_entry(bool a, expr const & t):m_accumulate(a), m_tac(t) {}
+ be_entry():m_accumulate(false) {}
+ be_entry(bool a, expr const & t):m_accumulate(a), m_tac(t) {}
};
-struct pq_state {
+struct be_state {
optional m_pre_tac;
optional m_pre_tac_body;
};
-struct pq_config {
- typedef pq_state state;
- typedef pq_entry entry;
+struct be_config {
+ typedef be_state state;
+ typedef be_entry entry;
static void add_entry(environment const &, io_state const &, state & s, entry const & e) {
if (e.m_accumulate) {
if (s.m_pre_tac_body)
@@ -44,11 +44,11 @@ struct pq_config {
}
}
static name const & get_class_name() {
- static name g_class_name("proof_qed");
+ static name g_class_name("begin_end");
return g_class_name;
}
static std::string const & get_serialization_key() {
- static std::string g_key("pq_pre_tac");
+ static std::string g_key("be_pre_tac");
return g_key;
}
static void write_entry(serializer & s, entry const & e) {
@@ -61,42 +61,42 @@ struct pq_config {
}
};
-template class scoped_ext;
-typedef scoped_ext proof_qed_ext;
+template class scoped_ext;
+typedef scoped_ext begin_end_ext;
static void check_valid_tactic(environment const & env, expr const & pre_tac) {
type_checker tc(env);
if (!tc.is_def_eq(tc.infer(pre_tac).first, get_tactic_type()).first)
- throw exception("invalid proof-qed pre-tactic update, argument is not a tactic");
+ throw exception("invalid begin-end pre-tactic update, argument is not a tactic");
}
-environment add_proof_qed_pre_tactic(environment const & env, expr const & pre_tac) {
+environment add_begin_end_pre_tactic(environment const & env, expr const & pre_tac) {
check_valid_tactic(env, pre_tac);
- return proof_qed_ext::add_entry(env, get_dummy_ios(), pq_entry(true, pre_tac));
+ return begin_end_ext::add_entry(env, get_dummy_ios(), be_entry(true, pre_tac));
}
-environment set_proof_qed_pre_tactic(environment const & env, expr const & pre_tac) {
+environment set_begin_end_pre_tactic(environment const & env, expr const & pre_tac) {
check_valid_tactic(env, pre_tac);
- return proof_qed_ext::add_entry(env, get_dummy_ios(), pq_entry(false, pre_tac));
+ return begin_end_ext::add_entry(env, get_dummy_ios(), be_entry(false, pre_tac));
}
-optional get_proof_qed_pre_tactic(environment const & env) {
- pq_state const & s = proof_qed_ext::get_state(env);
+optional get_begin_end_pre_tactic(environment const & env) {
+ be_state const & s = begin_end_ext::get_state(env);
return s.m_pre_tac;
}
-environment add_proof_qed_cmd(parser & p) {
- return add_proof_qed_pre_tactic(p.env(), parse_tactic_name(p));
+environment add_begin_end_cmd(parser & p) {
+ return add_begin_end_pre_tactic(p.env(), parse_tactic_name(p));
}
-environment set_proof_qed_cmd(parser & p) {
- return set_proof_qed_pre_tactic(p.env(), parse_tactic_name(p));
+environment set_begin_end_cmd(parser & p) {
+ return set_begin_end_pre_tactic(p.env(), parse_tactic_name(p));
}
-void register_proof_qed_cmds(cmd_table & r) {
- add_cmd(r, cmd_info("add_proof_qed", "add a new tactic to be automatically applied before every component in a 'proof-qed' block",
- add_proof_qed_cmd));
- add_cmd(r, cmd_info("set_proof_qed", "reset the tactic that is automatically applied before every component in a 'proof-qed' block",
- set_proof_qed_cmd));
+void register_begin_end_cmds(cmd_table & r) {
+ add_cmd(r, cmd_info("add_begin_end_tactic", "add a new tactic to be automatically applied before every component in a 'begin-end' block",
+ add_begin_end_cmd));
+ add_cmd(r, cmd_info("set_begin_end_tactic", "reset the tactic that is automatically applied before every component in a 'begin-end' block",
+ set_begin_end_cmd));
}
}
diff --git a/src/frontends/lean/proof_qed_ext.h b/src/frontends/lean/begin_end_ext.h
similarity index 56%
rename from src/frontends/lean/proof_qed_ext.h
rename to src/frontends/lean/begin_end_ext.h
index 4e4e6e88a..d2ed30bbb 100644
--- a/src/frontends/lean/proof_qed_ext.h
+++ b/src/frontends/lean/begin_end_ext.h
@@ -9,8 +9,8 @@ Author: Leonardo de Moura
#include "frontends/lean/cmd_table.h"
namespace lean {
-environment add_proof_qed_pre_tactic(environment const & env, expr const & pre_tac);
-environment reset_proof_qed_pre_tactic(environment const & env, expr const & pre_tac);
-optional get_proof_qed_pre_tactic(environment const & env);
-void register_proof_qed_cmds(cmd_table & r);
+environment add_begin_end_pre_tactic(environment const & env, expr const & pre_tac);
+environment reset_begin_end_pre_tactic(environment const & env, expr const & pre_tac);
+optional get_begin_end_pre_tactic(environment const & env);
+void register_begin_end_cmds(cmd_table & r);
}
diff --git a/src/frontends/lean/builtin_cmds.cpp b/src/frontends/lean/builtin_cmds.cpp
index 7a90cccb1..f12e588e6 100644
--- a/src/frontends/lean/builtin_cmds.cpp
+++ b/src/frontends/lean/builtin_cmds.cpp
@@ -22,7 +22,7 @@ Author: Leonardo de Moura
#include "frontends/lean/notation_cmd.h"
#include "frontends/lean/inductive_cmd.h"
#include "frontends/lean/structure_cmd.h"
-#include "frontends/lean/proof_qed_ext.h"
+#include "frontends/lean/begin_end_ext.h"
#include "frontends/lean/decl_cmds.h"
#include "frontends/lean/class.h"
#include "frontends/lean/tactic_hint.h"
@@ -312,7 +312,7 @@ cmd_table init_cmd_table() {
register_structure_cmd(r);
register_notation_cmds(r);
register_calc_cmds(r);
- register_proof_qed_cmds(r);
+ register_begin_end_cmds(r);
register_class_cmds(r);
register_tactic_hint_cmd(r);
return r;
diff --git a/src/frontends/lean/builtin_exprs.cpp b/src/frontends/lean/builtin_exprs.cpp
index e4a259001..75c6fdfae 100644
--- a/src/frontends/lean/builtin_exprs.cpp
+++ b/src/frontends/lean/builtin_exprs.cpp
@@ -14,7 +14,7 @@ Author: Leonardo de Moura
#include "frontends/lean/builtin_exprs.h"
#include "frontends/lean/token_table.h"
#include "frontends/lean/calc.h"
-#include "frontends/lean/proof_qed_ext.h"
+#include "frontends/lean/begin_end_ext.h"
#include "frontends/lean/parser.h"
#include "frontends/lean/util.h"
@@ -22,7 +22,7 @@ namespace lean {
namespace notation {
static name g_llevel_curly(".{"), g_rcurly("}"), g_in("in"), g_colon(":"), g_assign(":=");
static name g_comma(","), g_fact("[fact]"), g_inline("[inline]"), g_from("from"), g_using("using");
-static name g_then("then"), g_have("have"), g_by("by"), g_qed("qed");
+static name g_then("then"), g_have("have"), g_by("by"), g_qed("qed"), g_end("end");
static name g_take("take"), g_assume("assume"), g_show("show"), g_fun("fun");
static expr parse_Type(parser & p, unsigned, expr const *, pos_info const & pos) {
@@ -138,10 +138,10 @@ static expr parse_by(parser & p, unsigned, expr const *, pos_info const & pos) {
return p.mk_by(t, pos);
}
-static expr parse_proof_qed(parser & p, unsigned, expr const *, pos_info const & pos) {
+static expr parse_begin_end(parser & p, unsigned, expr const *, pos_info const & pos) {
if (!p.has_tactic_decls())
- throw parser_error("invalid 'proof' expression, tactic module has not been imported", pos);
- optional pre_tac = get_proof_qed_pre_tactic(p.env());
+ throw parser_error("invalid 'begin-end' expression, tactic module has not been imported", pos);
+ optional pre_tac = get_begin_end_pre_tactic(p.env());
optional r;
while (true) {
bool use_exact = (p.curr_is_token(g_have) || p.curr_is_token(g_show) || p.curr_is_token(g_assume) ||
@@ -154,14 +154,14 @@ static expr parse_proof_qed(parser & p, unsigned, expr const *, pos_info const &
tac = p.mk_app({get_and_then_tac_fn(), *pre_tac, tac}, pos);
tac = p.mk_app(get_determ_tac_fn(), tac, pos);
r = r ? p.mk_app({get_and_then_tac_fn(), *r, tac}, pos) : tac;
- if (p.curr_is_token(g_qed)) {
+ if (p.curr_is_token(g_end)) {
auto pos = p.pos();
p.next();
return p.mk_by(*r, pos);
} else if (p.curr_is_token(g_comma)) {
p.next();
} else {
- throw parser_error("invalid proof-qed, ',' or 'qed' expected", p.pos());
+ throw parser_error("invalid begin-end, ',' or 'end' expected", p.pos());
}
}
}
@@ -387,7 +387,7 @@ parse_table init_nud_table() {
r = r.add({transition("calc", mk_ext_action(parse_calc_expr))}, x0);
r = r.add({transition("#", mk_ext_action(parse_overwrite_notation))}, x0);
r = r.add({transition("@", mk_ext_action(parse_explicit_expr))}, x0);
- r = r.add({transition("proof", mk_ext_action(parse_proof_qed))}, x0);
+ r = r.add({transition("begin", mk_ext_action(parse_begin_end))}, x0);
r = r.add({transition("sorry", mk_ext_action(parse_sorry))}, x0);
r = r.add({transition("including", mk_ext_action(parse_including_expr))}, x0);
return r;
diff --git a/src/frontends/lean/token_table.cpp b/src/frontends/lean/token_table.cpp
index bc9c56803..f93c95910 100644
--- a/src/frontends/lean/token_table.cpp
+++ b/src/frontends/lean/token_table.cpp
@@ -70,7 +70,7 @@ token_table init_token_table() {
{"from", 0}, {"(", g_max_prec}, {")", 0}, {"{", g_max_prec}, {"}", 0}, {"_", g_max_prec},
{"[", g_max_prec}, {"]", 0}, {"⦃", g_max_prec}, {"⦄", 0}, {".{", 0}, {"Type", g_max_prec}, {"Type'", g_max_prec},
{"|", 0}, {"!", 0}, {"with", 0}, {"...", 0}, {",", 0}, {".", 0}, {":", 0}, {"::", 0}, {"calc", 0}, {":=", 0}, {"--", 0}, {"#", 0},
- {"(*", 0}, {"(--", 0}, {"proof", 0}, {"qed", 0}, {"@", g_max_prec}, {"including", 0}, {"sorry", g_max_prec},
+ {"(*", 0}, {"(--", 0}, {"begin", g_max_prec}, {"proof", g_max_prec}, {"qed", 0}, {"@", g_max_prec}, {"including", 0}, {"sorry", g_max_prec},
{"+", g_plus_prec}, {g_cup, g_cup_prec}, {"->", g_arrow_prec}, {nullptr, 0}};
char const * commands[] = {"theorem", "axiom", "variable", "definition", "coercion",
@@ -79,7 +79,7 @@ token_table init_token_table() {
"abbreviation", "inductive", "record", "renaming", "extends", "structure", "module", "universe",
"precedence", "infixl", "infixr", "infix", "postfix", "prefix", "notation",
"exit", "set_option", "using", "calc_subst", "calc_refl", "calc_trans", "tactic_hint",
- "add_proof_qed", "set_proof_qed", "instance", "#erase_cache", nullptr};
+ "add_begin_end_tactic", "set_begin_end_tactic", "instance", "#erase_cache", nullptr};
pair aliases[] =
{{g_lambda_unicode, "fun"}, {"forall", "Pi"}, {g_forall_unicode, "Pi"}, {g_pi_unicode, "Pi"},
diff --git a/tests/lean/run/tactic13.lean b/tests/lean/run/tactic13.lean
index 23e47ace4..401de949c 100644
--- a/tests/lean/run/tactic13.lean
+++ b/tests/lean/run/tactic13.lean
@@ -2,11 +2,11 @@ import standard
using tactic
theorem tst (a b : Prop) (H : ¬ a ∨ ¬ b) (Hb : b) : ¬ a ∧ b :=
-proof
+begin
apply and_intro,
apply not_intro,
assume Ha, or_elim H
(assume Hna, absurd Ha Hna)
(assume Hnb, absurd Hb Hnb),
assumption
-qed
\ No newline at end of file
+end
\ No newline at end of file
diff --git a/tests/lean/run/tactic14.lean b/tests/lean/run/tactic14.lean
index 4a5f67b63..1cdda0811 100644
--- a/tests/lean/run/tactic14.lean
+++ b/tests/lean/run/tactic14.lean
@@ -4,11 +4,11 @@ using tactic
definition basic_tac : tactic
:= repeat [apply @and_intro | assumption]
-set_proof_qed basic_tac -- basic_tac is automatically applied to each element of a proof-qed block
+set_begin_end_tactic basic_tac -- basic_tac is automatically applied to each element of a proof-qed block
theorem tst (a b : Prop) (H : ¬ a ∨ ¬ b) (Hb : b) : ¬ a ∧ b :=
-proof
+begin
assume Ha, or_elim H
(assume Hna, absurd Ha Hna)
(assume Hnb, absurd Hb Hnb)
-qed
\ No newline at end of file
+end
\ No newline at end of file