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 : α} (xs : Vector α n) (pa : p a = true) :
countP p (xs.push a) = countP p xs + 1
@[simp]
theorem Vector.countP_push_of_neg {α : Type u_1} (p : αBool) {n : Nat} {a : α} (xs : Vector α n) (pa : ¬p a = true) :
countP p (xs.push a) = countP p xs
theorem Vector.countP_push {α : Type u_1} (p : αBool) {n : Nat} (a : α) (xs : Vector α n) :
countP p (xs.push a) = countP p xs + 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} (xs : Vector α n) :
n = countP p xs + countP (fun (a : α) => decide ¬p a = true) xs
theorem Vector.countP_le_size {α : Type u_1} (p : αBool) {n : Nat} {xs : Vector α n} :
countP p xs n
@[simp]
theorem Vector.countP_append {α : Type u_1} (p : αBool) {n m : Nat} (xs : Vector α n) (ys : Vector α m) :
countP p (xs ++ ys) = countP p xs + countP p ys
@[simp]
theorem Vector.countP_pos_iff {α✝ : Type u_1} {n✝ : Nat} {xs : Vector α✝ n✝} {p : α✝Bool} :
0 < countP p xs (a : α✝), a xs p a = true
@[simp]
theorem Vector.one_le_countP_iff {α✝ : Type u_1} {n✝ : Nat} {xs : Vector α✝ n✝} {p : α✝Bool} :
1 countP p xs (a : α✝), a xs p a = true
@[simp]
theorem Vector.countP_eq_zero {α✝ : Type u_1} {n✝ : Nat} {xs : Vector α✝ n✝} {p : α✝Bool} :
countP p xs = 0 ∀ (a : α✝), a xs¬p a = true
@[simp]
theorem Vector.countP_eq_size {α✝ : Type u_1} {n✝ : Nat} {xs : Vector α✝ n✝} {p : α✝Bool} :
countP p xs = xs.size ∀ (a : α✝), a xsp a = true
@[simp]
theorem Vector.countP_cast {α : Type u_1} {n a✝ : Nat} {h : n = a✝} (p : αBool) (xs : Vector α n) :
countP p (Vector.cast h xs) = countP p xs
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) (xs : Vector α n) (i : Nat) (h : i < n) :
(if p xs[i] = true then 1 else 0) countP p xs
theorem Vector.countP_set {α : Type u_1} {n : Nat} (p : αBool) (xs : Vector α n) (i : Nat) (a : α) (h : i < n) :
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
@[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 : αβ) (xs : Vector α n) :
countP p (map f xs) = countP (p f) xs
@[simp]
theorem Vector.countP_flatten {α : Type u_1} (p : αBool) {m n : Nat} (xss : Vector (Vector α m) n) :
countP p xss.flatten = (map (countP p) xss).sum
theorem Vector.countP_flatMap {α : Type u_2} {β : Type u_1} {n m : Nat} (p : βBool) (xs : Vector α n) (f : αVector β m) :
countP p (xs.flatMap f) = (map (countP p f) xs).sum
@[simp]
theorem Vector.countP_reverse {α : Type u_1} (p : αBool) {n : Nat} (xs : Vector α n) :
theorem Vector.countP_mono_left {α : Type u_1} {p q : αBool} {n✝ : Nat} {xs : Vector α n✝} (h : ∀ (x : α), x xsp x = trueq x = true) :
countP p xs countP q xs
theorem Vector.countP_congr {α : Type u_1} {p q : αBool} {n✝ : Nat} {xs : Vector α n✝} (h : ∀ (x : α), x xs → (p x = true q x = true)) :
countP p xs = countP q xs

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 : α) (xs : Vector α n) :
count a (xs.push b) = count a xs + if (b == a) = true then 1 else 0
theorem Vector.count_eq_countP {α : Type u_1} [BEq α] {n : Nat} (a : α) (xs : Vector α n) :
count a xs = countP (fun (x : α) => x == a) xs
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 : α) (xs : Vector α n) :
count a xs n
theorem Vector.count_le_count_push {α : Type u_1} [BEq α] {n : Nat} (a b : α) (xs : Vector α n) :
count a xs count a (xs.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 : α) (xs : Vector α n) (ys : Vector α m) :
count a (xs ++ ys) = count a xs + count a ys
@[simp]
theorem Vector.count_flatten {α : Type u_1} [BEq α] {m n : Nat} (a : α) (xss : Vector (Vector α m) n) :
count a xss.flatten = (map (count a) xss).sum
@[simp]
theorem Vector.count_reverse {α : Type u_1} [BEq α] {n : Nat} (a : α) (xs : Vector α n) :
count a xs.reverse = count a xs
theorem Vector.boole_getElem_le_count {α : Type u_1} [BEq α] {n : Nat} (a : α) (xs : Vector α n) (i : Nat) (h : i < n) :
(if (xs[i] == a) = true then 1 else 0) count a xs
theorem Vector.count_set {α : Type u_1} [BEq α] {n : Nat} (a b : α) (xs : Vector α n) (i : Nat) (h : i < n) :
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 Vector.count_cast {α : Type u_1} [BEq α] {n a✝ : Nat} {h : n = a✝} {a : α} (xs : Vector α n) :
count a (Vector.cast h xs) = count a xs
@[simp]
theorem Vector.count_push_self {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} (a : α) (xs : Vector α n) :
count a (xs.push a) = count a xs + 1
@[simp]
theorem Vector.count_push_of_ne {α : Type u_1} [BEq α] [LawfulBEq α] {b a : α} {n : Nat} (h : b a) (xs : Vector α n) :
count a (xs.push b) = count a xs
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 : α} {xs : Vector α n} :
0 < count a xs a xs
@[simp]
theorem Vector.one_le_count_iff {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {xs : Vector α n} :
1 count a xs a xs
theorem Vector.count_eq_zero_of_not_mem {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {xs : Vector α n} (h : ¬a xs) :
count a xs = 0
theorem Vector.not_mem_of_count_eq_zero {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {xs : Vector α n} (h : count a xs = 0) :
¬a xs
theorem Vector.count_eq_zero {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {xs : Vector α n} :
count a xs = 0 ¬a xs
theorem Vector.count_eq_size {α : Type u_1} [BEq α] [LawfulBEq α] {n : Nat} {a : α} {xs : Vector α n} :
count a xs = xs.size ∀ (b : α), b xsa = 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 β] (xs : Vector α n) (f : αβ) (x : α) :
count x xs count (f x) (map f xs)
theorem Vector.count_flatMap {β : Type u_1} {n m : Nat} {α : Type u_2} [BEq β] (xs : Vector α n) (f : αVector β m) (x : β) :
count x (xs.flatMap f) = (map (count x f) xs).sum