Documentation

Init.Data.Array.Count

Lemmas about Array.countP and Array.count. #

countP #

@[simp]
theorem List.countP_toArray {α : Type u_1} (p : αBool) (l : List α) :
@[simp]
theorem Array.countP_toList {α : Type u_1} (p : αBool) (xs : Array α) :
@[simp]
theorem Array.countP_empty {α : Type u_1} (p : αBool) :
@[simp]
theorem Array.countP_push_of_pos {α : Type u_1} (p : αBool) {a : α} (xs : Array α) (pa : p a = true) :
countP p (xs.push a) = countP p xs + 1
@[simp]
theorem Array.countP_push_of_neg {α : Type u_1} (p : αBool) {a : α} (xs : Array α) (pa : ¬p a = true) :
countP p (xs.push a) = countP p xs
theorem Array.countP_push {α : Type u_1} (p : αBool) (a : α) (xs : Array α) :
countP p (xs.push a) = countP p xs + if p a = true then 1 else 0
@[simp]
theorem Array.countP_singleton {α : Type u_1} (p : αBool) (a : α) :
countP p #[a] = if p a = true then 1 else 0
theorem Array.size_eq_countP_add_countP {α : Type u_1} (p : αBool) (xs : Array α) :
xs.size = countP p xs + countP (fun (a : α) => decide ¬p a = true) xs
theorem Array.countP_eq_size_filter {α : Type u_1} (p : αBool) (xs : Array α) :
countP p xs = (filter p xs).size
theorem Array.countP_eq_size_filter' {α : Type u_1} (p : αBool) :
countP p = size fun (as : Array α) => filter p as
theorem Array.countP_le_size {α : Type u_1} (p : αBool) {xs : Array α} :
countP p xs xs.size
@[simp]
theorem Array.countP_append {α : Type u_1} (p : αBool) (xs ys : Array α) :
countP p (xs ++ ys) = countP p xs + countP p ys
@[simp]
theorem Array.countP_pos_iff {α✝ : Type u_1} {xs : Array α✝} {p : α✝Bool} :
0 < countP p xs (a : α✝), a xs p a = true
@[simp]
theorem Array.one_le_countP_iff {α✝ : Type u_1} {xs : Array α✝} {p : α✝Bool} :
1 countP p xs (a : α✝), a xs p a = true
@[simp]
theorem Array.countP_eq_zero {α✝ : Type u_1} {xs : Array α✝} {p : α✝Bool} :
countP p xs = 0 ∀ (a : α✝), a xs¬p a = true
@[simp]
theorem Array.countP_eq_size {α✝ : Type u_1} {xs : Array α✝} {p : α✝Bool} :
countP p xs = xs.size ∀ (a : α✝), a xsp a = true
theorem Array.countP_mkArray {α : Type u_1} (p : αBool) (a : α) (n : Nat) :
countP p (mkArray n a) = if p a = true then n else 0
theorem Array.boole_getElem_le_countP {α : Type u_1} (p : αBool) (xs : Array α) (i : Nat) (h : i < xs.size) :
(if p xs[i] = true then 1 else 0) countP p xs
theorem Array.countP_set {α : Type u_1} (p : αBool) (xs : Array α) (i : Nat) (a : α) (h : i < xs.size) :
countP p (xs.set i a h) = (countP p xs - if p xs[i] = true then 1 else 0) + if p a = true then 1 else 0
theorem Array.countP_filter {α : Type u_1} (p q : αBool) (xs : Array α) :
countP p (filter q xs) = countP (fun (a : α) => p a && q a) xs
@[simp]
theorem Array.countP_true {α : Type u_1} :
(countP fun (x : α) => true) = size
@[simp]
theorem Array.countP_false {α : Type u_1} :
(countP fun (x : α) => false) = Function.const (Array α) 0
@[simp]
theorem Array.countP_map {α : Type u_2} {β : Type u_1} (p : βBool) (f : αβ) (xs : Array α) :
countP p (map f xs) = countP (p f) xs
theorem Array.size_filterMap_eq_countP {α : Type u_2} {β : Type u_1} (f : αOption β) (xs : Array α) :
(filterMap f xs).size = countP (fun (a : α) => (f a).isSome) xs
theorem Array.countP_filterMap {α : Type u_2} {β : Type u_1} (p : βBool) (f : αOption β) (xs : Array α) :
countP p (filterMap f xs) = countP (fun (a : α) => (Option.map p (f a)).getD false) xs
@[simp]
theorem Array.countP_flatten {α : Type u_1} (p : αBool) (xss : Array (Array α)) :
countP p xss.flatten = (map (countP p) xss).sum
theorem Array.countP_flatMap {α : Type u_2} {β : Type u_1} (p : βBool) (xs : Array α) (f : αArray β) :
countP p (flatMap f xs) = (map (countP p f) xs).sum
@[simp]
theorem Array.countP_reverse {α : Type u_1} (p : αBool) (xs : Array α) :
theorem Array.countP_mono_left {α : Type u_1} {p q : αBool} {xs : Array α} (h : ∀ (x : α), x xsp x = trueq x = true) :
countP p xs countP q xs
theorem Array.countP_congr {α : Type u_1} {p q : αBool} {xs : Array α} (h : ∀ (x : α), x xs → (p x = true q x = true)) :
countP p xs = countP q xs

count #

@[simp]
theorem List.count_toArray {α : Type u_1} [BEq α] (l : List α) (a : α) :
@[simp]
theorem Array.count_toList {α : Type u_1} [BEq α] (xs : Array α) (a : α) :
@[simp]
theorem Array.count_empty {α : Type u_1} [BEq α] (a : α) :
count a #[] = 0
theorem Array.count_push {α : Type u_1} [BEq α] (a b : α) (xs : Array α) :
count a (xs.push b) = count a xs + if (b == a) = true then 1 else 0
theorem Array.count_eq_countP {α : Type u_1} [BEq α] (a : α) (xs : Array α) :
count a xs = countP (fun (x : α) => x == a) xs
theorem Array.count_eq_countP' {α : Type u_1} [BEq α] {a : α} :
count a = countP fun (x : α) => x == a
theorem Array.count_le_size {α : Type u_1} [BEq α] (a : α) (xs : Array α) :
count a xs xs.size
theorem Array.count_le_count_push {α : Type u_1} [BEq α] (a b : α) (xs : Array α) :
count a xs count a (xs.push b)
theorem Array.count_singleton {α : Type u_1} [BEq α] (a b : α) :
count a #[b] = if (b == a) = true then 1 else 0
@[simp]
theorem Array.count_append {α : Type u_1} [BEq α] (a : α) (xs ys : Array α) :
count a (xs ++ ys) = count a xs + count a ys
@[simp]
theorem Array.count_flatten {α : Type u_1} [BEq α] (a : α) (xss : Array (Array α)) :
count a xss.flatten = (map (count a) xss).sum
@[simp]
theorem Array.count_reverse {α : Type u_1} [BEq α] (a : α) (xs : Array α) :
count a xs.reverse = count a xs
theorem Array.boole_getElem_le_count {α : Type u_1} [BEq α] (a : α) (xs : Array α) (i : Nat) (h : i < xs.size) :
(if (xs[i] == a) = true then 1 else 0) count a xs
theorem Array.count_set {α : Type u_1} [BEq α] (a b : α) (xs : Array α) (i : Nat) (h : i < xs.size) :
count b (xs.set i a h) = (count b xs - if (xs[i] == b) = true then 1 else 0) + if (a == b) = true then 1 else 0
@[simp]
theorem Array.count_push_self {α : Type u_1} [BEq α] [LawfulBEq α] (a : α) (xs : Array α) :
count a (xs.push a) = count a xs + 1
@[simp]
theorem Array.count_push_of_ne {α : Type u_1} [BEq α] [LawfulBEq α] {b a : α} (h : b a) (xs : Array α) :
count a (xs.push b) = count a xs
theorem Array.count_singleton_self {α : Type u_1} [BEq α] [LawfulBEq α] (a : α) :
count a #[a] = 1
@[simp]
theorem Array.count_pos_iff {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} :
0 < count a xs a xs
@[simp]
theorem Array.one_le_count_iff {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} :
1 count a xs a xs
theorem Array.count_eq_zero_of_not_mem {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} (h : ¬a xs) :
count a xs = 0
theorem Array.not_mem_of_count_eq_zero {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} (h : count a xs = 0) :
¬a xs
theorem Array.count_eq_zero {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} :
count a xs = 0 ¬a xs
theorem Array.count_eq_size {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} :
count a xs = xs.size ∀ (b : α), b xsa = b
@[simp]
theorem Array.count_mkArray_self {α : Type u_1} [BEq α] [LawfulBEq α] (a : α) (n : Nat) :
count a (mkArray n a) = n
theorem Array.count_mkArray {α : Type u_1} [BEq α] [LawfulBEq α] (a b : α) (n : Nat) :
count a (mkArray n b) = if (b == a) = true then n else 0
theorem Array.filter_beq {α : Type u_1} [BEq α] [LawfulBEq α] (xs : Array α) (a : α) :
filter (fun (x : α) => x == a) xs = mkArray (count a xs) a
theorem Array.filter_eq {α : Type u_1} [DecidableEq α] (xs : Array α) (a : α) :
filter (fun (x : α) => decide (x = a)) xs = mkArray (count a xs) a
theorem Array.mkArray_count_eq_of_count_eq_size {α : Type u_1} [BEq α] [LawfulBEq α] {a : α} {xs : Array α} (h : count a xs = xs.size) :
mkArray (count a xs) a = xs
@[simp]
theorem Array.count_filter {α : Type u_1} [BEq α] [LawfulBEq α] {p : αBool} {a : α} {xs : Array α} (h : p a = true) :
count a (filter p xs) = count a xs
theorem Array.count_le_count_map {α : Type u_2} [BEq α] [LawfulBEq α] {β : Type u_1} [DecidableEq β] (xs : Array α) (f : αβ) (x : α) :
count x xs count (f x) (map f xs)
theorem Array.count_filterMap {β : Type u_1} {α : Type u_2} [BEq β] (b : β) (f : αOption β) (xs : Array α) :
count b (filterMap f xs) = countP (fun (a : α) => f a == some b) xs
theorem Array.count_flatMap {β : Type u_1} {α : Type u_2} [BEq β] (xs : Array α) (f : αArray β) (x : β) :
count x (flatMap f xs) = (map (count x f) xs).sum