Theorem: Finset.exists_subset_mulSpan_card_le_of_forall_mulDissociated
File: Mathlib/Combinatorics/Additive/Dissociation.lean

tactic: obtain ⟨s', hs', hs'max⟩ :=
  exists_maximal (s.powerset.filter fun s' : Finset α ↦ MulDissociated (s' : Set α))
    ⟨∅, mem_filter.2 ⟨empty_mem_powerset _, by simp⟩⟩
state_before: α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
⊢ ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.mulSpan
state_after: case intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ∈ filter (fun s' => MulDissociated ↑s') s.powerset
hs'max : ∀ x ∈ filter (fun s' => MulDissociated ↑s') s.powerset, ¬s' < x
⊢ ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.mulSpan

tactic: simp only [mem_filter, mem_powerset, lt_eq_subset, and_imp] at hs' hs'max
state_before: case intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ∈ filter (fun s' => MulDissociated ↑s') s.powerset
hs'max : ∀ x ∈ filter (fun s' => MulDissociated ↑s') s.powerset, ¬s' < x
⊢ ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.mulSpan
state_after: case intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
⊢ ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.mulSpan

tactic: refine ⟨s', hs'.1, hs _ hs'.1 hs'.2, fun a ha ↦ ?_⟩
state_before: case intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
⊢ ∃ s' ⊆ s, s'.card ≤ d ∧ s ⊆ s'.mulSpan
state_after: case intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
⊢ a ∈ s'.mulSpan

tactic: by_cases ha' : a ∈ s'
state_before: case intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∈ s'
⊢ a ∈ s'.mulSpan

case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
⊢ a ∈ s'.mulSpan

tactic: obtain ⟨t, u, ht, hu, htu⟩ := not_mulDissociated_iff_exists_disjoint.1 fun h ↦
  hs'max _ (insert_subset_iff.2 ⟨ha, hs'.1⟩) h $ ssubset_insert ha'
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
⊢ a ∈ s'.mulSpan
state_after: case neg.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
⊢ a ∈ s'.mulSpan

tactic: by_cases hat : a ∈ t
state_before: case neg.intro.intro.intro.intro
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
⊢ a ∈ s'.mulSpan

case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
⊢ a ∈ s'.mulSpan

tactic: rw [coe_subset, subset_insert_iff_of_not_mem hat] at ht
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
⊢ a ∈ s'.mulSpan
state_after: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
⊢ a ∈ s'.mulSpan

tactic: by_cases hau : a ∈ u
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
⊢ a ∈ s'.mulSpan

case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∉ u
⊢ a ∈ s'.mulSpan

tactic: simp
state_before: α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
⊢ MulDissociated ↑∅
state_after: no goals

tactic: exact subset_mulSpan ha'
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t u : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∈ s'
⊢ a ∈ s'.mulSpan
state_after: no goals

tactic: have : a = (∏ b in u, b) / ∏ b in t.erase a, b := by
  rw [prod_erase_eq_div hat, htu.2.2, div_div_self']
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
this : a = (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b
⊢ a ∈ s'.mulSpan

tactic: rw [this]
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
this : a = (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
this : a = (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b
⊢ (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b ∈ s'.mulSpan

tactic: exact prod_div_prod_mem_mulSpan
  ((subset_insert_iff_of_not_mem $ disjoint_left.1 htu.1 hat).1 hu) (subset_insert_iff.1 ht)
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
this : a = (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b
⊢ (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b ∈ s'.mulSpan
state_after: no goals

tactic: rw [prod_erase_eq_div hat, htu.2.2, div_div_self']
state_before: α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : ↑t ⊆ ↑(insert a s')
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∈ t
⊢ a = (∏ b ∈ u, b) / ∏ b ∈ t.erase a, b
state_after: no goals

tactic: have : a = (∏ b in t, b) / ∏ b in u.erase a, b := by
  rw [prod_erase_eq_div hau, htu.2.2, div_div_self']
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
this : a = (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b
⊢ a ∈ s'.mulSpan

tactic: rw [this]
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
this : a = (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b
⊢ a ∈ s'.mulSpan
state_after: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
this : a = (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b
⊢ (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b ∈ s'.mulSpan

tactic: exact prod_div_prod_mem_mulSpan ht (subset_insert_iff.1 hu)
state_before: case pos
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
this : a = (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b
⊢ (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b ∈ s'.mulSpan
state_after: no goals

tactic: rw [prod_erase_eq_div hau, htu.2.2, div_div_self']
state_before: α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∈ u
⊢ a = (∏ b ∈ t, b) / ∏ b ∈ u.erase a, b
state_after: no goals

tactic: rw [coe_subset, subset_insert_iff_of_not_mem hau] at hu
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : ↑u ⊆ ↑(insert a s')
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∉ u
⊢ a ∈ s'.mulSpan
state_after: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : u ⊆ s'
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∉ u
⊢ a ∈ s'.mulSpan

tactic: cases not_mulDissociated_iff_exists_disjoint.2 ⟨t, u, ht, hu, htu⟩ hs'.2
state_before: case neg
α : Type u_1
β : Type u_2
inst✝³ : CommGroup α
inst✝² : CommGroup β
inst✝¹ : DecidableEq α
inst✝ : Fintype α
s t✝ u✝ : Finset α
a✝ : α
d : ℕ
hs : ∀ s' ⊆ s, MulDissociated ↑s' → s'.card ≤ d
s' : Finset α
hs' : s' ⊆ s ∧ MulDissociated ↑s'
hs'max : ∀ x ⊆ s, MulDissociated ↑x → ¬s' ⊂ x
a : α
ha : a ∈ s
ha' : a ∉ s'
t u : Finset α
ht : t ⊆ s'
hu : u ⊆ s'
htu : Disjoint t u ∧ t ≠ u ∧ ∏ a ∈ t, a = ∏ a ∈ u, a
hat : a ∉ t
hau : a ∉ u
⊢ a ∈ s'.mulSpan
state_after: no goals