@@ -14,6 +14,7 @@ set_option linter.indexVariables true -- Enforce naming conventions for index va
1414
1515namespace List
1616
17+ @[grind =]
1718theorem getElem?_eraseIdx {l : List α} {i : Nat} {j : Nat} :
1819 (l.eraseIdx i)[j]? = if j < i then l[j]? else l[j + 1 ]? := by
1920 rw [eraseIdx_eq_take_drop_succ, getElem?_append]
@@ -49,6 +50,7 @@ theorem getElem?_eraseIdx_of_ge {l : List α} {i : Nat} {j : Nat} (h : i ≤ j)
4950 intro h'
5051 omega
5152
53+ @[grind =]
5254theorem getElem_eraseIdx {l : List α} {i : Nat} {j : Nat} (h : j < (l.eraseIdx i).length) :
5355 (l.eraseIdx i)[j] = if h' : j < i then
5456 l[j]'(by have := length_eraseIdx_le l i; omega)
@@ -123,6 +125,48 @@ theorem eraseIdx_set_gt {l : List α} {i : Nat} {j : Nat} {a : α} (h : i < j) :
123125 · have t : i ≠ n := by omega
124126 simp [t]
125127
128+ @[grind =]
129+ theorem eraseIdx_set {xs : List α} {i : Nat} {a : α} {j : Nat} :
130+ (xs.set i a).eraseIdx j =
131+ if j < i then
132+ (xs.eraseIdx j).set (i - 1 ) a
133+ else if j = i then
134+ xs.eraseIdx i
135+ else
136+ (xs.eraseIdx j).set i a := by
137+ split <;> rename_i h'
138+ · rw [eraseIdx_set_lt]
139+ omega
140+ · split <;> rename_i h''
141+ · subst h''
142+ rw [eraseIdx_set_eq]
143+ · rw [eraseIdx_set_gt]
144+ omega
145+
146+ theorem set_eraseIdx_le {xs : List α} {i : Nat} {j : Nat} {a : α} (h : i ≤ j) :
147+ (xs.eraseIdx i).set j a = (xs.set (j + 1 ) a).eraseIdx i := by
148+ rw [eraseIdx_set_lt]
149+ · simp
150+ · omega
151+
152+ theorem set_eraseIdx_gt {xs : List α} {i : Nat} {j : Nat} {a : α} (h : j < i) :
153+ (xs.eraseIdx i).set j a = (xs.set j a).eraseIdx i := by
154+ rw [eraseIdx_set_gt]
155+ omega
156+
157+ @[grind =]
158+ theorem set_eraseIdx {xs : List α} {i : Nat} {j : Nat} {a : α} :
159+ (xs.eraseIdx i).set j a =
160+ if i ≤ j then
161+ (xs.set (j + 1 ) a).eraseIdx i
162+ else
163+ (xs.set j a).eraseIdx i := by
164+ split <;> rename_i h'
165+ · rw [set_eraseIdx_le]
166+ omega
167+ · rw [set_eraseIdx_gt]
168+ omega
169+
126170@[simp] theorem set_getElem_succ_eraseIdx_succ
127171 {l : List α} {i : Nat} (h : i + 1 < l.length) :
128172 (l.eraseIdx (i + 1 )).set i l[i + 1 ] = l.eraseIdx i := by
0 commit comments