Theorem: IsUpperSet.le_card_inter_finset
File: Mathlib/Combinatorics/SetFamily/HarrisKleitman.lean

tactic: rw [← isLowerSet_compl, ← coe_compl] at h𝒜
state_before: α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsUpperSet ↑𝒜
hℬ : IsUpperSet ↑ℬ
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * (𝒜 ∩ ℬ).card
state_after: α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * (𝒜 ∩ ℬ).card

tactic: have := h𝒜.card_inter_le_finset hℬ
state_before: α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * (𝒜 ∩ ℬ).card
state_after: α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 𝒜ᶜ.card * ℬ.card
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * (𝒜 ∩ ℬ).card

tactic: rwa [card_compl, Fintype.card_finset, tsub_mul, le_tsub_iff_le_tsub, ← mul_tsub, ←
  card_sdiff inter_subset_right, sdiff_inter_self_right, sdiff_compl,
  _root_.inf_comm] at this
state_before: α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 𝒜ᶜ.card * ℬ.card
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * (𝒜 ∩ ℬ).card
state_after: case h₁
α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card - 𝒜.card * ℬ.card
⊢ 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card

case h₂
α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card - 𝒜.card * ℬ.card
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * ℬ.card

tactic: exact mul_le_mul_left' (card_le_card inter_subset_right) _
state_before: case h₁
α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card - 𝒜.card * ℬ.card
⊢ 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card
state_after: no goals

tactic: rw [← Fintype.card_finset]
state_before: case h₂
α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card - 𝒜.card * ℬ.card
⊢ 𝒜.card * ℬ.card ≤ 2 ^ Fintype.card α * ℬ.card
state_after: case h₂
α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card - 𝒜.card * ℬ.card
⊢ 𝒜.card * ℬ.card ≤ Fintype.card (Finset α) * ℬ.card

tactic: exact mul_le_mul_right' (card_le_univ _) _
state_before: case h₂
α : Type u_1
inst✝¹ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
inst✝ : Fintype α
h𝒜 : IsLowerSet ↑𝒜ᶜ
hℬ : IsUpperSet ↑ℬ
this : 2 ^ Fintype.card α * (𝒜ᶜ ∩ ℬ).card ≤ 2 ^ Fintype.card α * ℬ.card - 𝒜.card * ℬ.card
⊢ 𝒜.card * ℬ.card ≤ Fintype.card (Finset α) * ℬ.card
state_after: no goals