feat: add @[grind] annotations to contains_iff_mem lemmas (#8328)

This PR adds the `@[grind =]` attribute to all `contains_iff_mem`
lemmas.
This commit is contained in:
Kim Morrison 2025-05-14 08:03:46 +08:00 committed by GitHub
parent 5b2e39e3b5
commit 7688fbb067
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
18 changed files with 18 additions and 15 deletions

View file

@ -3740,6 +3740,7 @@ theorem contains_iff_exists_mem_beq [BEq α] {xs : Array α} {a : α} :
rcases xs with ⟨xs⟩
simp [List.contains_iff_exists_mem_beq]
@[grind =]
theorem contains_iff_mem [BEq α] [LawfulBEq α] {xs : Array α} {a : α} :
xs.contains a ↔ a ∈ xs := by
simp

View file

@ -2938,6 +2938,7 @@ theorem contains_iff_exists_mem_beq [BEq α] {l : List α} {a : α} :
l.contains a ↔ ∃ a' ∈ l, a == a' := by
induction l <;> simp_all
@[grind =]
theorem contains_iff_mem [BEq α] [LawfulBEq α] {l : List α} {a : α} :
l.contains a ↔ a ∈ l := by
simp

View file

@ -2679,6 +2679,7 @@ theorem contains_iff_exists_mem_beq [BEq α] {xs : Vector α n} {a : α} :
rcases xs with ⟨xs, rfl⟩
simp [Array.contains_iff_exists_mem_beq]
@[grind =]
theorem contains_iff_mem [BEq α] [LawfulBEq α] {xs : Vector α n} {a : α} :
xs.contains a ↔ a ∈ xs := by
simp

View file

@ -51,7 +51,7 @@ theorem mem_iff_contains {a : α} : a ∈ m ↔ m.contains a :=
-- While setting up the API, often use this in the reverse direction,
-- but prefer this direction for users.
@[simp]
@[simp, grind =]
theorem contains_iff_mem {a : α} : m.contains a ↔ a ∈ m :=
Iff.rfl

View file

@ -102,7 +102,7 @@ theorem isEmpty_insert [EquivBEq α] [LawfulHashable α] (h : m.WF) {k : α} {v
theorem mem_iff_contains {m : Raw α β} {a : α} :
a ∈ m ↔ m.contains a := Iff.rfl
@[simp]
@[simp, grind =]
theorem contains_iff_mem {m : Raw α β} {a : α} :
m.contains a ↔ a ∈ m := Iff.rfl

View file

@ -41,7 +41,7 @@ theorem isEmpty_insert [TransCmp cmp] {k : α} {v : β k} :
theorem mem_iff_contains {k : α} : k ∈ t ↔ t.contains k :=
Impl.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {k : α} : t.contains k ↔ k ∈ t :=
Impl.contains_iff_mem

View file

@ -42,7 +42,7 @@ theorem isEmpty_insert [TransCmp cmp] (h : t.WF) {k : α} {v : β k} :
theorem mem_iff_contains {k : α} : k ∈ t ↔ t.contains k :=
Impl.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {k : α} : t.contains k ↔ k ∈ t :=
Impl.contains_iff_mem

View file

@ -51,7 +51,7 @@ theorem not_insert_eq_empty [EquivBEq α] [LawfulHashable α] {k : α} {v : β k
theorem mem_iff_contains [EquivBEq α] [LawfulHashable α] {a : α} : a ∈ m ↔ m.contains a :=
Iff.rfl
@[simp]
@[simp, grind =]
theorem contains_iff_mem [EquivBEq α] [LawfulHashable α] {a : α} : m.contains a ↔ a ∈ m :=
Iff.rfl

View file

@ -55,7 +55,7 @@ theorem not_insert_eq_empty [EquivBEq α] [LawfulHashable α] {k : α} {v : β}
theorem mem_iff_contains [EquivBEq α] [LawfulHashable α] {a : α} : a ∈ m ↔ m.contains a :=
ExtDHashMap.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem [EquivBEq α] [LawfulHashable α] {a : α} : m.contains a ↔ a ∈ m :=
Iff.rfl

View file

@ -55,7 +55,7 @@ theorem not_insert_eq_empty [EquivBEq α] [LawfulHashable α] {k : α} :
theorem mem_iff_contains [EquivBEq α] [LawfulHashable α] {a : α} : a ∈ m ↔ m.contains a :=
ExtHashMap.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem [EquivBEq α] [LawfulHashable α] {a : α} : m.contains a ↔ a ∈ m :=
ExtHashMap.contains_iff_mem

View file

@ -52,7 +52,7 @@ theorem isEmpty_insert [EquivBEq α] [LawfulHashable α] {k : α} {v : β} :
theorem mem_iff_contains {a : α} : a ∈ m ↔ m.contains a :=
DHashMap.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {a : α} : m.contains a ↔ a ∈ m :=
DHashMap.contains_iff_mem

View file

@ -68,7 +68,7 @@ theorem isEmpty_insert [EquivBEq α] [LawfulHashable α] (h : m.WF) {k : α} {v
theorem mem_iff_contains {a : α} : a ∈ m ↔ m.contains a :=
DHashMap.Raw.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {a : α} : m.contains a ↔ a ∈ m :=
DHashMap.Raw.contains_iff_mem

View file

@ -50,7 +50,7 @@ theorem isEmpty_insert [EquivBEq α] [LawfulHashable α] {a : α} : (m.insert a)
theorem mem_iff_contains {a : α} : a ∈ m ↔ m.contains a :=
HashMap.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {a : α} : m.contains a ↔ a ∈ m :=
HashMap.contains_iff_mem

View file

@ -68,7 +68,7 @@ theorem isEmpty_insert [EquivBEq α] [LawfulHashable α] (h : m.WF) {a : α} :
theorem mem_iff_contains {a : α} : a ∈ m ↔ m.contains a :=
HashMap.Raw.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {a : α} : m.contains a ↔ a ∈ m :=
HashMap.Raw.contains_iff_mem

View file

@ -38,7 +38,7 @@ theorem isEmpty_insert [TransCmp cmp] {k : α} {v : β} :
theorem mem_iff_contains {k : α} : k ∈ t ↔ t.contains k :=
DTreeMap.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {k : α} : t.contains k ↔ k ∈ t :=
DTreeMap.contains_iff_mem

View file

@ -39,7 +39,7 @@ theorem isEmpty_insert [TransCmp cmp] (h : t.WF) {k : α} {v : β} :
theorem mem_iff_contains {k : α} : k ∈ t ↔ t.contains k :=
DTreeMap.Raw.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {k : α} : t.contains k ↔ k ∈ t :=
DTreeMap.Raw.contains_iff_mem

View file

@ -38,7 +38,7 @@ theorem isEmpty_insert [TransCmp cmp] {k : α} :
theorem mem_iff_contains {k : α} : k ∈ t ↔ t.contains k :=
TreeMap.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {k : α} : t.contains k ↔ k ∈ t :=
TreeMap.contains_iff_mem

View file

@ -39,7 +39,7 @@ theorem isEmpty_insert [TransCmp cmp] (h : t.WF) {k : α} :
theorem mem_iff_contains {k : α} : k ∈ t ↔ t.contains k :=
TreeMap.Raw.mem_iff_contains
@[simp]
@[simp, grind =]
theorem contains_iff_mem {k : α} : t.contains k ↔ k ∈ t :=
TreeMap.Raw.contains_iff_mem