Theorem: NonUnitalAlgebra.adjoin_induction_subtype
File: Mathlib/Algebra/Algebra/NonUnitalSubalgebra.lean

tactic: refine Exists.elim ?_ (fun (hb : b ∈ adjoin R s) (hc : p ⟨b, hb⟩) => hc)
state_before: F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ p ⟨b, hb⟩
state_after: F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∃ (x : b ∈ adjoin R s), p ⟨b, x⟩

tactic: refine adjoin_induction hb ?_ ?_ ?_ ?_ ?_
state_before: F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∃ (x : b ∈ adjoin R s), p ⟨b, x⟩
state_after: case refine_1
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ x ∈ s, ∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩

case refine_2
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x y : A),
    (∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩) →
      (∃ (x : y ∈ adjoin R s), p ⟨y, x⟩) → ∃ (x_1 : x + y ∈ adjoin R s), p ⟨x + y, x_1⟩

case refine_3
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∃ (x : 0 ∈ adjoin R s), p ⟨0, x⟩

case refine_4
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x y : A),
    (∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩) →
      (∃ (x : y ∈ adjoin R s), p ⟨y, x⟩) → ∃ (x_1 : x * y ∈ adjoin R s), p ⟨x * y, x_1⟩

case refine_5
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (r : R) (x : A), (∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩) → ∃ (x_1 : r • x ∈ adjoin R s), p ⟨r • x, x_1⟩

tactic: exact fun x hx => ⟨subset_adjoin R hx, mem x hx⟩
state_before: case refine_1
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ x ∈ s, ∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩
state_after: no goals

tactic: exact fun x y hx hy => Exists.elim hx fun hx' hx => Exists.elim hy fun hy' hy =>
  ⟨add_mem hx' hy', add _ _ hx hy⟩
state_before: case refine_2
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x y : A),
    (∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩) →
      (∃ (x : y ∈ adjoin R s), p ⟨y, x⟩) → ∃ (x_1 : x + y ∈ adjoin R s), p ⟨x + y, x_1⟩
state_after: no goals

tactic: exact ⟨_, zero⟩
state_before: case refine_3
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∃ (x : 0 ∈ adjoin R s), p ⟨0, x⟩
state_after: no goals

tactic: exact fun x y hx hy => Exists.elim hx fun hx' hx => Exists.elim hy fun hy' hy =>
  ⟨mul_mem hx' hy', mul _ _ hx hy⟩
state_before: case refine_4
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (x y : A),
    (∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩) →
      (∃ (x : y ∈ adjoin R s), p ⟨y, x⟩) → ∃ (x_1 : x * y ∈ adjoin R s), p ⟨x * y, x_1⟩
state_after: no goals

tactic: exact fun r x hx => Exists.elim hx fun hx' hx =>
  ⟨SMulMemClass.smul_mem r hx', smul r _ hx⟩
state_before: case refine_5
F : Type u_1
R : Type u
A : Type v
B : Type w
inst✝¹⁰ : CommSemiring R
inst✝⁹ : NonUnitalNonAssocSemiring A
inst✝⁸ : Module R A
inst✝⁷ : IsScalarTower R A A
inst✝⁶ : SMulCommClass R A A
inst✝⁵ : NonUnitalNonAssocSemiring B
inst✝⁴ : Module R B
inst✝³ : IsScalarTower R B B
inst✝² : SMulCommClass R B B
inst✝¹ : FunLike F A B
inst✝ : NonUnitalAlgHomClass F R A B
s : Set A
p : ↥(adjoin R s) → Prop
a : ↥(adjoin R s)
mem : ∀ (x : A) (h : x ∈ s), p ⟨x, ⋯⟩
add : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x + y)
zero : p 0
mul : ∀ (x y : ↥(adjoin R s)), p x → p y → p (x * y)
smul : ∀ (r : R) (x : ↥(adjoin R s)), p x → p (r • x)
b : A
hb : b ∈ adjoin R s
⊢ ∀ (r : R) (x : A), (∃ (x_1 : x ∈ adjoin R s), p ⟨x, x_1⟩) → ∃ (x_1 : r • x ∈ adjoin R s), p ⟨r • x, x_1⟩
state_after: no goals