feat(library/blast/strategies/portfolio): add 'rec_simp'

recursors followed by simplification
This commit is contained in:
Leonardo de Moura 2015-12-31 15:00:38 -08:00
parent 4134fdd925
commit c3dfabf741
3 changed files with 17 additions and 10 deletions
library
src/library/blast/strategies

View file

@ -116,21 +116,21 @@ the associated [simp] lemmas from algebra
local attribute nat.add_zero nat.add_succ [simp]
protected theorem zero_add (n : ) : 0 + n = n :=
nat.induction_on n (by simp) (by simp)
by rec_simp
theorem succ_add (n m : ) : (succ n) + m = succ (n + m) :=
nat.induction_on m (by simp) (by simp)
by rec_simp
local attribute nat.zero_add nat.succ_add [simp]
protected theorem add_comm (n m : ) : n + m = m + n :=
nat.induction_on m (by simp) (by simp)
by rec_simp
theorem succ_add_eq_succ_add (n m : ) : succ n + m = n + succ m :=
by simp
protected theorem add_assoc (n m k : ) : (n + m) + k = n + (m + k) :=
nat.induction_on k (by simp) (by simp)
by rec_simp
protected theorem add_left_comm : Π (n m k : ), n + (m + k) = m + (n + k) :=
left_comm nat.add_comm nat.add_assoc
@ -179,26 +179,26 @@ local attribute nat.mul_zero nat.mul_succ [simp]
-- commutativity, distributivity, associativity, identity
protected theorem zero_mul (n : ) : 0 * n = 0 :=
nat.induction_on n (by simp) (by simp)
by rec_simp
theorem succ_mul (n m : ) : (succ n) * m = (n * m) + m :=
nat.induction_on m (by simp) (by simp)
by rec_simp
local attribute nat.zero_mul nat.succ_mul [simp]
protected theorem mul_comm (n m : ) : n * m = m * n :=
nat.induction_on m (by simp) (by simp)
by rec_simp
protected theorem right_distrib (n m k : ) : (n + m) * k = n * k + m * k :=
nat.induction_on k (by simp) (by simp)
by rec_simp
protected theorem left_distrib (n m k : ) : n * (m + k) = n * m + n * k :=
nat.induction_on k (by simp) (by simp)
by rec_simp
local attribute nat.mul_comm nat.right_distrib nat.left_distrib [simp]
protected theorem mul_assoc (n m k : ) : (n * m) * k = n * (m * k) :=
nat.induction_on k (by simp) (by simp)
by rec_simp
local attribute nat.mul_assoc [simp]

View file

@ -111,6 +111,7 @@ definition simp : tactic := #tactic with_options [blast.strategy "simp"
definition simp_nohyps : tactic := #tactic with_options [blast.strategy "simp_nohyps"] blast
definition simp_topdown : tactic := #tactic with_options [blast.strategy "simp", simplify.top_down true] blast
definition inst_simp : tactic := #tactic with_options [blast.strategy "ematch_simp"] blast
definition rec_simp : tactic := #tactic with_options [blast.strategy "rec_simp"] blast
definition rec_inst_simp : tactic := #tactic with_options [blast.strategy "rec_ematch_simp"] blast
definition cases (h : expr) (ids : opt_identifier_list) : tactic := builtin

View file

@ -59,6 +59,10 @@ static optional<expr> apply_ematch_simp() {
ematch_simp_action)();
}
static optional<expr> apply_rec_simp() {
return rec_and_then(apply_simp)();
}
static optional<expr> apply_rec_ematch_simp() {
return rec_and_then(apply_ematch_simp)();
}
@ -112,6 +116,8 @@ optional<expr> apply_strategy() {
return apply_ematch_simp();
} else if (s_name == "rec_ematch_simp") {
return apply_rec_ematch_simp();
} else if (s_name == "rec_simp") {
return apply_rec_simp();
} else if (s_name == "constructor") {
return apply_constructor();
} else if (s_name == "unit") {