Compare commits

...

12 Commits

Author SHA1 Message Date
Kim Morrison
c57d9668df Merge remote-tracking branch 'origin/master' into getElem_simps 2025-05-26 15:27:48 +10:00
Kim Morrison
f6f7e214b3 fix 2025-05-26 14:52:35 +10:00
Kim Morrison
f5eaaa9850 Merge remote-tracking branch 'origin/simp_nf_2025-05' into getElem_simps 2025-05-26 13:56:37 +10:00
Kim Morrison
d7d370e7c9 deprecations 2025-05-26 13:53:07 +10:00
Kim Morrison
fe527178c1 simpNF 2025-05-26 13:48:00 +10:00
Kim Morrison
2401996a66 deprecations 2025-05-26 13:35:00 +10:00
Kim Morrison
d5a05a3190 fix 2025-05-26 13:10:21 +10:00
Kim Morrison
18a408bf65 deprecations 2025-05-26 12:56:15 +10:00
Kim Morrison
d548ce2add cleanup for simpNF linter 2025-05-26 12:11:24 +10:00
Kim Morrison
f3d1653e76 chore: fixes for the simpNF linter 2025-05-26 12:11:23 +10:00
Kim Morrison
013e98ebc9 fix 2025-05-25 15:46:17 +10:00
Kim Morrison
ef5622027d chore: more simp lemmas for LawfulGetElem 2025-05-25 15:42:18 +10:00
2 changed files with 9 additions and 8 deletions

View File

@@ -164,25 +164,25 @@ export LawfulGetElem (getElem?_def getElem!_def)
instance (priority := low) [GetElem coll idx elem valid] [ xs i, Decidable (valid xs i)] :
LawfulGetElem coll idx elem valid where
theorem getElem?_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
@[simp] theorem getElem?_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
(c : cont) (i : idx) (h : dom c i) : c[i]? = some (c[i]'h) := by
have : Decidable (dom c i) := .isTrue h
rw [getElem?_def]
exact dif_pos h
theorem getElem?_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
@[simp] theorem getElem?_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
(c : cont) (i : idx) (h : ¬dom c i) : c[i]? = none := by
have : Decidable (dom c i) := .isFalse h
rw [getElem?_def]
exact dif_neg h
theorem getElem!_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
@[simp] theorem getElem!_pos [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
[Inhabited elem] (c : cont) (i : idx) (h : dom c i) :
c[i]! = c[i]'h := by
have : Decidable (dom c i) := .isTrue h
simp [getElem!_def, getElem?_def, h]
theorem getElem!_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
@[simp] theorem getElem!_neg [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
[Inhabited elem] (c : cont) (i : idx) (h : ¬dom c i) : c[i]! = default := by
have : Decidable (dom c i) := .isFalse h
simp [getElem!_def, getElem?_def, h]
@@ -243,12 +243,12 @@ grind_pattern getElem_of_getElem? => c[i]?, some e
@[simp] theorem some_getElem_eq_getElem?_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
{c : cont} {i : idx} [Decidable (dom c i)] (h : dom c i):
(some c[i] = c[i]?) True := by
simpa [some_eq_getElem?_iff, h] using h, trivial
simp [h]
@[simp] theorem getElem?_eq_some_getElem_iff [GetElem? cont idx elem dom] [LawfulGetElem cont idx elem dom]
{c : cont} {i : idx} [Decidable (dom c i)] (h : dom c i):
(c[i]? = some c[i]) True := by
simpa [getElem?_eq_some_iff, h] using h, trivial
simp [h]
@[deprecated getElem?_eq_none_iff (since := "2025-02-17")]
abbrev getElem?_eq_none := @getElem?_eq_none_iff
@@ -339,7 +339,8 @@ instance : GetElem? (List α) Nat α fun as i => i < as.length where
@[simp] theorem get!Internal_eq_getElem! [Inhabited α] {l : List α} {i : Nat} :
l.get!Internal i = l[i]! := rfl
@[simp] theorem getElem?_eq_getElem {l : List α} {i} (h : i < l.length) :
-- This is only needed locally; after the `LawfulGetElem` instance the general `getElem?_pos` lemma applies.
@[local simp] theorem getElem?_eq_getElem {l : List α} {i} (h : i < l.length) :
l[i]? = some l[i] := by
induction l generalizing i with
| nil => cases h

View File

@@ -278,7 +278,7 @@ theorem ofArray.folder_foldl_mem_of_mem
· next hfoo =>
rw [hl]
cases x
simp [Std.HashMap.getElem?_insertIfNew]
simp [Std.HashMap.getElem_insertIfNew]
intro hbar
exfalso
apply hfoo