Theorem: isIntegrallyClosedIn_iff
File: Mathlib/RingTheory/IntegrallyClosed.lean

tactic: constructor
state_before: R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
⊢ IsIntegrallyClosedIn R A ↔
    Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
state_after: case mp
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
⊢ IsIntegrallyClosedIn R A →
    Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x

case mpr
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
⊢ (Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x) →
    IsIntegrallyClosedIn R A

tactic: rintro ⟨_, cl⟩
state_before: case mp
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
⊢ IsIntegrallyClosedIn R A →
    Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
state_after: case mp.mk
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
algebraMap_injective'✝ : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x ↔ ∃ y, (algebraMap R A) y = x
⊢ Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x

tactic: aesop
state_before: case mp.mk
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
algebraMap_injective'✝ : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x ↔ ∃ y, (algebraMap R A) y = x
⊢ Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
state_after: no goals

tactic: rintro ⟨inj, cl⟩
state_before: case mpr
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
⊢ (Function.Injective ⇑(algebraMap R A) ∧ ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x) →
    IsIntegrallyClosedIn R A
state_after: case mpr.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
⊢ IsIntegrallyClosedIn R A

tactic: refine ⟨inj, by aesop, ?_⟩
state_before: case mpr.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
⊢ IsIntegrallyClosedIn R A
state_after: case mpr.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
x✝ : A
⊢ (∃ y, (algebraMap R A) y = x✝) → IsIntegral R x✝

tactic: rintro ⟨y, rfl⟩
state_before: case mpr.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
x✝ : A
⊢ (∃ y, (algebraMap R A) y = x✝) → IsIntegral R x✝
state_after: case mpr.intro.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
y : R
⊢ IsIntegral R ((algebraMap R A) y)

tactic: apply isIntegral_algebraMap
state_before: case mpr.intro.intro
R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
y : R
⊢ IsIntegral R ((algebraMap R A) y)
state_after: no goals

tactic: aesop
state_before: R✝ : Type u_1
inst✝¹⁰ : CommRing R✝
A✝ : Type u_2
B : Type u_3
inst✝⁹ : CommRing A✝
inst✝⁸ : CommRing B
inst✝⁷ : Algebra R✝ A✝
inst✝⁶ : Algebra R✝ B
K : Type u_4
inst✝⁵ : CommRing K
inst✝⁴ : Algebra R✝ K
inst✝³ : IsFractionRing R✝ K
R : Type u_5
A : Type u_6
inst✝² : CommRing R
inst✝¹ : CommRing A
inst✝ : Algebra R A
inj : Function.Injective ⇑(algebraMap R A)
cl : ∀ {x : A}, IsIntegral R x → ∃ y, (algebraMap R A) y = x
x✝ : A
⊢ IsIntegral R x✝ → ∃ y, (algebraMap R A) y = x✝
state_after: no goals