46 lines
1.9 KiB
Text
46 lines
1.9 KiB
Text
-- Things I'd still like to make work for `List.count` via `grind`, but need to move on for now.
|
||
|
||
open List
|
||
|
||
example (hx : x = 0) (hy : y = 0) (hz : z = 0) : x = y + z := by grind -- cutsat bug
|
||
|
||
theorem length_eq_countP_add_countP (p : α → Bool) {l : List α} : length l = countP p l + countP (fun a => ¬p a) l := by
|
||
induction l with grind -- failing because of cutsat bug
|
||
|
||
variable [BEq α] [LawfulBEq α]
|
||
|
||
theorem count_flatten {a : α} {l : List (List α)} : count a l.flatten = (l.map (count a)).sum := by
|
||
grind (ematch := 10) (gen := 10) -- fails
|
||
|
||
theorem count_concat_self {a : α} {l : List α} : count a (concat l a) = count a l + 1 := by grind [concat_eq_append] -- fails?!
|
||
|
||
theorem count_eq_length {l : List α} : count a l = l.length ↔ ∀ b ∈ l, a = b := by
|
||
induction l with grind
|
||
|
||
theorem _root_.List.getElem_filter {xs : List α} {p : α → Bool} {i : Nat} (h : i < (xs.filter p).length) :
|
||
p (xs.filter p)[i] := sorry
|
||
|
||
theorem _root_.List.getElem?_filter {xs : List α} {p : α → Bool} {i : Nat} (h : i < (xs.filter p).length)
|
||
(w : (xs.filter p)[i]? = some a) : p a := sorry
|
||
|
||
attribute [grind?] List.getElem_filter
|
||
grind_pattern List.getElem?_filter => (xs.filter p)[i]?, some a
|
||
|
||
theorem filter_beq {l : List α} (a : α) : l.filter (· == a) = replicate (count a l) a := by
|
||
ext
|
||
grind
|
||
|
||
theorem filter_eq [DecidableEq α] {l : List α} (a : α) : l.filter (· = a) = replicate (count a l) a := by
|
||
grind
|
||
|
||
theorem replicate_count_eq_of_count_eq_length {l : List α} (h : count a l = length l) :
|
||
replicate (count a l) a = l := by
|
||
grind
|
||
|
||
theorem count_filterMap {α} [BEq β] {b : β} {f : α → Option β} {l : List α} :
|
||
count b (filterMap f l) = countP (fun a => f a == some b) l := by
|
||
grind
|
||
|
||
theorem count_flatMap {α} [BEq β] {l : List α} {f : α → List β} {x : β} :
|
||
count x (l.flatMap f) = sum (map (count x ∘ f) l) := by
|
||
grind
|