Documentation

Init.Data.Vector.Count

Lemmas about Vector.countP and Vector.count. #

countP #

@[simp]
theorem Vector.countP_empty {α : Type u_1} (p : αBool) :
countP p { toArray := #[], size_toArray := } = 0
@[simp]
theorem Vector.countP_push_of_pos {α : Type u_1} (p : αBool) {n : Nat} {a : α} (l : Vector α n) (pa : p a = true) :
countP p (l.push a) = countP p l + 1
@[simp]
theorem Vector.countP_push_of_neg {α : Type u_1} (p : αBool) {n : Nat} {a : α} (l : Vector α n) (pa : ¬p a = true) :
countP p (l.push a) = countP p l
theorem Vector.countP_push {α : Type u_1} (p : αBool) {n : Nat} (a : α) (l : Vector α n) :
countP p (l.push a) = countP p l + if p a = true then 1 else 0
@[simp]
theorem Vector.countP_singleton {α : Type u_1} (p : αBool) (a : α) :
countP p { toArray := #[a], size_toArray := } = if p a = true then 1 else 0
theorem Vector.size_eq_countP_add_countP {α : Type u_1} (p : αBool) {n : Nat} (l : Vector α n) :
n = countP p l + countP (fun (a : α) => decide ¬p a = true) l
theorem Vector.countP_le_size {α : Type u_1} (p : αBool) {n : Nat} {l : Vector α n} :
countP p l n
@[simp]
theorem Vector.countP_append {α : Type u_1} (p : αBool) {n m : Nat} (l₁ : Vector α n) (l₂ : Vector α m) :
countP p (l₁ ++ l₂) = countP p l₁ + countP p l₂
@[simp]
theorem Vector.countP_pos_iff {α✝ : Type u_1} {n✝ : Nat} {l : Vector α✝ n✝} {p : α✝Bool} :
0 < countP p l (a : α✝), a l p a = true
@[simp]
theorem Vector.one_le_countP_iff {α✝ : Type u_1} {n✝ : Nat} {l : Vector α✝ n✝} {p : α✝Bool} :
1 countP p l (a : α✝), a l p a = true
@[simp]
theorem Vector.countP_eq_zero {α✝ : Type u_1} {n✝ : Nat} {l : Vector α✝ n✝} {p : α✝Bool} :
countP p l = 0 ∀ (a : α✝), a l¬p a = true
@[simp]
theorem Vector.countP_eq_size {α✝ : Type u_1} {n✝ : Nat} {l : Vector α✝ n✝} {p : α✝Bool} :
countP p l = l.size ∀ (a : α✝), a lp a = true
@[simp]
theorem Vector.countP_cast {α : Type u_1} {n a✝ : Nat} {h : n = a✝} (p : αBool) (l : Vector α n) :
theorem Vector.countP_mkVector {α : Type u_1} (p : αBool) (a : α) (n : Nat) :
countP p (mkVector n a) = if p a = true then n else 0
theorem Vector.boole_getElem_le_countP {α : Type u_1} {n : Nat} (p : αBool) (l : Vector α n) (i : Nat) (h : i < n) :
(if p l[i] = true then 1 else 0) countP p l
theorem Vector.countP_set {α : Type u_1} {n : Nat} (p : αBool) (l : Vector α n) (i : Nat) (a : α) (h : i < n) :
countP p (l.set i a h) = (countP p l - if p l[i] = true then 1 else 0) + if p a = true then 1 else 0
@[simp]
theorem Vector.countP_true {α : Type u_1} {n : Nat} :
(countP fun (x : α) => true) = fun (x : Vector α n) => n
@[simp]
theorem Vector.countP_false {α : Type u_1} {n : Nat} :
(countP fun (x : α) => false) = fun (x : Vector α n) => 0
@[simp]
theorem Vector.countP_map {α : Type u_2} {β : Type u_1} {n : Nat} (p : βBool) (f : αβ) (l : Vector α n) :
countP p (map f l) = countP (p f) l
@[simp]
theorem Vector.countP_flatten {α : Type u_1} (p : αBool) {m n : Nat} (l : Vector (Vector α m) n) :
theorem Vector.countP_flatMap {α : Type u_2} {β : Type u_1} {n m : Nat} (p : βBool) (l : Vector α n) (f : αVector β m) :
countP p (l.flatMap f) = (map (countP p f) l).sum
@[simp]
theorem Vector.countP_reverse {α : Type u_1} (p : αBool) {n : Nat} (l : Vector α n) :
theorem Vector.countP_mono_left {α : Type u_1} {p q : αBool} {n✝ : Nat} {l : Vector α n✝} (h : ∀ (x : α), x lp x = trueq x = true) :
countP p l countP q l
theorem Vector.countP_congr {α : Type u_1} {p q : αBool} {n✝ : Nat} {l : Vector α n✝} (h : ∀ (x : α), x l → (p x = true q x = true)) :
countP p l = countP q l

count #

@[simp]
theorem Vector.count_empty {α : Type u_1} [BEq α] (a : α) :
count a { toArray := #[], size_toArray := } = 0
theorem Vector.count_push {α : Type u_1} [BEq α] {n : Nat} (a b : α) (l : Vector α n) :
count a (l.push b) = count a l + if (b == a) = true then 1 else 0
theorem Vector.count_eq_countP {α : Type u_1} [BEq α] {n : Nat} (a : α) (l : Vector α n) :
count a l = countP (fun (x : α) => x == a) l
theorem Vector.count_eq_countP' {α : Type u_1} [BEq α] {n : Nat} {a : α} :
count a = countP fun (x : α) => x == a
theorem Vector.count_le_size {α : Type u_1} [BEq α] {n : Nat} (a : α) (l : Vector α n) :
count a l n
theorem Vector.count_le_count_push {α : Type u_1} [BEq α] {n : Nat} (a b : α) (l : Vector α n) :
count a l count a (l.push b)
@[simp]
theorem Vector.count_singleton {α : Type u_1} [BEq α] (a b : α) :
count a { toArray := #[b], size_toArray := } = if (b == a) = true then 1 else 0
@[simp]
theorem Vector.count_append {α : Type u_1} [BEq α] {n m : Nat} (a : α) (l₁ : Vector α n) (l₂ : Vector α m) :
count a (l₁ ++ l₂) = count a l₁ + count a l₂
@[simp]
theorem Vector.count_flatten {α : Type u_1} [BEq α] {m n : Nat} (a : α) (l : Vector (Vector α m) n) :
count a l.flatten = (map (count a) l).sum
@[simp]
theorem Vector.count_reverse {α : Type u_1} [BEq α] {n : Nat} (a : α) (l : Vector α n) :
theorem Vector.boole_getElem_le_count {α : Type u_1} [BEq α] {n : Nat} (a : α) (l : Vector α n) (i : Nat) (h : i < n) :
(if (l[i] == a) = true then 1 else 0) count a l
theorem Vector.count_set {α : Type u_1} [BEq α] {n : Nat} (a b : α) (l : Vector α n) (i : Nat) (h : i < n) :
count b (l.set i a h) = (count b l - if (l[i] == b) = true then 1 else 0) + if (a == b) = true then 1 else 0
@[simp]
theorem Vector.count_cast {α : Type u_1} [BEq α] {n a✝ : Nat} {h : n = a✝} {a : α} (l : Vector α n) :
count a (Vector.cast h l) = count a l
@[simp]
theorem Vector.count_push_self {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} (a : α) (l : Vector α n) :
count a (l.push a) = count a l + 1
@[simp]
theorem Vector.count_push_of_ne {α : Type u_1} [BEq α] [LawfulBEq α] {b a : α} {n : Nat} (h : b a) (l : Vector α n) :
count a (l.push b) = count a l
theorem Vector.count_singleton_self {α : Type u_1} [BEq α] [LawfulBEq α] (a : α) :
count a { toArray := #[a], size_toArray := } = 1
@[simp]
theorem Vector.count_pos_iff {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {l : Vector α n} :
0 < count a l a l
@[simp]
theorem Vector.one_le_count_iff {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {l : Vector α n} :
1 count a l a l
theorem Vector.count_eq_zero_of_not_mem {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {l : Vector α n} (h : ¬a l) :
count a l = 0
theorem Vector.not_mem_of_count_eq_zero {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {l : Vector α n} (h : count a l = 0) :
¬a l
theorem Vector.count_eq_zero {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {l : Vector α n} :
count a l = 0 ¬a l
theorem Vector.count_eq_size {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {l : Vector α n} :
count a l = l.size ∀ (b : α), b la = b
@[simp]
theorem Vector.count_mkVector_self {α : Type u_1} [BEq α] [LawfulBEq α] (a : α) (n : Nat) :
count a (mkVector n a) = n
theorem Vector.count_mkVector {α : Type u_1} [BEq α] [LawfulBEq α] (a b : α) (n : Nat) :
count a (mkVector n b) = if (b == a) = true then n else 0
theorem Vector.count_le_count_map {α : Type u_2} [BEq α] [LawfulBEq α] {β : Type u_1} {n : Nat} [DecidableEq β] (l : Vector α n) (f : αβ) (x : α) :
count x l count (f x) (map f l)
theorem Vector.count_flatMap {β : Type u_1} {n m : Nat} {α : Type u_2} [BEq β] (l : Vector α n) (f : αVector β m) (x : β) :
count x (l.flatMap f) = (map (count x f) l).sum