HepLean Documentation

Init.Data.List.Nat.Count

theorem List.countP_set {α : Type u_1} (p : αBool) (l : List α) (i : Nat) (a : α) (h : i < l.length) :
List.countP p (l.set i a) = (List.countP p l - if p l[i] = true then 1 else 0) + if p a = true then 1 else 0
theorem List.count_set {α : Type u_1} [BEq α] (a b : α) (l : List α) (i : Nat) (h : i < l.length) :
List.count b (l.set i a) = (List.count b l - if (l[i] == b) = true then 1 else 0) + if (a == b) = true then 1 else 0
theorem List.Sublist.le_countP {α✝ : Type u_1} {l₁ l₂ : List α✝} (s : l₁.Sublist l₂) (p : α✝Bool) :
List.countP p l₂ - (l₂.length - l₁.length) List.countP p l₁

The number of elements satisfying a predicate in a sublist is at least the number of elements satisfying the predicate in the list, minus the difference in the lengths.

theorem List.IsPrefix.le_countP {α✝ : Type u_1} {l₁ l₂ : List α✝} {p : α✝Bool} (s : l₁ <+: l₂) :
List.countP p l₂ - (l₂.length - l₁.length) List.countP p l₁
theorem List.IsSuffix.le_countP {α✝ : Type u_1} {l₁ l₂ : List α✝} {p : α✝Bool} (s : l₁ <:+ l₂) :
List.countP p l₂ - (l₂.length - l₁.length) List.countP p l₁
theorem List.IsInfix.le_countP {α✝ : Type u_1} {l₁ l₂ : List α✝} {p : α✝Bool} (s : l₁ <:+: l₂) :
List.countP p l₂ - (l₂.length - l₁.length) List.countP p l₁
theorem List.le_countP_tail {α✝ : Type u_1} {p : α✝Bool} (l : List α✝) :
List.countP p l - 1 List.countP p l.tail

The number of elements satisfying a predicate in the tail of a list is at least one less than the number of elements satisfying the predicate in the list.

theorem List.Sublist.le_count {α : Type u_1} [BEq α] {l₁ l₂ : List α} (s : l₁.Sublist l₂) (a : α) :
List.count a l₂ - (l₂.length - l₁.length) List.count a l₁
theorem List.IsPrefix.le_count {α : Type u_1} [BEq α] {l₁ l₂ : List α} (s : l₁ <+: l₂) (a : α) :
List.count a l₂ - (l₂.length - l₁.length) List.count a l₁
theorem List.IsSuffix.le_count {α : Type u_1} [BEq α] {l₁ l₂ : List α} (s : l₁ <:+ l₂) (a : α) :
List.count a l₂ - (l₂.length - l₁.length) List.count a l₁
theorem List.IsInfix.le_count {α : Type u_1} [BEq α] {l₁ l₂ : List α} (s : l₁ <:+: l₂) (a : α) :
List.count a l₂ - (l₂.length - l₁.length) List.count a l₁
theorem List.le_count_tail {α : Type u_1} [BEq α] (a : α) (l : List α) :
List.count a l - 1 List.count a l.tail