@@ -337,25 +337,26 @@ theorem get!_eq_getD [Inhabited α] (a : Array α) : a.get! n = a.getD n default
337
337
338
338
/-! # set -/
339
339
340
- @[simp] theorem getElem_set_eq (a : Array α) (i : Fin a.size) (v : α) {j : Nat}
341
- (eq : i.val = j) (p : j < (a.set i v).size) :
340
+ @[simp] theorem getElem_set_eq (a : Array α) (i : Nat) (h : i < a.size) (v : α) {j : Nat}
341
+ (eq : i = j) (p : j < (a.set i v).size) :
342
342
(a.set i v)[j]'p = v := by
343
343
simp [set, getElem_eq_getElem_toList, ←eq]
344
344
345
- @[simp] theorem getElem_set_ne (a : Array α) (i : Fin a.size) (v : α) {j : Nat} (pj : j < (a.set i v).size)
346
- (h : i.val ≠ j) : (a.set i v)[j]'pj = a[j]'(size_set a i v ▸ pj) := by
345
+ @[simp] theorem getElem_set_ne (a : Array α) (i : Nat) (h' : i < a.size) (v : α) {j : Nat}
346
+ (pj : j < (a.set i v).size) (h : i ≠ j) :
347
+ (a.set i v)[j]'pj = a[j]'(size_set a i v _ ▸ pj) := by
347
348
simp only [set, getElem_eq_getElem_toList, List.getElem_set_ne h]
348
349
349
- theorem getElem_set (a : Array α) (i : Fin a.size) (v : α) (j : Nat)
350
+ theorem getElem_set (a : Array α) (i : Nat) (h' : i < a.size) (v : α) (j : Nat)
350
351
(h : j < (a.set i v).size) :
351
- (a.set i v)[j]'h = if i = j then v else a[j]'(size_set a i v ▸ h) := by
352
- by_cases p : i. 1 = j <;> simp [p]
352
+ (a.set i v)[j]'h = if i = j then v else a[j]'(size_set a i v _ ▸ h) := by
353
+ by_cases p : i = j <;> simp [p]
353
354
354
- @[simp] theorem getElem?_set_eq (a : Array α) (i : Fin a.size) (v : α) :
355
- (a.set i v)[i. 1 ]? = v := by simp [getElem?_lt, i. 2 ]
355
+ @[simp] theorem getElem?_set_eq (a : Array α) (i : Nat) (h : i < a.size) (v : α) :
356
+ (a.set i v)[i]? = v := by simp [getElem?_lt, h ]
356
357
357
- @[simp] theorem getElem?_set_ne (a : Array α) (i : Fin a.size) {j : Nat} (v : α)
358
- (ne : i.val ≠ j) : (a.set i v)[j]? = a[j]? := by
358
+ @[simp] theorem getElem?_set_ne (a : Array α) (i : Nat) (h : i < a.size) {j : Nat} (v : α)
359
+ (ne : i ≠ j) : (a.set i v)[j]? = a[j]? := by
359
360
by_cases h : j < a.size <;> simp [getElem?_lt, getElem?_ge, Nat.ge_of_not_lt, ne, h]
360
361
361
362
/-! # setD -/
@@ -372,7 +373,7 @@ theorem getElem_set (a : Array α) (i : Fin a.size) (v : α) (j : Nat)
372
373
@[simp] theorem getElem_setD_eq (a : Array α) {i : Nat} (v : α) (h : _) :
373
374
(setD a i v)[i]'h = v := by
374
375
simp at h
375
- simp only [setD, h, dite_true, getElem_set, ite_true ]
376
+ simp only [setD, h, ↓reduceDIte, getElem_set_eq ]
376
377
377
378
@[simp]
378
379
theorem getElem?_setD_eq (a : Array α) {i : Nat} (p : i < a.size) (v : α) : (a.setD i v)[i]? = some v := by
@@ -547,43 +548,43 @@ theorem getElem?_push {a : Array α} : (a.push x)[i]? = if i = a.size then some
547
548
548
549
@[deprecated getElem?_size (since := "2024-10-21")] abbrev get?_size := @getElem?_size
549
550
550
- @[simp] theorem toList_set (a : Array α) (i v) : (a.set i v).toList = a.toList.set i. 1 v := rfl
551
+ @[simp] theorem toList_set (a : Array α) (i v h ) : (a.set i v).toList = a.toList.set i v := rfl
551
552
552
- theorem get_set_eq (a : Array α) (i : Fin a.size ) (v : α) :
553
- (a.set i v)[i. 1 ] = v := by
553
+ theorem get_set_eq (a : Array α) (i : Nat ) (v : α) (h : i < a.size ) :
554
+ (a.set i v h )[i]'( by simp [h]) = v := by
554
555
simp only [set, getElem_eq_getElem_toList, List.getElem_set_self]
555
556
556
- theorem get?_set_eq (a : Array α) (i : Fin a.size ) (v : α) :
557
- (a.set i v)[i. 1 ]? = v := by simp [getElem?_pos, i. 2 ]
557
+ theorem get?_set_eq (a : Array α) (i : Nat ) (v : α) (h : i < a.size ) :
558
+ (a.set i v)[i]? = v := by simp [getElem?_pos, h ]
558
559
559
- @[simp] theorem get?_set_ne (a : Array α) (i : Fin a.size) {j : Nat} (v : α)
560
- (h : i. 1 ≠ j) : (a.set i v)[j]? = a[j]? := by
560
+ @[simp] theorem get?_set_ne (a : Array α) (i : Nat) (h' : i < a.size) {j : Nat} (v : α)
561
+ (h : i ≠ j) : (a.set i v)[j]? = a[j]? := by
561
562
by_cases j < a.size <;> simp [getElem?_pos, getElem?_neg, *]
562
563
563
- theorem get?_set (a : Array α) (i : Fin a.size) (j : Nat) (v : α) :
564
- (a.set i v)[j]? = if i. 1 = j then some v else a[j]? := by
565
- if h : i. 1 = j then subst j; simp [*] else simp [*]
564
+ theorem get?_set (a : Array α) (i : Nat) (h : i < a.size) (j : Nat) (v : α) :
565
+ (a.set i v)[j]? = if i = j then some v else a[j]? := by
566
+ if h : i = j then subst j; simp [*] else simp [*]
566
567
567
- theorem get_set (a : Array α) (i : Fin a.size) (j : Nat) (hj : j < a.size) (v : α) :
568
+ theorem get_set (a : Array α) (i : Nat) (hi : i < a.size) (j : Nat) (hj : j < a.size) (v : α) :
568
569
(a.set i v)[j]'(by simp [*]) = if i = j then v else a[j] := by
569
- if h : i. 1 = j then subst j; simp [*] else simp [*]
570
+ if h : i = j then subst j; simp [*] else simp [*]
570
571
571
- @[simp] theorem get_set_ne (a : Array α) (i : Fin a.size) {j : Nat} (v : α) (hj : j < a.size)
572
- (h : i. 1 ≠ j) : (a.set i v)[j]'(by simp [*]) = a[j] := by
572
+ @[simp] theorem get_set_ne (a : Array α) (i : Nat) (hi : i < a.size) {j : Nat} (v : α) (hj : j < a.size)
573
+ (h : i ≠ j) : (a.set i v)[j]'(by simp [*]) = a[j] := by
573
574
simp only [set, getElem_eq_getElem_toList, List.getElem_set_ne h]
574
575
575
576
theorem getElem_setD (a : Array α) (i : Nat) (v : α) (h : i < (setD a i v).size) :
576
577
(setD a i v)[i] = v := by
577
578
simp at h
578
- simp only [setD, h, dite_true, get_set, ite_true ]
579
+ simp only [setD, h, ↓reduceDIte, getElem_set_eq ]
579
580
580
- theorem set_set (a : Array α) (i : Fin a.size ) (v v' : α) :
581
- (a.set i v).set ⟨i, by simp [i. 2 ]⟩ v' = a.set i v' := by simp [set, List.set_set]
581
+ theorem set_set (a : Array α) (i : Nat) (h ) (v v' : α) :
582
+ (a.set i v h ).set i v' ( by simp [h]) = a.set i v' := by simp [set, List.set_set]
582
583
583
584
private theorem fin_cast_val (e : n = n') (i : Fin n) : e ▸ i = ⟨i.1 , e ▸ i.2 ⟩ := by cases e; rfl
584
585
585
586
theorem swap_def (a : Array α) (i j : Fin a.size) :
586
- a.swap i j = (a.set i (a.get j)).set ⟨j. 1 , by simp [j. 2 ]⟩ (a.get i) := by
587
+ a.swap i j = (a.set i (a.get j)).set j (a.get i) := by
587
588
simp [swap, fin_cast_val]
588
589
589
590
@[simp] theorem toList_swap (a : Array α) (i j : Fin a.size) :
@@ -601,7 +602,7 @@ theorem getElem?_swap (a : Array α) (i j : Fin a.size) (k : Nat) : (a.swap i j)
601
602
602
603
@[simp]
603
604
theorem swapAt!_def (a : Array α) (i : Nat) (v : α) (h : i < a.size) :
604
- a.swapAt! i v = (a[i], a.set ⟨i, h⟩ v) := by simp [swapAt!, h]
605
+ a.swapAt! i v = (a[i], a.set i v) := by simp [swapAt!, h]
605
606
606
607
@[simp] theorem size_swapAt! (a : Array α) (i : Nat) (v : α) :
607
608
(a.swapAt! i v).2 .size = a.size := by
@@ -966,7 +967,7 @@ theorem getElem_modify {as : Array α} {x i} (h : i < (as.modify x f).size) :
966
967
(as.modify x f)[i] = if x = i then f (as[i]'(by simpa using h)) else as[i]'(by simpa using h) := by
967
968
simp only [modify, modifyM, get_eq_getElem, Id.run, Id.pure_eq]
968
969
split
969
- · simp only [Id.bind_eq, get_set _ _ _ (by simpa using h)]; split <;> simp [*]
970
+ · simp only [Id.bind_eq, get_set _ _ _ _ (by simpa using h)]; split <;> simp [*]
970
971
· rw [if_neg (mt (by rintro rfl; exact h) (by simp_all))]
971
972
972
973
@[simp] theorem toList_modify (as : Array α) (f : α → α) :
@@ -1406,30 +1407,15 @@ instance [DecidableEq α] (a : α) (as : Array α) : Decidable (a ∈ as) :=
1406
1407
1407
1408
open Fin
1408
1409
1409
- @[simp] theorem getElem_swap_right (a : Array α) {i j : Fin a.size} : (a.swap i j)[j.val ] = a[i] :=
1410
- by simp only [swap, fin_cast_val, get_eq_getElem, getElem_set_eq, getElem_fin ]
1410
+ @[simp] theorem getElem_swap_right (a : Array α) {i j : Fin a.size} : (a.swap i j)[j.1 ] = a[i] := by
1411
+ simp [swap_def, getElem_set ]
1411
1412
1412
- @[simp] theorem getElem_swap_left (a : Array α) {i j : Fin a.size} : (a.swap i j)[i.val] = a[j] :=
1413
- if he : ((Array.size_set _ _ _).symm ▸ j).val = i.val then by
1414
- simp only [←he, fin_cast_val, getElem_swap_right, getElem_fin]
1415
- else by
1416
- apply Eq.trans
1417
- · apply Array.get_set_ne
1418
- · simp only [size_set, Fin.isLt]
1419
- · assumption
1420
- · simp [get_set_ne]
1413
+ @[simp] theorem getElem_swap_left (a : Array α) {i j : Fin a.size} : (a.swap i j)[i.1 ] = a[j] := by
1414
+ simp +contextual [swap_def, getElem_set]
1421
1415
1422
1416
@[simp] theorem getElem_swap_of_ne (a : Array α) {i j : Fin a.size} (hp : p < a.size)
1423
1417
(hi : p ≠ i) (hj : p ≠ j) : (a.swap i j)[p]'(a.size_swap .. |>.symm ▸ hp) = a[p] := by
1424
- apply Eq.trans
1425
- · have : ((a.size_set i (a.get j)).symm ▸ j).val = j.val := by simp only [fin_cast_val]
1426
- apply Array.get_set_ne
1427
- · simp only [this]
1428
- apply Ne.symm
1429
- · assumption
1430
- · apply Array.get_set_ne
1431
- · apply Ne.symm
1432
- · assumption
1418
+ simp [swap_def, getElem_set, hi.symm, hj.symm]
1433
1419
1434
1420
theorem getElem_swap' (a : Array α) (i j : Fin a.size) (k : Nat) (hk : k < a.size) :
1435
1421
(a.swap i j)[k]'(by simp_all) = if k = i then a[j] else if k = j then a[i] else a[k] := by
0 commit comments