chore(library/init/core): remove unnecessary annotations

This commit is contained in:
Leonardo de Moura 2016-10-07 16:09:14 -07:00
parent 7336c4dade
commit eaef8dae20
4 changed files with 53 additions and 88 deletions

View file

@ -454,90 +454,113 @@ From now on, the inductive compiler will automatically generate sizeof instances
instance default_has_sizeof (A : Type u) : has_sizeof A :=
⟨λ a, nat.zero⟩
attribute [simp, defeq, simp.sizeof]
/- TODO(Leo): the [simp.sizeof] annotations are not really necessary.
What we need is a robust way of unfolding sizeof definitions. -/
attribute [simp.sizeof]
def default_has_sizeof_eq (A : Type u) (a : A) : @sizeof A (default_has_sizeof A) a = 0 :=
rfl
instance : has_sizeof nat := ⟨λ a, a⟩
instance : has_sizeof nat :=
⟨λ a, a⟩
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_nat_eq (a : nat) : sizeof a = a :=
rfl
instance (A : Type u) (B : Type v) [has_sizeof A] [has_sizeof B] : has_sizeof (prod A B) :=
⟨λ p, prod.cases_on p (λ a b, 1 + sizeof a + sizeof b)⟩
protected def prod.sizeof {A : Type u} {B : Type v} [has_sizeof A] [has_sizeof B] : (prod A B) → nat
| ⟨a, b⟩ := 1 + sizeof a + sizeof b
attribute [simp, defeq, simp.sizeof]
instance (A : Type u) (B : Type v) [has_sizeof A] [has_sizeof B] : has_sizeof (prod A B) :=
⟨prod.sizeof⟩
attribute [simp.sizeof]
def sizeof_prod_eq {A : Type u} {B : Type v} [has_sizeof A] [has_sizeof B] (a : A) (b : B) : sizeof (prod.mk a b) = 1 + sizeof a + sizeof b :=
rfl
instance (A : Type u) (B : Type v) [has_sizeof A] [has_sizeof B] : has_sizeof (sum A B) :=
⟨λ s, sum.cases_on s (λ a, 1 + sizeof a) (λ b, 1 + sizeof b)⟩
protected def sum.sizeof {A : Type u} {B : Type v} [has_sizeof A] [has_sizeof B] : (sum A B) → nat
| (sum.inl a) := 1 + sizeof a
| (sum.inr b) := 1 + sizeof b
attribute [simp, defeq, simp.sizeof]
instance (A : Type u) (B : Type v) [has_sizeof A] [has_sizeof B] : has_sizeof (sum A B) :=
⟨sum.sizeof⟩
attribute [simp.sizeof]
def sizeof_sum_eq_left {A : Type u} {B : Type v} [has_sizeof A] [has_sizeof B] (a : A) : sizeof (@sum.inl A B a) = 1 + sizeof a :=
rfl
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_sum_eq_right {A : Type u} {B : Type v} [has_sizeof A] [has_sizeof B] (b : B) : sizeof (@sum.inr A B b) = 1 + sizeof b :=
rfl
instance (A : Type u) (B : A → Type v) [has_sizeof A] [∀ a, has_sizeof (B a)] : has_sizeof (sigma B) :=
⟨λ p, sigma.cases_on p (λ a b, 1 + sizeof a + sizeof b)⟩
protected def sigma.sizeof {A : Type u} {B : A → Type v} [has_sizeof A] [∀ a, has_sizeof (B a)] : sigma B → nat
| ⟨a, b⟩ := 1 + sizeof a + sizeof b
attribute [simp, defeq, simp.sizeof]
instance (A : Type u) (B : A → Type v) [has_sizeof A] [∀ a, has_sizeof (B a)] : has_sizeof (sigma B) :=
⟨sigma.sizeof⟩
attribute [simp.sizeof]
def sizeof_sigma_eq {A : Type u} {B : A → Type v} [has_sizeof A] [∀ a, has_sizeof (B a)] (a : A) (b : B a) : sizeof (@sigma.mk A B a b) = 1 + sizeof a + sizeof b :=
rfl
instance : has_sizeof unit := ⟨λ u, 1⟩
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_unit_eq (u : unit) : sizeof u = 1 :=
rfl
instance : has_sizeof poly_unit := ⟨λ u, 1⟩
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_poly_unit_eq (u : poly_unit) : sizeof u = 1 :=
rfl
instance : has_sizeof bool := ⟨λ u, 1⟩
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_bool_eq (b : bool) : sizeof b = 1 :=
rfl
instance : has_sizeof pos_num := ⟨λ p, nat.of_pos_num p⟩
instance : has_sizeof pos_num :=
⟨nat.of_pos_num⟩
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_pos_num_eq (p : pos_num) : sizeof p = nat.of_pos_num p :=
rfl
instance : has_sizeof num := ⟨λ p, nat.of_num p⟩
instance : has_sizeof num :=
⟨nat.of_num⟩
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_num_eq (n : num) : sizeof n = nat.of_num n :=
rfl
instance (A : Type u) [has_sizeof A] : has_sizeof (option A) :=
⟨λ o, option.cases_on o 1 (λ a, 1 + sizeof a)⟩
protected def option.sizeof {A : Type u} [has_sizeof A] : option A → nat
| none := 1
| (some a) := 1 + sizeof a
attribute [simp, defeq, simp.sizeof]
instance (A : Type u) [has_sizeof A] : has_sizeof (option A) :=
⟨option.sizeof⟩
attribute [simp.sizeof]
def sizeof_option_none_eq (A : Type u) [has_sizeof A] : sizeof (@none A) = 1 :=
rfl
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_option_some_eq {A : Type u} [has_sizeof A] (a : A) : sizeof (some a) = 1 + sizeof a :=
rfl
instance (A : Type u) [has_sizeof A] : has_sizeof (list A) :=
⟨λ l, list.rec_on l 1 (λ a t ih, 1 + sizeof a + ih)⟩
protected def list.sizeof {A : Type u} [has_sizeof A] : list A → nat
| list.nil := 1
| (list.cons a l) := 1 + sizeof a + list.sizeof l
attribute [simp, defeq, simp.sizeof]
instance (A : Type u) [has_sizeof A] : has_sizeof (list A) :=
⟨list.sizeof⟩
attribute [simp.sizeof]
def sizeof_list_nil_eq (A : Type u) [has_sizeof A] : sizeof (@list.nil A) = 1 :=
rfl
attribute [simp, defeq, simp.sizeof]
attribute [simp.sizeof]
def sizeof_list_cons_eq {A : Type u} [has_sizeof A] (a : A) (l : list A) : sizeof (list.cons a l) = 1 + sizeof a + sizeof l :=
rfl

View file

@ -1,21 +1,6 @@
reflexivity lemmas:
foo.d.def #4, d ?x_0 ?x_1 ?x_2 ?x_3 ↦ f (f ?x_0 ?x_1 ?x_2) (f ?x_1 ?x_2 ?x_3) (f ?x_0 ?x_3 ?x_2)
foo.f.def #3, f ?x_0 ?x_1 ?x_2 ↦ g (g ?x_0 ?x_1) ?x_2
sizeof_list_cons_eq #4, sizeof (?x_2 :: ?x_3) ↦ 1 + sizeof ?x_2 + sizeof ?x_3
sizeof_list_nil_eq #2, sizeof list.nil ↦ 1
sizeof_option_some_eq #3, sizeof (some ?x_2) ↦ 1 + sizeof ?x_2
sizeof_option_none_eq #2, sizeof none ↦ 1
sizeof_num_eq #1, sizeof ?x_0 ↦ nat.of_num ?x_0
sizeof_pos_num_eq #1, sizeof ?x_0 ↦ nat.of_pos_num ?x_0
sizeof_bool_eq #1, sizeof ?x_0 ↦ 1
sizeof_poly_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_sigma_eq #6, sizeof (sigma.mk ?x_4 ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_sum_eq_right #5, sizeof (sum.inr ?x_4) ↦ 1 + sizeof ?x_4
sizeof_sum_eq_left #5, sizeof (sum.inl ?x_4) ↦ 1 + sizeof ?x_4
sizeof_prod_eq #6, sizeof (?x_4, ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_nat_eq #1, sizeof ?x_0 ↦ ?x_0
default_has_sizeof_eq #2, sizeof ?x_1 ↦ 0
id.def #2, id ?x_1 ↦ ?x_1
foo.g.def #2, g ?x_0 ?x_1 ↦ h ?x_1
ne.def #3, ?x_1 ≠ ?x_2 ↦ ¬?x_1 = ?x_2

View file

@ -3,21 +3,6 @@ foo.d.def #4, d ?x_0 ?x_1 ?x_2 ?x_3 ↦ f (f ?x_0 ?x_1 ?x_2) (f ?x_1 ?x_2 ?x_3)
foo.d.rfl #4, d ?x_0 ?x_1 ?x_2 ?x_3 ↦ ?x_2
foo.f.def #3, f ?x_0 ?x_1 ?x_2 ↦ g (g ?x_0 ?x_1) ?x_2
foo.f.rfl #3, f ?x_0 ?x_1 ?x_2 ↦ ?x_2
sizeof_list_cons_eq #4, sizeof (?x_2 :: ?x_3) ↦ 1 + sizeof ?x_2 + sizeof ?x_3
sizeof_list_nil_eq #2, sizeof list.nil ↦ 1
sizeof_option_some_eq #3, sizeof (some ?x_2) ↦ 1 + sizeof ?x_2
sizeof_option_none_eq #2, sizeof none ↦ 1
sizeof_num_eq #1, sizeof ?x_0 ↦ nat.of_num ?x_0
sizeof_pos_num_eq #1, sizeof ?x_0 ↦ nat.of_pos_num ?x_0
sizeof_bool_eq #1, sizeof ?x_0 ↦ 1
sizeof_poly_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_sigma_eq #6, sizeof (sigma.mk ?x_4 ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_sum_eq_right #5, sizeof (sum.inr ?x_4) ↦ 1 + sizeof ?x_4
sizeof_sum_eq_left #5, sizeof (sum.inl ?x_4) ↦ 1 + sizeof ?x_4
sizeof_prod_eq #6, sizeof (?x_4, ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_nat_eq #1, sizeof ?x_0 ↦ ?x_0
default_has_sizeof_eq #2, sizeof ?x_1 ↦ 0
id.def #2, id ?x_1 ↦ ?x_1
foo.g.def #2, g ?x_0 ?x_1 ↦ h ?x_1
foo.g.rfl #2, g ?x_0 ?x_1 ↦ ?x_1
@ -29,21 +14,6 @@ foo.d.rfl #4 (prio: 1001), d ?x_0 ?x_1 ?x_2 ?x_3 ↦ ?x_2
foo.d.def #4, d ?x_0 ?x_1 ?x_2 ?x_3 ↦ f (f ?x_0 ?x_1 ?x_2) (f ?x_1 ?x_2 ?x_3) (f ?x_0 ?x_3 ?x_2)
foo.f.rfl #3 (prio: 1001), f ?x_0 ?x_1 ?x_2 ↦ ?x_2
foo.f.def #3, f ?x_0 ?x_1 ?x_2 ↦ g (g ?x_0 ?x_1) ?x_2
sizeof_list_cons_eq #4, sizeof (?x_2 :: ?x_3) ↦ 1 + sizeof ?x_2 + sizeof ?x_3
sizeof_list_nil_eq #2, sizeof list.nil ↦ 1
sizeof_option_some_eq #3, sizeof (some ?x_2) ↦ 1 + sizeof ?x_2
sizeof_option_none_eq #2, sizeof none ↦ 1
sizeof_num_eq #1, sizeof ?x_0 ↦ nat.of_num ?x_0
sizeof_pos_num_eq #1, sizeof ?x_0 ↦ nat.of_pos_num ?x_0
sizeof_bool_eq #1, sizeof ?x_0 ↦ 1
sizeof_poly_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_sigma_eq #6, sizeof (sigma.mk ?x_4 ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_sum_eq_right #5, sizeof (sum.inr ?x_4) ↦ 1 + sizeof ?x_4
sizeof_sum_eq_left #5, sizeof (sum.inl ?x_4) ↦ 1 + sizeof ?x_4
sizeof_prod_eq #6, sizeof (?x_4, ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_nat_eq #1, sizeof ?x_0 ↦ ?x_0
default_has_sizeof_eq #2, sizeof ?x_1 ↦ 0
id.def #2, id ?x_1 ↦ ?x_1
foo.g.rfl #2 (prio: 1001), g ?x_0 ?x_1 ↦ ?x_1
foo.g.def #2, g ?x_0 ?x_1 ↦ h ?x_1
@ -55,21 +25,6 @@ foo.d.def #4 (prio: 1001), d ?x_0 ?x_1 ?x_2 ?x_3 ↦ f (f ?x_0 ?x_1 ?x_2) (f ?x_
foo.d.rfl #4 (prio: 1001), d ?x_0 ?x_1 ?x_2 ?x_3 ↦ ?x_2
foo.f.def #3 (prio: 1001), f ?x_0 ?x_1 ?x_2 ↦ g (g ?x_0 ?x_1) ?x_2
foo.f.rfl #3 (prio: 1001), f ?x_0 ?x_1 ?x_2 ↦ ?x_2
sizeof_list_cons_eq #4, sizeof (?x_2 :: ?x_3) ↦ 1 + sizeof ?x_2 + sizeof ?x_3
sizeof_list_nil_eq #2, sizeof list.nil ↦ 1
sizeof_option_some_eq #3, sizeof (some ?x_2) ↦ 1 + sizeof ?x_2
sizeof_option_none_eq #2, sizeof none ↦ 1
sizeof_num_eq #1, sizeof ?x_0 ↦ nat.of_num ?x_0
sizeof_pos_num_eq #1, sizeof ?x_0 ↦ nat.of_pos_num ?x_0
sizeof_bool_eq #1, sizeof ?x_0 ↦ 1
sizeof_poly_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_unit_eq #1, sizeof ?x_0 ↦ 1
sizeof_sigma_eq #6, sizeof (sigma.mk ?x_4 ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_sum_eq_right #5, sizeof (sum.inr ?x_4) ↦ 1 + sizeof ?x_4
sizeof_sum_eq_left #5, sizeof (sum.inl ?x_4) ↦ 1 + sizeof ?x_4
sizeof_prod_eq #6, sizeof (?x_4, ?x_5) ↦ 1 + sizeof ?x_4 + sizeof ?x_5
sizeof_nat_eq #1, sizeof ?x_0 ↦ ?x_0
default_has_sizeof_eq #2, sizeof ?x_1 ↦ 0
id.def #2, id ?x_1 ↦ ?x_1
foo.g.def #2 (prio: 1001), g ?x_0 ?x_1 ↦ h ?x_1
foo.g.rfl #2 (prio: 1001), g ?x_0 ?x_1 ↦ ?x_1

View file

@ -27,6 +27,8 @@ by conversion $
set_option trace.app_builder true
attribute [simp, defeq] sizeof_nat_eq
example (a b c : nat) : (λ x, g (f x (sizeof x))) = (λ x, 0) :=
by conversion $
funext $ do