Skip to content

Commit

Permalink
Add String.length_join and List.length_join (#770)
Browse files Browse the repository at this point in the history
* Add `String.length_join` and `List.length_join`

* Update Std/Data/List/Lemmas.lean

Update Std/Data/String/Lemmas.lean

Co-Authored-By: Kim Morrison <kim@tqft.net>

---------

Co-authored-by: Kim Morrison <kim@tqft.net>
  • Loading branch information
tjf801 and semorrison committed May 3, 2024
1 parent aec9cad commit 123fb93
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 0 deletions.
3 changes: 3 additions & 0 deletions Std/Data/List/Lemmas.lean
Original file line number Diff line number Diff line change
Expand Up @@ -365,6 +365,9 @@ theorem exists_of_mem_join : a ∈ join L → ∃ l, l ∈ L ∧ a ∈ l := mem_

theorem mem_join_of_mem (lL : l ∈ L) (al : a ∈ l) : a ∈ join L := mem_join.2 ⟨l, lL, al⟩

theorem length_join (l : List (List α)) : (join l).length = Nat.sum (l.map length) := by
induction l <;> simp [*]

/-! ### bind -/

theorem mem_bind {f : α → List β} {b} {l : List α} : b ∈ l.bind f ↔ ∃ a, a ∈ l ∧ b ∈ f a := by
Expand Down
5 changes: 5 additions & 0 deletions Std/Data/String/Lemmas.lean
Original file line number Diff line number Diff line change
Expand Up @@ -516,6 +516,11 @@ theorem join_eq (ss : List String) : join ss = ⟨(ss.map data).join⟩ := go ss
@[simp] theorem data_join (ss : List String) : (join ss).data = (ss.map data).join := by
rw [join_eq]

@[simp] theorem length_data (s : String) : s.data.length = s.length := rfl

theorem length_join (l : List String) : (join l).length = Nat.sum (l.map length) := by
simp [length, List.length_join, List.map_map, (funext length_data : List.length ∘ data = length)]

theorem singleton_eq (c : Char) : singleton c = ⟨[c]⟩ := rfl

@[simp] theorem data_singleton (c : Char) : (singleton c).data = [c] := rfl
Expand Down

0 comments on commit 123fb93

Please sign in to comment.