@@ -613,13 +613,13 @@ theorem anyM_loop_cons [Monad m] {p : α → m Bool} {a : α} {as : List α} {st
613613
614614-- Auxiliary for `any_iff_exists`.
615615theorem anyM_loop_iff_exists {p : α → Bool} {as : Array α} {start stop} (h : stop ≤ as.size) :
616- anyM.loop (m := Id) p as stop h start = true ↔
616+ ( anyM.loop (m := Id) (pure <| p ·) as stop h start).run = true ↔
617617 ∃ (i : Nat) (_ : i < as.size), start ≤ i ∧ i < stop ∧ p as[i] = true := by
618618 unfold anyM.loop
619619 split <;> rename_i h₁
620620 · dsimp
621621 split <;> rename_i h₂
622- · simp only [true_iff]
622+ · simp only [true_iff, Id.run_pure ]
623623 refine ⟨start, by omega, by omega, by omega, h₂⟩
624624 · rw [anyM_loop_iff_exists]
625625 constructor
@@ -636,9 +636,9 @@ termination_by stop - start
636636-- This could also be proved from `SatisfiesM_anyM_iff_exists` in `Batteries.Data.Array.Init.Monadic`
637637theorem any_iff_exists {p : α → Bool} {as : Array α} {start stop} :
638638 as.any p start stop ↔ ∃ (i : Nat) (_ : i < as.size), start ≤ i ∧ i < stop ∧ p as[i] := by
639- dsimp [any, anyM, Id.run ]
639+ dsimp [any, anyM]
640640 split
641- · rw [anyM_loop_iff_exists]
641+ · rw [anyM_loop_iff_exists (p := p) ]
642642 · rw [anyM_loop_iff_exists]
643643 constructor
644644 · rintro ⟨i, hi, ge, _, h⟩
@@ -1370,17 +1370,17 @@ theorem mapM_eq_mapM_toList [Monad m] [LawfulMonad m] {f : α → m β} {xs : Ar
13701370
13711371@[deprecated " Use `mapM_eq_foldlM` instead" (since := " 2025-01-08" )]
13721372theorem mapM_map_eq_foldl {as : Array α} {f : α → β} {i : Nat} :
1373- mapM.map (m := Id) f as i b = as.foldl (start := i) (fun acc a => acc.push (f a)) b := by
1373+ mapM.map (m := Id) (pure <| f ·) as i b = pure ( as.foldl (start := i) (fun acc a => acc.push (f a)) b) := by
13741374 unfold mapM.map
13751375 split <;> rename_i h
1376- · simp only [Id.bind_eq]
1377- dsimp [foldl, Id.run, foldlM]
1376+ · ext : 1
1377+ dsimp [foldl, foldlM]
13781378 rw [mapM_map_eq_foldl, dif_pos (by omega), foldlM.loop, dif_pos h]
13791379 -- Calling `split` here gives a bad goal.
13801380 have : size as - i = Nat.succ (size as - i - 1 ) := by omega
13811381 rw [this ]
1382- simp [foldl, foldlM, Id.run, Nat.sub_add_eq]
1383- · dsimp [foldl, Id.run, foldlM]
1382+ simp [foldl, foldlM, Nat.sub_add_eq]
1383+ · dsimp [foldl, foldlM]
13841384 rw [dif_pos (by omega), foldlM.loop, dif_neg h]
13851385 rfl
13861386termination_by as.size - i
@@ -1602,8 +1602,8 @@ theorem filterMap_congr {as bs : Array α} (h : as = bs)
16021602 as.toList ++ List.filterMap f xs := ?_
16031603 exact this #[]
16041604 induction xs
1605- · simp_all [Id.run]
1606- · simp_all [Id.run, List.filterMap_cons]
1605+ · simp_all
1606+ · simp_all [List.filterMap_cons]
16071607 split <;> simp_all
16081608
16091609@[grind] theorem toList_filterMap {f : α → Option β} {xs : Array α} :
@@ -3215,18 +3215,16 @@ theorem foldlM_push [Monad m] [LawfulMonad m] {xs : Array α} {a : α} {f : β
32153215 rw [foldr, foldrM_start_stop, ← foldrM_toList, List.foldrM_pure, foldr_toList, foldr, ← foldrM_start_stop]
32163216
32173217theorem foldl_eq_foldlM {f : β → α → β} {b} {xs : Array α} {start stop : Nat} :
3218- xs.foldl f b start stop = xs.foldlM (m := Id) f b start stop := by
3219- simp [foldl, Id.run]
3218+ xs.foldl f b start stop = (xs.foldlM (m := Id) (pure <| f · ·) b start stop).run := rfl
32203219
32213220theorem foldr_eq_foldrM {f : α → β → β} {b} {xs : Array α} {start stop : Nat} :
3222- xs.foldr f b start stop = xs.foldrM (m := Id) f b start stop := by
3223- simp [foldr, Id.run]
3221+ xs.foldr f b start stop = (xs.foldrM (m := Id) (pure <| f · ·) b start stop).run := rfl
32243222
32253223@[simp] theorem id_run_foldlM {f : β → α → Id β} {b} {xs : Array α} {start stop : Nat} :
3226- Id.run (xs.foldlM f b start stop) = xs.foldl f b start stop := foldl_eq_foldlM.symm
3224+ Id.run (xs.foldlM f b start stop) = xs.foldl (f · · |>.run) b start stop := rfl
32273225
32283226@[simp] theorem id_run_foldrM {f : α → β → Id β} {b} {xs : Array α} {start stop : Nat} :
3229- Id.run (xs.foldrM f b start stop) = xs.foldr f b start stop := foldr_eq_foldrM.symm
3227+ Id.run (xs.foldrM f b start stop) = xs.foldr (f · · |>.run) b start stop := rfl
32303228
32313229/-- Variant of `foldlM_reverse` with a side condition for the `stop` argument. -/
32323230@[simp] theorem foldlM_reverse' [Monad m] {xs : Array α} {f : β → α → m β} {b} {stop : Nat}
@@ -3526,17 +3524,16 @@ theorem foldrM_append [Monad m] [LawfulMonad m] {f : α → β → m β} {b} {xs
35263524
35273525@[simp] theorem foldr_append' {f : α → β → β} {b} {xs ys : Array α} {start : Nat}
35283526 (w : start = xs.size + ys.size) :
3529- (xs ++ ys).foldr f b start 0 = xs.foldr f (ys.foldr f b) := by
3530- subst w
3531- simp [foldr_eq_foldrM]
3527+ (xs ++ ys).foldr f b start 0 = xs.foldr f (ys.foldr f b) :=
3528+ foldrM_append' w
35323529
35333530@[grind _=_] theorem foldl_append {β : Type _} {f : β → α → β} {b} {xs ys : Array α} :
3534- (xs ++ ys).foldl f b = ys.foldl f (xs.foldl f b) := by
3535- simp [foldl_eq_foldlM]
3531+ (xs ++ ys).foldl f b = ys.foldl f (xs.foldl f b) :=
3532+ foldlM_append
35363533
35373534@[grind _=_] theorem foldr_append {f : α → β → β} {b} {xs ys : Array α} :
3538- (xs ++ ys).foldr f b = xs.foldr f (ys.foldr f b) := by
3539- simp [foldr_eq_foldrM]
3535+ (xs ++ ys).foldr f b = xs.foldr f (ys.foldr f b) :=
3536+ foldrM_append
35403537
35413538@[simp] theorem foldl_flatten' {f : β → α → β} {b} {xss : Array (Array α)} {stop : Nat}
35423539 (w : stop = xss.flatten.size) :
@@ -3565,21 +3562,22 @@ theorem foldrM_append [Monad m] [LawfulMonad m] {f : α → β → m β} {b} {xs
35653562/-- Variant of `foldl_reverse` with a side condition for the `stop` argument. -/
35663563@[simp] theorem foldl_reverse' {xs : Array α} {f : β → α → β} {b} {stop : Nat}
35673564 (w : stop = xs.size) :
3568- xs.reverse.foldl f b 0 stop = xs.foldr (fun x y => f y x) b := by
3569- simp [w, foldl_eq_foldlM, foldr_eq_foldrM]
3565+ xs.reverse.foldl f b 0 stop = xs.foldr (fun x y => f y x) b :=
3566+ foldlM_reverse' w
35703567
35713568/-- Variant of `foldr_reverse` with a side condition for the `start` argument. -/
35723569@[simp] theorem foldr_reverse' {xs : Array α} {f : α → β → β} {b} {start : Nat}
35733570 (w : start = xs.size) :
3574- xs.reverse.foldr f b start 0 = xs.foldl (fun x y => f y x) b := by
3575- simp [w, foldl_eq_foldlM, foldr_eq_foldrM]
3571+ xs.reverse.foldr f b start 0 = xs.foldl (fun x y => f y x) b :=
3572+ foldrM_reverse' w
35763573
35773574@[grind] theorem foldl_reverse {xs : Array α} {f : β → α → β} {b} :
3578- xs.reverse.foldl f b = xs.foldr (fun x y => f y x) b := by simp [foldl_eq_foldlM, foldr_eq_foldrM]
3575+ xs.reverse.foldl f b = xs.foldr (fun x y => f y x) b :=
3576+ foldlM_reverse
35793577
35803578@[grind] theorem foldr_reverse {xs : Array α} {f : α → β → β} {b} :
35813579 xs.reverse.foldr f b = xs.foldl (fun x y => f y x) b :=
3582- (foldl_reverse ..).symm.trans <| by simp
3580+ foldrM_reverse
35833581
35843582theorem foldl_eq_foldr_reverse {xs : Array α} {f : β → α → β} {b} :
35853583 xs.foldl f b = xs.reverse.foldr (fun x y => f y x) b := by simp
@@ -4094,15 +4092,16 @@ abbrev all_mkArray := @all_replicate
40944092/-! ### modify -/
40954093
40964094@[simp] theorem size_modify {xs : Array α} {i : Nat} {f : α → α} : (xs.modify i f).size = xs.size := by
4097- unfold modify modifyM Id.run
4095+ unfold modify modifyM
40984096 split <;> simp
40994097
41004098theorem getElem_modify {xs : Array α} {j i} (h : i < (xs.modify j f).size) :
41014099 (xs.modify j f)[i] = if j = i then f (xs[i]'(by simpa using h)) else xs[i]'(by simpa using h) := by
4102- simp only [modify, modifyM, Id.run, Id.pure_eq ]
4100+ simp only [modify, modifyM]
41034101 split
4104- · simp only [Id.bind_eq, getElem_set]; split <;> simp [*]
4105- · rw [if_neg (mt (by rintro rfl; exact h) (by simp_all))]
4102+ · simp only [getElem_set, Id.run_pure, Id.run_bind]; split <;> simp [*]
4103+ · simp only [Id.run_pure]
4104+ rw [if_neg (mt (by rintro rfl; exact h) (by simp_all))]
41064105
41074106@[simp] theorem toList_modify {xs : Array α} {f : α → α} {i : Nat} :
41084107 (xs.modify i f).toList = xs.toList.modify i f := by
@@ -4643,12 +4642,12 @@ namespace Array
46434642@[simp] theorem findSomeRev ?_eq_findSome ?_reverse {f : α → Option β} {xs : Array α} :
46444643 xs.findSomeRev? f = xs.reverse.findSome? f := by
46454644 cases xs
4646- simp [findSomeRev?, Id.run ]
4645+ simp [findSomeRev?]
46474646
46484647@[simp] theorem findRev ?_eq_find ?_reverse {f : α → Bool} {xs : Array α} :
46494648 xs.findRev? f = xs.reverse.find? f := by
46504649 cases xs
4651- simp [findRev?, Id.run ]
4650+ simp [findRev?]
46524651
46534652/-! ### unzip -/
46544653
0 commit comments