Theorem: Set.Intersecting.is_max_iff_card_eq
File: Mathlib/Combinatorics/SetFamily/Intersecting.lean

tactic: classical
  refine'
    ⟨fun h => _, fun h t ht hst =>
      Finset.eq_of_subset_of_card_le hst <|
        le_of_mul_le_mul_left (ht.card_le.trans_eq h.symm) two_pos⟩
  suffices s.disjUnion (s.map ⟨compl, compl_injective⟩) hs.disjoint_map_compl = Finset.univ by
    rw [Fintype.card, ← this, two_mul, card_disjUnion, card_map]
  rw [← coe_eq_univ, disjUnion_eq_union, coe_union, coe_map, Function.Embedding.coeFn_mk,
    image_eq_preimage_of_inverse compl_compl compl_compl]
  refine' eq_univ_of_forall fun a => _
  simp_rw [mem_union, mem_preimage]
  by_contra' ha
  refine' s.ne_insert_of_not_mem _ ha.1 (h _ _ <| s.subset_insert _)
  rw [coe_insert]
  refine' hs.insert _ fun b hb hab => ha.2 <| (hs.isUpperSet' h) hab.le_compl_left hb
  rintro rfl
  have := h {⊤} (by rw [coe_singleton]; exact intersecting_singleton.2 top_ne_bot)
  rw [compl_bot] at ha
  rw [coe_eq_empty.1 ((hs.isUpperSet' h).not_top_mem.1 ha.2)] at this
  exact Finset.singleton_ne_empty _ (this <| Finset.empty_subset _).symm
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
⊢ (∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t) ↔ 2 * card s = Fintype.card α

tactic: refine'
  ⟨fun h => _, fun h t ht hst =>
    Finset.eq_of_subset_of_card_le hst <|
      le_of_mul_le_mul_left (ht.card_le.trans_eq h.symm) two_pos⟩
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
⊢ (∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t) ↔ 2 * card s = Fintype.card α

tactic: suffices s.disjUnion (s.map ⟨compl, compl_injective⟩) hs.disjoint_map_compl = Finset.univ by
  rw [Fintype.card, ← this, two_mul, card_disjUnion, card_map]
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
⊢ 2 * card s = Fintype.card α

tactic: rw [← coe_eq_univ, disjUnion_eq_union, coe_union, coe_map, Function.Embedding.coeFn_mk,
  image_eq_preimage_of_inverse compl_compl compl_compl]
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
⊢ disjUnion s (map { toFun := compl, inj' := (_ : Function.Injective compl) } s)
      (_ : Disjoint s (map { toFun := compl, inj' := (_ : Function.Injective compl) } s)) =
    Finset.univ

tactic: refine' eq_univ_of_forall fun a => _
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
⊢ ↑s ∪ compl ⁻¹' ↑s = univ

tactic: simp_rw [mem_union, mem_preimage]
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
a : α
⊢ a ∈ ↑s ∪ compl ⁻¹' ↑s

tactic: by_contra' ha
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
a : α
⊢ a ∈ ↑s ∨ aᶜ ∈ ↑s

tactic: refine' s.ne_insert_of_not_mem _ ha.1 (h _ _ <| s.subset_insert _)
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
a : α
ha : ¬a ∈ ↑s ∧ ¬aᶜ ∈ ↑s
⊢ False

tactic: rw [coe_insert]
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
a : α
ha : ¬a ∈ ↑s ∧ ¬aᶜ ∈ ↑s
⊢ Intersecting ↑(Insert.insert a s)

tactic: refine' hs.insert _ fun b hb hab => ha.2 <| (hs.isUpperSet' h) hab.le_compl_left hb
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
a : α
ha : ¬a ∈ ↑s ∧ ¬aᶜ ∈ ↑s
⊢ Intersecting (Insert.insert a ↑s)

tactic: rintro rfl
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
a : α
ha : ¬a ∈ ↑s ∧ ¬aᶜ ∈ ↑s
⊢ a ≠ ⊥

tactic: have := h {⊤} (by rw [coe_singleton]; exact intersecting_singleton.2 top_ne_bot)
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
ha : ¬⊥ ∈ ↑s ∧ ¬⊥ᶜ ∈ ↑s
⊢ False

tactic: rw [compl_bot] at ha
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
ha : ¬⊥ ∈ ↑s ∧ ¬⊥ᶜ ∈ ↑s
this : s ⊆ {⊤} → s = {⊤}
⊢ False

tactic: rw [coe_eq_empty.1 ((hs.isUpperSet' h).not_top_mem.1 ha.2)] at this
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
ha : ¬⊥ ∈ ↑s ∧ ¬⊤ ∈ ↑s
this : s ⊆ {⊤} → s = {⊤}
⊢ False

tactic: exact Finset.singleton_ne_empty _ (this <| Finset.empty_subset _).symm
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
ha : ¬⊥ ∈ ↑s ∧ ¬⊤ ∈ ↑s
this : ∅ ⊆ {⊤} → ∅ = {⊤}
⊢ False

tactic: rw [Fintype.card, ← this, two_mul, card_disjUnion, card_map]
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
this :
  disjUnion s (map { toFun := compl, inj' := (_ : Function.Injective compl) } s)
      (_ : Disjoint s (map { toFun := compl, inj' := (_ : Function.Injective compl) } s)) =
    Finset.univ
⊢ 2 * card s = Fintype.card α

tactic: rw [coe_singleton]
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
ha : ¬⊥ ∈ ↑s ∧ ¬⊥ᶜ ∈ ↑s
⊢ Intersecting ↑{⊤}

tactic: exact intersecting_singleton.2 top_ne_bot
state_before: α : Type u_1
inst✝² : BooleanAlgebra α
inst✝¹ : Nontrivial α
inst✝ : Fintype α
s : Finset α
hs : Intersecting ↑s
h : ∀ (t : Finset α), Intersecting ↑t → s ⊆ t → s = t
ha : ¬⊥ ∈ ↑s ∧ ¬⊥ᶜ ∈ ↑s
⊢ Intersecting {⊤}