Theorem: IsLowerSet.le_card_inter_finset'
File: Mathlib/Combinatorics/SetFamily/HarrisKleitman.lean

tactic: induction' s using Finset.induction with a s hs ih generalizing 𝒜 ℬ
state_before: α : Type u_1
inst✝ : DecidableEq α
𝒜 ℬ : Finset (Finset α)
s : Finset α
a : α
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ s
hℬs : ∀ t ∈ ℬ, t ⊆ s
⊢ 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
state_after: case empty
α : Type u_1
inst✝ : DecidableEq α
a : α
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ ∅
hℬs : ∀ t ∈ ℬ, t ⊆ ∅
⊢ 𝒜.card * ℬ.card ≤ 2 ^ ∅.card * (𝒜 ∩ ℬ).card

case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ 𝒜.card * ℬ.card ≤ 2 ^ (insert a s).card * (𝒜 ∩ ℬ).card

tactic: rw [card_insert_of_not_mem hs, ← card_memberSubfamily_add_card_nonMemberSubfamily a 𝒜, ←
  card_memberSubfamily_add_card_nonMemberSubfamily a ℬ, add_mul, mul_add, mul_add,
  add_comm (_ * _), add_add_add_comm]
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ 𝒜.card * ℬ.card ≤ 2 ^ (insert a s).card * (𝒜 ∩ ℬ).card
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ (Finset.memberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 ^ (s.card + 1) * (𝒜 ∩ ℬ).card

tactic: refine
  (add_le_add_right
        (mul_add_mul_le_mul_add_mul
            (card_le_card h𝒜.memberSubfamily_subset_nonMemberSubfamily) <|
          card_le_card hℬ.memberSubfamily_subset_nonMemberSubfamily)
        _).trans
    ?_
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ (Finset.memberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 ^ (s.card + 1) * (𝒜 ∩ ℬ).card
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ (Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card +
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 ^ (s.card + 1) * (𝒜 ∩ ℬ).card

tactic: rw [← two_mul, pow_succ', mul_assoc]
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ (Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card +
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 ^ (s.card + 1) * (𝒜 ∩ ℬ).card
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ 2 *
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 * (2 ^ s.card * (𝒜 ∩ ℬ).card)

tactic: have h₀ : ∀ 𝒞 : Finset (Finset α), (∀ t ∈ 𝒞, t ⊆ insert a s) →
    ∀ t ∈ 𝒞.nonMemberSubfamily a, t ⊆ s := by
  rintro 𝒞 h𝒞 t ht
  rw [mem_nonMemberSubfamily] at ht
  exact (subset_insert_iff_of_not_mem ht.2).1 (h𝒞 _ ht.1)
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ 2 *
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 * (2 ^ s.card * (𝒜 ∩ ℬ).card)
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
⊢ 2 *
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 * (2 ^ s.card * (𝒜 ∩ ℬ).card)

tactic: have h₁ : ∀ 𝒞 : Finset (Finset α), (∀ t ∈ 𝒞, t ⊆ insert a s) →
    ∀ t ∈ 𝒞.memberSubfamily a, t ⊆ s := by
  rintro 𝒞 h𝒞 t ht
  rw [mem_memberSubfamily] at ht
  exact (subset_insert_iff_of_not_mem ht.2).1 ((subset_insert _ _).trans <| h𝒞 _ ht.1)
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
⊢ 2 *
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 * (2 ^ s.card * (𝒜 ∩ ℬ).card)
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
h₁ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
⊢ 2 *
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 * (2 ^ s.card * (𝒜 ∩ ℬ).card)

tactic: refine mul_le_mul_left' ?_ _
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
h₁ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
⊢ 2 *
      ((Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
        (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card) ≤
    2 * (2 ^ s.card * (𝒜 ∩ ℬ).card)
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
h₁ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
⊢ (Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
      (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card ≤
    2 ^ s.card * (𝒜 ∩ ℬ).card

tactic: refine (add_le_add (ih h𝒜.memberSubfamily hℬ.memberSubfamily (h₁ _ h𝒜s) <| h₁ _ hℬs) <|
  ih h𝒜.nonMemberSubfamily hℬ.nonMemberSubfamily (h₀ _ h𝒜s) <| h₀ _ hℬs).trans_eq ?_
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
h₁ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
⊢ (Finset.memberSubfamily a 𝒜).card * (Finset.memberSubfamily a ℬ).card +
      (Finset.nonMemberSubfamily a 𝒜).card * (Finset.nonMemberSubfamily a ℬ).card ≤
    2 ^ s.card * (𝒜 ∩ ℬ).card
state_after: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
h₁ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
⊢ 2 ^ s.card * (Finset.memberSubfamily a 𝒜 ∩ Finset.memberSubfamily a ℬ).card +
      2 ^ s.card * (Finset.nonMemberSubfamily a 𝒜 ∩ Finset.nonMemberSubfamily a ℬ).card =
    2 ^ s.card * (𝒜 ∩ ℬ).card

tactic: rw [← mul_add, ← memberSubfamily_inter, ← nonMemberSubfamily_inter,
  card_memberSubfamily_add_card_nonMemberSubfamily]
state_before: case insert
α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
h₁ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
⊢ 2 ^ s.card * (Finset.memberSubfamily a 𝒜 ∩ Finset.memberSubfamily a ℬ).card +
      2 ^ s.card * (Finset.nonMemberSubfamily a 𝒜 ∩ Finset.nonMemberSubfamily a ℬ).card =
    2 ^ s.card * (𝒜 ∩ ℬ).card
state_after: no goals

tactic: simp_rw [subset_empty, ← subset_singleton_iff', subset_singleton_iff] at h𝒜s hℬs
state_before: case empty
α : Type u_1
inst✝ : DecidableEq α
a : α
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ ∅
hℬs : ∀ t ∈ ℬ, t ⊆ ∅
⊢ 𝒜.card * ℬ.card ≤ 2 ^ ∅.card * (𝒜 ∩ ℬ).card
state_after: case empty
α : Type u_1
inst✝ : DecidableEq α
a : α
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : 𝒜 = ∅ ∨ 𝒜 = {∅}
hℬs : ℬ = ∅ ∨ ℬ = {∅}
⊢ 𝒜.card * ℬ.card ≤ 2 ^ ∅.card * (𝒜 ∩ ℬ).card

tactic: obtain rfl | rfl := h𝒜s
state_before: case empty
α : Type u_1
inst✝ : DecidableEq α
a : α
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : 𝒜 = ∅ ∨ 𝒜 = {∅}
hℬs : ℬ = ∅ ∨ ℬ = {∅}
⊢ 𝒜.card * ℬ.card ≤ 2 ^ ∅.card * (𝒜 ∩ ℬ).card
state_after: case empty.inl
α : Type u_1
inst✝ : DecidableEq α
a : α
ℬ : Finset (Finset α)
hℬ : IsLowerSet ↑ℬ
hℬs : ℬ = ∅ ∨ ℬ = {∅}
h𝒜 : IsLowerSet ↑∅
⊢ ∅.card * ℬ.card ≤ 2 ^ ∅.card * (∅ ∩ ℬ).card

case empty.inr
α : Type u_1
inst✝ : DecidableEq α
a : α
ℬ : Finset (Finset α)
hℬ : IsLowerSet ↑ℬ
hℬs : ℬ = ∅ ∨ ℬ = {∅}
h𝒜 : IsLowerSet ↑{∅}
⊢ {∅}.card * ℬ.card ≤ 2 ^ ∅.card * ({∅} ∩ ℬ).card

tactic: obtain rfl | rfl := hℬs
state_before: case empty.inr
α : Type u_1
inst✝ : DecidableEq α
a : α
ℬ : Finset (Finset α)
hℬ : IsLowerSet ↑ℬ
hℬs : ℬ = ∅ ∨ ℬ = {∅}
h𝒜 : IsLowerSet ↑{∅}
⊢ {∅}.card * ℬ.card ≤ 2 ^ ∅.card * ({∅} ∩ ℬ).card
state_after: case empty.inr.inl
α : Type u_1
inst✝ : DecidableEq α
a : α
h𝒜 : IsLowerSet ↑{∅}
hℬ : IsLowerSet ↑∅
⊢ {∅}.card * ∅.card ≤ 2 ^ ∅.card * ({∅} ∩ ∅).card

case empty.inr.inr
α : Type u_1
inst✝ : DecidableEq α
a : α
h𝒜 hℬ : IsLowerSet ↑{∅}
⊢ {∅}.card * {∅}.card ≤ 2 ^ ∅.card * ({∅} ∩ {∅}).card

tactic: simp only [card_empty, zero_mul, empty_inter, mul_zero, le_refl]
state_before: case empty.inl
α : Type u_1
inst✝ : DecidableEq α
a : α
ℬ : Finset (Finset α)
hℬ : IsLowerSet ↑ℬ
hℬs : ℬ = ∅ ∨ ℬ = {∅}
h𝒜 : IsLowerSet ↑∅
⊢ ∅.card * ℬ.card ≤ 2 ^ ∅.card * (∅ ∩ ℬ).card
state_after: no goals

tactic: simp only [card_empty, inter_empty, mul_zero, zero_mul, le_refl]
state_before: case empty.inr.inl
α : Type u_1
inst✝ : DecidableEq α
a : α
h𝒜 : IsLowerSet ↑{∅}
hℬ : IsLowerSet ↑∅
⊢ {∅}.card * ∅.card ≤ 2 ^ ∅.card * ({∅} ∩ ∅).card
state_after: no goals

tactic: simp only [card_empty, pow_zero, inter_singleton_of_mem, mem_singleton, card_singleton,
  le_refl]
state_before: case empty.inr.inr
α : Type u_1
inst✝ : DecidableEq α
a : α
h𝒜 hℬ : IsLowerSet ↑{∅}
⊢ {∅}.card * {∅}.card ≤ 2 ^ ∅.card * ({∅} ∩ {∅}).card
state_after: no goals

tactic: rintro 𝒞 h𝒞 t ht
state_before: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
⊢ ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
state_after: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : t ∈ Finset.nonMemberSubfamily a 𝒞
⊢ t ⊆ s

tactic: rw [mem_nonMemberSubfamily] at ht
state_before: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : t ∈ Finset.nonMemberSubfamily a 𝒞
⊢ t ⊆ s
state_after: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : t ∈ 𝒞 ∧ a ∉ t
⊢ t ⊆ s

tactic: exact (subset_insert_iff_of_not_mem ht.2).1 (h𝒞 _ ht.1)
state_before: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : t ∈ 𝒞 ∧ a ∉ t
⊢ t ⊆ s
state_after: no goals

tactic: rintro 𝒞 h𝒞 t ht
state_before: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
⊢ ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.memberSubfamily a 𝒞, t ⊆ s
state_after: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : t ∈ Finset.memberSubfamily a 𝒞
⊢ t ⊆ s

tactic: rw [mem_memberSubfamily] at ht
state_before: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : t ∈ Finset.memberSubfamily a 𝒞
⊢ t ⊆ s
state_after: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : insert a t ∈ 𝒞 ∧ a ∉ t
⊢ t ⊆ s

tactic: exact (subset_insert_iff_of_not_mem ht.2).1 ((subset_insert _ _).trans <| h𝒞 _ ht.1)
state_before: α : Type u_1
inst✝ : DecidableEq α
a✝ a : α
s : Finset α
hs : a ∉ s
ih :
  ∀ {𝒜 ℬ : Finset (Finset α)},
    IsLowerSet ↑𝒜 → IsLowerSet ↑ℬ → (∀ t ∈ 𝒜, t ⊆ s) → (∀ t ∈ ℬ, t ⊆ s) → 𝒜.card * ℬ.card ≤ 2 ^ s.card * (𝒜 ∩ ℬ).card
𝒜 ℬ : Finset (Finset α)
h𝒜 : IsLowerSet ↑𝒜
hℬ : IsLowerSet ↑ℬ
h𝒜s : ∀ t ∈ 𝒜, t ⊆ insert a s
hℬs : ∀ t ∈ ℬ, t ⊆ insert a s
h₀ : ∀ (𝒞 : Finset (Finset α)), (∀ t ∈ 𝒞, t ⊆ insert a s) → ∀ t ∈ Finset.nonMemberSubfamily a 𝒞, t ⊆ s
𝒞 : Finset (Finset α)
h𝒞 : ∀ t ∈ 𝒞, t ⊆ insert a s
t : Finset α
ht : insert a t ∈ 𝒞 ∧ a ∉ t
⊢ t ⊆ s
state_after: no goals