Theorem: IntermediateField.Lifts.exists_upper_bound
File: Mathlib/FieldTheory/Adjoin.lean

tactic: intro x hx
state_before: F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
⊢ ∀ (a : Lifts F E K), a ∈ c → a ≤ upperBound hc

tactic: constructor
state_before: F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
⊢ x ≤ upperBound hc

tactic: exact fun s hs => ⟨x, Set.mem_insert_of_mem ⊥ hx, hs⟩
state_before: case left
F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
⊢ x.fst ≤ (upperBound hc).fst

tactic: intro s t hst
state_before: case right
F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
⊢ ∀ (s : { x_1 // x_1 ∈ x.fst }) (t : { x // x ∈ (upperBound hc).fst }), ↑s = ↑t → ↑x.snd s = ↑(upperBound hc).snd t

tactic: change x.2 s = (Classical.choose t.mem).2 ⟨t, (Classical.choose_spec t.mem).2⟩
state_before: case right
F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
s : { x_1 // x_1 ∈ x.fst }
t : { x // x ∈ (upperBound hc).fst }
hst : ↑s = ↑t
⊢ ↑x.snd s = ↑(upperBound hc).snd t

tactic: obtain ⟨z, _, hxz, hyz⟩ :=
  Lifts.exists_max_two hc (Set.mem_insert_of_mem ⊥ hx) (Classical.choose_spec t.mem).1
state_before: case right
F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
s : { x_1 // x_1 ∈ x.fst }
t : { x // x ∈ (upperBound hc).fst }
hst : ↑s = ↑t
⊢ ↑x.snd s =
    ↑(Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst)).snd
      { val := ↑t, property := (_ : ↑t ∈ (Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst)).fst) }

tactic: rw [Lifts.eq_of_le hxz, Lifts.eq_of_le hyz]
state_before: case right.intro.intro.intro
F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
s : { x_1 // x_1 ∈ x.fst }
t : { x // x ∈ (upperBound hc).fst }
hst : ↑s = ↑t
z : Lifts F E K
left✝ : z ∈ insert ⊥ c
hxz : x ≤ z
hyz : Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst) ≤ z
⊢ ↑x.snd s =
    ↑(Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst)).snd
      { val := ↑t, property := (_ : ↑t ∈ (Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst)).fst) }

tactic: exact congr_arg z.2 (Subtype.ext hst)
state_before: case right.intro.intro.intro
F : Type u_3
E : Type u_2
K : Type u_1
inst✝⁴ : Field F
inst✝³ : Field E
inst✝² : Field K
inst✝¹ : Algebra F E
inst✝ : Algebra F K
S : Set E
c : Set (Lifts F E K)
hc : IsChain (fun x x_1 => x ≤ x_1) c
x : Lifts F E K
hx : x ∈ c
s : { x_1 // x_1 ∈ x.fst }
t : { x // x ∈ (upperBound hc).fst }
hst : ↑s = ↑t
z : Lifts F E K
left✝ : z ∈ insert ⊥ c
hxz : x ≤ z
hyz : Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst) ≤ z
⊢ ↑z.snd { val := ↑s, property := (_ : ↑s ∈ z.fst) } =
    ↑z.snd
      { val := ↑{ val := ↑t, property := (_ : ↑t ∈ (Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst)).fst) },
        property :=
          (_ : ↑{ val := ↑t, property := (_ : ↑t ∈ (Classical.choose (_ : ↑t ∈ ↑(upperBound hc).fst)).fst) } ∈ z.fst) }