Theorem: IntermediateField.adjoin_adjoin_left
File: Mathlib/FieldTheory/Adjoin.lean

tactic: rw [SetLike.ext'_iff]
state_before: F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ restrictScalars F (adjoin { x // x ∈ adjoin F S } T) = adjoin F (S ∪ T)

tactic: change (↑(adjoin (adjoin F S) T) : Set E) = _
state_before: F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ ↑(restrictScalars F (adjoin { x // x ∈ adjoin F S } T)) = ↑(adjoin F (S ∪ T))

tactic: apply Set.eq_of_subset_of_subset <;> rw [adjoin_subset_adjoin_iff] <;> constructor
state_before: F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ ↑(adjoin { x // x ∈ adjoin F S } T) = ↑(adjoin F (S ∪ T))

tactic: rintro _ ⟨⟨x, hx⟩, rfl⟩
state_before: case a.left
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ Set.range ↑(algebraMap { x // x ∈ adjoin F S } E) ⊆ ↑(adjoin F (S ∪ T))

tactic: exact adjoin.mono _ _ _ (Set.subset_union_left _ _) hx
state_before: case a.left.intro.mk
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ adjoin F S
⊢ ↑(algebraMap { x // x ∈ adjoin F S } E) { val := x, property := hx } ∈ ↑(adjoin F (S ∪ T))

tactic: exact subset_adjoin_of_subset_right _ _ (Set.subset_union_right _ _)
state_before: case a.right
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ T ⊆ ↑(adjoin F (S ∪ T))

tactic: rintro x ⟨f, rfl⟩
state_before: case a.left
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ Set.range ↑(algebraMap F E) ⊆ ↑(adjoin { x // x ∈ adjoin F S } T)

tactic: refine' Subfield.subset_closure _
state_before: case a.left.intro
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ ↑(algebraMap F E) f ∈ ↑(adjoin { x // x ∈ adjoin F S } T)

tactic: left
state_before: case a.left.intro
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ ↑(algebraMap F E) f ∈ Set.range ↑(algebraMap { x // x ∈ adjoin F S } E) ∪ T

tactic: exact ⟨f, rfl⟩
state_before: case a.left.intro.h
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ ↑(algebraMap F E) f ∈ Set.range ↑(algebraMap { x // x ∈ adjoin F S } E)

tactic: refine' Set.union_subset (fun x hx => Subfield.subset_closure _)
  (fun x hx => Subfield.subset_closure _)
state_before: case a.right
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ S ∪ T ⊆ ↑(adjoin { x // x ∈ adjoin F S } T)

tactic: left
state_before: case a.right.refine'_1
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ↑(algebraMap { x // x ∈ adjoin F S } E) ∪ T

tactic: refine' ⟨⟨x, Subfield.subset_closure _⟩, rfl⟩
state_before: case a.right.refine'_1.h
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ↑(algebraMap { x // x ∈ adjoin F S } E)

tactic: right
state_before: case a.right.refine'_1.h
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ↑(algebraMap F E) ∪ S

tactic: exact hx
state_before: case a.right.refine'_1.h.h
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ S

tactic: right
state_before: case a.right.refine'_2
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ T
⊢ x ∈ Set.range ↑(algebraMap { x // x ∈ adjoin F S } E) ∪ T

tactic: exact hx
state_before: case a.right.refine'_2.h
F : Type u_2
inst✝² : Field F
E : Type u_1
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ T
⊢ x ∈ T