diff --git a/src/Init/Data/Array/Basic.lean b/src/Init/Data/Array/Basic.lean index 1fba890e15..3f8144e3c8 100644 --- a/src/Init/Data/Array/Basic.lean +++ b/src/Init/Data/Array/Basic.lean @@ -226,7 +226,7 @@ def swap (xs : Array α) (i j : @& Nat) (hi : i < xs.size := by get_elem_tactic) let xs' := xs.set i v₂ xs'.set j v₁ (Nat.lt_of_lt_of_eq hj (size_set _).symm) -@[simp] theorem size_swap {xs : Array α} {i j : Nat} {hi hj} : (xs.swap i j hi hj).size = xs.size := by +@[simp, grind =] theorem size_swap {xs : Array α} {i j : Nat} {hi hj} : (xs.swap i j hi hj).size = xs.size := by change ((xs.set i xs[j]).set j xs[i] (Nat.lt_of_lt_of_eq hj (size_set _).symm)).size = xs.size rw [size_set, size_set] @@ -448,7 +448,7 @@ Examples: -/ abbrev take (xs : Array α) (i : Nat) : Array α := extract xs 0 i -@[simp] theorem take_eq_extract {xs : Array α} {i : Nat} : xs.take i = xs.extract 0 i := rfl +@[simp, grind =] theorem take_eq_extract {xs : Array α} {i : Nat} : xs.take i = xs.extract 0 i := rfl /-- Removes the first `i` elements of `xs`. If `xs` has fewer than `i` elements, the new array is empty. @@ -462,7 +462,7 @@ Examples: -/ abbrev drop (xs : Array α) (i : Nat) : Array α := extract xs i xs.size -@[simp] theorem drop_eq_extract {xs : Array α} {i : Nat} : xs.drop i = xs.extract i xs.size := rfl +@[simp, grind =] theorem drop_eq_extract {xs : Array α} {i : Nat} : xs.drop i = xs.extract i xs.size := rfl @[inline] unsafe def modifyMUnsafe [Monad m] (xs : Array α) (i : Nat) (f : α → m α) : m (Array α) := do @@ -1704,7 +1704,7 @@ def popWhile (p : α → Bool) (as : Array α) : Array α := as decreasing_by simp_wf; decreasing_trivial_pre_omega -@[simp] theorem popWhile_empty {p : α → Bool} : +@[simp, grind =] theorem popWhile_empty {p : α → Bool} : popWhile p #[] = #[] := by simp [popWhile] @@ -1751,7 +1751,8 @@ termination_by xs.size - i decreasing_by simp_wf; exact Nat.sub_succ_lt_self _ _ h -- This is required in `Lean.Data.PersistentHashMap`. -@[simp] theorem size_eraseIdx {xs : Array α} (i : Nat) (h) : (xs.eraseIdx i h).size = xs.size - 1 := by +@[simp, grind =] +theorem size_eraseIdx {xs : Array α} (i : Nat) (h) : (xs.eraseIdx i h).size = xs.size - 1 := by induction xs, i, h using Array.eraseIdx.induct with | @case1 xs i h h' xs' ih => unfold eraseIdx