feat(nat): add unfold attributes to add, mul, sub and of_num in namespace nat_esimp in both libraries
This commit is contained in:
parent
747d12a385
commit
11b1f416f6
6 changed files with 17 additions and 5 deletions
|
@ -290,3 +290,9 @@ namespace nat
|
||||||
|
|
||||||
lemma sub_lt_succ (a b : ℕ) : a - b < succ a := lt_succ_of_le (sub_le a b)
|
lemma sub_lt_succ (a b : ℕ) : a - b < succ a := lt_succ_of_le (sub_le a b)
|
||||||
end nat
|
end nat
|
||||||
|
|
||||||
|
namespace nat_esimp
|
||||||
|
open nat
|
||||||
|
attribute add mul sub [unfold 2]
|
||||||
|
attribute of_num [unfold 1]
|
||||||
|
end nat_esimp
|
||||||
|
|
|
@ -130,4 +130,4 @@ namespace nat
|
||||||
num.rec zero
|
num.rec zero
|
||||||
(λ n, pos_num.rec (succ zero) (λ n r, r + r + (succ zero)) (λ n r, r + r) n) n
|
(λ n, pos_num.rec (succ zero) (λ n r, r + r + (succ zero)) (λ n r, r + r) n) n
|
||||||
end nat
|
end nat
|
||||||
attribute nat.of_num [reducible] [constructor] -- of_num is also reducible if namespace "nat" is not opened
|
attribute nat.of_num [reducible] -- of_num is also reducible if namespace "nat" is not opened
|
||||||
|
|
|
@ -247,3 +247,9 @@ namespace nat
|
||||||
theorem sub_lt_succ_iff_true [simp] (a b : ℕ) : a - b < succ a ↔ true :=
|
theorem sub_lt_succ_iff_true [simp] (a b : ℕ) : a - b < succ a ↔ true :=
|
||||||
iff_true_intro !sub_lt_succ
|
iff_true_intro !sub_lt_succ
|
||||||
end nat
|
end nat
|
||||||
|
|
||||||
|
namespace nat_esimp
|
||||||
|
open nat
|
||||||
|
attribute add mul sub [unfold 2]
|
||||||
|
attribute of_num [unfold 1]
|
||||||
|
end nat_esimp
|
||||||
|
|
|
@ -127,4 +127,4 @@ namespace nat
|
||||||
num.rec zero
|
num.rec zero
|
||||||
(λ n, pos_num.rec (succ zero) (λ n r, r + r + (succ zero)) (λ n r, r + r) n) n
|
(λ n, pos_num.rec (succ zero) (λ n r, r + r + (succ zero)) (λ n r, r + r) n) n
|
||||||
end nat
|
end nat
|
||||||
attribute nat.of_num [reducible] [constructor] -- of_num is also reducible if namespace "nat" is not opened
|
attribute nat.of_num [reducible] -- of_num is also reducible if namespace "nat" is not opened
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
open nat
|
open nat nat_esimp
|
||||||
|
|
||||||
definition foo [unfold 1 3] (a : nat) (b : nat) (c :nat) : nat :=
|
definition foo [unfold 1 3] (a : nat) (b : nat) (c :nat) : nat :=
|
||||||
(a + c) * b
|
(a + c) * b
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
693.lean:10:2: proof state
|
693.lean:10:2: proof state
|
||||||
c : ℕ,
|
c : ℕ,
|
||||||
h : c = 1
|
h : c = 1
|
||||||
⊢ (1 + 0) * c = (1 + 0) * 1
|
⊢ 1 * c = 1
|
||||||
693.lean:18:2: proof state
|
693.lean:18:2: proof state
|
||||||
b c : ℕ,
|
b c : ℕ,
|
||||||
h : c = 1
|
h : c = 1
|
||||||
|
@ -13,4 +13,4 @@ h : c = 1
|
||||||
693.lean:34:2: proof state
|
693.lean:34:2: proof state
|
||||||
b c : ℕ,
|
b c : ℕ,
|
||||||
h : c = 1
|
h : c = 1
|
||||||
⊢ (1 + 1) * c = foo c 1 1
|
⊢ 2 * c = foo c 1 1
|
||||||
|
|
Loading…
Reference in a new issue