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

tactic: rw [mem_canonicalEquiv_apply, canonicalEquiv, mapEquiv_symm, mapEquiv_apply,
  mem_map]
state_before: R : Type u_3
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_1
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_2
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type ?u.875043
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

tactic: exact ⟨fun ⟨y, mem, Eq⟩ => ⟨y, mem, Eq⟩, fun ⟨y, mem, Eq⟩ => ⟨y, mem, Eq⟩⟩
state_before: R : Type u_3
inst✝⁶ : CommRing R
S : Submonoid R
P : Type u_1
inst✝⁵ : CommRing P
inst✝⁴ : Algebra R P
loc : IsLocalization S P
P' : Type u_2
inst✝³ : CommRing P'
inst✝² : Algebra R P'
loc' : IsLocalization S P'
P'' : Type ?u.875043
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