Theorem: Algebra.adjoin_induction''
File: Mathlib/RingTheory/Adjoin/Basic.lean

Proof steps:
state_before: R : Type uR
S : Type uS
A : Type uA
B : Type uB
inst✝⁸ : CommSemiring R
inst✝⁷ : CommSemiring S
inst✝⁶ : Semiring A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R S
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : Algebra R B
inst✝ : IsScalarTower R S A
s t : Set A
x : A
hx : x ∈ adjoin R s
p : (x : A) → x ∈ adjoin R s → Prop
mem : ∀ (x : A) (h : x ∈ s), p x ⋯
algebraMap : ∀ (r : R), p ((_root_.algebraMap R A) r) ⋯
add : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x + y) ⋯
mul : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x * y) ⋯
⊢ p x hx
state_after: case refine_1
R : Type uR
S : Type uS
A : Type uA
B : Type uB
inst✝⁸ : CommSemiring R
inst✝⁷ : CommSemiring S
inst✝⁶ : Semiring A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R S
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : Algebra R B
inst✝ : IsScalarTower R S A
s t : Set A
x : A
hx : x ∈ adjoin R s
p : (x : A) → x ∈ adjoin R s → Prop
mem : ∀ (x : A) (h : x ∈ s), p x ⋯
algebraMap : ∀ (r : R), p ((_root_.algebraMap R A) r) ⋯
add : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x + y) ⋯
mul : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x * y) ⋯
⊢ ∀ (x y : ↥(adjoin R s)), (fun x => p ↑x ⋯) x → (fun x => p ↑x ⋯) y → (fun x => p ↑x ⋯) (x + y)

case refine_2
R : Type uR
S : Type uS
A : Type uA
B : Type uB
inst✝⁸ : CommSemiring R
inst✝⁷ : CommSemiring S
inst✝⁶ : Semiring A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R S
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : Algebra R B
inst✝ : IsScalarTower R S A
s t : Set A
x : A
hx : x ∈ adjoin R s
p : (x : A) → x ∈ adjoin R s → Prop
mem : ∀ (x : A) (h : x ∈ s), p x ⋯
algebraMap : ∀ (r : R), p ((_root_.algebraMap R A) r) ⋯
add : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x + y) ⋯
mul : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x * y) ⋯
⊢ ∀ (x y : ↥(adjoin R s)), (fun x => p ↑x ⋯) x → (fun x => p ↑x ⋯) y → (fun x => p ↑x ⋯) (x * y)
tactic: refine adjoin_induction' mem algebraMap ?_ ?_ ⟨x, hx⟩ (p := fun x : adjoin R s ↦ p x.1 x.2)
state_before: case refine_1
R : Type uR
S : Type uS
A : Type uA
B : Type uB
inst✝⁸ : CommSemiring R
inst✝⁷ : CommSemiring S
inst✝⁶ : Semiring A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R S
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : Algebra R B
inst✝ : IsScalarTower R S A
s t : Set A
x : A
hx : x ∈ adjoin R s
p : (x : A) → x ∈ adjoin R s → Prop
mem : ∀ (x : A) (h : x ∈ s), p x ⋯
algebraMap : ∀ (r : R), p ((_root_.algebraMap R A) r) ⋯
add : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x + y) ⋯
mul : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x * y) ⋯
⊢ ∀ (x y : ↥(adjoin R s)), (fun x => p ↑x ⋯) x → (fun x => p ↑x ⋯) y → (fun x => p ↑x ⋯) (x + y)

case refine_2
R : Type uR
S : Type uS
A : Type uA
B : Type uB
inst✝⁸ : CommSemiring R
inst✝⁷ : CommSemiring S
inst✝⁶ : Semiring A
inst✝⁵ : Semiring B
inst✝⁴ : Algebra R S
inst✝³ : Algebra R A
inst✝² : Algebra S A
inst✝¹ : Algebra R B
inst✝ : IsScalarTower R S A
s t : Set A
x : A
hx : x ∈ adjoin R s
p : (x : A) → x ∈ adjoin R s → Prop
mem : ∀ (x : A) (h : x ∈ s), p x ⋯
algebraMap : ∀ (r : R), p ((_root_.algebraMap R A) r) ⋯
add : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x + y) ⋯
mul : ∀ (x : A) (hx : x ∈ adjoin R s) (y : A) (hy : y ∈ adjoin R s), p x hx → p y hy → p (x * y) ⋯
⊢ ∀ (x y : ↥(adjoin R s)), (fun x => p ↑x ⋯) x → (fun x => p ↑x ⋯) y → (fun x => p ↑x ⋯) (x * y)
state_after: no goals
tactic: exacts [fun x y ↦ add x.1 x.2 y.1 y.2, fun x y ↦ mul x.1 x.2 y.1 y.2]