Skip to content
This repository was archived by the owner on Jul 24, 2024. It is now read-only.

Commit 7236938

Browse files
committed
feat(measure_theory/measure_space): add count_apply_infinite (#3592)
Also add some supporting lemmas about `set.infinite`.
1 parent f6f6f8a commit 7236938

File tree

3 files changed

+49
-0
lines changed

3 files changed

+49
-0
lines changed

src/data/fintype/basic.lean

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1003,9 +1003,14 @@ begin
10031003
rw [h, nat_embedding_aux]
10041004
end
10051005

1006+
/-- Embedding of `ℕ` into an infinite type. -/
10061007
noncomputable def nat_embedding (α : Type*) [infinite α] : ℕ ↪ α :=
10071008
⟨_, nat_embedding_aux_injective α⟩
10081009

1010+
lemma exists_subset_card_eq (α : Type*) [infinite α] (n : ℕ) :
1011+
∃ s : finset α, s.card = n :=
1012+
⟨(range n).map (nat_embedding α), by rw [card_map, card_range]⟩
1013+
10091014
end infinite
10101015

10111016
lemma not_injective_infinite_fintype [infinite α] [fintype β] (f : α → β) :

src/data/set/finite.lean

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -185,6 +185,20 @@ theorem infinite_univ_iff : (@univ α).infinite ↔ _root_.infinite α :=
185185
theorem infinite_univ [h : _root_.infinite α] : infinite (@univ α) :=
186186
infinite_univ_iff.2 h
187187

188+
theorem infinite_coe_iff {s : set α} : _root_.infinite s ↔ infinite s :=
189+
⟨λ ⟨h₁⟩ h₂, h₁ h₂.some, λ h₁, ⟨λ h₂, h₁ ⟨h₂⟩⟩⟩
190+
191+
theorem infinite.to_subtype {s : set α} (h : infinite s) : _root_.infinite s :=
192+
infinite_coe_iff.2 h
193+
194+
/-- Embedding of `ℕ` into an infinite set. -/
195+
noncomputable def infinite.nat_embedding (s : set α) (h : infinite s) : ℕ ↪ s :=
196+
by { haveI := h.to_subtype, exact infinite.nat_embedding s }
197+
198+
lemma infinite.exists_subset_card_eq {s : set α} (hs : infinite s) (n : ℕ) :
199+
∃ t : finset α, ↑t ⊆ s ∧ t.card = n :=
200+
⟨((finset.range n).map (hs.nat_embedding _)).map (embedding.subtype _), by simp⟩
201+
188202
instance fintype_union [decidable_eq α] (s t : set α) [fintype s] [fintype t] : fintype (s ∪ t : set α) :=
189203
fintype.of_finset (s.to_finset ∪ t.to_finset) $ by simp
190204

src/measure_theory/measure_space.lean

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1017,6 +1017,36 @@ calc count (↑s : set α) = ∑' i : (↑s : set α), (1 : α → ennreal) i :
10171017
... = ∑ i in s, 1 : s.tsum_subtype 1
10181018
... = s.card : by simp
10191019

1020+
lemma count_apply_finite [measurable_singleton_class α] (s : set α) (hs : finite s) :
1021+
count s = hs.to_finset.card :=
1022+
by rw [← count_apply_finset, finite.coe_to_finset]
1023+
1024+
/-- `count` measure evaluates to infinity at infinite sets. -/
1025+
lemma count_apply_infinite [measurable_singleton_class α] {s : set α} (hs : s.infinite) :
1026+
count s = ⊤ :=
1027+
begin
1028+
by_contra H,
1029+
rcases ennreal.exists_nat_gt H with ⟨n, hn⟩,
1030+
rcases hs.exists_subset_card_eq n with ⟨t, ht, rfl⟩,
1031+
have := lt_of_le_of_lt (measure_mono ht) hn,
1032+
simpa [lt_irrefl] using this
1033+
end
1034+
1035+
@[simp] lemma count_apply_eq_top [measurable_singleton_class α] {s : set α} :
1036+
count s = ⊤ ↔ s.infinite :=
1037+
begin
1038+
by_cases hs : s.finite,
1039+
{ simp [set.infinite, hs, count_apply_finite] },
1040+
{ change s.infinite at hs,
1041+
simp [hs, count_apply_infinite] }
1042+
end
1043+
1044+
@[simp] lemma count_apply_lt_top [measurable_singleton_class α] {s : set α} :
1045+
count s < ⊤ ↔ s.finite :=
1046+
calc count s < ⊤ ↔ count s ≠ ⊤ : lt_top_iff_ne_top
1047+
... ↔ ¬s.infinite : not_congr count_apply_eq_top
1048+
... ↔ s.finite : not_not
1049+
10201050
/-- A measure is complete if every null set is also measurable.
10211051
A null set is a subset of a measurable set with measure `0`.
10221052
Since every measure is defined as a special case of an outer measure, we can more simply state

0 commit comments

Comments
 (0)