Theorem: FractionalIdeal.canonicalEquiv_spanSingleton
File: Mathlib/RingTheory/FractionalIdeal.lean

tactic: apply SetLike.ext_iff.mpr
state_before: R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: intro y
state_before: R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: constructor <;> intro h
state_before: R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: rw [mem_spanSingleton]
state_before: case mp
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: obtain ⟨x', hx', rfl⟩ := (mem_canonicalEquiv_apply _ _ _).mp h
state_before: case mp
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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

tactic: obtain ⟨z, rfl⟩ := (mem_spanSingleton _).mp hx'
state_before: case mp.intro.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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'

tactic: use z
state_before: case mp.intro.intro.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: rw [IsLocalization.map_smul]
state_before: case mp.intro.intro.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: rfl
state_before: case mp.intro.intro.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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

tactic: rw [mem_canonicalEquiv_apply]
state_before: case mpr
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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)

tactic: obtain ⟨z, rfl⟩ := (mem_spanSingleton _).mp h
state_before: case mpr
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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

tactic: use z • x
state_before: case mpr.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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

tactic: use (mem_spanSingleton _).mpr ⟨z, rfl⟩
state_before: case mpr.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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

tactic: simp [IsLocalization.map_smul]
state_before: case mpr.intro
R : Type u_2
inst✝⁹ : CommRing R
S : Submonoid R
P : Type u_3
inst✝⁸ : CommRing P
inst✝⁷ : Algebra R P
loc : IsLocalization S P
R₁ : Type ?u.1366656
inst✝⁶ : CommRing R₁
K : Type ?u.1366662
inst✝⁵ : Field K
inst✝⁴ : Algebra R₁ K
inst✝³ : IsFractionRing R₁ K
P' : Type u_1
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