List of booleans #
In this file we prove lemmas about the number of false
s and true
s in a list of booleans. First
we prove that the number of false
s plus the number of true
equals the length of the list. Then
we prove that in a list with alternating true
s and false
s, the number of true
s differs from
the number of false
s by at most one. We provide several versions of these statements.
@[simp]
theorem
List.count_not_add_count
(l : List Bool)
(b : Bool)
:
List.count (!b) l + List.count b l = l.length
@[simp]
theorem
List.count_add_count_not
(l : List Bool)
(b : Bool)
:
List.count b l + List.count (!b) l = l.length
@[simp]
theorem
List.count_false_add_count_true
(l : List Bool)
:
List.count false l + List.count true l = l.length
@[simp]
theorem
List.count_true_add_count_false
(l : List Bool)
:
List.count true l + List.count false l = l.length
theorem
List.Chain.count_not
{b : Bool}
{l : List Bool}
:
List.Chain (fun (x1 x2 : Bool) => x1 ≠ x2) b l → List.count (!b) l = List.count b l + l.length % 2
theorem
List.Chain'.count_not_eq_count
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(h2 : Even l.length)
(b : Bool)
:
List.count (!b) l = List.count b l
theorem
List.Chain'.count_false_eq_count_true
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(h2 : Even l.length)
:
List.count false l = List.count true l
theorem
List.Chain'.count_not_le_count_add_one
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(b : Bool)
:
List.count (!b) l ≤ List.count b l + 1
theorem
List.Chain'.count_false_le_count_true_add_one
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
:
List.count false l ≤ List.count true l + 1
theorem
List.Chain'.count_true_le_count_false_add_one
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
:
List.count true l ≤ List.count false l + 1
theorem
List.Chain'.two_mul_count_bool_of_even
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(h2 : Even l.length)
(b : Bool)
:
2 * List.count b l = l.length
theorem
List.Chain'.length_sub_one_le_two_mul_count_bool
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(b : Bool)
:
l.length - 1 ≤ 2 * List.count b l
theorem
List.Chain'.length_div_two_le_count_bool
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(b : Bool)
:
l.length / 2 ≤ List.count b l
theorem
List.Chain'.two_mul_count_bool_le_length_add_one
{l : List Bool}
(hl : List.Chain' (fun (x1 x2 : Bool) => x1 ≠ x2) l)
(b : Bool)
:
2 * List.count b l ≤ l.length + 1