@@ -198,6 +198,58 @@ theorem getElem!_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem d
198198 simp only [getElem?_def]
199199 split <;> simp_all
200200
201+ @[simp] theorem none_eq_getElem?_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
202+ (c : cont) (i : idx) [Decidable (dom c i)] : none = c[i]? ↔ ¬dom c i := by
203+ simp only [getElem?_def]
204+ split <;> simp_all
205+
206+ theorem of_getElem?_eq_some [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
207+ {c : cont} {i : idx} [Decidable (dom c i)] (h : c[i]? = some e) : dom c i := by
208+ simp only [getElem?_def] at h
209+ split at h <;> rename_i h'
210+ case isTrue =>
211+ exact h'
212+ case isFalse =>
213+ simp at h
214+
215+ theorem getElem?_eq_some_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
216+ {c : cont} {i : idx} [Decidable (dom c i)] : c[i]? = some e ↔ Exists fun h : dom c i => c[i] = e := by
217+ simp only [getElem?_def]
218+ split <;> rename_i h
219+ case isTrue =>
220+ constructor
221+ case mp =>
222+ intro w
223+ refine ⟨h, ?_⟩
224+ simpa using w
225+ case mpr =>
226+ intro ⟨h, w⟩
227+ simpa using w
228+ case isFalse =>
229+ simp only [reduceCtorEq, false_iff]
230+ intro ⟨w, w'⟩
231+ exact h w
232+
233+ theorem some_eq_getElem?_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
234+ {c : cont} {i : idx} [Decidable (dom c i)] : some e = c[i]? ↔ Exists fun h : dom c i => c[i] = e := by
235+ rw [eq_comm, getElem?_eq_some_iff]
236+
237+ theorem getElem_of_getElem? [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
238+ {c : cont} {i : idx} [Decidable (dom c i)] (h : c[i]? = some e) : Exists fun h : dom c i => c[i] = e :=
239+ getElem?_eq_some_iff.mp h
240+
241+ grind_pattern getElem_of_getElem? => c[i]?, some e
242+
243+ @[simp] theorem some_getElem_eq_getElem?_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
244+ {c : cont} {i : idx} [Decidable (dom c i)] (h : dom c i):
245+ (some c[i] = c[i]?) ↔ True := by
246+ simpa [some_eq_getElem?_iff, h] using ⟨h, trivial⟩
247+
248+ @[simp] theorem getElem?_eq_some_getElem_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
249+ {c : cont} {i : idx} [Decidable (dom c i)] (h : dom c i):
250+ (c[i]? = some c[i]) ↔ True := by
251+ simpa [getElem?_eq_some_iff, h] using ⟨h, trivial⟩
252+
201253@[deprecated getElem?_eq_none_iff (since := "2025-02-17")]
202254abbrev getElem?_eq_none := @getElem?_eq_none_iff
203255
0 commit comments