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

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: α : 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: 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 ∈ 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: 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
⊢ ∃ 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: 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 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: by_cases hau : a ∈ u
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 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
⊢ 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: 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, ¬Disjoint (a • t) (b • 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, ¬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: obtain ⟨b, hb, c, hc₁, hc₂⟩ := 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: 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 ∈ 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: exact mem_div.2 ⟨_, hc₂, _, hc₁, by simp [inv_mul_eq_div]⟩
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: rw [coe_empty]
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
⊢ (↑∅).PairwiseDisjoint fun x => x • t
state_after: α : 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
⊢ ∅.PairwiseDisjoint fun x => x • t

tactic: exact Set.pairwiseDisjoint_empty
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
⊢ ∅.PairwiseDisjoint fun x => x • t
state_after: no goals

tactic: exact subset_mul_left _ ht.one_mem_div hau
state_before: 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)
state_after: no goals

tactic: refine (hCmax _ ?_ <| ssubset_insert hau).elim
state_before: 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)
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)
⊢ insert a u ∈ C

tactic: rw [mem_filter, mem_powerset, insert_subset_iff, coe_insert]
state_before: 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)
⊢ insert a u ∈ C
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 ∈ s ∧ u ⊆ s) ∧ (insert a ↑u).PairwiseDisjoint fun x => x • t

tactic: exact ⟨⟨ha, hu.1⟩, hu.2.insert fun _ hb _ ↦ H _ hb⟩
state_before: 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 ∈ s ∧ u ⊆ s) ∧ (insert a ↑u).PairwiseDisjoint fun x => x • t
state_after: no goals

tactic: simp
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 : 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
⊢ b * (a / b) = a
state_after: no goals

tactic: simp [inv_mul_eq_div]
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 : 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
⊢ b⁻¹ • c / a⁻¹ • c = a / b
state_after: no goals