Skip to content

Commit d08f234

Browse files
committed
feat: cardinality of the graph of a function (#18401)
From PFR
1 parent 84343c9 commit d08f234

File tree

2 files changed

+16
-0
lines changed

2 files changed

+16
-0
lines changed

Mathlib/Data/Set/Card.lean

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,8 @@ theorem encard_ne_zero : s.encard ≠ 0 ↔ s.Nonempty := by
103103
@[simp] theorem encard_pos : 0 < s.encard ↔ s.Nonempty := by
104104
rw [pos_iff_ne_zero, encard_ne_zero]
105105

106+
protected alias ⟨_, Nonempty.encard_pos⟩ := encard_pos
107+
106108
@[simp] theorem encard_singleton (e : α) : ({e} : Set α).encard = 1 := by
107109
rw [encard, ← PartENat.withTopEquiv.symm.injective.eq_iff, Equiv.symm_apply_apply,
108110
PartENat.card_eq_coe_fintype_card, Fintype.card_ofSubsingleton, Nat.cast_one]; rfl
@@ -530,6 +532,8 @@ theorem ncard_univ (α : Type*) : (univ : Set α).ncard = Nat.card α := by
530532
theorem ncard_pos (hs : s.Finite := by toFinite_tac) : 0 < s.ncard ↔ s.Nonempty := by
531533
rw [pos_iff_ne_zero, Ne, ncard_eq_zero hs, nonempty_iff_ne_empty]
532534

535+
protected alias ⟨_, Nonempty.ncard_pos⟩ := ncard_pos
536+
533537
theorem ncard_ne_zero_of_mem {a : α} (h : a ∈ s) (hs : s.Finite := by toFinite_tac) : s.ncard ≠ 0 :=
534538
((ncard_pos hs).mpr ⟨a, h⟩).ne.symm
535539

@@ -789,6 +793,9 @@ theorem inj_on_of_surj_on_of_ncard_le {t : Set β} (f : ∀ a ∈ s, β) (hf :
789793
(by { rwa [← ncard_eq_toFinset_card', ← ncard_eq_toFinset_card'] }) a₁
790794
(by simpa) a₂ (by simpa) (by simpa)
791795

796+
@[simp] lemma ncard_graphOn (s : Set α) (f : α → β) : (s.graphOn f).ncard = s.ncard := by
797+
rw [← ncard_image_of_injOn fst_injOn_graph, image_fst_graphOn]
798+
792799
section Lattice
793800

794801
theorem ncard_union_add_ncard_inter (s t : Set α) (hs : s.Finite := by toFinite_tac)

Mathlib/SetTheory/Cardinal/Finite.lean

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -224,13 +224,22 @@ theorem card_zmod (n : ℕ) : Nat.card (ZMod n) = n := by
224224
end Nat
225225

226226
namespace Set
227+
variable {s : Set α}
227228

228229
lemma card_singleton_prod (a : α) (t : Set β) : Nat.card ({a} ×ˢ t) = Nat.card t := by
229230
rw [singleton_prod, Nat.card_image_of_injective (Prod.mk.inj_left a)]
230231

231232
lemma card_prod_singleton (s : Set α) (b : β) : Nat.card (s ×ˢ {b}) = Nat.card s := by
232233
rw [prod_singleton, Nat.card_image_of_injective (Prod.mk.inj_right b)]
233234

235+
theorem natCard_pos (hs : s.Finite) : 0 < Nat.card s ↔ s.Nonempty := by
236+
simp [pos_iff_ne_zero, Nat.card_eq_zero, hs.to_subtype, Set.nonempty_def, nonempty_iff_ne_empty]
237+
238+
protected alias ⟨_, Nonempty.natCard_pos⟩ := natCard_pos
239+
240+
@[simp] lemma natCard_graphOn (s : Set α) (f : α → β) : Nat.card (s.graphOn f) = Nat.card s := by
241+
rw [← Nat.card_image_of_injOn fst_injOn_graph, image_fst_graphOn]
242+
234243
end Set
235244

236245
namespace PartENat

0 commit comments

Comments
 (0)