Theorem: IsFractionRing.isFractionRing_iff_of_base_ringEquiv
File: Mathlib/RingTheory/Localization/FractionRing.lean

tactic: delta IsFractionRing
state_before: R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
⊢ IsFractionRing R S ↔ IsFractionRing P S
state_after: R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
⊢ IsLocalization (nonZeroDivisors R) S ↔ IsLocalization (nonZeroDivisors P) S

tactic: convert isLocalization_iff_of_base_ringEquiv (nonZeroDivisors R) S h
state_before: R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
⊢ IsLocalization (nonZeroDivisors R) S ↔ IsLocalization (nonZeroDivisors P) S
state_after: case h.e'_2.h.e'_3
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
⊢ nonZeroDivisors P = Submonoid.map h.toMonoidHom (nonZeroDivisors R)

tactic: ext x
state_before: case h.e'_2.h.e'_3
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
⊢ nonZeroDivisors P = Submonoid.map h.toMonoidHom (nonZeroDivisors R)
state_after: case h.e'_2.h.e'_3.h
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P ↔ x ∈ Submonoid.map h.toMonoidHom (nonZeroDivisors R)

tactic: erw [Submonoid.map_equiv_eq_comap_symm]
state_before: case h.e'_2.h.e'_3.h
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P ↔ x ∈ Submonoid.map h.toMonoidHom (nonZeroDivisors R)
state_after: case h.e'_2.h.e'_3.h
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P ↔ x ∈ Submonoid.comap h.toMulEquiv.symm.toMonoidHom (nonZeroDivisors R)

tactic: simp only [MulEquiv.coe_toMonoidHom, RingEquiv.toMulEquiv_eq_coe, Submonoid.mem_comap]
state_before: case h.e'_2.h.e'_3.h
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P ↔ x ∈ Submonoid.comap h.toMulEquiv.symm.toMonoidHom (nonZeroDivisors R)
state_after: case h.e'_2.h.e'_3.h
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P ↔ (↑h).symm x ∈ nonZeroDivisors R

tactic: constructor
state_before: case h.e'_2.h.e'_3.h
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P ↔ (↑h).symm x ∈ nonZeroDivisors R
state_after: case h.e'_2.h.e'_3.h.mp
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P → (↑h).symm x ∈ nonZeroDivisors R

case h.e'_2.h.e'_3.h.mpr
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ (↑h).symm x ∈ nonZeroDivisors R → x ∈ nonZeroDivisors P

tactic: rintro hx z (hz : z * h.symm x = 0)
state_before: case h.e'_2.h.e'_3.h.mp
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ x ∈ nonZeroDivisors P → (↑h).symm x ∈ nonZeroDivisors R
state_after: case h.e'_2.h.e'_3.h.mp
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : x ∈ nonZeroDivisors P
z : R
hz : z * h.symm x = 0
⊢ z = 0

tactic: rw [← h.map_eq_zero_iff]
state_before: case h.e'_2.h.e'_3.h.mp
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : x ∈ nonZeroDivisors P
z : R
hz : z * h.symm x = 0
⊢ z = 0
state_after: case h.e'_2.h.e'_3.h.mp
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : x ∈ nonZeroDivisors P
z : R
hz : z * h.symm x = 0
⊢ h z = 0

tactic: apply hx
state_before: case h.e'_2.h.e'_3.h.mp
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : x ∈ nonZeroDivisors P
z : R
hz : z * h.symm x = 0
⊢ h z = 0
state_after: case h.e'_2.h.e'_3.h.mp.a
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : x ∈ nonZeroDivisors P
z : R
hz : z * h.symm x = 0
⊢ h z * x = 0

tactic: simpa only [h.map_zero, h.apply_symm_apply, h.map_mul] using congr_arg h hz
state_before: case h.e'_2.h.e'_3.h.mp.a
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : x ∈ nonZeroDivisors P
z : R
hz : z * h.symm x = 0
⊢ h z * x = 0
state_after: no goals

tactic: rintro (hx : h.symm x ∈ _) z hz
state_before: case h.e'_2.h.e'_3.h.mpr
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
⊢ (↑h).symm x ∈ nonZeroDivisors R → x ∈ nonZeroDivisors P
state_after: case h.e'_2.h.e'_3.h.mpr
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : h.symm x ∈ nonZeroDivisors R
z : P
hz : z * x = 0
⊢ z = 0

tactic: rw [← h.symm.map_eq_zero_iff]
state_before: case h.e'_2.h.e'_3.h.mpr
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : h.symm x ∈ nonZeroDivisors R
z : P
hz : z * x = 0
⊢ z = 0
state_after: case h.e'_2.h.e'_3.h.mpr
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : h.symm x ∈ nonZeroDivisors R
z : P
hz : z * x = 0
⊢ h.symm z = 0

tactic: apply hx
state_before: case h.e'_2.h.e'_3.h.mpr
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : h.symm x ∈ nonZeroDivisors R
z : P
hz : z * x = 0
⊢ h.symm z = 0
state_after: case h.e'_2.h.e'_3.h.mpr.a
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : h.symm x ∈ nonZeroDivisors R
z : P
hz : z * x = 0
⊢ h.symm z * h.symm x = 0

tactic: rw [← h.symm.map_mul, hz, h.symm.map_zero]
state_before: case h.e'_2.h.e'_3.h.mpr.a
R : Type u_1
inst✝¹¹ : CommRing R
M : Submonoid R
S : Type u_2
inst✝¹⁰ : CommRing S
inst✝⁹ : Algebra R S
P : Type u_3
inst✝⁸ : CommRing P
A : Type u_4
inst✝⁷ : CommRing A
inst✝⁶ : IsDomain A
K : Type u_5
B : Type u_6
inst✝⁵ : CommRing B
inst✝⁴ : IsDomain B
inst✝³ : Field K
L : Type u_7
inst✝² : Field L
inst✝¹ : Algebra A K
inst✝ : IsFractionRing A K
g : A →+* L
h : R ≃+* P
x : P
hx : h.symm x ∈ nonZeroDivisors R
z : P
hz : z * x = 0
⊢ h.symm z * h.symm x = 0
state_after: no goals