Theorem: Ideal.quotientToQuotientRangePowQuotSucc_injective
File: Mathlib/NumberTheory/RamificationInertia.lean

tactic: have Pe_le_Pi1 : P ^ e ≤ P ^ (i + 1) := Ideal.pow_le_pow hi
state_before: R : Type u
inst✝⁴ : CommRing R
S : Type v
inst✝³ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
hfp : NeZero e
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : IsPrime P
i : ℕ
hi : i < e
a : S
a_mem : a ∈ P ^ i
a_not_mem : ¬a ∈ P ^ (i + 1)
x✝ : S ⧸ P
x : S
y✝ : S ⧸ P
y : S
h :
  ↑(quotientToQuotientRangePowQuotSucc f p P a_mem) (Quotient.mk'' x) =
    ↑(quotientToQuotientRangePowQuotSucc f p P a_mem) (Quotient.mk'' y)
⊢ Quotient.mk'' x = Quotient.mk'' y

tactic: simp only [Submodule.Quotient.mk''_eq_mk, quotientToQuotientRangePowQuotSucc_mk,
  Submodule.Quotient.eq, LinearMap.mem_range, Subtype.ext_iff, Subtype.coe_mk,
  Submodule.coe_sub] at h ⊢
state_before: R : Type u
inst✝⁴ : CommRing R
S : Type v
inst✝³ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
hfp : NeZero e
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : IsPrime P
i : ℕ
hi : i < e
a : S
a_mem : a ∈ P ^ i
a_not_mem : ¬a ∈ P ^ (i + 1)
x✝ : S ⧸ P
x : S
y✝ : S ⧸ P
y : S
h :
  ↑(quotientToQuotientRangePowQuotSucc f p P a_mem) (Quotient.mk'' x) =
    ↑(quotientToQuotientRangePowQuotSucc f p P a_mem) (Quotient.mk'' y)
Pe_le_Pi1 : P ^ e ≤ P ^ (i + 1)
⊢ Quotient.mk'' x = Quotient.mk'' y

tactic: rcases h with ⟨⟨⟨z⟩, hz⟩, h⟩
state_before: R : Type u
inst✝⁴ : CommRing R
S : Type v
inst✝³ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
hfp : NeZero e
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : IsPrime P
i : ℕ
hi : i < e
a : S
a_mem : a ∈ P ^ i
a_not_mem : ¬a ∈ P ^ (i + 1)
x✝ : S ⧸ P
x : S
y✝ : S ⧸ P
y : S
Pe_le_Pi1 : P ^ e ≤ P ^ (i + 1)
h : ∃ y_1, ↑(↑(powQuotSuccInclusion f p P i) y_1) = ↑(Quotient.mk (P ^ e)) (x * a) - ↑(Quotient.mk (P ^ e)) (y * a)
⊢ x - y ∈ P

tactic: rw [Submodule.Quotient.quot_mk_eq_mk, Ideal.Quotient.mk_eq_mk, Ideal.mem_quotient_iff_mem_sup,
  sup_eq_left.mpr Pe_le_Pi1] at hz
state_before: case intro.mk.mk
R : Type u
inst✝⁴ : CommRing R
S : Type v
inst✝³ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
hfp : NeZero e
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : IsPrime P
i : ℕ
hi : i < e
a : S
a_mem : a ∈ P ^ i
a_not_mem : ¬a ∈ P ^ (i + 1)
x✝ : S ⧸ P
x : S
y✝ : S ⧸ P
y : S
Pe_le_Pi1 : P ^ e ≤ P ^ (i + 1)
val✝ : S ⧸ P ^ e
z : S
hz : Quot.mk Setoid.r z ∈ map (Quotient.mk (P ^ e)) (P ^ (i + 1))
h :
  ↑(↑(powQuotSuccInclusion f p P i) { val := Quot.mk Setoid.r z, property := hz }) =
    ↑(Quotient.mk (P ^ e)) (x * a) - ↑(Quotient.mk (P ^ e)) (y * a)
⊢ x - y ∈ P

tactic: rw [powQuotSuccInclusion_apply_coe, Subtype.coe_mk, Submodule.Quotient.quot_mk_eq_mk,
  Ideal.Quotient.mk_eq_mk, ← map_sub, Ideal.Quotient.eq, ← sub_mul] at h
state_before: case intro.mk.mk
R : Type u
inst✝⁴ : CommRing R
S : Type v
inst✝³ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
hfp : NeZero e
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : IsPrime P
i : ℕ
hi : i < e
a : S
a_mem : a ∈ P ^ i
a_not_mem : ¬a ∈ P ^ (i + 1)
x✝ : S ⧸ P
x : S
y✝ : S ⧸ P
y : S
Pe_le_Pi1 : P ^ e ≤ P ^ (i + 1)
val✝ : S ⧸ P ^ e
z : S
hz✝ : Quot.mk Setoid.r z ∈ map (Quotient.mk (P ^ e)) (P ^ (i + 1))
hz : z ∈ P ^ (i + 1)
h :
  ↑(↑(powQuotSuccInclusion f p P i) { val := Quot.mk Setoid.r z, property := hz✝ }) =
    ↑(Quotient.mk (P ^ e)) (x * a) - ↑(Quotient.mk (P ^ e)) (y * a)
⊢ x - y ∈ P

tactic: exact
  (Ideal.IsPrime.mul_mem_pow _
        ((Submodule.sub_mem_iff_right _ hz).mp (Pe_le_Pi1 h))).resolve_right
    a_not_mem
state_before: case intro.mk.mk
R : Type u
inst✝⁴ : CommRing R
S : Type v
inst✝³ : CommRing S
f : R →+* S
p : Ideal R
P : Ideal S
hfp : NeZero e
inst✝² : IsDomain S
inst✝¹ : IsDedekindDomain S
inst✝ : IsPrime P
i : ℕ
hi : i < e
a : S
a_mem : a ∈ P ^ i
a_not_mem : ¬a ∈ P ^ (i + 1)
x✝ : S ⧸ P
x : S
y✝ : S ⧸ P
y : S
Pe_le_Pi1 : P ^ e ≤ P ^ (i + 1)
val✝ : S ⧸ P ^ e
z : S
hz✝ : Quot.mk Setoid.r z ∈ map (Quotient.mk (P ^ e)) (P ^ (i + 1))
hz : z ∈ P ^ (i + 1)
h : z - (x - y) * a ∈ P ^ e
⊢ x - y ∈ P