Theorem: Finset.exists_subset_add_sub
File: Mathlib/Combinatorics/Additive/RuzsaCovering.lean

Proof steps:
state_before: α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
⊢ ∃ u, u.card * t.card ≤ (s * t).card ∧ s ⊆ u * t / t
state_after: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ∈ C
hCmax : ∀ x ∈ C, ¬u < x
⊢ ∃ u, u.card * t.card ≤ (s * t).card ∧ s ⊆ u * t / t
tactic: obtain ⟨u, hu, hCmax⟩ := C.exists_maximal (filter_nonempty_iff.2
    ⟨∅, empty_mem_powerset _, by rw [coe_empty]; exact Set.pairwiseDisjoint_empty⟩)
state_before: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ∈ C
hCmax : ∀ x ∈ C, ¬u < x
⊢ ∃ u, u.card * t.card ≤ (s * t).card ∧ s ⊆ u * t / t
state_after: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
⊢ ∃ u, u.card * t.card ≤ (s * t).card ∧ s ⊆ u * t / t
tactic: rw [mem_filter, mem_powerset] at hu
state_before: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
⊢ ∃ u, u.card * t.card ≤ (s * t).card ∧ s ⊆ u * t / t
state_after: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
⊢ a ∈ u * t / t
tactic: refine ⟨u,
    (card_mul_iff.2 <| pairwiseDisjoint_smul_iff.1 hu.2).ge.trans
      (card_le_card <| mul_subset_mul_right hu.1),
    fun a ha ↦ ?_⟩
state_before: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
⊢ a ∈ u * t / t
state_after: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
⊢ a ∈ u * (t / t)
tactic: rw [mul_div_assoc]
state_before: case intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
⊢ a ∈ u * (t / t)
state_after: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∈ u
⊢ a ∈ u * (t / t)

case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
⊢ a ∈ u * (t / t)
tactic: by_cases hau : a ∈ u
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
⊢ a ∈ u * (t / t)
state_after: case pos
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ∀ b ∈ u, Disjoint (a • t) (b • t)
⊢ a ∈ u * (t / t)

case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ¬∀ b ∈ u, Disjoint (a • t) (b • t)
⊢ a ∈ u * (t / t)
tactic: by_cases H : ∀ b ∈ u, Disjoint (a • t) (b • t)
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ¬∀ b ∈ u, Disjoint (a • t) (b • t)
⊢ a ∈ u * (t / t)
state_after: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ∃ b ∈ u, ¬Disjoint (a • t) (b • t)
⊢ a ∈ u * (t / t)
tactic: push_neg at H
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ∃ b ∈ u, ¬Disjoint (a • t) (b • t)
⊢ a ∈ u * (t / t)
state_after: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ∃ b ∈ u, ∃ a_1, a⁻¹ • a_1 ∈ t ∧ b⁻¹ • a_1 ∈ t
⊢ a ∈ u * (t / t)
tactic: simp_rw [not_disjoint_iff, ← inv_smul_mem_iff] at H
state_before: case neg
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
H : ∃ b ∈ u, ∃ a_1, a⁻¹ • a_1 ∈ t ∧ b⁻¹ • a_1 ∈ t
⊢ a ∈ u * (t / t)
state_after: case neg.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
b : α
hb : b ∈ u
c : α
hc₁ : a⁻¹ • c ∈ t
hc₂ : b⁻¹ • c ∈ t
⊢ a ∈ u * (t / t)
tactic: obtain ⟨b, hb, c, hc₁, hc₂⟩ := H
state_before: case neg.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
b : α
hb : b ∈ u
c : α
hc₁ : a⁻¹ • c ∈ t
hc₂ : b⁻¹ • c ∈ t
⊢ a ∈ u * (t / t)
state_after: case neg.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
b : α
hb : b ∈ u
c : α
hc₁ : a⁻¹ • c ∈ t
hc₂ : b⁻¹ • c ∈ t
⊢ a / b ∈ t / t
tactic: refine mem_mul.2 ⟨b, hb, a / b, ?_, by simp⟩
state_before: case neg.intro.intro.intro.intro
α : Type u_1
inst✝¹ : DecidableEq α
inst✝ : CommGroup α
s t : Finset α
ht : t.Nonempty
this : (u : Set α) → Decidable (u.PairwiseDisjoint fun x => x • t)
C : Finset (Finset α) := filter (fun u => (↑u).PairwiseDisjoint fun x => x • t) s.powerset
u : Finset α
hu : u ⊆ s ∧ (↑u).PairwiseDisjoint fun x => x • t
hCmax : ∀ x ∈ C, ¬u < x
a : α
ha : a ∈ s
hau : a ∉ u
b : α
hb : b ∈ u
c : α
hc₁ : a⁻¹ • c ∈ t
hc₂ : b⁻¹ • c ∈ t
⊢ a / b ∈ t / t
state_after: no goals
tactic: exact mem_div.2 ⟨_, hc₂, _, hc₁, by simp [inv_mul_eq_div]⟩