Theorem: Set.unitEquivUnitsInteger_symm_apply_coe
File: Mathlib/RingTheory/DedekindDomain/SInteger.lean

Proof steps:
state_before: R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x : (↥(S.integer K))ˣ
v : HeightOneSpectrum R
hv : v ∉ S
⊢ v.valuation ↑(Units.mk0 ↑↑x ⋯) * v.valuation ↑x.inv = 1
state_after: no goals
tactic: rw [Units.val_mk0, ← map_mul, Subtype.mk_eq_mk.mp x.val_inv, v.valuation.map_one]
state_before: R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝ : ↥(S.unit K)
⊢ (fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩) ((fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ }) x✝) =
    x✝
state_after: case a.a
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝ : ↥(S.unit K)
⊢ ↑↑((fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩)
          ((fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ }) x✝)) =
    ↑↑x✝
tactic: ext
state_before: case a.a
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝ : ↥(S.unit K)
⊢ ↑↑((fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩)
          ((fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ }) x✝)) =
    ↑↑x✝
state_after: no goals
tactic: rfl
state_before: R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝ : (↥(S.integer K))ˣ
⊢ (fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ }) ((fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩) x✝) =
    x✝
state_after: case a.a
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝ : (↥(S.integer K))ˣ
⊢ ↑↑((fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ })
          ((fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩) x✝)) =
    ↑↑x✝
tactic: ext
state_before: case a.a
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝ : (↥(S.integer K))ˣ
⊢ ↑↑((fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ })
          ((fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩) x✝)) =
    ↑↑x✝
state_after: no goals
tactic: rfl
state_before: R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝¹ x✝ : ↥(S.unit K)
⊢ { toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
          invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
      (x✝¹ * x✝) =
    { toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
            invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
        x✝¹ *
      { toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
            invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
        x✝
state_after: case a.a
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝¹ x✝ : ↥(S.unit K)
⊢ ↑↑({ toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
              invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
          (x✝¹ * x✝)) =
    ↑↑({ toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
                invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
            x✝¹ *
          { toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
                invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
            x✝)
tactic: ext
state_before: case a.a
R : Type u
inst✝⁴ : CommRing R
inst✝³ : IsDedekindDomain R
S : Set (HeightOneSpectrum R)
K : Type v
inst✝² : Field K
inst✝¹ : Algebra R K
inst✝ : IsFractionRing R K
x✝¹ x✝ : ↥(S.unit K)
⊢ ↑↑({ toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
              invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
          (x✝¹ * x✝)) =
    ↑↑({ toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
                invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
            x✝¹ *
          { toFun := fun x => { val := ⟨↑↑x, ⋯⟩, inv := ⟨↑(↑x)⁻¹, ⋯⟩, val_inv := ⋯, inv_val := ⋯ },
                invFun := fun x => ⟨Units.mk0 ↑↑x ⋯, ⋯⟩, left_inv := ⋯, right_inv := ⋯ }.toFun
            x✝)
state_after: no goals
tactic: rfl