Theorem: StarSubalgebra.adjoin_induction'
File: Mathlib/Algebra/Star/Subalgebra.lean

tactic: refine' Exists.elim _ fun (hb : b ∈ adjoin R s) (hc : p ⟨b, hb⟩) => hc
state_before: F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ p { val := b, property := hb }

tactic: apply adjoin_induction hb
state_before: F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ ∃ x, p { val := b, property := x }

tactic: exacts [fun x hx => ⟨subset_adjoin R s hx, Hs x hx⟩, fun r =>
  ⟨StarSubalgebra.algebraMap_mem _ r, Halg r⟩, fun x y hx hy =>
  Exists.elim hx fun hx' hx => Exists.elim hy fun hy' hy => ⟨add_mem hx' hy', Hadd _ _ hx hy⟩,
  fun x y hx hy =>
  Exists.elim hx fun hx' hx => Exists.elim hy fun hy' hy => ⟨mul_mem hx' hy', Hmul _ _ hx hy⟩,
  fun x hx => Exists.elim hx fun hx' hx => ⟨star_mem hx', Hstar _ hx⟩]
state_before: case Hs
F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x : A), x ∈ s → ∃ x_1, p { val := x, property := x_1 }

case Halg
F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (r : R), ∃ x, p { val := ↑(algebraMap R A) r, property := x }

case Hadd
F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x y : A),
    (∃ x_1, p { val := x, property := x_1 }) →
      (∃ x, p { val := y, property := x }) → ∃ x_1, p { val := x + y, property := x_1 }

case Hmul
F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x y : A),
    (∃ x_1, p { val := x, property := x_1 }) →
      (∃ x, p { val := y, property := x }) → ∃ x_1, p { val := x * y, property := x_1 }

case Hstar
F : Type ?u.594069
R : Type u_2
A : Type u_1
B : Type ?u.594078
inst✝⁹ : CommSemiring R
inst✝⁸ : StarRing R
inst✝⁷ : Semiring A
inst✝⁶ : Algebra R A
inst✝⁵ : StarRing A
inst✝⁴ : StarModule R A
inst✝³ : Semiring B
inst✝² : Algebra R B
inst✝¹ : StarRing B
inst✝ : StarModule R B
s : Set A
p : { x // x ∈ adjoin R s } → Prop
a : { x // x ∈ adjoin R s }
Hs : ∀ (x : A) (h : x ∈ s), p { val := x, property := (_ : x ∈ ↑(adjoin R s)) }
Halg : ∀ (r : R), p (↑(algebraMap R { x // x ∈ adjoin R s }) r)
Hadd : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x + y)
Hmul : ∀ (x y : { x // x ∈ adjoin R s }), p x → p y → p (x * y)
Hstar : ∀ (x : { x // x ∈ adjoin R s }), p x → p (star x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x : A), (∃ x_1, p { val := x, property := x_1 }) → ∃ x_1, p { val := star x, property := x_1 }