Compare commits

...

1 Commits

Author SHA1 Message Date
Kim Morrison
2b82b19f02 feat: add List/Array/Vector.sum_append_nat 2025-07-30 13:49:20 +10:00
3 changed files with 20 additions and 0 deletions

View File

@@ -4413,10 +4413,17 @@ theorem getElem?_range {n : Nat} {i : Nat} : (Array.range n)[i]? = if i < n then
-- Without further algebraic hypotheses, there's no useful `sum_push` lemma.
@[simp, grind =]
theorem sum_eq_sum_toList [Add α] [Zero α] {as : Array α} : as.toList.sum = as.sum := by
cases as
simp [Array.sum, List.sum]
@[simp, grind =]
theorem sum_append_nat {as₁ as₂ : Array Nat} : (as₁ ++ as₂).sum = as₁.sum + as₂.sum := by
cases as₁
cases as₂
simp [List.sum_append_nat]
theorem foldl_toList_eq_flatMap {l : List α} {acc : Array β}
{F : Array β α Array β} {G : α List β}
(H : acc a, (F acc a).toList = acc.toList ++ G a) :

View File

@@ -1849,6 +1849,10 @@ theorem append_eq_map_iff {f : α → β} :
L₁ ++ L₂ = map f l l₁ l₂, l = l₁ ++ l₂ map f l₁ = L₁ map f l₂ = L₂ := by
rw [eq_comm, map_eq_append_iff]
@[simp, grind =]
theorem sum_append_nat {l₁ l₂ : List Nat} : (l₁ ++ l₂).sum = l₁.sum + l₂.sum := by
induction l₁ generalizing l₂ <;> simp_all [Nat.add_assoc]
/-! ### concat
Note that `concat_eq_append` is a `@[simp]` lemma, so `concat` should usually not appear in goals.

View File

@@ -3180,3 +3180,12 @@ instance instDecidableExistsVectorZero (P : Vector α 0 → Prop) [Decidable (P
instance instDecidableExistsVectorSucc (P : Vector α (n+1) Prop)
[Decidable ( (x : α) (xs : Vector α n), ¬ P (xs.push x))] : Decidable ( xs, P xs) :=
decidable_of_iff (¬ xs, ¬ P xs) Classical.not_forall_not
/-! ### sum -/
@[simp, grind =]
theorem sum_append_nat {xs₁ : Vector Nat n} {xs₂ : Vector Nat m} :
(xs₁ ++ xs₂).sum = xs₁.sum + xs₂.sum := by
rcases xs₁ with xs₁, rfl
rcases xs₂ with xs₂, rfl
simp [Array.sum_append_nat]