Theorem: FractionalIdeal.mk'_mul_coeIdeal_eq_coeIdeal
File: Mathlib/RingTheory/FractionalIdeal.lean

tactic: 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]
state_before: R : Type ?u.1455743
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1455950
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
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

tactic: let y' : (FractionalIdeal R₁⁰ K)ˣ := Units.mkOfMulEqOne _ _ this
state_before: R : Type ?u.1455743
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1455950
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
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

tactic: have coe_y' : ↑y' = spanSingleton R₁⁰ (IsLocalization.mk' K (1 : R₁) ⟨y, hy⟩) := rfl
state_before: R : Type ?u.1455743
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1455950
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
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

tactic: refine' Iff.trans _ (y'.mul_right_inj.trans coeIdeal_inj)
state_before: R : Type ?u.1455743
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1455950
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
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

tactic: 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]
state_before: R : Type ?u.1455743
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1455950
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
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)

tactic: rw [spanSingleton_mul_spanSingleton, mul_comm, ← IsLocalization.mk'_eq_mul_mk'_one,
  IsLocalization.mk'_self, spanSingleton_one]
state_before: R : Type ?u.1455743
inst✝⁶ : CommRing R
S : Submonoid R
P : Type ?u.1455950
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
R₁ : Type u_1
inst✝³ : CommRing R₁
K : Type u_2
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