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

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

tactic: change (↑(adjoin (adjoin F S) T) : Set E) = _
state_before: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ ↑(restrictScalars F (adjoin (↥(adjoin F S)) T)) = ↑(adjoin F (S ∪ T))
state_after: F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ ↑(adjoin (↥(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_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ ↑(adjoin (↥(adjoin F S)) T) = ↑(adjoin F (S ∪ T))
state_after: case a.left
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ⊆ ↑(adjoin F (S ∪ T))

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

case a.left
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ Set.range ⇑(algebraMap F E) ⊆ ↑(adjoin (↥(adjoin F S)) T)

case a.right
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ S ∪ T ⊆ ↑(adjoin (↥(adjoin F S)) T)

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

tactic: exact adjoin.mono _ _ _ Set.subset_union_left hx
state_before: case a.left.intro.mk
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ adjoin F S
⊢ (algebraMap (↥(adjoin F S)) E) ⟨x, hx⟩ ∈ ↑(adjoin F (S ∪ T))
state_after: no goals

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

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

tactic: refine Subfield.subset_closure ?_
state_before: case a.left.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ (algebraMap F E) f ∈ ↑(adjoin (↥(adjoin F S)) T)
state_after: case a.left.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ (algebraMap F E) f ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ∪ T

tactic: left
state_before: case a.left.intro
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ (algebraMap F E) f ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ∪ T
state_after: case a.left.intro.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ (algebraMap F E) f ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E)

tactic: exact ⟨f, rfl⟩
state_before: case a.left.intro.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
f : F
⊢ (algebraMap F E) f ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E)
state_after: no goals

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_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
⊢ S ∪ T ⊆ ↑(adjoin (↥(adjoin F S)) T)
state_after: case a.right.refine_1
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ∪ T

case a.right.refine_2
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ T
⊢ x ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ∪ T

tactic: left
state_before: case a.right.refine_1
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ∪ T
state_after: case a.right.refine_1.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E)

tactic: refine ⟨⟨x, Subfield.subset_closure ?_⟩, rfl⟩
state_before: case a.right.refine_1.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E)
state_after: case a.right.refine_1.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ Set.range ⇑(algebraMap F E) ∪ S

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

tactic: exact hx
state_before: case a.right.refine_1.h.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ S
⊢ x ∈ S
state_after: no goals

tactic: right
state_before: case a.right.refine_2
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ T
⊢ x ∈ Set.range ⇑(algebraMap (↥(adjoin F S)) E) ∪ T
state_after: case a.right.refine_2.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ T
⊢ x ∈ T

tactic: exact hx
state_before: case a.right.refine_2.h
F : Type u_1
inst✝² : Field F
E : Type u_2
inst✝¹ : Field E
inst✝ : Algebra F E
S T : Set E
x : E
hx : x ∈ T
⊢ x ∈ T
state_after: no goals