Theorem: mulRothNumber_map_mul_left
File: Mathlib/Combinatorics/Additive/SalemSpencer.lean

tactic: refine' le_antisymm _ _
state_before: F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
⊢ ↑mulRothNumber (map (mulLeftEmbedding a) s) = ↑mulRothNumber s

tactic: obtain ⟨u, hus, hcard, hu⟩ := mulRothNumber_spec (s.map <| mulLeftEmbedding a)
state_before: case refine'_1
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
⊢ ↑mulRothNumber (map (mulLeftEmbedding a) s) ≤ ↑mulRothNumber s

tactic: rw [subset_map_iff] at hus
state_before: case refine'_1.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ map (mulLeftEmbedding a) s
hcard : card u = ↑mulRothNumber (map (mulLeftEmbedding a) s)
hu : MulSalemSpencer ↑u
⊢ ↑mulRothNumber (map (mulLeftEmbedding a) s) ≤ ↑mulRothNumber s

tactic: obtain ⟨u, hus, rfl⟩ := hus
state_before: case refine'_1.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : ∃ u_1 x, u = map (mulLeftEmbedding a) u_1
hcard : card u = ↑mulRothNumber (map (mulLeftEmbedding a) s)
hu : MulSalemSpencer ↑u
⊢ ↑mulRothNumber (map (mulLeftEmbedding a) s) ≤ ↑mulRothNumber s

tactic: rw [coe_map] at hu
state_before: case refine'_1.intro.intro.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card (map (mulLeftEmbedding a) u) = ↑mulRothNumber (map (mulLeftEmbedding a) s)
hu : MulSalemSpencer ↑(map (mulLeftEmbedding a) u)
⊢ ↑mulRothNumber (map (mulLeftEmbedding a) s) ≤ ↑mulRothNumber s

tactic: rw [← hcard, card_map]
state_before: case refine'_1.intro.intro.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card (map (mulLeftEmbedding a) u) = ↑mulRothNumber (map (mulLeftEmbedding a) s)
hu : MulSalemSpencer (↑(mulLeftEmbedding a) '' ↑u)
⊢ ↑mulRothNumber (map (mulLeftEmbedding a) s) ≤ ↑mulRothNumber s

tactic: exact (mulSalemSpencer_mul_left_iff.1 hu).le_mulRothNumber hus
state_before: case refine'_1.intro.intro.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card (map (mulLeftEmbedding a) u) = ↑mulRothNumber (map (mulLeftEmbedding a) s)
hu : MulSalemSpencer (↑(mulLeftEmbedding a) '' ↑u)
⊢ card u ≤ ↑mulRothNumber s

tactic: obtain ⟨u, hus, hcard, hu⟩ := mulRothNumber_spec s
state_before: case refine'_2
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
⊢ ↑mulRothNumber s ≤ ↑mulRothNumber (map (mulLeftEmbedding a) s)

tactic: have h : MulSalemSpencer (u.map <| mulLeftEmbedding a : Set α) := by
  rw [coe_map]
  exact hu.mul_left
state_before: case refine'_2.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
⊢ ↑mulRothNumber s ≤ ↑mulRothNumber (map (mulLeftEmbedding a) s)

tactic: convert h.le_mulRothNumber (map_subset_map.2 hus) using 1
state_before: case refine'_2.intro.intro.intro
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
h : MulSalemSpencer ↑(map (mulLeftEmbedding a) u)
⊢ ↑mulRothNumber s ≤ ↑mulRothNumber (map (mulLeftEmbedding a) s)

tactic: rw [card_map, hcard]
state_before: case h.e'_3
F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
h : MulSalemSpencer ↑(map (mulLeftEmbedding a) u)
⊢ ↑mulRothNumber s = card (map (mulLeftEmbedding a) u)

tactic: rw [coe_map]
state_before: F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
⊢ MulSalemSpencer ↑(map (mulLeftEmbedding a) u)

tactic: exact hu.mul_left
state_before: F : Type ?u.143344
α : Type u_1
β : Type ?u.143350
𝕜 : Type ?u.143353
E : Type ?u.143356
inst✝¹ : DecidableEq α
inst✝ : CancelCommMonoid α
s : Finset α
a : α
u : Finset α
hus : u ⊆ s
hcard : card u = ↑mulRothNumber s
hu : MulSalemSpencer ↑u
⊢ MulSalemSpencer (↑(mulLeftEmbedding a) '' ↑u)