Theorem: FractionalIdeal.exists_not_mem_one_of_ne_bot
File: Mathlib/RingTheory/DedekindDomain/Ideal.lean

tactic: suffices
  ∀ {M : Ideal A} (_hM : M.IsMaximal),
    ∃ x : K, x ∈ (M⁻¹ : FractionalIdeal A⁰ K) ∧ x ∉ (1 : FractionalIdeal A⁰ K) by
  obtain ⟨M, hM, hIM⟩ : ∃ M : Ideal A, IsMaximal M ∧ I ≤ M := Ideal.exists_le_maximal I hI1
  skip
  have hM0 := (M.bot_lt_of_maximal hNF).ne'
  obtain ⟨x, hxM, hx1⟩ := this hM
  refine ⟨x, inv_anti_mono ?_ ?_ ((coeIdeal_le_coeIdeal _).mpr hIM) hxM, hx1⟩ <;>
      rw [coeIdeal_ne_zero] <;> assumption
state_before: R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
⊢ ∃ x, x ∈ (↑I)⁻¹ ∧ ¬x ∈ 1

tactic: intro M hM
state_before: R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
⊢ ∀ {M : Ideal A}, IsMaximal M → ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: skip
state_before: R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: obtain ⟨⟨a, haM⟩, ha0⟩ := Submodule.nonzero_mem_of_bot_lt (M.bot_lt_of_maximal hNF)
state_before: R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: replace ha0 : a ≠ 0 := Subtype.coe_injective.ne ha0
state_before: case intro.mk
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : { val := a, property := haM } ≠ 0
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: let J : Ideal A := Ideal.span {a}
state_before: case intro.mk
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: have hJ0 : J ≠ ⊥ := mt Ideal.span_singleton_eq_bot.mp ha0
state_before: case intro.mk
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: have hJM : J ≤ M := Ideal.span_le.mpr (Set.singleton_subset_iff.mpr haM)
state_before: case intro.mk
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: have hM0 : ⊥ < M := M.bot_lt_of_maximal hNF
state_before: case intro.mk
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: obtain ⟨Z, hle, hnle⟩ := exists_multiset_prod_cons_le_and_prod_not_le hNF hJ0 hJM
state_before: case intro.mk
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: obtain ⟨b, hbZ, hbJ⟩ := SetLike.not_le_iff_exists.mp hnle
state_before: case intro.mk.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: have hnz_fa : algebraMap A K a ≠ 0 :=
  mt ((injective_iff_map_eq_zero _).mp (IsFractionRing.injective A K) a) ha0
state_before: case intro.mk.intro.intro.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: have _hb0 : algebraMap A K b ≠ 0 :=
  mt ((injective_iff_map_eq_zero _).mp (IsFractionRing.injective A K) b) fun h =>
    hbJ <| h.symm ▸ J.zero_mem
state_before: case intro.mk.intro.intro.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: refine' ⟨algebraMap A K b * (algebraMap A K a)⁻¹, (mem_inv_iff _).mpr _, _⟩
state_before: case intro.mk.intro.intro.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
⊢ ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1

tactic: obtain ⟨M, hM, hIM⟩ : ∃ M : Ideal A, IsMaximal M ∧ I ≤ M := Ideal.exists_le_maximal I hI1
state_before: R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
this : ∀ {M : Ideal A}, IsMaximal M → ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1
⊢ ∃ x, x ∈ (↑I)⁻¹ ∧ ¬x ∈ 1

tactic: skip
state_before: case intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
this : ∀ {M : Ideal A}, IsMaximal M → ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1
M : Ideal A
hM : IsMaximal M
hIM : I ≤ M
⊢ ∃ x, x ∈ (↑I)⁻¹ ∧ ¬x ∈ 1

tactic: have hM0 := (M.bot_lt_of_maximal hNF).ne'
state_before: case intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
this : ∀ {M : Ideal A}, IsMaximal M → ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1
M : Ideal A
hM : IsMaximal M
hIM : I ≤ M
⊢ ∃ x, x ∈ (↑I)⁻¹ ∧ ¬x ∈ 1

tactic: obtain ⟨x, hxM, hx1⟩ := this hM
state_before: case intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
this : ∀ {M : Ideal A}, IsMaximal M → ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1
M : Ideal A
hM : IsMaximal M
hIM : I ≤ M
hM0 : M ≠ ⊥
⊢ ∃ x, x ∈ (↑I)⁻¹ ∧ ¬x ∈ 1

tactic: refine ⟨x, inv_anti_mono ?_ ?_ ((coeIdeal_le_coeIdeal _).mpr hIM) hxM, hx1⟩ <;>
    rw [coeIdeal_ne_zero] <;> assumption
state_before: case intro.intro.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
this : ∀ {M : Ideal A}, IsMaximal M → ∃ x, x ∈ (↑M)⁻¹ ∧ ¬x ∈ 1
M : Ideal A
hM : IsMaximal M
hIM : I ≤ M
hM0 : M ≠ ⊥
x : K
hxM : x ∈ (↑M)⁻¹
hx1 : ¬x ∈ 1
⊢ ∃ x, x ∈ (↑I)⁻¹ ∧ ¬x ∈ 1

tactic: exact coeIdeal_ne_zero.mpr hM0.ne'
state_before: case intro.mk.intro.intro.intro.intro.refine'_1
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
⊢ ↑M ≠ 0

tactic: rintro y₀ hy₀
state_before: case intro.mk.intro.intro.intro.intro.refine'_2
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
⊢ ∀ (y : K), y ∈ ↑M → ↑(algebraMap A K) b * (↑(algebraMap A K) a)⁻¹ * y ∈ 1

tactic: obtain ⟨y, h_Iy, rfl⟩ := (mem_coeIdeal _).mp hy₀
state_before: case intro.mk.intro.intro.intro.intro.refine'_2
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y₀ : K
hy₀ : y₀ ∈ ↑M
⊢ ↑(algebraMap A K) b * (↑(algebraMap A K) a)⁻¹ * y₀ ∈ 1

tactic: rw [mul_comm, ← mul_assoc, ← RingHom.map_mul]
state_before: case intro.mk.intro.intro.intro.intro.refine'_2.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
⊢ ↑(algebraMap A K) b * (↑(algebraMap A K) a)⁻¹ * ↑(algebraMap A K) y ∈ 1

tactic: have h_yb : y * b ∈ J := by
  apply hle
  rw [Multiset.prod_cons]
  exact Submodule.smul_mem_smul h_Iy hbZ
state_before: case intro.mk.intro.intro.intro.intro.refine'_2.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
⊢ ↑(algebraMap A K) (y * b) * (↑(algebraMap A K) a)⁻¹ ∈ 1

tactic: rw [Ideal.mem_span_singleton'] at h_yb
state_before: case intro.mk.intro.intro.intro.intro.refine'_2.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
h_yb : y * b ∈ J
⊢ ↑(algebraMap A K) (y * b) * (↑(algebraMap A K) a)⁻¹ ∈ 1

tactic: rcases h_yb with ⟨c, hc⟩
state_before: case intro.mk.intro.intro.intro.intro.refine'_2.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
h_yb : ∃ a_1, a_1 * a = y * b
⊢ ↑(algebraMap A K) (y * b) * (↑(algebraMap A K) a)⁻¹ ∈ 1

tactic: rw [← hc, RingHom.map_mul, mul_assoc, mul_inv_cancel hnz_fa, mul_one]
state_before: case intro.mk.intro.intro.intro.intro.refine'_2.intro.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
c : A
hc : c * a = y * b
⊢ ↑(algebraMap A K) (y * b) * (↑(algebraMap A K) a)⁻¹ ∈ 1

tactic: apply coe_mem_one
state_before: case intro.mk.intro.intro.intro.intro.refine'_2.intro.intro.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
c : A
hc : c * a = y * b
⊢ ↑(algebraMap A K) c ∈ 1

tactic: apply hle
state_before: R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
⊢ y * b ∈ J

tactic: rw [Multiset.prod_cons]
state_before: case a
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
⊢ y * b ∈ Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z)

tactic: exact Submodule.smul_mem_smul h_Iy hbZ
state_before: case a
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
y : A
h_Iy : y ∈ M
hy₀ : ↑(algebraMap A K) y ∈ ↑M
⊢ y * b ∈ M * Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)

tactic: refine' mt (mem_one_iff _).mp _
state_before: case intro.mk.intro.intro.intro.intro.refine'_3
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
⊢ ¬↑(algebraMap A K) b * (↑(algebraMap A K) a)⁻¹ ∈ 1

tactic: rintro ⟨x', h₂_abs⟩
state_before: case intro.mk.intro.intro.intro.intro.refine'_3
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
⊢ ¬∃ x', ↑(algebraMap A K) x' = ↑(algebraMap A K) b * (↑(algebraMap A K) a)⁻¹

tactic: rw [← div_eq_mul_inv, eq_div_iff_mul_eq hnz_fa, ← RingHom.map_mul] at h₂_abs
state_before: case intro.mk.intro.intro.intro.intro.refine'_3.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
x' : A
h₂_abs : ↑(algebraMap A K) x' = ↑(algebraMap A K) b * (↑(algebraMap A K) a)⁻¹
⊢ False

tactic: have := Ideal.mem_span_singleton'.mpr ⟨x', IsFractionRing.injective A K h₂_abs⟩
state_before: case intro.mk.intro.intro.intro.intro.refine'_3.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
x' : A
h₂_abs : ↑(algebraMap A K) (x' * a) = ↑(algebraMap A K) b
⊢ False

tactic: contradiction
state_before: case intro.mk.intro.intro.intro.intro.refine'_3.intro
R : Type ?u.159729
A : Type u_1
K : Type u_2
inst✝⁶ : CommRing R
inst✝⁵ : CommRing A
inst✝⁴ : Field K
inst✝³ : IsDomain A
inst✝² : Algebra A K
inst✝¹ : IsFractionRing A K
inst✝ : IsDedekindDomain A
hNF : ¬IsField A
I : Ideal A
hI0 : I ≠ ⊥
hI1 : I ≠ ⊤
M : Ideal A
hM : IsMaximal M
a : A
haM : a ∈ M
ha0 : a ≠ 0
J : Ideal A := span {a}
hJ0 : J ≠ ⊥
hJM : J ≤ M
hM0 : ⊥ < M
Z : Multiset (PrimeSpectrum A)
hle : Multiset.prod (M ::ₘ Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
hnle : ¬Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z) ≤ J
b : A
hbZ : b ∈ Multiset.prod (Multiset.map PrimeSpectrum.asIdeal Z)
hbJ : ¬b ∈ J
hnz_fa : ↑(algebraMap A K) a ≠ 0
_hb0 : ↑(algebraMap A K) b ≠ 0
x' : A
h₂_abs : ↑(algebraMap A K) (x' * a) = ↑(algebraMap A K) b
this : b ∈ span {a}
⊢ False