Documentation
Init
.
Data
.
Vector
.
Count
Search
return to top
source
Imports
Init.Data.Array.Count
Init.Data.Vector.Lemmas
Imported by
Vector
.
countP_empty
Vector
.
countP_push_of_pos
Vector
.
countP_push_of_neg
Vector
.
countP_push
Vector
.
countP_singleton
Vector
.
size_eq_countP_add_countP
Vector
.
countP_le_size
Vector
.
countP_append
Vector
.
countP_pos_iff
Vector
.
one_le_countP_iff
Vector
.
countP_eq_zero
Vector
.
countP_eq_size
Vector
.
countP_cast
Vector
.
countP_mkVector
Vector
.
boole_getElem_le_countP
Vector
.
countP_set
Vector
.
countP_true
Vector
.
countP_false
Vector
.
countP_map
Vector
.
countP_flatten
Vector
.
countP_flatMap
Vector
.
countP_reverse
Vector
.
countP_mono_left
Vector
.
countP_congr
Vector
.
count_empty
Vector
.
count_push
Vector
.
count_eq_countP
Vector
.
count_eq_countP'
Vector
.
count_le_size
Vector
.
count_le_count_push
Vector
.
count_singleton
Vector
.
count_append
Vector
.
count_flatten
Vector
.
count_reverse
Vector
.
boole_getElem_le_count
Vector
.
count_set
Vector
.
count_cast
Vector
.
count_push_self
Vector
.
count_push_of_ne
Vector
.
count_singleton_self
Vector
.
count_pos_iff
Vector
.
one_le_count_iff
Vector
.
count_eq_zero_of_not_mem
Vector
.
not_mem_of_count_eq_zero
Vector
.
count_eq_zero
Vector
.
count_eq_size
Vector
.
count_mkVector_self
Vector
.
count_mkVector
Vector
.
count_le_count_map
Vector
.
count_flatMap
Lemmas about
Vector.countP
and
Vector.count
.
#
countP
#
source
@[simp]
theorem
Vector
.
countP_empty
{α :
Type
u_1}
(p :
α
→
Bool
)
:
countP
p
{
toArray
:=
#[
]
,
size_toArray
:=
⋯
}
=
0
source
@[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
source
@[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
source
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
source
@[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
source
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
source
theorem
Vector
.
countP_le_size
{α :
Type
u_1}
(p :
α
→
Bool
)
{n :
Nat
}
{l :
Vector
α
n
}
:
countP
p
l
≤
n
source
@[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₂
source
@[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
source
@[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
source
@[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
source
@[simp]
theorem
Vector
.
countP_eq_size
{α✝ :
Type
u_1}
{n✝ :
Nat
}
{l :
Vector
α✝
n✝
}
{p :
α✝
→
Bool
}
:
countP
p
l
=
l
.
size
↔
∀ (
a
:
α✝
),
a
∈
l
→
p
a
=
true
source
@[simp]
theorem
Vector
.
countP_cast
{α :
Type
u_1}
{n a✝ :
Nat
}
{h :
n
=
a✝
}
(p :
α
→
Bool
)
(l :
Vector
α
n
)
:
countP
p
(
Vector.cast
h
l
)
=
countP
p
l
source
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
source
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
source
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
source
@[simp]
theorem
Vector
.
countP_true
{α :
Type
u_1}
{n :
Nat
}
:
(
countP
fun (
x
:
α
) =>
true
)
=
fun (
x
:
Vector
α
n
) =>
n
source
@[simp]
theorem
Vector
.
countP_false
{α :
Type
u_1}
{n :
Nat
}
:
(
countP
fun (
x
:
α
) =>
false
)
=
fun (
x
:
Vector
α
n
) =>
0
source
@[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
source
@[simp]
theorem
Vector
.
countP_flatten
{α :
Type
u_1}
(p :
α
→
Bool
)
{m n :
Nat
}
(l :
Vector
(
Vector
α
m
)
n
)
:
countP
p
l
.
flatten
=
(
map
(
countP
p
)
l
)
.
sum
source
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
source
@[simp]
theorem
Vector
.
countP_reverse
{α :
Type
u_1}
(p :
α
→
Bool
)
{n :
Nat
}
(l :
Vector
α
n
)
:
countP
p
l
.
reverse
=
countP
p
l
source
theorem
Vector
.
countP_mono_left
{α :
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
source
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
#
source
@[simp]
theorem
Vector
.
count_empty
{α :
Type
u_1}
[
BEq
α
]
(a :
α
)
:
count
a
{
toArray
:=
#[
]
,
size_toArray
:=
⋯
}
=
0
source
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
source
theorem
Vector
.
count_eq_countP
{α :
Type
u_1}
[
BEq
α
]
{n :
Nat
}
(a :
α
)
(l :
Vector
α
n
)
:
count
a
l
=
countP
(fun (
x
:
α
) =>
x
==
a
)
l
source
theorem
Vector
.
count_eq_countP'
{α :
Type
u_1}
[
BEq
α
]
{n :
Nat
}
{a :
α
}
:
count
a
=
countP
fun (
x
:
α
) =>
x
==
a
source
theorem
Vector
.
count_le_size
{α :
Type
u_1}
[
BEq
α
]
{n :
Nat
}
(a :
α
)
(l :
Vector
α
n
)
:
count
a
l
≤
n
source
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
)
source
@[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
source
@[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₂
source
@[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
source
@[simp]
theorem
Vector
.
count_reverse
{α :
Type
u_1}
[
BEq
α
]
{n :
Nat
}
(a :
α
)
(l :
Vector
α
n
)
:
count
a
l
.
reverse
=
count
a
l
source
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
source
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
source
@[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
source
@[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
source
@[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
source
theorem
Vector
.
count_singleton_self
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
(a :
α
)
:
count
a
{
toArray
:=
#[
a
]
,
size_toArray
:=
⋯
}
=
1
source
@[simp]
theorem
Vector
.
count_pos_iff
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
{n :
Nat
}
{a :
α
}
{l :
Vector
α
n
}
:
0
<
count
a
l
↔
a
∈
l
source
@[simp]
theorem
Vector
.
one_le_count_iff
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
{n :
Nat
}
{a :
α
}
{l :
Vector
α
n
}
:
1
≤
count
a
l
↔
a
∈
l
source
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
source
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
source
theorem
Vector
.
count_eq_zero
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
{n :
Nat
}
{a :
α
}
{l :
Vector
α
n
}
:
count
a
l
=
0
↔
¬
a
∈
l
source
theorem
Vector
.
count_eq_size
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
{n :
Nat
}
{a :
α
}
{l :
Vector
α
n
}
:
count
a
l
=
l
.
size
↔
∀ (
b
:
α
),
b
∈
l
→
a
=
b
source
@[simp]
theorem
Vector
.
count_mkVector_self
{α :
Type
u_1}
[
BEq
α
]
[
LawfulBEq
α
]
(a :
α
)
(n :
Nat
)
:
count
a
(
mkVector
n
a
)
=
n
source
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
source
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
)
source
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