Theorem: HomogeneousLocalization.NumDenSameDeg.ext
File: Mathlib/RingTheory/GradedAlgebra/HomogeneousLocalization.lean

tactic: rcases c1 with ⟨i1, ⟨n1, hn1⟩, ⟨d1, hd1⟩, h1⟩
state_before: ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
c1 c2 : NumDenSameDeg 𝒜 x
hdeg : c1.deg = c2.deg
hnum : ↑c1.num = ↑c2.num
hden : ↑c1.den = ↑c2.den
⊢ c1 = c2

tactic: rcases c2 with ⟨i2, ⟨n2, hn2⟩, ⟨d2, hd2⟩, h2⟩
state_before: case mk.mk.mk
ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
c2 : NumDenSameDeg 𝒜 x
i1 : ι
n1 : A
hn1 : n1 ∈ 𝒜 i1
d1 : A
hd1 : d1 ∈ 𝒜 i1
h1 : ↑{ val := d1, property := hd1 } ∈ x
hdeg :
  { deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 }.deg =
    c2.deg
hnum :
  ↑{ deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 }.num =
    ↑c2.num
hden :
  ↑{ deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 }.den =
    ↑c2.den
⊢ { deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 } = c2

tactic: dsimp only [Subtype.coe_mk] at *
state_before: case mk.mk.mk.mk.mk.mk
ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
i1 : ι
n1 : A
hn1 : n1 ∈ 𝒜 i1
d1 : A
hd1 : d1 ∈ 𝒜 i1
h1 : ↑{ val := d1, property := hd1 } ∈ x
i2 : ι
n2 : A
hn2 : n2 ∈ 𝒜 i2
d2 : A
hd2 : d2 ∈ 𝒜 i2
h2 : ↑{ val := d2, property := hd2 } ∈ x
hdeg :
  { deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 }.deg =
    { deg := i2, num := { val := n2, property := hn2 }, den := { val := d2, property := hd2 }, den_mem := h2 }.deg
hnum :
  ↑{ deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 }.num =
    ↑{ deg := i2, num := { val := n2, property := hn2 }, den := { val := d2, property := hd2 }, den_mem := h2 }.num
hden :
  ↑{ deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 }.den =
    ↑{ deg := i2, num := { val := n2, property := hn2 }, den := { val := d2, property := hd2 }, den_mem := h2 }.den
⊢ { deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 } =
    { deg := i2, num := { val := n2, property := hn2 }, den := { val := d2, property := hd2 }, den_mem := h2 }

tactic: subst hdeg hnum hden
state_before: case mk.mk.mk.mk.mk.mk
ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
i1 : ι
n1 : A
hn1 : n1 ∈ 𝒜 i1
d1 : A
hd1 : d1 ∈ 𝒜 i1
h1 : ↑{ val := d1, property := hd1 } ∈ x
i2 : ι
n2 : A
hn2 : n2 ∈ 𝒜 i2
d2 : A
hd2 : d2 ∈ 𝒜 i2
h2 : ↑{ val := d2, property := hd2 } ∈ x
hdeg : i1 = i2
hnum : n1 = n2
hden : d1 = d2
⊢ { deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 } =
    { deg := i2, num := { val := n2, property := hn2 }, den := { val := d2, property := hd2 }, den_mem := h2 }

tactic: congr
state_before: case mk.mk.mk.mk.mk.mk
ι : Type u_1
R : Type u_2
A : Type u_3
inst✝⁵ : AddCommMonoid ι
inst✝⁴ : DecidableEq ι
inst✝³ : CommRing R
inst✝² : CommRing A
inst✝¹ : Algebra R A
𝒜 : ι → Submodule R A
inst✝ : GradedAlgebra 𝒜
x : Submonoid A
i1 : ι
n1 : A
hn1 : n1 ∈ 𝒜 i1
d1 : A
hd1 : d1 ∈ 𝒜 i1
h1 : ↑{ val := d1, property := hd1 } ∈ x
hn2 : n1 ∈ 𝒜 i1
hd2 : d1 ∈ 𝒜 i1
h2 : ↑{ val := d1, property := hd2 } ∈ x
⊢ { deg := i1, num := { val := n1, property := hn1 }, den := { val := d1, property := hd1 }, den_mem := h1 } =
    { deg := i1, num := { val := n1, property := hn2 }, den := { val := d1, property := hd2 }, den_mem := h2 }