[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
p : FractionalIdeal S P
s : Set P
hs : s = ↑p
⊢ IsFractional S (Submodule.copy (↑p) s hs)
[PROOFSTEP]
convert p.isFractional
[GOAL]
case h.e'_7
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
p : FractionalIdeal S P
s : Set P
hs : s = ↑p
⊢ Submodule.copy (↑p) s hs = ↑p
[PROOFSTEP]
ext
[GOAL]
case h.e'_7.h
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
p : FractionalIdeal S P
s : Set P
hs : s = ↑p
x✝ : P
⊢ x✝ ∈ Submodule.copy (↑p) s hs ↔ x✝ ∈ ↑p
[PROOFSTEP]
simp only [hs]
[GOAL]
case h.e'_7.h
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
p : FractionalIdeal S P
s : Set P
hs : s = ↑p
x✝ : P
⊢ x✝ ∈ Submodule.copy ↑p ↑p (_ : ↑p = ↑↑p) ↔ x✝ ∈ ↑p
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
h : I ≤ 1
⊢ IsFractional S I
[PROOFSTEP]
use 1, S.one_mem
[GOAL]
case right
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
h : I ≤ 1
⊢ ∀ (b : P), b ∈ I → IsInteger R (1 • b)
[PROOFSTEP]
intro b hb
[GOAL]
case right
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
h : I ≤ 1
b : P
hb : b ∈ I
⊢ IsInteger R (1 • b)
[PROOFSTEP]
rw [one_smul]
[GOAL]
case right
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
h : I ≤ 1
b : P
hb : b ∈ I
⊢ IsInteger R b
[PROOFSTEP]
obtain ⟨b', b'_mem, rfl⟩ := h hb
[GOAL]
case right.intro.refl
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
h : I ≤ 1
b' : R
hb : ↑(Algebra.linearMap R P) b' ∈ I
⊢ IsInteger R (↑(Algebra.linearMap R P) b')
[PROOFSTEP]
exact Set.mem_range_self b'
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
J : FractionalIdeal S P
hIJ : I ≤ ↑J
⊢ IsFractional S I
[PROOFSTEP]
obtain ⟨a, a_mem, ha⟩ := J.isFractional
[GOAL]
case intro.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
J : FractionalIdeal S P
hIJ : I ≤ ↑J
a : R
a_mem : a ∈ S
ha : ∀ (b : P), b ∈ ↑J → IsInteger R (a • b)
⊢ IsFractional S I
[PROOFSTEP]
use a, a_mem
[GOAL]
case right
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
J : FractionalIdeal S P
hIJ : I ≤ ↑J
a : R
a_mem : a ∈ S
ha : ∀ (b : P), b ∈ ↑J → IsInteger R (a • b)
⊢ ∀ (b : P), b ∈ I → IsInteger R (a • b)
[PROOFSTEP]
intro b b_mem
[GOAL]
case right
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
J : FractionalIdeal S P
hIJ : I ≤ ↑J
a : R
a_mem : a ∈ S
ha : ∀ (b : P), b ∈ ↑J → IsInteger R (a • b)
b : P
b_mem : b ∈ I
⊢ IsInteger R (a • b)
[PROOFSTEP]
exact ha b (hIJ b_mem)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Ideal R
⊢ coeSubmodule P I ≤ 1
[PROOFSTEP]
simpa using coeSubmodule_mono P (le_top : I ≤ ⊤)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
x : P
x✝ : x ∈ 0
x' : R
x'_mem_zero : x' ∈ ↑0
x'_eq_x : ↑(Algebra.linearMap R P) x' = x
⊢ x = 0
[PROOFSTEP]
have x'_eq_zero : x' = 0 := x'_mem_zero
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
x : P
x✝ : x ∈ 0
x' : R
x'_mem_zero : x' ∈ ↑0
x'_eq_x : ↑(Algebra.linearMap R P) x' = x
x'_eq_zero : x' = 0
⊢ x = 0
[PROOFSTEP]
simp [x'_eq_x.symm, x'_eq_zero]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
x : P
hx : x = 0
⊢ ↑(Algebra.linearMap R P) 0 = x
[PROOFSTEP]
simp [hx]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
h : ↑I = ⊥
⊢ (fun I => ↑I) I = (fun I => ↑I) 0
[PROOFSTEP]
simp [h]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
h : I = 0
⊢ ↑I = ⊥
[PROOFSTEP]
simp [h]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
⊢ ↑1 = 1
[PROOFSTEP]
rw [coe_one_eq_coeSubmodule_top, coeSubmodule_top]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
⊢ 0 ≤ I
[PROOFSTEP]
intro x hx
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
x : P
hx : x ∈ 0
⊢ x ∈ I
[PROOFSTEP]
rw [(mem_zero_iff _).mp hx]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
x : P
hx : x ∈ 0
⊢ 0 ∈ I
[PROOFSTEP]
exact zero_mem (I : Submodule R P)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
h : I = 0
x : P
hx : x ∈ I
⊢ x = 0
[PROOFSTEP]
simpa [h, mem_zero_iff] using hx
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • b)
[PROOFSTEP]
rcases mem_sup.mp hb with ⟨bI, hbI, bJ, hbJ, rfl⟩
[GOAL]
case intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • (bI + bJ))
[PROOFSTEP]
rw [smul_add]
[GOAL]
case intro.intro.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • bI + (aI * aJ) • bJ)
[PROOFSTEP]
apply isInteger_add
[GOAL]
case intro.intro.intro.intro.ha
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • bI)
[PROOFSTEP]
rw [mul_smul, smul_comm]
[GOAL]
case intro.intro.intro.intro.ha
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R (aJ • aI • bI)
[PROOFSTEP]
exact isInteger_smul (hI bI hbI)
[GOAL]
case intro.intro.intro.intro.hb
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R ((aI * aJ) • bJ)
[PROOFSTEP]
rw [mul_smul]
[GOAL]
case intro.intro.intro.intro.hb
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
bI : P
hbI : bI ∈ I
bJ : P
hbJ : bJ ∈ J
hb : bI + bJ ∈ I ⊔ J
⊢ IsInteger R (aI • aJ • bJ)
[PROOFSTEP]
exact isInteger_smul (hJ bJ hbJ)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
J : Submodule R P
b : P
hb : b ∈ I ⊓ J
⊢ IsInteger R (aI • b)
[PROOFSTEP]
rcases mem_inf.mp hb with ⟨hbI, _⟩
[GOAL]
case intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
J : Submodule R P
b : P
hb : b ∈ I ⊓ J
hbI : b ∈ I
right✝ : b ∈ J
⊢ IsInteger R (aI • b)
[PROOFSTEP]
exact hI b hbI
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
x✝ : IsFractional S I
⊢ IsFractional S (0 • I)
[PROOFSTEP]
rw [zero_smul]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
x✝ : IsFractional S I
⊢ IsFractional S 0
[PROOFSTEP]
convert ((0 : Ideal R) : FractionalIdeal S P).isFractional
[GOAL]
case h.e'_7
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
x✝ : IsFractional S I
⊢ 0 = ↑↑0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
n : ℕ
h : IsFractional S I
⊢ IsFractional S ((n + 1) • I)
[PROOFSTEP]
rw [succ_nsmul]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : Submodule R P
n : ℕ
h : IsFractional S I
⊢ IsFractional S (I + n • I)
[PROOFSTEP]
exact h.sup (IsFractional.nsmul n h)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
⊢ IsInteger R ((aI * aJ) • b)
[PROOFSTEP]
refine Submodule.mul_induction_on hb ?_ ?_
[GOAL]
case refine_1
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
⊢ ∀ (m : P), m ∈ I → ∀ (n : P), n ∈ J → IsInteger R ((aI * aJ) • (m * n))
[PROOFSTEP]
intro m hm n hn
[GOAL]
case refine_1
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
m : P
hm : m ∈ I
n : P
hn : n ∈ J
⊢ IsInteger R ((aI * aJ) • (m * n))
[PROOFSTEP]
obtain ⟨n', hn'⟩ := hJ n hn
[GOAL]
case refine_1.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
m : P
hm : m ∈ I
n : P
hn : n ∈ J
n' : R
hn' : ↑(algebraMap R P) n' = aJ • n
⊢ IsInteger R ((aI * aJ) • (m * n))
[PROOFSTEP]
rw [mul_smul, mul_comm m, ← smul_mul_assoc, ← hn', ← Algebra.smul_def]
[GOAL]
case refine_1.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
m : P
hm : m ∈ I
n : P
hn : n ∈ J
n' : R
hn' : ↑(algebraMap R P) n' = aJ • n
⊢ IsInteger R (aI • n' • m)
[PROOFSTEP]
apply hI
[GOAL]
case refine_1.intro.a
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
m : P
hm : m ∈ I
n : P
hn : n ∈ J
n' : R
hn' : ↑(algebraMap R P) n' = aJ • n
⊢ n' • m ∈ I
[PROOFSTEP]
exact Submodule.smul_mem _ _ hm
[GOAL]
case refine_2
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
⊢ ∀ (x y : P), IsInteger R ((aI * aJ) • x) → IsInteger R ((aI * aJ) • y) → IsInteger R ((aI * aJ) • (x + y))
[PROOFSTEP]
intro x y hx hy
[GOAL]
case refine_2
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
x y : P
hx : IsInteger R ((aI * aJ) • x)
hy : IsInteger R ((aI * aJ) • y)
⊢ IsInteger R ((aI * aJ) • (x + y))
[PROOFSTEP]
rw [smul_add]
[GOAL]
case refine_2
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Submodule R P
aI : R
haI : aI ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (aI • b)
aJ : R
haJ : aJ ∈ S
hJ : ∀ (b : P), b ∈ J → IsInteger R (aJ • b)
b : P
hb : b ∈ I * J
x y : P
hx : IsInteger R ((aI * aJ) • x)
hy : IsInteger R ((aI * aJ) • y)
⊢ IsInteger R ((aI * aJ) • x + (aI * aJ) • y)
[PROOFSTEP]
apply isInteger_add hx hy
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
⊢ I * J = { val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) }
[PROOFSTEP]
simp only [← mul_eq_mul, mul]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
⊢ ↑(I * J) = ↑I * ↑J
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
⊢ ↑{ val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) } = ↑I * ↑J
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Ideal R
⊢ ↑(I * J) = ↑I * ↑J
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : Ideal R
⊢ ↑(I * J) = { val := ↑↑I * ↑↑J, property := (_ : IsFractional S (↑↑I * ↑↑J)) }
[PROOFSTEP]
exact coeToSubmodule_injective (coeSubmodule_mul _ _ _)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
⊢ Monotone ((fun x x_1 => x * x_1) I)
[PROOFSTEP]
intro J J' h
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J J' : FractionalIdeal S P
h : J ≤ J'
⊢ (fun x x_1 => x * x_1) I J ≤ (fun x x_1 => x * x_1) I J'
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J J' : FractionalIdeal S P
h : J ≤ J'
⊢ { val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) } ≤
    { val := ↑I * ↑J', property := (_ : IsFractional S (↑I * ↑J')) }
[PROOFSTEP]
exact mul_le.mpr fun x hx y hy => mul_mem_mul hx (h hy)
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
⊢ Monotone fun J => J * I
[PROOFSTEP]
intro J J' h
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J J' : FractionalIdeal S P
h : J ≤ J'
⊢ (fun J => J * I) J ≤ (fun J => J * I) J'
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J J' : FractionalIdeal S P
h : J ≤ J'
⊢ { val := ↑J * ↑I, property := (_ : IsFractional S (↑J * ↑I)) } ≤
    { val := ↑J' * ↑I, property := (_ : IsFractional S (↑J' * ↑I)) }
[PROOFSTEP]
exact mul_le.mpr fun x hx y hy => mul_mem_mul (h hx) hy
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
i j : P
hi : i ∈ I
hj : j ∈ J
⊢ i * j ∈ I * J
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
i j : P
hi : i ∈ I
hj : j ∈ J
⊢ i * j ∈ { val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) }
[PROOFSTEP]
exact Submodule.mul_mem_mul hi hj
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J K : FractionalIdeal S P
⊢ I * J ≤ K ↔ ∀ (i : P), i ∈ I → ∀ (j : P), j ∈ J → i * j ∈ K
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J K : FractionalIdeal S P
⊢ { val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) } ≤ K ↔ ∀ (i : P), i ∈ I → ∀ (j : P), j ∈ J → i * j ∈ K
[PROOFSTEP]
exact Submodule.mul_le
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
C : P → Prop
r : P
hr : r ∈ I * J
hm : ∀ (i : P), i ∈ I → ∀ (j : P), j ∈ J → C (i * j)
ha : ∀ (x y : P), C x → C y → C (x + y)
⊢ C r
[PROOFSTEP]
simp only [mul_def] at hr 
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I J : FractionalIdeal S P
C : P → Prop
r : P
hm : ∀ (i : P), i ∈ I → ∀ (j : P), j ∈ J → C (i * j)
ha : ∀ (x y : P), C x → C y → C (x + y)
hr : r ∈ { val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) }
⊢ C r
[PROOFSTEP]
exact Submodule.mul_induction_on hr hm ha
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
n : ℕ
⊢ ↑(Nat.unaryCast n) = ↑n
[PROOFSTEP]
induction n
[GOAL]
case zero
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
⊢ ↑(Nat.unaryCast Nat.zero) = ↑Nat.zero
[PROOFSTEP]
simp [*, Nat.unaryCast]
[GOAL]
case succ
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
n✝ : ℕ
n_ih✝ : ↑(Nat.unaryCast n✝) = ↑n✝
⊢ ↑(Nat.unaryCast (Nat.succ n✝)) = ↑(Nat.succ n✝)
[PROOFSTEP]
simp [*, Nat.unaryCast]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
hI : 1 ≤ I
⊢ I ≤ I * I
[PROOFSTEP]
convert mul_left_mono I hI
[GOAL]
case h.e'_3
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
hI : 1 ≤ I
⊢ I = (fun x x_1 => x * x_1) I 1
[PROOFSTEP]
exact (mul_one I).symm
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
hI : I ≤ 1
⊢ I * I ≤ I
[PROOFSTEP]
convert mul_left_mono I hI
[GOAL]
case h.e'_4
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
hI : I ≤ 1
⊢ I = (fun x x_1 => x * x_1) I 1
[PROOFSTEP]
exact (mul_one I).symm
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
⊢ J ≤ 1 ↔ ∃ I, ↑I = J
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
⊢ J ≤ 1 → ∃ I, ↑I = J
[PROOFSTEP]
intro hJ
[GOAL]
case mp
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
⊢ ∃ I, ↑I = J
[PROOFSTEP]
refine' ⟨⟨⟨⟨{x : R | algebraMap R P x ∈ J}, _⟩, _⟩, _⟩, _⟩
[GOAL]
case mp.refine'_1
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
⊢ ∀ {a b : R},
    a ∈ {x | ↑(algebraMap R P) x ∈ J} → b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}
[PROOFSTEP]
intro a b ha hb
[GOAL]
case mp.refine'_1
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
a b : R
ha : a ∈ {x | ↑(algebraMap R P) x ∈ J}
hb : b ∈ {x | ↑(algebraMap R P) x ∈ J}
⊢ a + b ∈ {x | ↑(algebraMap R P) x ∈ J}
[PROOFSTEP]
rw [mem_setOf, RingHom.map_add]
[GOAL]
case mp.refine'_1
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
a b : R
ha : a ∈ {x | ↑(algebraMap R P) x ∈ J}
hb : b ∈ {x | ↑(algebraMap R P) x ∈ J}
⊢ ↑(algebraMap R P) a + ↑(algebraMap R P) b ∈ J
[PROOFSTEP]
exact J.val.add_mem ha hb
[GOAL]
case mp.refine'_2
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
⊢ 0 ∈
    { carrier := {x | ↑(algebraMap R P) x ∈ J},
        add_mem' :=
          (_ :
            ∀ {a b : R},
              a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier
[PROOFSTEP]
rw [mem_setOf, RingHom.map_zero]
[GOAL]
case mp.refine'_2
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
⊢ 0 ∈ J
[PROOFSTEP]
exact J.val.zero_mem
[GOAL]
case mp.refine'_3
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
⊢ ∀ (c : R) {x : R},
    x ∈
        {
              toAddSubsemigroup :=
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                  add_mem' :=
                    (_ :
                      ∀ {a b : R},
                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                          b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
              zero_mem' :=
                (_ :
                  0 ∈
                    { carrier := {x | ↑(algebraMap R P) x ∈ J},
                        add_mem' :=
                          (_ :
                            ∀ {a b : R},
                              a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                  a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
      c • x ∈
        {
              toAddSubsemigroup :=
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                  add_mem' :=
                    (_ :
                      ∀ {a b : R},
                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                          b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
              zero_mem' :=
                (_ :
                  0 ∈
                    { carrier := {x | ↑(algebraMap R P) x ∈ J},
                        add_mem' :=
                          (_ :
                            ∀ {a b : R},
                              a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                  a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier
[PROOFSTEP]
intro c x hx
[GOAL]
case mp.refine'_3
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
c x : R
hx :
  x ∈
    {
          toAddSubsemigroup :=
            { carrier := {x | ↑(algebraMap R P) x ∈ J},
              add_mem' :=
                (_ :
                  ∀ {a b : R},
                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
          zero_mem' :=
            (_ :
              0 ∈
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                    add_mem' :=
                      (_ :
                        ∀ {a b : R},
                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier
⊢ c • x ∈
    {
          toAddSubsemigroup :=
            { carrier := {x | ↑(algebraMap R P) x ∈ J},
              add_mem' :=
                (_ :
                  ∀ {a b : R},
                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
          zero_mem' :=
            (_ :
              0 ∈
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                    add_mem' :=
                      (_ :
                        ∀ {a b : R},
                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier
[PROOFSTEP]
rw [smul_eq_mul, mem_setOf, RingHom.map_mul, ← Algebra.smul_def]
[GOAL]
case mp.refine'_3
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
c x : R
hx :
  x ∈
    {
          toAddSubsemigroup :=
            { carrier := {x | ↑(algebraMap R P) x ∈ J},
              add_mem' :=
                (_ :
                  ∀ {a b : R},
                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
          zero_mem' :=
            (_ :
              0 ∈
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                    add_mem' :=
                      (_ :
                        ∀ {a b : R},
                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier
⊢ c • ↑(algebraMap R P) x ∈ J
[PROOFSTEP]
exact J.val.smul_mem c hx
[GOAL]
case mp.refine'_4
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
⊢ ↑{
        toAddSubmonoid :=
          {
            toAddSubsemigroup :=
              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                add_mem' :=
                  (_ :
                    ∀ {a b : R},
                      a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                        b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
            zero_mem' :=
              (_ :
                0 ∈
                  { carrier := {x | ↑(algebraMap R P) x ∈ J},
                      add_mem' :=
                        (_ :
                          ∀ {a b : R},
                            a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
        smul_mem' :=
          (_ :
            ∀ (c : R) {x : R},
              x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                c • x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) } =
    J
[PROOFSTEP]
ext x
[GOAL]
case mp.refine'_4.a
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
x : P
⊢ x ∈
      ↑{
          toAddSubmonoid :=
            {
              toAddSubsemigroup :=
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                  add_mem' :=
                    (_ :
                      ∀ {a b : R},
                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                          b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
              zero_mem' :=
                (_ :
                  0 ∈
                    { carrier := {x | ↑(algebraMap R P) x ∈ J},
                        add_mem' :=
                          (_ :
                            ∀ {a b : R},
                              a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
          smul_mem' :=
            (_ :
              ∀ (c : R) {x : R},
                x ∈
                    {
                          toAddSubsemigroup :=
                            { carrier := {x | ↑(algebraMap R P) x ∈ J},
                              add_mem' :=
                                (_ :
                                  ∀ {a b : R},
                                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                          zero_mem' :=
                            (_ :
                              0 ∈
                                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                    add_mem' :=
                                      (_ :
                                        ∀ {a b : R},
                                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                              a + b ∈
                                                {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                  c • x ∈
                    {
                          toAddSubsemigroup :=
                            { carrier := {x | ↑(algebraMap R P) x ∈ J},
                              add_mem' :=
                                (_ :
                                  ∀ {a b : R},
                                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                          zero_mem' :=
                            (_ :
                              0 ∈
                                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                    add_mem' :=
                                      (_ :
                                        ∀ {a b : R},
                                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                              a + b ∈
                                                {x |
                                                  ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) } ↔
    x ∈ J
[PROOFSTEP]
constructor
[GOAL]
case mp.refine'_4.a.mp
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
x : P
⊢ x ∈
      ↑{
          toAddSubmonoid :=
            {
              toAddSubsemigroup :=
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                  add_mem' :=
                    (_ :
                      ∀ {a b : R},
                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                          b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
              zero_mem' :=
                (_ :
                  0 ∈
                    { carrier := {x | ↑(algebraMap R P) x ∈ J},
                        add_mem' :=
                          (_ :
                            ∀ {a b : R},
                              a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
          smul_mem' :=
            (_ :
              ∀ (c : R) {x : R},
                x ∈
                    {
                          toAddSubsemigroup :=
                            { carrier := {x | ↑(algebraMap R P) x ∈ J},
                              add_mem' :=
                                (_ :
                                  ∀ {a b : R},
                                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                          zero_mem' :=
                            (_ :
                              0 ∈
                                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                    add_mem' :=
                                      (_ :
                                        ∀ {a b : R},
                                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                              a + b ∈
                                                {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                  c • x ∈
                    {
                          toAddSubsemigroup :=
                            { carrier := {x | ↑(algebraMap R P) x ∈ J},
                              add_mem' :=
                                (_ :
                                  ∀ {a b : R},
                                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                          zero_mem' :=
                            (_ :
                              0 ∈
                                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                    add_mem' :=
                                      (_ :
                                        ∀ {a b : R},
                                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                              a + b ∈
                                                {x |
                                                  ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) } →
    x ∈ J
[PROOFSTEP]
rintro ⟨y, hy, eq_y⟩
[GOAL]
case mp.refine'_4.a.mp.intro.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
x : P
y : R
hy :
  y ∈
    ↑{
        toAddSubmonoid :=
          {
            toAddSubsemigroup :=
              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                add_mem' :=
                  (_ :
                    ∀ {a b : R},
                      a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                        b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
            zero_mem' :=
              (_ :
                0 ∈
                  { carrier := {x | ↑(algebraMap R P) x ∈ J},
                      add_mem' :=
                        (_ :
                          ∀ {a b : R},
                            a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
        smul_mem' :=
          (_ :
            ∀ (c : R) {x : R},
              x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                c • x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) }
eq_y : ↑(Algebra.linearMap R P) y = x
⊢ x ∈ J
[PROOFSTEP]
rwa [← eq_y]
[GOAL]
case mp.refine'_4.a.mpr
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
x : P
⊢ x ∈ J →
    x ∈
      ↑{
          toAddSubmonoid :=
            {
              toAddSubsemigroup :=
                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                  add_mem' :=
                    (_ :
                      ∀ {a b : R},
                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                          b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
              zero_mem' :=
                (_ :
                  0 ∈
                    { carrier := {x | ↑(algebraMap R P) x ∈ J},
                        add_mem' :=
                          (_ :
                            ∀ {a b : R},
                              a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
          smul_mem' :=
            (_ :
              ∀ (c : R) {x : R},
                x ∈
                    {
                          toAddSubsemigroup :=
                            { carrier := {x | ↑(algebraMap R P) x ∈ J},
                              add_mem' :=
                                (_ :
                                  ∀ {a b : R},
                                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                          zero_mem' :=
                            (_ :
                              0 ∈
                                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                    add_mem' :=
                                      (_ :
                                        ∀ {a b : R},
                                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                              a + b ∈
                                                {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                  c • x ∈
                    {
                          toAddSubsemigroup :=
                            { carrier := {x | ↑(algebraMap R P) x ∈ J},
                              add_mem' :=
                                (_ :
                                  ∀ {a b : R},
                                    a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                      b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                          zero_mem' :=
                            (_ :
                              0 ∈
                                { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                    add_mem' :=
                                      (_ :
                                        ∀ {a b : R},
                                          a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                              a + b ∈
                                                {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) }
[PROOFSTEP]
intro hx
[GOAL]
case mp.refine'_4.a.mpr
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
x : P
hx : x ∈ J
⊢ x ∈
    ↑{
        toAddSubmonoid :=
          {
            toAddSubsemigroup :=
              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                add_mem' :=
                  (_ :
                    ∀ {a b : R},
                      a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                        b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
            zero_mem' :=
              (_ :
                0 ∈
                  { carrier := {x | ↑(algebraMap R P) x ∈ J},
                      add_mem' :=
                        (_ :
                          ∀ {a b : R},
                            a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
        smul_mem' :=
          (_ :
            ∀ (c : R) {x : R},
              x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                c • x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) }
[PROOFSTEP]
obtain ⟨y, rfl⟩ := (mem_one_iff S).mp (hJ hx)
[GOAL]
case mp.refine'_4.a.mpr.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
hJ : J ≤ 1
y : R
hx : ↑(algebraMap R P) y ∈ J
⊢ ↑(algebraMap R P) y ∈
    ↑{
        toAddSubmonoid :=
          {
            toAddSubsemigroup :=
              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                add_mem' :=
                  (_ :
                    ∀ {a b : R},
                      a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                        b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
            zero_mem' :=
              (_ :
                0 ∈
                  { carrier := {x | ↑(algebraMap R P) x ∈ J},
                      add_mem' :=
                        (_ :
                          ∀ {a b : R},
                            a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                              b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) }.carrier) },
        smul_mem' :=
          (_ :
            ∀ (c : R) {x : R},
              x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier →
                c • x ∈
                  {
                        toAddSubsemigroup :=
                          { carrier := {x | ↑(algebraMap R P) x ∈ J},
                            add_mem' :=
                              (_ :
                                ∀ {a b : R},
                                  a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                    b ∈ {x | ↑(algebraMap R P) x ∈ J} → a + b ∈ {x | ↑(algebraMap R P) x ∈ J}) },
                        zero_mem' :=
                          (_ :
                            0 ∈
                              { carrier := {x | ↑(algebraMap R P) x ∈ J},
                                  add_mem' :=
                                    (_ :
                                      ∀ {a b : R},
                                        a ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                          b ∈ {x | ↑(algebraMap R P) x ∈ J} →
                                            a + b ∈
                                              {x | ↑(algebraMap R P) x ∈ J}) }.carrier) }.toAddSubsemigroup.carrier) }
[PROOFSTEP]
exact mem_setOf.mpr ⟨y, hx, rfl⟩
[GOAL]
case mpr
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
⊢ (∃ I, ↑I = J) → J ≤ 1
[PROOFSTEP]
rintro ⟨I, hI⟩
[GOAL]
case mpr.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
I : Ideal R
hI : ↑I = J
⊢ J ≤ 1
[PROOFSTEP]
rw [← hI]
[GOAL]
case mpr.intro
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
J : FractionalIdeal S P
I : Ideal R
hI : ↑I = J
⊢ ↑I ≤ 1
[PROOFSTEP]
apply coeIdeal_le_one
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
I : FractionalIdeal S P
⊢ 1 ≤ I ↔ 1 ∈ I
[PROOFSTEP]
rw [← coe_le_coe, coe_one, Submodule.one_le, mem_coe]
[GOAL]
R : Type u_1
inst✝² : CommRing R
S : Submonoid R
P : Type u_2
inst✝¹ : CommRing P
inst✝ : Algebra R P
loc : IsLocalization S P
⊢ ↑1 = 1
[PROOFSTEP]
rw [Ideal.one_eq_top, coeIdeal_top]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
g : P →ₐ[R] P'
I : Submodule R P
a : R
a_nonzero : a ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (a • b)
b : P'
hb : b ∈ Submodule.map (AlgHom.toLinearMap g) I
⊢ IsInteger R (a • b)
[PROOFSTEP]
obtain ⟨b', b'_mem, hb'⟩ := Submodule.mem_map.mp hb
[GOAL]
case intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
g : P →ₐ[R] P'
I : Submodule R P
a : R
a_nonzero : a ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (a • b)
b : P'
hb : b ∈ Submodule.map (AlgHom.toLinearMap g) I
b' : P
b'_mem : b' ∈ I
hb' : ↑(AlgHom.toLinearMap g) b' = b
⊢ IsInteger R (a • b)
[PROOFSTEP]
obtain ⟨x, hx⟩ := hI b' b'_mem
[GOAL]
case intro.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
g : P →ₐ[R] P'
I : Submodule R P
a : R
a_nonzero : a ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (a • b)
b : P'
hb : b ∈ Submodule.map (AlgHom.toLinearMap g) I
b' : P
b'_mem : b' ∈ I
hb' : ↑(AlgHom.toLinearMap g) b' = b
x : R
hx : ↑(algebraMap R P) x = a • b'
⊢ IsInteger R (a • b)
[PROOFSTEP]
use x
[GOAL]
case h
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
g : P →ₐ[R] P'
I : Submodule R P
a : R
a_nonzero : a ∈ S
hI : ∀ (b : P), b ∈ I → IsInteger R (a • b)
b : P'
hb : b ∈ Submodule.map (AlgHom.toLinearMap g) I
b' : P
b'_mem : b' ∈ I
hb' : ↑(AlgHom.toLinearMap g) b' = b
x : R
hx : ↑(algebraMap R P) x = a • b'
⊢ ↑(algebraMap R P') x = a • b
[PROOFSTEP]
erw [← g.commutes, hx, g.map_smul, hb']
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
⊢ map g ↑I = ↑I
[PROOFSTEP]
ext x
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
x : P'
⊢ x ∈ map g ↑I ↔ x ∈ ↑I
[PROOFSTEP]
simp only [mem_coeIdeal]
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
x : P'
⊢ x ∈ map g ↑I ↔ ∃ x', x' ∈ I ∧ ↑(algebraMap R P') x' = x
[PROOFSTEP]
constructor
[GOAL]
case a.mp
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
x : P'
⊢ x ∈ map g ↑I → ∃ x', x' ∈ I ∧ ↑(algebraMap R P') x' = x
[PROOFSTEP]
rintro ⟨_, ⟨y, hy, rfl⟩, rfl⟩
[GOAL]
case a.mp.intro.intro.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
y : R
hy : y ∈ ↑I
⊢ ∃ x', x' ∈ I ∧ ↑(algebraMap R P') x' = ↑(AlgHom.toLinearMap g) (↑(Algebra.linearMap R P) y)
[PROOFSTEP]
exact ⟨y, hy, (g.commutes y).symm⟩
[GOAL]
case a.mpr
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
x : P'
⊢ (∃ x', x' ∈ I ∧ ↑(algebraMap R P') x' = x) → x ∈ map g ↑I
[PROOFSTEP]
rintro ⟨y, hy, rfl⟩
[GOAL]
case a.mpr.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
y : R
hy : y ∈ I
⊢ ↑(algebraMap R P') y ∈ map g ↑I
[PROOFSTEP]
exact ⟨_, ⟨y, hy, rfl⟩, g.commutes y⟩
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
⊢ map g (I * J) = map g I * map g J
[PROOFSTEP]
simp only [mul_def]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
⊢ map g { val := ↑I * ↑J, property := (_ : IsFractional S (↑I * ↑J)) } =
    { val := ↑(map g I) * ↑(map g J), property := (_ : IsFractional S (↑(map g I) * ↑(map g J))) }
[PROOFSTEP]
exact coeToSubmodule_injective (Submodule.map_mul _ _ _)
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g✝ : P →ₐ[R] P'
g : P ≃ₐ[R] P'
⊢ map (↑(AlgEquiv.symm g)) (map (↑g) I) = I
[PROOFSTEP]
rw [← map_comp, g.symm_comp, map_id]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g✝ : P →ₐ[R] P'
I : FractionalIdeal S P'
g : P ≃ₐ[R] P'
⊢ map (↑g) (map (↑(AlgEquiv.symm g)) I) = I
[PROOFSTEP]
rw [← map_comp, g.comp_symm, map_id]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g✝ : P →ₐ[R] P'
g : P ≃ₐ[R] P'
I : FractionalIdeal S P
⊢ map (↑(AlgEquiv.symm g)) (map (↑g) I) = I
[PROOFSTEP]
rw [← map_comp, AlgEquiv.symm_comp, map_id]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g✝ : P →ₐ[R] P'
g : P ≃ₐ[R] P'
I : FractionalIdeal S P'
⊢ map (↑g) (map (↑(AlgEquiv.symm g)) I) = I
[PROOFSTEP]
rw [← map_comp, AlgEquiv.comp_symm, map_id]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
x : FractionalIdeal S P
⊢ ↑(mapEquiv AlgEquiv.refl) x = ↑(RingEquiv.refl (FractionalIdeal S P)) x
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
s : Set P
x✝ : ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ s → IsInteger R (a • b)
a : R
a_mem : a ∈ S
h : ∀ (b : P), b ∈ s → IsInteger R (a • b)
b : P
hb : b ∈ span R s
⊢ IsInteger R (a • 0)
[PROOFSTEP]
rw [smul_zero]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
s : Set P
x✝ : ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ s → IsInteger R (a • b)
a : R
a_mem : a ∈ S
h : ∀ (b : P), b ∈ s → IsInteger R (a • b)
b : P
hb : b ∈ span R s
⊢ IsInteger R 0
[PROOFSTEP]
exact isInteger_zero
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
s : Set P
x✝ : ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ s → IsInteger R (a • b)
a : R
a_mem : a ∈ S
h : ∀ (b : P), b ∈ s → IsInteger R (a • b)
b : P
hb : b ∈ span R s
x y : P
hx : IsInteger R (a • x)
hy : IsInteger R (a • y)
⊢ IsInteger R (a • (x + y))
[PROOFSTEP]
rw [smul_add]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
s : Set P
x✝ : ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ s → IsInteger R (a • b)
a : R
a_mem : a ∈ S
h : ∀ (b : P), b ∈ s → IsInteger R (a • b)
b : P
hb : b ∈ span R s
x y : P
hx : IsInteger R (a • x)
hy : IsInteger R (a • y)
⊢ IsInteger R (a • x + a • y)
[PROOFSTEP]
exact isInteger_add hx hy
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
s✝ : Set P
x✝ : ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ s✝ → IsInteger R (a • b)
a : R
a_mem : a ∈ S
h : ∀ (b : P), b ∈ s✝ → IsInteger R (a • b)
b : P
hb : b ∈ span R s✝
s : R
x : P
hx : IsInteger R (a • x)
⊢ IsInteger R (a • s • x)
[PROOFSTEP]
rw [smul_comm]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
s✝ : Set P
x✝ : ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ s✝ → IsInteger R (a • b)
a : R
a_mem : a ∈ S
h : ∀ (b : P), b ∈ s✝ → IsInteger R (a • b)
b : P
hb : b ∈ span R s✝
s : R
x : P
hx : IsInteger R (a • x)
⊢ IsInteger R (s • a • x)
[PROOFSTEP]
exact isInteger_smul hx
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Submodule R P
hI : FG I
⊢ IsFractional S I
[PROOFSTEP]
rcases hI with ⟨I, rfl⟩
[GOAL]
case intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Finset P
⊢ IsFractional S (span R ↑I)
[PROOFSTEP]
rcases exist_integer_multiples_of_finset S I with ⟨⟨s, hs1⟩, hs⟩
[GOAL]
case intro.intro.mk
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Finset P
s : R
hs1 : s ∈ S
hs : ∀ (a : P), a ∈ I → IsInteger R (↑{ val := s, property := hs1 } • a)
⊢ IsFractional S (span R ↑I)
[PROOFSTEP]
rw [isFractional_span_iff]
[GOAL]
case intro.intro.mk
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Finset P
s : R
hs1 : s ∈ S
hs : ∀ (a : P), a ∈ I → IsInteger R (↑{ val := s, property := hs1 } • a)
⊢ ∃ a, a ∈ S ∧ ∀ (b : P), b ∈ ↑I → IsInteger R (a • b)
[PROOFSTEP]
exact ⟨s, hs1, hs⟩
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J✝ : FractionalIdeal S P
g : P →ₐ[R] P'
I J : FractionalIdeal S P
x : P
hx : x ∈ I * J
⊢ x ∈ ↑I * ↑J
[PROOFSTEP]
simpa using mem_coe.mpr hx
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
inj : Function.Injective ↑(algebraMap R P)
I : Ideal R
h : IsUnit ↑I
⊢ Ideal.FG I
[PROOFSTEP]
rw [← coeIdeal_fg S inj I]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
inj : Function.Injective ↑(algebraMap R P)
I : Ideal R
h : IsUnit ↑I
⊢ FG ↑↑I
[PROOFSTEP]
exact FractionalIdeal.fg_of_isUnit I h
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
⊢ Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S
[PROOFSTEP]
rw [RingEquiv.toMonoidHom_refl, Submonoid.map_id]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : FractionalIdeal S P
x : P'
⊢ x ∈ ↑(canonicalEquiv S P P') I ↔
    ∃ y, y ∈ I ∧ ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) y = x
[PROOFSTEP]
rw [canonicalEquiv, mapEquiv_apply, mem_map]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : FractionalIdeal S P
x : P'
⊢ (∃ x_1,
      x_1 ∈ I ∧
        ↑↑(let src :=
                  ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                    (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S);
                { toEquiv := src.toEquiv,
                  map_mul' :=
                    (_ :
                      ∀ (x y : P),
                        Equiv.toFun
                            (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                            (x * y) =
                          Equiv.toFun
                              (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                              x *
                            Equiv.toFun
                              (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                              y),
                  map_add' :=
                    (_ :
                      ∀ (x y : P),
                        Equiv.toFun
                            (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                            (x + y) =
                          Equiv.toFun
                              (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                              x +
                            Equiv.toFun
                              (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                              y),
                  commutes' :=
                    (_ :
                      ∀ (r : R),
                        ↑(ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S))
                            (↑(algebraMap R P) r) =
                          ↑(algebraMap R P') (↑(RingEquiv.refl R) r)) })
            x_1 =
          x) ↔
    ∃ y, y ∈ I ∧ ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) y = x
[PROOFSTEP]
exact ⟨fun ⟨y, mem, Eq⟩ => ⟨y, mem, Eq⟩, fun ⟨y, mem, Eq⟩ => ⟨y, mem, Eq⟩⟩
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : FractionalIdeal S P'
x : P
⊢ x ∈ ↑(RingEquiv.symm (canonicalEquiv S P P')) I ↔ x ∈ ↑(canonicalEquiv S P' P) I
[PROOFSTEP]
rw [mem_canonicalEquiv_apply, canonicalEquiv, mapEquiv_symm, mapEquiv_apply, mem_map]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : FractionalIdeal S P'
x : P
⊢ (∃ x_1,
      x_1 ∈ I ∧
        ↑↑(AlgEquiv.symm
                  (let src :=
                    ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                      (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S);
                  { toEquiv := src.toEquiv,
                    map_mul' :=
                      (_ :
                        ∀ (x y : P),
                          Equiv.toFun
                              (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                              (x * y) =
                            Equiv.toFun
                                (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                    (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                                x *
                              Equiv.toFun
                                (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                    (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                                y),
                    map_add' :=
                      (_ :
                        ∀ (x y : P),
                          Equiv.toFun
                              (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                              (x + y) =
                            Equiv.toFun
                                (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                    (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                                x +
                              Equiv.toFun
                                (ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                    (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S)).toEquiv
                                y),
                    commutes' :=
                      (_ :
                        ∀ (r : R),
                          ↑(ringEquivOfRingEquiv P P' (RingEquiv.refl R)
                                  (_ : Submonoid.map (RingEquiv.toMonoidHom (RingEquiv.refl R)) S = S))
                              (↑(algebraMap R P) r) =
                            ↑(algebraMap R P') (↑(RingEquiv.refl R) r)) }))
            x_1 =
          x) ↔
    ∃ y, y ∈ I ∧ ↑(IsLocalization.map P (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) y = x
[PROOFSTEP]
exact ⟨fun ⟨y, mem, Eq⟩ => ⟨y, mem, Eq⟩, fun ⟨y, mem, Eq⟩ => ⟨y, mem, Eq⟩⟩
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : FractionalIdeal S P'
⊢ ↑(canonicalEquiv S P P') (↑(canonicalEquiv S P' P) I) = I
[PROOFSTEP]
rw [← canonicalEquiv_symm, RingEquiv.apply_symm_apply]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝⁶ : CommRing P'
inst✝⁵ : Algebra R P'
loc' : IsLocalization S P'
P''✝ : Type u_4
inst✝⁴ : CommRing P''✝
inst✝³ : Algebra R P''✝
loc'' : IsLocalization S P''✝
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
P'' : Type u_5
inst✝² : CommRing P''
inst✝¹ : Algebra R P''
inst✝ : IsLocalization S P''
I : FractionalIdeal S P
⊢ ↑(canonicalEquiv S P' P'') (↑(canonicalEquiv S P P') I) = ↑(canonicalEquiv S P P'') I
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝⁶ : CommRing P'
inst✝⁵ : Algebra R P'
loc' : IsLocalization S P'
P''✝ : Type u_4
inst✝⁴ : CommRing P''✝
inst✝³ : Algebra R P''✝
loc'' : IsLocalization S P''✝
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
P'' : Type u_5
inst✝² : CommRing P''
inst✝¹ : Algebra R P''
inst✝ : IsLocalization S P''
I : FractionalIdeal S P
x✝ : P''
⊢ x✝ ∈ ↑(canonicalEquiv S P' P'') (↑(canonicalEquiv S P P') I) ↔ x✝ ∈ ↑(canonicalEquiv S P P'') I
[PROOFSTEP]
simp only [IsLocalization.map_map, RingHomInvPair.comp_eq₂, mem_canonicalEquiv_apply, exists_prop,
  exists_exists_and_eq_and]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
⊢ ↑(canonicalEquiv S P P') ↑I = ↑I
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I✝ J : FractionalIdeal S P
g : P →ₐ[R] P'
I : Ideal R
x✝ : P'
⊢ x✝ ∈ ↑(canonicalEquiv S P P') ↑I ↔ x✝ ∈ ↑I
[PROOFSTEP]
simp [IsLocalization.map_eq]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
⊢ canonicalEquiv S P P = RingEquiv.refl (FractionalIdeal S P)
[PROOFSTEP]
rw [← canonicalEquiv_trans_canonicalEquiv S P P]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
⊢ RingEquiv.trans (canonicalEquiv S P P) (canonicalEquiv S P P) = RingEquiv.refl (FractionalIdeal S P)
[PROOFSTEP]
convert (canonicalEquiv S P P).symm_trans_self
[GOAL]
case h.e'_2.h.e'_10
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_3
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type u_4
inst✝¹ : CommRing P''
inst✝ : Algebra R P''
loc'' : IsLocalization S P''
I J : FractionalIdeal S P
g : P →ₐ[R] P'
⊢ canonicalEquiv S P P = RingEquiv.symm (canonicalEquiv S P P)
[PROOFSTEP]
exact (canonicalEquiv_symm S P P).symm
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
⊢ ∃ x x_1, ↑(algebraMap R K) x ∈ I
[PROOFSTEP]
obtain ⟨y : K, y_mem, y_not_mem⟩ := SetLike.exists_of_lt (by simpa only using bot_lt_iff_ne_bot.mpr hI)
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
⊢ ?m.1106912 < ?m.1106913
[PROOFSTEP]
simpa only using bot_lt_iff_ne_bot.mpr hI
[GOAL]
case intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
⊢ ∃ x x_1, ↑(algebraMap R K) x ∈ I
[PROOFSTEP]
have y_ne_zero : y ≠ 0 := by simpa using y_not_mem
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
⊢ y ≠ 0
[PROOFSTEP]
simpa using y_not_mem
[GOAL]
case intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
y_ne_zero : y ≠ 0
⊢ ∃ x x_1, ↑(algebraMap R K) x ∈ I
[PROOFSTEP]
obtain ⟨z, ⟨x, hx⟩⟩ := exists_integer_multiple R⁰ y
[GOAL]
case intro.intro.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
y_ne_zero : y ≠ 0
z : { x // x ∈ R⁰ }
x : R
hx : ↑(algebraMap R K) x = ↑z • y
⊢ ∃ x x_1, ↑(algebraMap R K) x ∈ I
[PROOFSTEP]
refine' ⟨x, _, _⟩
[GOAL]
case intro.intro.intro.intro.refine'_1
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
y_ne_zero : y ≠ 0
z : { x // x ∈ R⁰ }
x : R
hx : ↑(algebraMap R K) x = ↑z • y
⊢ x ≠ 0
[PROOFSTEP]
rw [Ne.def, ← @IsFractionRing.to_map_eq_zero_iff R _ K, hx, Algebra.smul_def]
[GOAL]
case intro.intro.intro.intro.refine'_1
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
y_ne_zero : y ≠ 0
z : { x // x ∈ R⁰ }
x : R
hx : ↑(algebraMap R K) x = ↑z • y
⊢ ¬↑(algebraMap R K) ↑z * y = 0
[PROOFSTEP]
exact mul_ne_zero (IsFractionRing.to_map_ne_zero_of_mem_nonZeroDivisors z.2) y_ne_zero
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
y_ne_zero : y ≠ 0
z : { x // x ∈ R⁰ }
x : R
hx : ↑(algebraMap R K) x = ↑z • y
⊢ ↑(algebraMap R K) x ∈ I
[PROOFSTEP]
rw [hx]
[GOAL]
case intro.intro.intro.intro.refine'_2
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
y : K
y_mem : y ∈ I
y_not_mem : ¬y ∈ ⊥
y_ne_zero : y ≠ 0
z : { x // x ∈ R⁰ }
x : R
hx : ↑(algebraMap R K) x = ↑z • y
⊢ ↑z • y ∈ I
[PROOFSTEP]
exact smul_mem _ _ y_mem
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
⊢ map h I ≠ 0
[PROOFSTEP]
obtain ⟨x, x_ne_zero, hx⟩ := exists_ne_zero_mem_isInteger hI
[GOAL]
case intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
x : R
x_ne_zero : x ≠ 0
hx : ↑(algebraMap R K) x ∈ I
⊢ map h I ≠ 0
[PROOFSTEP]
contrapose! x_ne_zero with map_eq_zero
[GOAL]
case intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
x : R
hx : ↑(algebraMap R K) x ∈ I
map_eq_zero : map h I = 0
⊢ x = 0
[PROOFSTEP]
refine' IsFractionRing.to_map_eq_zero_iff.mp (eq_zero_iff.mp map_eq_zero _ (mem_map.mpr _))
[GOAL]
case intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁶ : Field K
inst✝⁵ : Field K'
inst✝⁴ : Algebra R K
inst✝³ : IsFractionRing R K
inst✝² : Algebra R K'
inst✝¹ : IsFractionRing R K'
I J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
inst✝ : Nontrivial R
hI : I ≠ 0
x : R
hx : ↑(algebraMap R K) x ∈ I
map_eq_zero : map h I = 0
⊢ ∃ x_1, x_1 ∈ I ∧ ↑h x_1 = ↑(algebraMap R K') x
[PROOFSTEP]
exact ⟨algebraMap R K x, hx, h.commutes x⟩
[GOAL]
R : Type u_1
inst✝⁸ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁷ : CommRing P
inst✝⁶ : Algebra R P
loc : IsLocalization S P
K : Type u_3
K' : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Field K'
inst✝³ : Algebra R K
inst✝² : IsFractionRing R K
inst✝¹ : Algebra R K'
inst✝ : IsFractionRing R K'
I✝ J : FractionalIdeal R⁰ K
h : K →ₐ[R] K'
I : Ideal R
⊢ ↑I = 1 ↔ I = 1
[PROOFSTEP]
simpa only [Ideal.one_eq_top] using coeIdeal_inj
[GOAL]
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
h : 0 = 1
⊢ 1 ∈ 0
[PROOFSTEP]
rw [← (algebraMap R₁ K).map_one]
[GOAL]
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
h : 0 = 1
⊢ ↑(algebraMap R₁ K) 1 ∈ 0
[PROOFSTEP]
simpa only [h] using coe_mem_one R₁⁰ 1
[GOAL]
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I = 0
⊢ 0 = 1
[PROOFSTEP]
convert h
[GOAL]
case h.e'_2
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I = 0
⊢ 0 = I * J
[PROOFSTEP]
simp [hI]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
⊢ IsFractional R₁⁰ (I / J)
[PROOFSTEP]
obtain ⟨y, mem_J, not_mem_zero⟩ := SetLike.exists_of_lt (show 0 < J by simpa only using bot_lt_iff_ne_bot.mpr h)
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
⊢ 0 < J
[PROOFSTEP]
simpa only using bot_lt_iff_ne_bot.mpr h
[GOAL]
case intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
⊢ IsFractional R₁⁰ (I / J)
[PROOFSTEP]
obtain ⟨y', hy'⟩ := hJ y mem_J
[GOAL]
case intro.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
⊢ IsFractional R₁⁰ (I / J)
[PROOFSTEP]
use aI * y'
[GOAL]
case h
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
⊢ aI * y' ∈ R₁⁰ ∧ ∀ (b : K), b ∈ I / J → IsInteger R₁ ((aI * y') • b)
[PROOFSTEP]
constructor
[GOAL]
case h.left
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
⊢ aI * y' ∈ R₁⁰
[PROOFSTEP]
apply (nonZeroDivisors R₁).mul_mem haI (mem_nonZeroDivisors_iff_ne_zero.mpr _)
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
⊢ y' ≠ 0
[PROOFSTEP]
intro y'_eq_zero
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
y'_eq_zero : y' = 0
⊢ False
[PROOFSTEP]
have : algebraMap R₁ K aJ * y = 0 := by rw [← Algebra.smul_def, ← hy', y'_eq_zero, RingHom.map_zero]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
y'_eq_zero : y' = 0
⊢ ↑(algebraMap R₁ K) aJ * y = 0
[PROOFSTEP]
rw [← Algebra.smul_def, ← hy', y'_eq_zero, RingHom.map_zero]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
y'_eq_zero : y' = 0
this : ↑(algebraMap R₁ K) aJ * y = 0
⊢ False
[PROOFSTEP]
have y_zero :=
  (mul_eq_zero.mp this).resolve_left
    (mt ((injective_iff_map_eq_zero (algebraMap R₁ K)).1 (IsFractionRing.injective _ _) _)
      (mem_nonZeroDivisors_iff_ne_zero.mp haJ))
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
y'_eq_zero : y' = 0
this : ↑(algebraMap R₁ K) aJ * y = 0
y_zero : y = 0
⊢ False
[PROOFSTEP]
apply not_mem_zero
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
y'_eq_zero : y' = 0
this : ↑(algebraMap R₁ K) aJ * y = 0
y_zero : y = 0
⊢ y ∈ 0
[PROOFSTEP]
simpa
[GOAL]
case h.right
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
⊢ ∀ (b : K), b ∈ I / J → IsInteger R₁ ((aI * y') • b)
[PROOFSTEP]
intro b hb
[GOAL]
case h.right
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
b : K
hb : b ∈ I / J
⊢ IsInteger R₁ ((aI * y') • b)
[PROOFSTEP]
convert hI _ (hb _ (Submodule.smul_mem _ aJ mem_J)) using 1
[GOAL]
case h.e'_6
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I J : Submodule R₁ K
aI : R₁
haI : aI ∈ R₁⁰
hI : ∀ (b : K), b ∈ I → IsInteger R₁ (aI • b)
aJ : R₁
haJ : aJ ∈ R₁⁰
hJ : ∀ (b : K), b ∈ J → IsInteger R₁ (aJ • b)
h : J ≠ 0
y : K
mem_J : y ∈ J
not_mem_zero : ¬y ∈ 0
y' : R₁
hy' : ↑(algebraMap R₁ K) y' = aJ • y
b : K
hb : b ∈ I / J
⊢ (aI * y') • b = aI • (b * aJ • y)
[PROOFSTEP]
rw [← hy', mul_comm b, ← Algebra.smul_def, mul_smul]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : J ≠ 0
x : K
⊢ x ∈ I / J ↔ ∀ (y : K), y ∈ J → x * y ∈ I
[PROOFSTEP]
rw [div_nonzero h]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : J ≠ 0
x : K
⊢ x ∈ { val := ↑I / ↑J, property := (_ : IsFractional R₁⁰ (↑I / ↑J)) } ↔ ∀ (y : K), y ∈ J → x * y ∈ I
[PROOFSTEP]
exact Submodule.mem_div_iff_forall_mul_mem
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
⊢ I * (1 / I) ≤ 1
[PROOFSTEP]
by_cases hI : I = 0
[GOAL]
case pos
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I = 0
⊢ I * (1 / I) ≤ 1
[PROOFSTEP]
rw [hI, div_zero, mul_zero]
[GOAL]
case pos
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I = 0
⊢ 0 ≤ 1
[PROOFSTEP]
exact zero_le 1
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : ¬I = 0
⊢ I * (1 / I) ≤ 1
[PROOFSTEP]
rw [← coe_le_coe, coe_mul, coe_div hI, coe_one]
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : ¬I = 0
⊢ ↑I * (1 / ↑I) ≤ 1
[PROOFSTEP]
apply Submodule.mul_one_div_le_one
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I ≤ 1
⊢ I ≤ I * (1 / I)
[PROOFSTEP]
by_cases hI_nz : I = 0
[GOAL]
case pos
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I ≤ 1
hI_nz : I = 0
⊢ I ≤ I * (1 / I)
[PROOFSTEP]
rw [hI_nz, div_zero, mul_zero]
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I ≤ 1
hI_nz : ¬I = 0
⊢ I ≤ I * (1 / I)
[PROOFSTEP]
rw [← coe_le_coe, coe_mul, coe_div hI_nz, coe_one]
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : I ≤ 1
hI_nz : ¬I = 0
⊢ ↑I ≤ ↑I * (1 / ↑I)
[PROOFSTEP]
rw [← coe_le_coe, coe_one] at hI 
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
hI : ↑I ≤ 1
hI_nz : ¬I = 0
⊢ ↑I ≤ ↑I * (1 / ↑I)
[PROOFSTEP]
exact Submodule.le_self_mul_one_div hI
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J J' : FractionalIdeal R₁⁰ K
hJ' : J' ≠ 0
⊢ I ≤ J / J' ↔ I * J' ≤ J
[PROOFSTEP]
rw [div_nonzero hJ']
  -- Porting note: this used to be { convert; rw }, flipped the order.
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J J' : FractionalIdeal R₁⁰ K
hJ' : J' ≠ 0
⊢ I ≤ { val := ↑J / ↑J', property := (_ : IsFractional R₁⁰ (↑J / ↑J')) } ↔ I * J' ≤ J
[PROOFSTEP]
rw [← coe_le_coe (I := I * J') (J := J), coe_mul]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J J' : FractionalIdeal R₁⁰ K
hJ' : J' ≠ 0
⊢ I ≤ { val := ↑J / ↑J', property := (_ : IsFractional R₁⁰ (↑J / ↑J')) } ↔ ↑I * ↑J' ≤ ↑J
[PROOFSTEP]
exact Submodule.le_div_iff_mul_le
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
⊢ I / 1 = I
[PROOFSTEP]
rw [div_nonzero (one_ne_zero' (FractionalIdeal R₁⁰ K))]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
⊢ { val := ↑I / ↑1, property := (_ : IsFractional R₁⁰ (↑I / ↑1)) } = I
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
⊢ x✝ ∈ { val := ↑I / ↑1, property := (_ : IsFractional R₁⁰ (↑I / ↑1)) } ↔ x✝ ∈ I
[PROOFSTEP]
constructor
[GOAL]
case a.mp
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
⊢ x✝ ∈ { val := ↑I / ↑1, property := (_ : IsFractional R₁⁰ (↑I / ↑1)) } → x✝ ∈ I
[PROOFSTEP]
intro h
[GOAL]
case a.mpr
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
⊢ x✝ ∈ I → x✝ ∈ { val := ↑I / ↑1, property := (_ : IsFractional R₁⁰ (↑I / ↑1)) }
[PROOFSTEP]
intro h
[GOAL]
case a.mp
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
h : x✝ ∈ { val := ↑I / ↑1, property := (_ : IsFractional R₁⁰ (↑I / ↑1)) }
⊢ x✝ ∈ I
[PROOFSTEP]
simpa using mem_div_iff_forall_mul_mem.mp h 1 ((algebraMap R₁ K).map_one ▸ coe_mem_one R₁⁰ 1)
[GOAL]
case a.mpr
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
h : x✝ ∈ I
⊢ x✝ ∈ { val := ↑I / ↑1, property := (_ : IsFractional R₁⁰ (↑I / ↑1)) }
[PROOFSTEP]
apply mem_div_iff_forall_mul_mem.mpr
[GOAL]
case a.mpr
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
h : x✝ ∈ I
⊢ ∀ (y : K), y ∈ ↑1 → x✝ * y ∈ ↑I
[PROOFSTEP]
rintro y
  ⟨y', _, rfl⟩
      -- Porting note: this used to be { convert; rw }, flipped the order.
[GOAL]
case a.mpr.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
h : x✝ ∈ I
y' : R₁
left✝ : y' ∈ ↑⊤
⊢ x✝ * ↑(Algebra.linearMap R₁ K) y' ∈ ↑I
[PROOFSTEP]
rw [mul_comm, Algebra.linearMap_apply, ← Algebra.smul_def]
[GOAL]
case a.mpr.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J I : FractionalIdeal R₁⁰ K
x✝ : K
h : x✝ ∈ I
y' : R₁
left✝ : y' ∈ ↑⊤
⊢ y' • x✝ ∈ ↑I
[PROOFSTEP]
exact Submodule.smul_mem _ y' h
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
⊢ J = 1 / I
[PROOFSTEP]
have hI : I ≠ 0 := ne_zero_of_mul_eq_one I J h
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ J = 1 / I
[PROOFSTEP]
suffices h' : I * (1 / I) = 1
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
h' : I * (1 / I) = 1
⊢ J = 1 / I
[PROOFSTEP]
exact congr_arg Units.inv <| @Units.ext _ _ (Units.mkOfMulEqOne _ _ h) (Units.mkOfMulEqOne _ _ h') rfl
[GOAL]
case h'
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ I * (1 / I) = 1
[PROOFSTEP]
apply le_antisymm
[GOAL]
case h'.a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ I * (1 / I) ≤ 1
[PROOFSTEP]
apply mul_le.mpr _
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ ∀ (i : K), i ∈ I → ∀ (j : K), j ∈ 1 / I → i * j ∈ 1
[PROOFSTEP]
intro x hx y hy
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
x : K
hx : x ∈ I
y : K
hy : y ∈ 1 / I
⊢ x * y ∈ 1
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
x : K
hx : x ∈ I
y : K
hy : y ∈ 1 / I
⊢ y * x ∈ 1
[PROOFSTEP]
exact (mem_div_iff_of_nonzero hI).mp hy x hx
[GOAL]
case h'.a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ 1 ≤ I * (1 / I)
[PROOFSTEP]
rw [← h]
[GOAL]
case h'.a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ I * J ≤ I * (I * J / I)
[PROOFSTEP]
apply mul_left_mono I
[GOAL]
case h'.a.a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ J ≤ I * J / I
[PROOFSTEP]
apply (le_div_iff_of_nonzero hI).mpr _
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
⊢ ∀ (x : K), x ∈ J → ∀ (y : K), y ∈ I → x * y ∈ I * J
[PROOFSTEP]
intro y hy x hx
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
y : K
hy : y ∈ J
x : K
hx : x ∈ I
⊢ y * x ∈ I * J
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I J : FractionalIdeal R₁⁰ K
h : I * J = 1
hI : I ≠ 0
y : K
hy : y ∈ J
x : K
hx : x ∈ I
⊢ x * y ∈ I * J
[PROOFSTEP]
exact mul_mem_mul hx hy
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I✝ J✝ I : FractionalIdeal R₁⁰ K
x✝ : ∃ J, I * J = 1
J : FractionalIdeal R₁⁰ K
hJ : I * J = 1
⊢ I * (1 / I) = 1
[PROOFSTEP]
rwa [← eq_one_div_of_mul_eq_one_right I J hJ]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝³ : IsDomain R₁
I✝ J✝ : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
I J : FractionalIdeal R₁⁰ K
h : K ≃ₐ[R₁] K'
⊢ map (↑h) (I / J) = map (↑h) I / map (↑h) J
[PROOFSTEP]
by_cases H : J = 0
[GOAL]
case pos
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝³ : IsDomain R₁
I✝ J✝ : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
I J : FractionalIdeal R₁⁰ K
h : K ≃ₐ[R₁] K'
H : J = 0
⊢ map (↑h) (I / J) = map (↑h) I / map (↑h) J
[PROOFSTEP]
rw [H, div_zero, map_zero, div_zero]
[GOAL]
case neg
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝³ : IsDomain R₁
I✝ J✝ : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
I J : FractionalIdeal R₁⁰ K
h : K ≃ₐ[R₁] K'
H : ¬J = 0
⊢ map (↑h) (I / J) = map (↑h) I / map (↑h) J
[PROOFSTEP]
rw [← coeToSubmodule_inj, div_nonzero H, div_nonzero (map_ne_zero _ H)]
[GOAL]
case neg
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝³ : IsDomain R₁
I✝ J✝ : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
I J : FractionalIdeal R₁⁰ K
h : K ≃ₐ[R₁] K'
H : ¬J = 0
⊢ ↑(map ↑h { val := ↑I / ↑J, property := (_ : IsFractional R₁⁰ (↑I / ↑J)) }) =
    ↑{ val := ↑(map (↑h) I) / ↑(map (↑h) J), property := (_ : IsFractional R₁⁰ (↑(map (↑h) I) / ↑(map (↑h) J))) }
[PROOFSTEP]
simp [Submodule.map_div]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝³ : IsDomain R₁
I✝ J : FractionalIdeal R₁⁰ K
K' : Type u_5
inst✝² : Field K'
inst✝¹ : Algebra R₁ K'
inst✝ : IsFractionRing R₁ K'
I : FractionalIdeal R₁⁰ K
h : K ≃ₐ[R₁] K'
⊢ map (↑h) (1 / I) = 1 / map (↑h) I
[PROOFSTEP]
rw [map_div, map_one]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
⊢ I = 0 ∨ I = 1
[PROOFSTEP]
rw [or_iff_not_imp_left]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
⊢ ¬I = 0 → I = 1
[PROOFSTEP]
intro hI
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
⊢ I = 1
[PROOFSTEP]
simp_rw [@SetLike.ext_iff _ _ _ I 1, mem_one_iff]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
⊢ ∀ (x : L), x ∈ I ↔ ∃ x', ↑(algebraMap K L) x' = x
[PROOFSTEP]
intro x
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x : L
⊢ x ∈ I ↔ ∃ x', ↑(algebraMap K L) x' = x
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x : L
⊢ x ∈ I → ∃ x', ↑(algebraMap K L) x' = x
[PROOFSTEP]
intro x_mem
[GOAL]
case mp
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x : L
x_mem : x ∈ I
⊢ ∃ x', ↑(algebraMap K L) x' = x
[PROOFSTEP]
obtain ⟨n, d, rfl⟩ := IsLocalization.mk'_surjective K⁰ x
[GOAL]
case mp.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
n : K
d : { x // x ∈ K⁰ }
x_mem : mk' L n d ∈ I
⊢ ∃ x', ↑(algebraMap K L) x' = mk' L n d
[PROOFSTEP]
refine' ⟨n / d, _⟩
[GOAL]
case mp.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
n : K
d : { x // x ∈ K⁰ }
x_mem : mk' L n d ∈ I
⊢ ↑(algebraMap K L) (n / ↑d) = mk' L n d
[PROOFSTEP]
rw [map_div₀, IsFractionRing.mk'_eq_div]
[GOAL]
case mpr
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x : L
⊢ (∃ x', ↑(algebraMap K L) x' = x) → x ∈ I
[PROOFSTEP]
rintro ⟨x, rfl⟩
[GOAL]
case mpr.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x : K
⊢ ↑(algebraMap K L) x ∈ I
[PROOFSTEP]
obtain ⟨y, y_ne, y_mem⟩ := exists_ne_zero_mem_isInteger hI
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x y : K
y_ne : y ≠ 0
y_mem : ↑(algebraMap K L) y ∈ I
⊢ ↑(algebraMap K L) x ∈ I
[PROOFSTEP]
rw [← div_mul_cancel x y_ne, RingHom.map_mul, ← Algebra.smul_def]
[GOAL]
case mpr.intro.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
K : Type u_4
L : Type u_5
inst✝⁶ : CommRing R₁
inst✝⁵ : Field K
inst✝⁴ : Field L
inst✝³ : Algebra R₁ K
inst✝² : IsFractionRing R₁ K
inst✝¹ : Algebra K L
inst✝ : IsFractionRing K L
I : FractionalIdeal K⁰ L
hI : ¬I = 0
x y : K
y_ne : y ≠ 0
y_mem : ↑(algebraMap K L) y ∈ I
⊢ (x / y) • ↑(algebraMap K L) y ∈ I
[PROOFSTEP]
exact smul_mem (M := L) I (x / y) y_mem
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
⊢ IsFractional R₁⁰ (span R₁ (f '' ↑s))
[PROOFSTEP]
obtain ⟨a', ha'⟩ := IsLocalization.exist_integer_multiples R₁⁰ s f
[GOAL]
case intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
⊢ IsFractional R₁⁰ (span R₁ (f '' ↑s))
[PROOFSTEP]
refine' ⟨a', a'.2, fun x hx => Submodule.span_induction hx _ _ _ _⟩
[GOAL]
case intro.refine'_1
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x : K
hx : x ∈ span R₁ (f '' ↑s)
⊢ ∀ (x : K), x ∈ f '' ↑s → IsInteger R₁ (↑a' • x)
[PROOFSTEP]
rintro _ ⟨i, hi, rfl⟩
[GOAL]
case intro.refine'_1.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x : K
hx : x ∈ span R₁ (f '' ↑s)
i : ι
hi : i ∈ ↑s
⊢ IsInteger R₁ (↑a' • f i)
[PROOFSTEP]
exact ha' i hi
[GOAL]
case intro.refine'_2
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x : K
hx : x ∈ span R₁ (f '' ↑s)
⊢ IsInteger R₁ (↑a' • 0)
[PROOFSTEP]
rw [smul_zero]
[GOAL]
case intro.refine'_2
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x : K
hx : x ∈ span R₁ (f '' ↑s)
⊢ IsInteger R₁ 0
[PROOFSTEP]
exact IsLocalization.isInteger_zero
[GOAL]
case intro.refine'_3
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x : K
hx : x ∈ span R₁ (f '' ↑s)
⊢ ∀ (x y : K), IsInteger R₁ (↑a' • x) → IsInteger R₁ (↑a' • y) → IsInteger R₁ (↑a' • (x + y))
[PROOFSTEP]
intro x y hx hy
[GOAL]
case intro.refine'_3
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x✝ : K
hx✝ : x✝ ∈ span R₁ (f '' ↑s)
x y : K
hx : IsInteger R₁ (↑a' • x)
hy : IsInteger R₁ (↑a' • y)
⊢ IsInteger R₁ (↑a' • (x + y))
[PROOFSTEP]
rw [smul_add]
[GOAL]
case intro.refine'_3
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x✝ : K
hx✝ : x✝ ∈ span R₁ (f '' ↑s)
x y : K
hx : IsInteger R₁ (↑a' • x)
hy : IsInteger R₁ (↑a' • y)
⊢ IsInteger R₁ (↑a' • x + ↑a' • y)
[PROOFSTEP]
exact IsLocalization.isInteger_add hx hy
[GOAL]
case intro.refine'_4
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x : K
hx : x ∈ span R₁ (f '' ↑s)
⊢ ∀ (a : R₁) (x : K), IsInteger R₁ (↑a' • x) → IsInteger R₁ (↑a' • a • x)
[PROOFSTEP]
intro c x hx
[GOAL]
case intro.refine'_4
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x✝ : K
hx✝ : x✝ ∈ span R₁ (f '' ↑s)
c : R₁
x : K
hx : IsInteger R₁ (↑a' • x)
⊢ IsInteger R₁ (↑a' • c • x)
[PROOFSTEP]
rw [smul_comm]
[GOAL]
case intro.refine'_4
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
a' : { x // x ∈ R₁⁰ }
ha' : ∀ (i : ι), i ∈ s → IsInteger R₁ (↑a' • f i)
x✝ : K
hx✝ : x✝ ∈ span R₁ (f '' ↑s)
c : R₁
x : K
hx : IsInteger R₁ (↑a' • x)
⊢ IsInteger R₁ (c • ↑a' • x)
[PROOFSTEP]
exact IsLocalization.isInteger_smul hx
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
⊢ spanFinset R₁ s f = 0 ↔ ∀ (j : ι), j ∈ s → f j = 0
[PROOFSTEP]
simp only [← coeToSubmodule_inj, spanFinset_coe, coe_zero, Submodule.span_eq_bot, Set.mem_image, Finset.mem_coe,
  forall_exists_index, and_imp, forall_apply_eq_imp_iff₂]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
ι : Type u_5
s : Finset ι
f : ι → K
⊢ spanFinset R₁ s f ≠ 0 ↔ ∃ j, j ∈ s ∧ f j ≠ 0
[PROOFSTEP]
simp
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
⊢ ↑(spanSingleton S x) = span R {x}
[PROOFSTEP]
rw [spanSingleton]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
⊢ ↑{ val := span R {x}, property := (_ : IsFractional S (span R {x})) } = span R {x}
[PROOFSTEP]
rfl
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
⊢ x ∈ spanSingleton S y ↔ ∃ z, z • y = x
[PROOFSTEP]
rw [spanSingleton]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
⊢ x ∈ { val := span R {y}, property := (_ : IsFractional S (span R {y})) } ↔ ∃ z, z • y = x
[PROOFSTEP]
exact Submodule.mem_span_singleton
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
I : FractionalIdeal S P
⊢ spanSingleton S x ≤ I ↔ x ∈ I
[PROOFSTEP]
rw [← coe_le_coe, coe_spanSingleton, Submodule.span_singleton_le_iff_mem, mem_coe]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : NoZeroSMulDivisors R P
x y : P
⊢ spanSingleton S x = spanSingleton S y ↔ ∃ z, z • x = y
[PROOFSTEP]
rw [← Submodule.span_singleton_eq_span_singleton, spanSingleton, spanSingleton]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : NoZeroSMulDivisors R P
x y : P
⊢ { val := span R {x}, property := (_ : IsFractional S (span R {x})) } =
      { val := span R {y}, property := (_ : IsFractional S (span R {y})) } ↔
    span R {x} = span R {y}
[PROOFSTEP]
exact Subtype.mk_eq_mk
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
I : FractionalIdeal S P
inst✝ : IsPrincipal ↑I
⊢ I = spanSingleton S (generator ↑I)
[PROOFSTEP]
rw [spanSingleton, ← coeToSubmodule_inj, coe_mk, span_singleton_generator]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
⊢ spanSingleton S 0 = 0
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x✝ : P
⊢ x✝ ∈ spanSingleton S 0 ↔ x✝ ∈ 0
[PROOFSTEP]
simp [Submodule.mem_span_singleton, eq_comm]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
y : P
h : spanSingleton S y = 0
⊢ span R {y} = ⊥
[PROOFSTEP]
simpa using congr_arg Subtype.val h
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
y : P
h : y = 0
⊢ spanSingleton S y = 0
[PROOFSTEP]
simp [h]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
⊢ spanSingleton S 1 = 1
[PROOFSTEP]
ext
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x✝ : P
⊢ x✝ ∈ spanSingleton S 1 ↔ x✝ ∈ 1
[PROOFSTEP]
refine' (mem_spanSingleton S).trans ((exists_congr _).trans (mem_one_iff S).symm)
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x✝ : P
⊢ ∀ (a : R), a • 1 = x✝ ↔ ↑(algebraMap R P) a = x✝
[PROOFSTEP]
intro x'
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x✝ : P
x' : R
⊢ x' • 1 = x✝ ↔ ↑(algebraMap R P) x' = x✝
[PROOFSTEP]
rw [Algebra.smul_def, mul_one]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
⊢ spanSingleton S x * spanSingleton S y = spanSingleton S (x * y)
[PROOFSTEP]
apply coeToSubmodule_injective
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
⊢ (fun I => ↑I) (spanSingleton S x * spanSingleton S y) = (fun I => ↑I) (spanSingleton S (x * y))
[PROOFSTEP]
simp only [coe_mul, coe_spanSingleton, span_mul_span, singleton_mul_singleton]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
n : ℕ
⊢ spanSingleton S x ^ n = spanSingleton S (x ^ n)
[PROOFSTEP]
induction' n with n hn
[GOAL]
case zero
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
⊢ spanSingleton S x ^ Nat.zero = spanSingleton S (x ^ Nat.zero)
[PROOFSTEP]
rw [pow_zero, pow_zero, spanSingleton_one]
[GOAL]
case succ
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
n : ℕ
hn : spanSingleton S x ^ n = spanSingleton S (x ^ n)
⊢ spanSingleton S x ^ Nat.succ n = spanSingleton S (x ^ Nat.succ n)
[PROOFSTEP]
rw [pow_succ, hn, spanSingleton_mul_spanSingleton, pow_succ]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : R
⊢ ↑(Ideal.span {x}) = spanSingleton S (↑(algebraMap R P) x)
[PROOFSTEP]
ext y
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : R
y : P
⊢ y ∈ ↑(Ideal.span {x}) ↔ y ∈ spanSingleton S (↑(algebraMap R P) x)
[PROOFSTEP]
refine' (mem_coeIdeal S).trans (Iff.trans _ (mem_spanSingleton S).symm)
[GOAL]
case a
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : R
y : P
⊢ (∃ x', x' ∈ Ideal.span {x} ∧ ↑(algebraMap R P) x' = y) ↔ ∃ z, z • ↑(algebraMap R P) x = y
[PROOFSTEP]
constructor
[GOAL]
case a.mp
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : R
y : P
⊢ (∃ x', x' ∈ Ideal.span {x} ∧ ↑(algebraMap R P) x' = y) → ∃ z, z • ↑(algebraMap R P) x = y
[PROOFSTEP]
rintro ⟨y', hy', rfl⟩
[GOAL]
case a.mp.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y' : R
hy' : y' ∈ Ideal.span {x}
⊢ ∃ z, z • ↑(algebraMap R P) x = ↑(algebraMap R P) y'
[PROOFSTEP]
obtain ⟨x', rfl⟩ := Submodule.mem_span_singleton.mp hy'
[GOAL]
case a.mp.intro.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x x' : R
hy' : x' • x ∈ Ideal.span {x}
⊢ ∃ z, z • ↑(algebraMap R P) x = ↑(algebraMap R P) (x' • x)
[PROOFSTEP]
use x'
[GOAL]
case h
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x x' : R
hy' : x' • x ∈ Ideal.span {x}
⊢ x' • ↑(algebraMap R P) x = ↑(algebraMap R P) (x' • x)
[PROOFSTEP]
rw [smul_eq_mul, RingHom.map_mul, Algebra.smul_def]
[GOAL]
case a.mpr
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : R
y : P
⊢ (∃ z, z • ↑(algebraMap R P) x = y) → ∃ x', x' ∈ Ideal.span {x} ∧ ↑(algebraMap R P) x' = y
[PROOFSTEP]
rintro ⟨y', rfl⟩
[GOAL]
case a.mpr.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y' : R
⊢ ∃ x', x' ∈ Ideal.span {x} ∧ ↑(algebraMap R P) x' = y' • ↑(algebraMap R P) x
[PROOFSTEP]
refine' ⟨y' * x, Submodule.mem_span_singleton.mpr ⟨y', rfl⟩, _⟩
[GOAL]
case a.mpr.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y' : R
⊢ ↑(algebraMap R P) (y' * x) = y' • ↑(algebraMap R P) x
[PROOFSTEP]
rw [RingHom.map_mul, Algebra.smul_def]
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
⊢ ↑(canonicalEquiv S P P') (spanSingleton S x) =
    spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
[PROOFSTEP]
apply SetLike.ext_iff.mpr
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
⊢ ∀ (x_1 : P'),
    x_1 ∈ ↑(canonicalEquiv S P P') (spanSingleton S x) ↔
      x_1 ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
[PROOFSTEP]
intro y
[GOAL]
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
⊢ y ∈ ↑(canonicalEquiv S P P') (spanSingleton S x) ↔
    y ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
⊢ y ∈ ↑(canonicalEquiv S P P') (spanSingleton S x) →
    y ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
[PROOFSTEP]
intro h
[GOAL]
case mpr
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
⊢ y ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x) →
    y ∈ ↑(canonicalEquiv S P P') (spanSingleton S x)
[PROOFSTEP]
intro h
[GOAL]
case mp
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
h : y ∈ ↑(canonicalEquiv S P P') (spanSingleton S x)
⊢ y ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
[PROOFSTEP]
rw [mem_spanSingleton]
[GOAL]
case mp
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
h : y ∈ ↑(canonicalEquiv S P P') (spanSingleton S x)
⊢ ∃ z, z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x = y
[PROOFSTEP]
obtain ⟨x', hx', rfl⟩ := (mem_canonicalEquiv_apply _ _ _).mp h
[GOAL]
case mp.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x x' : P
hx' : x' ∈ spanSingleton S x
h :
  ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x' ∈
    ↑(canonicalEquiv S P P') (spanSingleton S x)
⊢ ∃ z,
    z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x =
      ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x'
[PROOFSTEP]
obtain ⟨z, rfl⟩ := (mem_spanSingleton _).mp hx'
[GOAL]
case mp.intro.intro.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
z : R
hx' : z • x ∈ spanSingleton S x
h :
  ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x) ∈
    ↑(canonicalEquiv S P P') (spanSingleton S x)
⊢ ∃ z_1,
    z_1 • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x =
      ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x)
[PROOFSTEP]
use z
[GOAL]
case h
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
z : R
hx' : z • x ∈ spanSingleton S x
h :
  ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x) ∈
    ↑(canonicalEquiv S P P') (spanSingleton S x)
⊢ z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x =
    ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x)
[PROOFSTEP]
rw [IsLocalization.map_smul]
[GOAL]
case h
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
z : R
hx' : z • x ∈ spanSingleton S x
h :
  ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x) ∈
    ↑(canonicalEquiv S P P') (spanSingleton S x)
⊢ z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x =
    ↑(RingHom.id R) z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x
[PROOFSTEP]
rfl
[GOAL]
case mpr
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
h : y ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
⊢ y ∈ ↑(canonicalEquiv S P P') (spanSingleton S x)
[PROOFSTEP]
rw [mem_canonicalEquiv_apply]
[GOAL]
case mpr
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
y : P'
h : y ∈ spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
⊢ ∃ y_1,
    y_1 ∈ spanSingleton S x ∧
      ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) y_1 = y
[PROOFSTEP]
obtain ⟨z, rfl⟩ := (mem_spanSingleton _).mp h
[GOAL]
case mpr.intro
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
z : R
h :
  z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x ∈
    spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
⊢ ∃ y,
    y ∈ spanSingleton S x ∧
      ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) y =
        z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x
[PROOFSTEP]
use z • x
[GOAL]
case h
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
z : R
h :
  z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x ∈
    spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
⊢ z • x ∈ spanSingleton S x ∧
    ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x) =
      z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x
[PROOFSTEP]
use(mem_spanSingleton _).mpr ⟨z, rfl⟩
[GOAL]
case right
R : Type u_1
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁶ : CommRing R₁
K : Type u_4
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_5
inst✝² : CommRing P'
inst✝¹ : Algebra R P'
inst✝ : IsLocalization S P'
x : P
z : R
h :
  z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x ∈
    spanSingleton S (↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x)
⊢ ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) (z • x) =
    z • ↑(IsLocalization.map P' (RingHom.id R) (_ : ∀ (y : R), y ∈ S → ↑(RingHom.id R) y ∈ S)) x
[PROOFSTEP]
simp [IsLocalization.map_smul]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
⊢ y ∈ spanSingleton S x * I ↔ ∃ y', y' ∈ I ∧ y = x * y'
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
⊢ y ∈ spanSingleton S x * I → ∃ y', y' ∈ I ∧ y = x * y'
[PROOFSTEP]
intro h
[GOAL]
case mp
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
h : y ∈ spanSingleton S x * I
⊢ ∃ y', y' ∈ I ∧ y = x * y'
[PROOFSTEP]
refine FractionalIdeal.mul_induction_on h ?_ ?_
[GOAL]
case mp.refine_1
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
h : y ∈ spanSingleton S x * I
⊢ ∀ (i : P), i ∈ spanSingleton S x → ∀ (j : P), j ∈ I → ∃ y', y' ∈ I ∧ i * j = x * y'
[PROOFSTEP]
intro x' hx' y' hy'
[GOAL]
case mp.refine_1
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
h : y ∈ spanSingleton S x * I
x' : P
hx' : x' ∈ spanSingleton S x
y' : P
hy' : y' ∈ I
⊢ ∃ y'_1, y'_1 ∈ I ∧ x' * y' = x * y'_1
[PROOFSTEP]
obtain ⟨a, ha⟩ := (mem_spanSingleton S).mp hx'
[GOAL]
case mp.refine_1.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
h : y ∈ spanSingleton S x * I
x' : P
hx' : x' ∈ spanSingleton S x
y' : P
hy' : y' ∈ I
a : R
ha : a • x = x'
⊢ ∃ y'_1, y'_1 ∈ I ∧ x' * y' = x * y'_1
[PROOFSTEP]
use a • y', Submodule.smul_mem (I : Submodule R P) a hy'
[GOAL]
case right
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
h : y ∈ spanSingleton S x * I
x' : P
hx' : x' ∈ spanSingleton S x
y' : P
hy' : y' ∈ I
a : R
ha : a • x = x'
⊢ x' * y' = x * a • y'
[PROOFSTEP]
rw [← ha, Algebra.mul_smul_comm, Algebra.smul_mul_assoc]
[GOAL]
case mp.refine_2
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
h : y ∈ spanSingleton S x * I
⊢ ∀ (x_1 y : P), (∃ y', y' ∈ I ∧ x_1 = x * y') → (∃ y', y' ∈ I ∧ y = x * y') → ∃ y', y' ∈ I ∧ x_1 + y = x * y'
[PROOFSTEP]
rintro _ _ ⟨y, hy, rfl⟩ ⟨y', hy', rfl⟩
[GOAL]
case mp.refine_2.intro.intro.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y✝ : P
I : FractionalIdeal S P
h : y✝ ∈ spanSingleton S x * I
y : P
hy : y ∈ I
y' : P
hy' : y' ∈ I
⊢ ∃ y'_1, y'_1 ∈ I ∧ x * y + x * y' = x * y'_1
[PROOFSTEP]
exact ⟨y + y', Submodule.add_mem (I : Submodule R P) hy hy', (mul_add _ _ _).symm⟩
[GOAL]
case mpr
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x y : P
I : FractionalIdeal S P
⊢ (∃ y', y' ∈ I ∧ y = x * y') → y ∈ spanSingleton S x * I
[PROOFSTEP]
rintro ⟨y', hy', rfl⟩
[GOAL]
case mpr.intro.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
x : P
I : FractionalIdeal S P
y' : P
hy' : y' ∈ I
⊢ x * y' ∈ spanSingleton S x * I
[PROOFSTEP]
exact mul_mem_mul ((mem_spanSingleton S).mpr ⟨1, one_smul _ _⟩) hy'
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
x y : R₁
hy : y ∈ R₁⁰
⊢ spanSingleton R₁⁰ (mk' K x { val := y, property := hy }) * ↑I = ↑J ↔ Ideal.span {x} * I = Ideal.span {y} * J
[PROOFSTEP]
have : spanSingleton R₁⁰ (IsLocalization.mk' _ (1 : R₁) ⟨y, hy⟩) * spanSingleton R₁⁰ (algebraMap R₁ K y) = 1 := by
  rw [spanSingleton_mul_spanSingleton, mul_comm, ← IsLocalization.mk'_eq_mul_mk'_one, IsLocalization.mk'_self,
    spanSingleton_one]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
x y : R₁
hy : y ∈ R₁⁰
⊢ spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }) * spanSingleton R₁⁰ (↑(algebraMap R₁ K) y) = 1
[PROOFSTEP]
rw [spanSingleton_mul_spanSingleton, mul_comm, ← IsLocalization.mk'_eq_mul_mk'_one, IsLocalization.mk'_self,
  spanSingleton_one]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
x y : R₁
hy : y ∈ R₁⁰
this :
  spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }) * spanSingleton R₁⁰ (↑(algebraMap R₁ K) y) = 1
⊢ spanSingleton R₁⁰ (mk' K x { val := y, property := hy }) * ↑I = ↑J ↔ Ideal.span {x} * I = Ideal.span {y} * J
[PROOFSTEP]
let y' : (FractionalIdeal R₁⁰ K)ˣ := Units.mkOfMulEqOne _ _ this
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
x y : R₁
hy : y ∈ R₁⁰
this :
  spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }) * spanSingleton R₁⁰ (↑(algebraMap R₁ K) y) = 1
y' : (FractionalIdeal R₁⁰ K)ˣ :=
  Units.mkOfMulEqOne (spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }))
    (spanSingleton R₁⁰ (↑(algebraMap R₁ K) y)) this
⊢ spanSingleton R₁⁰ (mk' K x { val := y, property := hy }) * ↑I = ↑J ↔ Ideal.span {x} * I = Ideal.span {y} * J
[PROOFSTEP]
have coe_y' : ↑y' = spanSingleton R₁⁰ (IsLocalization.mk' K (1 : R₁) ⟨y, hy⟩) := rfl
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
x y : R₁
hy : y ∈ R₁⁰
this :
  spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }) * spanSingleton R₁⁰ (↑(algebraMap R₁ K) y) = 1
y' : (FractionalIdeal R₁⁰ K)ˣ :=
  Units.mkOfMulEqOne (spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }))
    (spanSingleton R₁⁰ (↑(algebraMap R₁ K) y)) this
coe_y' : ↑y' = spanSingleton R₁⁰ (mk' K 1 { val := y, property := hy })
⊢ spanSingleton R₁⁰ (mk' K x { val := y, property := hy }) * ↑I = ↑J ↔ Ideal.span {x} * I = Ideal.span {y} * J
[PROOFSTEP]
refine' Iff.trans _ (y'.mul_right_inj.trans coeIdeal_inj)
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
x y : R₁
hy : y ∈ R₁⁰
this :
  spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }) * spanSingleton R₁⁰ (↑(algebraMap R₁ K) y) = 1
y' : (FractionalIdeal R₁⁰ K)ˣ :=
  Units.mkOfMulEqOne (spanSingleton R₁⁰ (mk' ((fun x => K) y) 1 { val := y, property := hy }))
    (spanSingleton R₁⁰ (↑(algebraMap R₁ K) y)) this
coe_y' : ↑y' = spanSingleton R₁⁰ (mk' K 1 { val := y, property := hy })
⊢ spanSingleton R₁⁰ (mk' K x { val := y, property := hy }) * ↑I = ↑J ↔
    ↑y' * ↑(Ideal.span {x} * I) = ↑y' * ↑(Ideal.span {y} * J)
[PROOFSTEP]
rw [coe_y', coeIdeal_mul, coeIdeal_span_singleton, coeIdeal_mul, coeIdeal_span_singleton, ← mul_assoc,
  spanSingleton_mul_spanSingleton, ← mul_assoc, spanSingleton_mul_spanSingleton, mul_comm (mk' _ _ _), ←
  IsLocalization.mk'_eq_mul_mk'_one, mul_comm (mk' _ _ _), ← IsLocalization.mk'_eq_mul_mk'_one, IsLocalization.mk'_self,
  spanSingleton_one, one_mul]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
inst✝ : IsFractionRing R₁ K
I J : Ideal R₁
z : K
⊢ spanSingleton R₁⁰ z * ↑I = ↑J ↔ Ideal.span {(sec R₁⁰ z).fst} * I = Ideal.span {↑(sec R₁⁰ z).snd} * J
[PROOFSTEP]
erw [← mk'_mul_coeIdeal_eq_coeIdeal K (IsLocalization.sec R₁⁰ z).2.prop, IsLocalization.mk'_sec K z]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : K
h : x = 0
⊢ 1 / spanSingleton R₁⁰ x = spanSingleton R₁⁰ x⁻¹
[PROOFSTEP]
simp [h]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : K
h : ¬x = 0
⊢ spanSingleton R₁⁰ x * spanSingleton R₁⁰ x⁻¹ = 1
[PROOFSTEP]
simp [h]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
⊢ J / spanSingleton R₁⁰ d = spanSingleton R₁⁰ d⁻¹ * J
[PROOFSTEP]
rw [← one_div_spanSingleton]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
⊢ J / spanSingleton R₁⁰ d = 1 / spanSingleton R₁⁰ d * J
[PROOFSTEP]
by_cases hd : d = 0
[GOAL]
case pos
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : d = 0
⊢ J / spanSingleton R₁⁰ d = 1 / spanSingleton R₁⁰ d * J
[PROOFSTEP]
simp only [hd, spanSingleton_zero, div_zero, zero_mul]
[GOAL]
case neg
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
⊢ J / spanSingleton R₁⁰ d = 1 / spanSingleton R₁⁰ d * J
[PROOFSTEP]
have h_spand : spanSingleton R₁⁰ d ≠ 0 := mt spanSingleton_eq_zero_iff.mp hd
[GOAL]
case neg
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
⊢ J / spanSingleton R₁⁰ d = 1 / spanSingleton R₁⁰ d * J
[PROOFSTEP]
apply le_antisymm
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
⊢ J / spanSingleton R₁⁰ d ≤ 1 / spanSingleton R₁⁰ d * J
[PROOFSTEP]
intro x hx
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : x ∈ (fun a => ↑a) (J / spanSingleton R₁⁰ d)
⊢ x ∈ (fun a => ↑a) (1 / spanSingleton R₁⁰ d * J)
[PROOFSTEP]
dsimp only [val_eq_coe] at hx ⊢
  -- Porting note: get rid of the partially applied `coe`s
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : x ∈ ↑(J / spanSingleton R₁⁰ d)
⊢ x ∈ ↑(1 / spanSingleton R₁⁰ d * J)
[PROOFSTEP]
rw [coe_div h_spand, Submodule.mem_div_iff_forall_mul_mem] at hx 
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : ∀ (y : K), y ∈ ↑(spanSingleton R₁⁰ d) → x * y ∈ ↑J
⊢ x ∈ ↑(1 / spanSingleton R₁⁰ d * J)
[PROOFSTEP]
specialize hx d (mem_spanSingleton_self R₁⁰ d)
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : x * d ∈ ↑J
⊢ x ∈ ↑(1 / spanSingleton R₁⁰ d * J)
[PROOFSTEP]
have h_xd : x = d⁻¹ * (x * d) := by field_simp
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : x * d ∈ ↑J
⊢ x = d⁻¹ * (x * d)
[PROOFSTEP]
field_simp
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : x * d ∈ ↑J
h_xd : x = d⁻¹ * (x * d)
⊢ x ∈ ↑(1 / spanSingleton R₁⁰ d * J)
[PROOFSTEP]
rw [coe_mul, one_div_spanSingleton, h_xd]
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
x : K
hx : x * d ∈ ↑J
h_xd : x = d⁻¹ * (x * d)
⊢ d⁻¹ * (x * d) ∈ ↑(spanSingleton R₁⁰ d⁻¹) * ↑J
[PROOFSTEP]
exact Submodule.mul_mem_mul (mem_spanSingleton_self R₁⁰ _) hx
[GOAL]
case neg.a
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
J : FractionalIdeal R₁⁰ K
d : K
hd : ¬d = 0
h_spand : spanSingleton R₁⁰ d ≠ 0
⊢ 1 / spanSingleton R₁⁰ d * J ≤ J / spanSingleton R₁⁰ d
[PROOFSTEP]
rw [le_div_iff_mul_le h_spand, mul_assoc, mul_left_comm, one_div_spanSingleton, spanSingleton_mul_spanSingleton,
  inv_mul_cancel hd, spanSingleton_one, mul_one]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
⊢ ∃ a aI, a ≠ 0 ∧ I = spanSingleton R₁⁰ (↑(algebraMap R₁ K) a)⁻¹ * ↑aI
[PROOFSTEP]
obtain ⟨a_inv, nonzero, ha⟩ := I.isFractional
[GOAL]
case intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
⊢ ∃ a aI, a ≠ 0 ∧ I = spanSingleton R₁⁰ (↑(algebraMap R₁ K) a)⁻¹ * ↑aI
[PROOFSTEP]
have nonzero := mem_nonZeroDivisors_iff_ne_zero.mp nonzero
[GOAL]
case intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
⊢ ∃ a aI, a ≠ 0 ∧ I = spanSingleton R₁⁰ (↑(algebraMap R₁ K) a)⁻¹ * ↑aI
[PROOFSTEP]
have map_a_nonzero : algebraMap R₁ K a_inv ≠ 0 := mt IsFractionRing.to_map_eq_zero_iff.mp nonzero
[GOAL]
case intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
⊢ ∃ a aI, a ≠ 0 ∧ I = spanSingleton R₁⁰ (↑(algebraMap R₁ K) a)⁻¹ * ↑aI
[PROOFSTEP]
refine'
  ⟨a_inv, Submodule.comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (algebraMap R₁ K a_inv) * I), nonzero,
    ext fun x => Iff.trans ⟨_, _⟩ mem_singleton_mul.symm⟩
[GOAL]
case intro.intro.refine'_1
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
⊢ x ∈ I →
    ∃ y',
      y' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)) ∧
        x = (↑(algebraMap R₁ K) a_inv)⁻¹ * y'
[PROOFSTEP]
intro hx
[GOAL]
case intro.intro.refine'_1
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
hx : x ∈ I
⊢ ∃ y',
    y' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)) ∧
      x = (↑(algebraMap R₁ K) a_inv)⁻¹ * y'
[PROOFSTEP]
obtain ⟨x', hx'⟩ := ha x hx
[GOAL]
case intro.intro.refine'_1.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
hx : x ∈ I
x' : R₁
hx' : ↑(algebraMap R₁ K) x' = a_inv • x
⊢ ∃ y',
    y' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)) ∧
      x = (↑(algebraMap R₁ K) a_inv)⁻¹ * y'
[PROOFSTEP]
rw [Algebra.smul_def] at hx' 
[GOAL]
case intro.intro.refine'_1.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
hx : x ∈ I
x' : R₁
hx' : ↑(algebraMap R₁ K) x' = ↑(algebraMap R₁ K) a_inv * x
⊢ ∃ y',
    y' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)) ∧
      x = (↑(algebraMap R₁ K) a_inv)⁻¹ * y'
[PROOFSTEP]
refine' ⟨algebraMap R₁ K x', (mem_coeIdeal _).mpr ⟨x', mem_singleton_mul.mpr _, rfl⟩, _⟩
[GOAL]
case intro.intro.refine'_1.intro.refine'_1
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
hx : x ∈ I
x' : R₁
hx' : ↑(algebraMap R₁ K) x' = ↑(algebraMap R₁ K) a_inv * x
⊢ ∃ y', y' ∈ I ∧ ↑(Algebra.linearMap R₁ K) x' = ↑(algebraMap R₁ K) a_inv * y'
[PROOFSTEP]
exact ⟨x, hx, hx'⟩
[GOAL]
case intro.intro.refine'_1.intro.refine'_2
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
hx : x ∈ I
x' : R₁
hx' : ↑(algebraMap R₁ K) x' = ↑(algebraMap R₁ K) a_inv * x
⊢ x = (↑(algebraMap R₁ K) a_inv)⁻¹ * ↑(algebraMap R₁ K) x'
[PROOFSTEP]
rw [hx', ← mul_assoc, inv_mul_cancel map_a_nonzero, one_mul]
[GOAL]
case intro.intro.refine'_2
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x : K
⊢ (∃ y',
      y' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)) ∧
        x = (↑(algebraMap R₁ K) a_inv)⁻¹ * y') →
    x ∈ I
[PROOFSTEP]
rintro ⟨y, hy, rfl⟩
[GOAL]
case intro.intro.refine'_2.intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
y : K
hy : y ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I))
⊢ (↑(algebraMap R₁ K) a_inv)⁻¹ * y ∈ I
[PROOFSTEP]
obtain ⟨x', hx', rfl⟩ := (mem_coeIdeal _).mp hy
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x' : R₁
hx' : x' ∈ comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)
hy : ↑(algebraMap R₁ K) x' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I))
⊢ (↑(algebraMap R₁ K) a_inv)⁻¹ * ↑(algebraMap R₁ K) x' ∈ I
[PROOFSTEP]
obtain ⟨y', hy', hx'⟩ := mem_singleton_mul.mp hx'
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro.intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x' : R₁
hx'✝ : x' ∈ comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)
hy : ↑(algebraMap R₁ K) x' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I))
y' : K
hy' : y' ∈ I
hx' : ↑(Algebra.linearMap R₁ K) x' = ↑(algebraMap R₁ K) a_inv * y'
⊢ (↑(algebraMap R₁ K) a_inv)⁻¹ * ↑(algebraMap R₁ K) x' ∈ I
[PROOFSTEP]
rw [Algebra.linearMap_apply] at hx' 
[GOAL]
case intro.intro.refine'_2.intro.intro.intro.intro.intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
I : FractionalIdeal R₁⁰ K
a_inv : R₁
nonzero✝ : a_inv ∈ R₁⁰
ha : ∀ (b : K), b ∈ ↑I → IsInteger R₁ (a_inv • b)
nonzero : a_inv ≠ 0
map_a_nonzero : ↑(algebraMap R₁ K) a_inv ≠ 0
x' : R₁
hx'✝ : x' ∈ comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I)
hy : ↑(algebraMap R₁ K) x' ∈ ↑(comap (Algebra.linearMap R₁ K) ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) a_inv) * I))
y' : K
hy' : y' ∈ I
hx' : ↑(algebraMap R₁ K) x' = ↑(algebraMap R₁ K) a_inv * y'
⊢ (↑(algebraMap R₁ K) a_inv)⁻¹ * ↑(algebraMap R₁ K) x' ∈ I
[PROOFSTEP]
rwa [hx', ← mul_assoc, inv_mul_cancel map_a_nonzero, one_mul]
[GOAL]
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
⊢ IsPrincipal ↑I
[PROOFSTEP]
obtain ⟨a, aI, -, ha⟩ := exists_eq_spanSingleton_mul I
[GOAL]
case intro.intro.intro
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
⊢ IsPrincipal ↑I
[PROOFSTEP]
use(algebraMap R K a)⁻¹ * algebraMap R K (generator aI)
[GOAL]
case h
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
⊢ ↑I = span R {(↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI)}
[PROOFSTEP]
suffices I = spanSingleton R⁰ ((algebraMap R K a)⁻¹ * algebraMap R K (generator aI))
  by
  rw [spanSingleton] at this 
  exact congr_arg Subtype.val this
[GOAL]
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
this : I = spanSingleton R⁰ ((↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI))
⊢ ↑I = span R {(↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI)}
[PROOFSTEP]
rw [spanSingleton] at this 
[GOAL]
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
this :
  I =
    { val := span R {(↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI)},
      property := (_ : IsFractional R⁰ (span R {(↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI)})) }
⊢ ↑I = span R {(↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI)}
[PROOFSTEP]
exact congr_arg Subtype.val this
[GOAL]
case h
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
⊢ I = spanSingleton R⁰ ((↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI))
[PROOFSTEP]
conv_lhs => rw [ha, ← span_singleton_generator aI]
[GOAL]
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
| I
[PROOFSTEP]
rw [ha, ← span_singleton_generator aI]
[GOAL]
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
| I
[PROOFSTEP]
rw [ha, ← span_singleton_generator aI]
[GOAL]
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
| I
[PROOFSTEP]
rw [ha, ← span_singleton_generator aI]
[GOAL]
case h
R✝ : Type u_1
inst✝¹² : CommRing R✝
S : Submonoid R✝
P : Type u_2
inst✝¹¹ : CommRing P
inst✝¹⁰ : Algebra R✝ P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁹ : CommRing R₁
K : Type u_4
inst✝⁸ : Field K
inst✝⁷ : Algebra R₁ K
inst✝⁶ : IsFractionRing R₁ K
inst✝⁵ : IsDomain R₁
R : Type ?u.1660245
inst✝⁴ : CommRing R
inst✝³ : IsDomain R
inst✝² : IsPrincipalIdealRing R
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
I : FractionalIdeal R⁰ K
a : R
aI : Ideal R
ha : I = spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑aI
⊢ spanSingleton R⁰ (↑(algebraMap R K) a)⁻¹ * ↑(span R {generator aI}) =
    spanSingleton R⁰ ((↑(algebraMap R K) a)⁻¹ * ↑(algebraMap R K) (generator aI))
[PROOFSTEP]
rw [Ideal.submodule_span_eq, coeIdeal_span_singleton (generator aI), spanSingleton_mul_spanSingleton]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
⊢ (∀ {zI : P}, zI ∈ I → zI ∈ spanSingleton S x * J) ↔ ∀ (zI : P), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zJ = zI
[PROOFSTEP]
simp only [mem_singleton_mul, eq_comm]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
⊢ spanSingleton S x * I ≤ J ↔ ∀ (z : P), z ∈ I → x * z ∈ J
[PROOFSTEP]
simp only [mul_le, mem_singleton_mul, mem_spanSingleton]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
⊢ (∀ (i : P), (∃ z, z • x = i) → ∀ (j : P), j ∈ I → i * j ∈ J) ↔ ∀ (z : P), z ∈ I → x * z ∈ J
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
⊢ (∀ (i : P), (∃ z, z • x = i) → ∀ (j : P), j ∈ I → i * j ∈ J) → ∀ (z : P), z ∈ I → x * z ∈ J
[PROOFSTEP]
intro h zI hzI
[GOAL]
case mp
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
h : ∀ (i : P), (∃ z, z • x = i) → ∀ (j : P), j ∈ I → i * j ∈ J
zI : P
hzI : zI ∈ I
⊢ x * zI ∈ J
[PROOFSTEP]
exact h x ⟨1, one_smul _ _⟩ zI hzI
[GOAL]
case mpr
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
⊢ (∀ (z : P), z ∈ I → x * z ∈ J) → ∀ (i : P), (∃ z, z • x = i) → ∀ (j : P), j ∈ I → i * j ∈ J
[PROOFSTEP]
rintro h _ ⟨z, rfl⟩ zI hzI
[GOAL]
case mpr.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
h : ∀ (z : P), z ∈ I → x * z ∈ J
z : R
zI : P
hzI : zI ∈ I
⊢ z • x * zI ∈ J
[PROOFSTEP]
rw [Algebra.smul_mul_assoc]
[GOAL]
case mpr.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
h : ∀ (z : P), z ∈ I → x * z ∈ J
z : R
zI : P
hzI : zI ∈ I
⊢ z • (x * zI) ∈ J
[PROOFSTEP]
exact Submodule.smul_mem J.1 _ (h zI hzI)
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
inst✝¹ : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : P
I J : FractionalIdeal S P
⊢ I = spanSingleton S x * J ↔ (∀ (zI : P), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zJ = zI) ∧ ∀ (z : P), z ∈ J → x * z ∈ I
[PROOFSTEP]
simp only [le_antisymm_iff, le_spanSingleton_mul_iff, spanSingleton_mul_le_iff]
[GOAL]
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
I : Submodule R₁ K
hI : I ≤ ↑0
⊢ FG I
[PROOFSTEP]
rw [coe_zero] at hI 
[GOAL]
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
I : Submodule R₁ K
hI : I ≤ ⊥
⊢ FG I
[PROOFSTEP]
rw [le_bot_iff.mp hI]
[GOAL]
R : Type u_1
inst✝⁵ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁴ : CommRing P
inst✝³ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝² : CommRing R₁
K : Type u_4
inst✝¹ : Field K
inst✝ : Algebra R₁ K
frac : IsFractionRing R₁ K
I : Submodule R₁ K
hI : I ≤ ⊥
⊢ FG ⊥
[PROOFSTEP]
exact fg_bot
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsNoetherianRing R₁
I : Ideal R₁
⊢ IsNoetherian R₁ { x // x ∈ ↑↑I }
[PROOFSTEP]
rw [isNoetherian_iff]
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsNoetherianRing R₁
I : Ideal R₁
⊢ ∀ (J : FractionalIdeal R₁⁰ K), J ≤ ↑I → FG ↑J
[PROOFSTEP]
intro J hJ
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsNoetherianRing R₁
I : Ideal R₁
J : FractionalIdeal R₁⁰ K
hJ : J ≤ ↑I
⊢ FG ↑J
[PROOFSTEP]
obtain ⟨J, rfl⟩ := le_one_iff_exists_coeIdeal.mp (le_trans hJ coeIdeal_le_one)
[GOAL]
case intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsNoetherianRing R₁
I J : Ideal R₁
hJ : ↑J ≤ ↑I
⊢ FG ↑↑J
[PROOFSTEP]
exact (IsNoetherian.noetherian J).map _
[GOAL]
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }
[PROOFSTEP]
by_cases hx : x = 0
[GOAL]
case pos
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : x = 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }
[PROOFSTEP]
rw [hx, RingHom.map_zero, inv_zero, spanSingleton_zero, zero_mul]
[GOAL]
case pos
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : x = 0
⊢ IsNoetherian R₁ { x // x ∈ ↑0 }
[PROOFSTEP]
exact isNoetherian_zero
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : ¬x = 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }
[PROOFSTEP]
have h_gx : algebraMap R₁ K x ≠ 0 :=
  mt ((injective_iff_map_eq_zero (algebraMap R₁ K)).mp (IsFractionRing.injective _ _) x) hx
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }
[PROOFSTEP]
have h_spanx : spanSingleton R₁⁰ (algebraMap R₁ K x) ≠ 0 := spanSingleton_ne_zero_iff.mpr h_gx
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : IsNoetherian R₁ { x // x ∈ ↑I }
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
⊢ IsNoetherian R₁ { x_1 // x_1 ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I) }
[PROOFSTEP]
rw [isNoetherian_iff] at hI ⊢
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
⊢ ∀ (J : FractionalIdeal R₁⁰ ((fun x => K) x)), J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I → FG ↑J
[PROOFSTEP]
intro J hJ
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
⊢ FG ↑J
[PROOFSTEP]
rw [← div_spanSingleton, le_div_iff_mul_le h_spanx] at hJ 
[GOAL]
case neg
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ✝ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
hJ : J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≤ I
⊢ FG ↑J
[PROOFSTEP]
obtain ⟨s, hs⟩ := hI _ hJ
[GOAL]
case neg.intro
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ✝ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
hJ : J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≤ I
s : Finset K
hs : span R₁ ↑s = ↑(J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x))
⊢ FG ↑J
[PROOFSTEP]
use s * {(algebraMap R₁ K x)⁻¹}
[GOAL]
case h
R : Type u_1
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝³ : CommRing R₁
K : Type u_4
inst✝² : Field K
inst✝¹ : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝ : IsDomain R₁
x : R₁
I : FractionalIdeal R₁⁰ K
hI : ∀ (J : FractionalIdeal R₁⁰ K), J ≤ I → FG ↑J
hx : ¬x = 0
h_gx : ↑(algebraMap R₁ K) x ≠ 0
h_spanx : spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≠ 0
J : FractionalIdeal R₁⁰ ((fun x => K) x)
hJ✝ : J ≤ spanSingleton R₁⁰ (↑(algebraMap R₁ K) x)⁻¹ * I
hJ : J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x) ≤ I
s : Finset K
hs : span R₁ ↑s = ↑(J * spanSingleton R₁⁰ (↑(algebraMap R₁ K) x))
⊢ span R₁ ↑(s * {(↑(algebraMap R₁ K) x)⁻¹}) = ↑J
[PROOFSTEP]
rw [Finset.coe_mul, Finset.coe_singleton, ← span_mul_span, hs, ← coe_spanSingleton R₁⁰, ← coe_mul, mul_assoc,
  spanSingleton_mul_spanSingleton, mul_inv_cancel h_gx, spanSingleton_one, mul_one]
[GOAL]
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝¹ : IsDomain R₁
inst✝ : IsNoetherianRing R₁
I : FractionalIdeal R₁⁰ K
⊢ IsNoetherian R₁ { x // x ∈ ↑I }
[PROOFSTEP]
obtain ⟨d, J, _, rfl⟩ := exists_eq_spanSingleton_mul I
[GOAL]
case intro.intro.intro
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝¹ : IsDomain R₁
inst✝ : IsNoetherianRing R₁
d : R₁
J : Ideal R₁
left✝ : d ≠ 0
⊢ IsNoetherian R₁ { x // x ∈ ↑(spanSingleton R₁⁰ (↑(algebraMap R₁ K) d)⁻¹ * ↑J) }
[PROOFSTEP]
apply isNoetherian_spanSingleton_inv_to_map_mul
[GOAL]
case intro.intro.intro.hI
R : Type u_1
inst✝⁷ : CommRing R
S : Submonoid R
P : Type u_2
inst✝⁶ : CommRing P
inst✝⁵ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_3
inst✝⁴ : CommRing R₁
K : Type u_4
inst✝³ : Field K
inst✝² : Algebra R₁ K
frac : IsFractionRing R₁ K
inst✝¹ : IsDomain R₁
inst✝ : IsNoetherianRing R₁
d : R₁
J : Ideal R₁
left✝ : d ≠ 0
⊢ IsNoetherian R₁ { x // x ∈ ↑↑J }
[PROOFSTEP]
apply isNoetherian_coeIdeal
