Skip to content

Commit 44e36de

Browse files
authored
feat: strengthen finIdxOf? lemmas (#8678)
This PR makes the LHS of `isSome_finIdxOf?` and `isNone_finIdxOf?` more general.
1 parent a92890e commit 44e36de

File tree

2 files changed

+14
-11
lines changed

2 files changed

+14
-11
lines changed

src/Init/Data/Array/Find.lean

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -743,13 +743,15 @@ theorem finIdxOf?_empty [BEq α] : (#[] : Array α).finIdxOf? a = none := by sim
743743
simp [List.finIdxOf?_eq_some_iff]
744744

745745
@[simp]
746-
theorem isSome_finIdxOf? [BEq α] [LawfulBEq α] {xs : Array α} {a : α} :
747-
(xs.finIdxOf? a).isSome ↔ a ∈ xs := by
746+
theorem isSome_finIdxOf? [BEq α] [PartialEquivBEq α] {xs : Array α} {a : α} :
747+
(xs.finIdxOf? a).isSome = xs.contains a := by
748748
rcases xs with ⟨xs⟩
749749
simp [Array.size]
750750

751-
theorem isNone_finIdxOf? [BEq α] [LawfulBEq α] {xs : Array α} {a : α} :
752-
(xs.finIdxOf? a).isNone = ¬ a ∈ xs := by
753-
simp
751+
@[simp]
752+
theorem isNone_finIdxOf? [BEq α] [PartialEquivBEq α] {xs : Array α} {a : α} :
753+
(xs.finIdxOf? a).isNone = !xs.contains a := by
754+
rcases xs with ⟨xs⟩
755+
simp [Array.size]
754756

755757
end Array

src/Init/Data/List/Find.lean

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1097,17 +1097,18 @@ theorem finIdxOf?_cons [BEq α] {a : α} {xs : List α} :
10971097
simp only [finIdxOf?, findFinIdx?_eq_some_iff, beq_iff_eq]
10981098

10991099
@[simp]
1100-
theorem isSome_finIdxOf? [BEq α] [LawfulBEq α] {l : List α} {a : α} :
1101-
(l.finIdxOf? a).isSome ↔ a ∈ l := by
1100+
theorem isSome_finIdxOf? [BEq α] [PartialEquivBEq α] {l : List α} {a : α} :
1101+
(l.finIdxOf? a).isSome = l.contains a := by
11021102
induction l with
11031103
| nil => simp
11041104
| cons x xs ih =>
11051105
simp only [finIdxOf?_cons]
1106-
split <;> simp_all [@eq_comm _ x a]
1106+
split <;> simp_all [BEq.comm]
11071107

1108-
theorem isNone_finIdxOf? [BEq α] [LawfulBEq α] {l : List α} {a : α} :
1109-
(l.finIdxOf? a).isNone = ¬ a ∈ l := by
1110-
simp
1108+
@[simp]
1109+
theorem isNone_finIdxOf? [BEq α] [PartialEquivBEq α] {l : List α} {a : α} :
1110+
(l.finIdxOf? a).isNone = !l.contains a := by
1111+
rw [← isSome_finIdxOf?, Option.not_isSome]
11111112

11121113
/-! ### idxOf?
11131114

0 commit comments

Comments
 (0)