[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
⊢ r ∈ annihilator (span R s) ↔ ∀ (n : ↑s), r • ↑n = 0
[PROOFSTEP]
rw [Submodule.mem_annihilator]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
⊢ (∀ (n : M), n ∈ span R s → r • n = 0) ↔ ∀ (n : ↑s), r • ↑n = 0
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
⊢ (∀ (n : M), n ∈ span R s → r • n = 0) → ∀ (n : ↑s), r • ↑n = 0
[PROOFSTEP]
intro h n
[GOAL]
case mp
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : M), n ∈ span R s → r • n = 0
n : ↑s
⊢ r • ↑n = 0
[PROOFSTEP]
exact h _ (Submodule.subset_span n.prop)
[GOAL]
case mpr
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
⊢ (∀ (n : ↑s), r • ↑n = 0) → ∀ (n : M), n ∈ span R s → r • n = 0
[PROOFSTEP]
intro h n hn
[GOAL]
case mpr
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
⊢ r • n = 0
[PROOFSTEP]
refine Submodule.span_induction hn ?_ ?_ ?_ ?_
[GOAL]
case mpr.refine_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
⊢ ∀ (x : M), x ∈ s → r • x = 0
[PROOFSTEP]
intro x hx
[GOAL]
case mpr.refine_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
x : M
hx : x ∈ s
⊢ r • x = 0
[PROOFSTEP]
exact h ⟨x, hx⟩
[GOAL]
case mpr.refine_2
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
⊢ r • 0 = 0
[PROOFSTEP]
exact smul_zero _
[GOAL]
case mpr.refine_3
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
⊢ ∀ (x y : M), r • x = 0 → r • y = 0 → r • (x + y) = 0
[PROOFSTEP]
intro x y hx hy
[GOAL]
case mpr.refine_3
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
x y : M
hx : r • x = 0
hy : r • y = 0
⊢ r • (x + y) = 0
[PROOFSTEP]
rw [smul_add, hx, hy, zero_add]
[GOAL]
case mpr.refine_4
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
⊢ ∀ (a : R) (x : M), r • x = 0 → r • a • x = 0
[PROOFSTEP]
intro a x hx
[GOAL]
case mpr.refine_4
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
s : Set M
r : R
h : ∀ (n : ↑s), r • ↑n = 0
n : M
hn : n ∈ span R s
a : R
x : M
hx : r • x = 0
⊢ r • a • x = 0
[PROOFSTEP]
rw [smul_comm, hx, smul_zero]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
g : M
r : R
⊢ r ∈ annihilator (span R {g}) ↔ r • g = 0
[PROOFSTEP]
simp [mem_annihilator_span]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
p : M → Prop
x : M
H : x ∈ I • N
Hb : ∀ (r : R), r ∈ I → ∀ (n : M), n ∈ N → p (r • n)
H1 : ∀ (x y : M), p x → p y → p (x + y)
⊢ p x
[PROOFSTEP]
have H0 : p 0 := by simpa only [zero_smul] using Hb 0 I.zero_mem 0 N.zero_mem
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
p : M → Prop
x : M
H : x ∈ I • N
Hb : ∀ (r : R), r ∈ I → ∀ (n : M), n ∈ N → p (r • n)
H1 : ∀ (x y : M), p x → p y → p (x + y)
⊢ p 0
[PROOFSTEP]
simpa only [zero_smul] using Hb 0 I.zero_mem 0 N.zero_mem
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
p : M → Prop
x : M
H : x ∈ I • N
Hb : ∀ (r : R), r ∈ I → ∀ (n : M), n ∈ N → p (r • n)
H1 : ∀ (x y : M), p x → p y → p (x + y)
H0 : p 0
⊢ p x
[PROOFSTEP]
refine Submodule.iSup_induction (x := x) _ H ?_ H0 H1
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
p : M → Prop
x : M
H : x ∈ I • N
Hb : ∀ (r : R), r ∈ I → ∀ (n : M), n ∈ N → p (r • n)
H1 : ∀ (x y : M), p x → p y → p (x + y)
H0 : p 0
⊢ ∀ (i : { x // x ∈ I }) (x : M), x ∈ map (↑(LinearMap.lsmul R M) ↑i) N → p x
[PROOFSTEP]
rintro ⟨i, hi⟩ m ⟨j, hj, hj'⟩
[GOAL]
case mk.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
p : M → Prop
x : M
H : x ∈ I • N
Hb : ∀ (r : R), r ∈ I → ∀ (n : M), n ∈ N → p (r • n)
H1 : ∀ (x y : M), p x → p y → p (x + y)
H0 : p 0
i : R
hi : i ∈ I
m j : M
hj : j ∈ ↑N
hj' : ↑(↑(LinearMap.lsmul R M) ↑{ val := i, property := hi }) j = m
⊢ p m
[PROOFSTEP]
rw [← hj']
[GOAL]
case mk.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
p : M → Prop
x : M
H : x ∈ I • N
Hb : ∀ (r : R), r ∈ I → ∀ (n : M), n ∈ N → p (r • n)
H1 : ∀ (x y : M), p x → p y → p (x + y)
H0 : p 0
i : R
hi : i ∈ I
m j : M
hj : j ∈ ↑N
hj' : ↑(↑(LinearMap.lsmul R M) ↑{ val := i, property := hi }) j = m
⊢ p (↑(↑(LinearMap.lsmul R M) ↑{ val := i, property := hi }) j)
[PROOFSTEP]
exact Hb _ hi _ hj
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
x : M
hx : x ∈ I • N
p : (x : M) → x ∈ I • N → Prop
Hb : ∀ (r : R) (hr : r ∈ I) (n : M) (hn : n ∈ N), p (r • n) (_ : r • n ∈ I • N)
H1 : ∀ (x : M) (hx : x ∈ I • N) (y : M) (hy : y ∈ I • N), p x hx → p y hy → p (x + y) (_ : x + y ∈ I • N)
⊢ p x hx
[PROOFSTEP]
refine' Exists.elim _ fun (h : x ∈ I • N) (H : p x h) => H
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
x : M
hx : x ∈ I • N
p : (x : M) → x ∈ I • N → Prop
Hb : ∀ (r : R) (hr : r ∈ I) (n : M) (hn : n ∈ N), p (r • n) (_ : r • n ∈ I • N)
H1 : ∀ (x : M) (hx : x ∈ I • N) (y : M) (hy : y ∈ I • N), p x hx → p y hy → p (x + y) (_ : x + y ∈ I • N)
⊢ ∃ x_1, p x x_1
[PROOFSTEP]
exact smul_induction_on hx (fun a ha x hx => ⟨_, Hb _ ha _ hx⟩) fun x y ⟨_, hx⟩ ⟨_, hy⟩ => ⟨_, H1 _ _ _ _ hx hy⟩
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I✝ J : Ideal R
N P : Submodule R M
I : Ideal R
m x : M
hx : x ∈ I • span R {m}
m1 m2 : M
x✝¹ : ∃ y, y ∈ I ∧ y • m = m1
x✝ : ∃ y, y ∈ I ∧ y • m = m2
y1 : R
hyi1 : y1 ∈ I
hy1 : y1 • m = m1
y2 : R
hyi2 : y2 ∈ I
hy2 : y2 • m = m2
⊢ (y1 + y2) • m = m1 + m2
[PROOFSTEP]
rw [add_smul, hy1, hy2]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I✝ J : Ideal R
N P : Submodule R M
I : Ideal R
f : R →ₗ[R] M
⊢ map f I ≤ I • ⊤
[PROOFSTEP]
rintro _ ⟨y, hy, rfl⟩
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I✝ J : Ideal R
N P : Submodule R M
I : Ideal R
f : R →ₗ[R] M
y : R
hy : y ∈ ↑I
⊢ ↑f y ∈ I • ⊤
[PROOFSTEP]
rw [← mul_one y, ← smul_eq_mul, f.map_smul]
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I✝ J : Ideal R
N P : Submodule R M
I : Ideal R
f : R →ₗ[R] M
y : R
hy : y ∈ ↑I
⊢ y • ↑f 1 ∈ I • ⊤
[PROOFSTEP]
exact smul_mem_smul hy mem_top
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I✝ J : Ideal R
N P : Submodule R M
I : Ideal R
⊢ I * annihilator I = ⊥
[PROOFSTEP]
rw [mul_comm, annihilator_mul]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
⊢ Ideal.span {r} • N = r • N
[PROOFSTEP]
have : span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N :=
  by
  convert span_eq (r • N)
  exact (Set.image_eq_iUnion _ (N : Set M)).symm
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
⊢ span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N
[PROOFSTEP]
convert span_eq (r • N)
[GOAL]
case h.e'_2.h.e'_6
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
⊢ ⋃ (t : M) (_ : t ∈ N), {r • t} = ↑(r • N)
[PROOFSTEP]
exact (Set.image_eq_iUnion _ (N : Set M)).symm
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
this : span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N
⊢ Ideal.span {r} • N = r • N
[PROOFSTEP]
conv_lhs => rw [← span_eq N, span_smul_span]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
this : span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N
| Ideal.span {r} • N
[PROOFSTEP]
rw [← span_eq N, span_smul_span]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
this : span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N
| Ideal.span {r} • N
[PROOFSTEP]
rw [← span_eq N, span_smul_span]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
this : span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N
| Ideal.span {r} • N
[PROOFSTEP]
rw [← span_eq N, span_smul_span]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
r : R
N : Submodule R M
this : span R (⋃ (t : M) (_ : t ∈ N), {r • t}) = r • N
⊢ span R (⋃ (s : R) (_ : s ∈ {r}) (t : M) (_ : t ∈ ↑N), {s • t}) = r • N
[PROOFSTEP]
simpa
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ↑r • x ∈ M'
⊢ x ∈ M'
[PROOFSTEP]
suffices (⊤ : Ideal R) • span R ({ x } : Set M) ≤ M'
  by
  rw [top_smul] at this 
  exact this (subset_span (Set.mem_singleton x))
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ↑r • x ∈ M'
this : ⊤ • span R {x} ≤ M'
⊢ x ∈ M'
[PROOFSTEP]
rw [top_smul] at this 
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ↑r • x ∈ M'
this : span R {x} ≤ M'
⊢ x ∈ M'
[PROOFSTEP]
exact this (subset_span (Set.mem_singleton x))
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ↑r • x ∈ M'
⊢ ⊤ • span R {x} ≤ M'
[PROOFSTEP]
rw [← hs, span_smul_span, span_le]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ↑r • x ∈ M'
⊢ ⋃ (s_1 : R) (_ : s_1 ∈ s) (t : M) (_ : t ∈ {x}), {s_1 • t} ⊆ ↑M'
[PROOFSTEP]
simpa using H
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ∃ n, ↑r ^ n • x ∈ M'
⊢ x ∈ M'
[PROOFSTEP]
obtain ⟨s', hs₁, hs₂⟩ := (Ideal.span_eq_top_iff_finite _).mp hs
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
H : ∀ (r : ↑s), ∃ n, ↑r ^ n • x ∈ M'
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
⊢ x ∈ M'
[PROOFSTEP]
replace H : ∀ r : s', ∃ n : ℕ, ((r : R) ^ n : R) • x ∈ M' := fun r => H ⟨_, hs₁ r.2⟩
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
H : ∀ (r : { x // x ∈ s' }), ∃ n, ↑r ^ n • x ∈ M'
⊢ x ∈ M'
[PROOFSTEP]
choose n₁ n₂ using H
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
⊢ x ∈ M'
[PROOFSTEP]
let N := s'.attach.sup n₁
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := Finset.sup (Finset.attach s') n₁
⊢ x ∈ M'
[PROOFSTEP]
have hs' := Ideal.span_pow_eq_top (s' : Set R) hs₂ N
[GOAL]
case intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := Finset.sup (Finset.attach s') n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
⊢ x ∈ M'
[PROOFSTEP]
apply M'.mem_of_span_top_of_smul_mem _ hs'
[GOAL]
case intro.intro.H
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := Finset.sup (Finset.attach s') n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
⊢ ∀ (r : ↑((fun x => x ^ N) '' ↑s')), ↑r • x ∈ M'
[PROOFSTEP]
rintro ⟨_, r, hr, rfl⟩
[GOAL]
case intro.intro.H.mk.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := Finset.sup (Finset.attach s') n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ ↑{ val := (fun x => x ^ N) r, property := (_ : ∃ a, a ∈ ↑s' ∧ (fun x => x ^ N) a = (fun x => x ^ N) r) } • x ∈ M'
[PROOFSTEP]
convert M'.smul_mem (r ^ (N - n₁ ⟨r, hr⟩)) (n₂ ⟨r, hr⟩) using 1
[GOAL]
case h.e'_4
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := Finset.sup (Finset.attach s') n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ ↑{ val := (fun x => x ^ N) r, property := (_ : ∃ a, a ∈ ↑s' ∧ (fun x => x ^ N) a = (fun x => x ^ N) r) } • x =
    r ^ (N - n₁ { val := r, property := hr }) • ↑{ val := r, property := hr } ^ n₁ { val := r, property := hr } • x
[PROOFSTEP]
simp only [Subtype.coe_mk, smul_smul, ← pow_add]
[GOAL]
case h.e'_4
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Submodule R M
s : Set R
hs : Ideal.span s = ⊤
x : M
s' : Finset R
hs₁ : ↑s' ⊆ s
hs₂ : Ideal.span ↑s' = ⊤
n₁ : { x // x ∈ s' } → ℕ
n₂ : ∀ (r : { x // x ∈ s' }), ↑r ^ n₁ r • x ∈ M'
N : ℕ := Finset.sup (Finset.attach s') n₁
hs' : Ideal.span ((fun x => x ^ N) '' ↑s') = ⊤
r : R
hr : r ∈ ↑s'
⊢ r ^ Finset.sup (Finset.attach s') n₁ • x =
    r ^ (Finset.sup (Finset.attach s') n₁ - n₁ { val := r, property := hr } + n₁ { val := r, property := hr }) • x
[PROOFSTEP]
rw [tsub_add_cancel_of_le (Finset.le_sup (s'.mem_attach _) : n₁ ⟨r, hr⟩ ≤ N)]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
s : Set M
x : M
⊢ x ∈ I • span R s ↔ x ∈ span R (⋃ (a : R) (_ : a ∈ I) (b : M) (_ : b ∈ s), {a • b})
[PROOFSTEP]
rw [← I.span_eq, Submodule.span_smul_span, I.span_eq]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
s : Set M
x : M
⊢ x ∈ span R (⋃ (s_1 : R) (_ : s_1 ∈ ↑I) (t : M) (_ : t ∈ s), {s_1 • t}) ↔
    x ∈ span R (⋃ (a : R) (_ : a ∈ I) (b : M) (_ : b ∈ s), {a • b})
[PROOFSTEP]
rfl
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
⊢ x ∈ I • span R (Set.range f) ↔ ∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
⊢ x ∈ I • span R (Set.range f) → ∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x
case mpr
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
⊢ (∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x) → x ∈ I • span R (Set.range f)
[PROOFSTEP]
swap
[GOAL]
case mpr
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
⊢ (∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x) → x ∈ I • span R (Set.range f)
[PROOFSTEP]
rintro ⟨a, ha, rfl⟩
[GOAL]
case mpr.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum a fun i c => c • f i) ∈ I • span R (Set.range f)
[PROOFSTEP]
exact Submodule.sum_mem _ fun c _ => smul_mem_smul (ha c) <| subset_span <| Set.mem_range_self _
[GOAL]
case mp
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
⊢ x ∈ I • span R (Set.range f) → ∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x
[PROOFSTEP]
refine' fun hx => span_induction (mem_smul_span.mp hx) _ _ _ _
[GOAL]
case mp.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
⊢ ∀ (x : M),
    x ∈ ⋃ (a : R) (_ : a ∈ I) (b : M) (_ : b ∈ Set.range f), {a • b} → ∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x
[PROOFSTEP]
simp only [Set.mem_iUnion, Set.mem_range, Set.mem_singleton_iff]
[GOAL]
case mp.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
⊢ ∀ (x : M), (∃ i h i_1 h, x = i • i_1) → ∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x
[PROOFSTEP]
rintro x ⟨y, hy, x, ⟨i, rfl⟩, rfl⟩
[GOAL]
case mp.refine'_1.intro.intro.intro.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i : ι
⊢ ∃ a x, (Finsupp.sum a fun i c => c • f i) = y • f i
[PROOFSTEP]
refine' ⟨Finsupp.single i y, fun j => _, _⟩
[GOAL]
case mp.refine'_1.intro.intro.intro.intro.intro.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i j : ι
⊢ ↑(Finsupp.single i y) j ∈ I
[PROOFSTEP]
letI := Classical.decEq ι
[GOAL]
case mp.refine'_1.intro.intro.intro.intro.intro.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i j : ι
this : DecidableEq ι := Classical.decEq ι
⊢ ↑(Finsupp.single i y) j ∈ I
[PROOFSTEP]
rw [Finsupp.single_apply]
[GOAL]
case mp.refine'_1.intro.intro.intro.intro.intro.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i j : ι
this : DecidableEq ι := Classical.decEq ι
⊢ (if i = j then y else 0) ∈ I
[PROOFSTEP]
split_ifs
[GOAL]
case pos
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i j : ι
this : DecidableEq ι := Classical.decEq ι
h✝ : i = j
⊢ y ∈ I
[PROOFSTEP]
assumption
[GOAL]
case neg
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i j : ι
this : DecidableEq ι := Classical.decEq ι
h✝ : ¬i = j
⊢ 0 ∈ I
[PROOFSTEP]
exact I.zero_mem
[GOAL]
case mp.refine'_1.intro.intro.intro.intro.intro.refine'_2
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i : ι
⊢ (Finsupp.sum (Finsupp.single i y) fun i c => c • f i) = y • f i
[PROOFSTEP]
refine' @Finsupp.sum_single_index ι R M _ _ i _ (fun i y => y • f i) _
[GOAL]
case mp.refine'_1.intro.intro.intro.intro.intro.refine'_2
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
y : R
hy : y ∈ I
i : ι
⊢ (fun i y => y • f i) i 0 = 0
[PROOFSTEP]
simp
[GOAL]
case mp.refine'_2
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
⊢ ∃ a x, (Finsupp.sum a fun i c => c • f i) = 0
[PROOFSTEP]
exact ⟨0, fun _ => I.zero_mem, Finsupp.sum_zero_index⟩
[GOAL]
case mp.refine'_3
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
⊢ ∀ (x y : M),
    (∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x) →
      (∃ a x, (Finsupp.sum a fun i c => c • f i) = y) → ∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x + y
[PROOFSTEP]
rintro x y ⟨ax, hax, rfl⟩ ⟨ay, hay, rfl⟩
[GOAL]
case mp.refine'_3.intro.intro.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
ax : ι →₀ R
hax : ∀ (i : ι), ↑ax i ∈ I
ay : ι →₀ R
hay : ∀ (i : ι), ↑ay i ∈ I
⊢ ∃ a x, (Finsupp.sum a fun i c => c • f i) = (Finsupp.sum ax fun i c => c • f i) + Finsupp.sum ay fun i c => c • f i
[PROOFSTEP]
refine' ⟨ax + ay, fun i => I.add_mem (hax i) (hay i), Finsupp.sum_add_index' _ _⟩
[GOAL]
case mp.refine'_3.intro.intro.intro.intro.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
ax : ι →₀ R
hax : ∀ (i : ι), ↑ax i ∈ I
ay : ι →₀ R
hay : ∀ (i : ι), ↑ay i ∈ I
⊢ ∀ (a : ι), 0 • f a = 0
[PROOFSTEP]
intros
[GOAL]
case mp.refine'_3.intro.intro.intro.intro.refine'_2
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
ax : ι →₀ R
hax : ∀ (i : ι), ↑ax i ∈ I
ay : ι →₀ R
hay : ∀ (i : ι), ↑ay i ∈ I
⊢ ∀ (a : ι) (b₁ b₂ : R), (b₁ + b₂) • f a = b₁ • f a + b₂ • f a
[PROOFSTEP]
intros
[GOAL]
case mp.refine'_3.intro.intro.intro.intro.refine'_1
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
ax : ι →₀ R
hax : ∀ (i : ι), ↑ax i ∈ I
ay : ι →₀ R
hay : ∀ (i : ι), ↑ay i ∈ I
a✝ : ι
⊢ 0 • f a✝ = 0
[PROOFSTEP]
simp only [zero_smul, add_smul]
[GOAL]
case mp.refine'_3.intro.intro.intro.intro.refine'_2
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
ax : ι →₀ R
hax : ∀ (i : ι), ↑ax i ∈ I
ay : ι →₀ R
hay : ∀ (i : ι), ↑ay i ∈ I
a✝ : ι
b₁✝ b₂✝ : R
⊢ (b₁✝ + b₂✝) • f a✝ = b₁✝ • f a✝ + b₂✝ • f a✝
[PROOFSTEP]
simp only [zero_smul, add_smul]
[GOAL]
case mp.refine'_4
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
⊢ ∀ (a : R) (x : M),
    (∃ a x_1, (Finsupp.sum a fun i c => c • f i) = x) → ∃ a_2 x_1, (Finsupp.sum a_2 fun i c => c • f i) = a • x
[PROOFSTEP]
rintro c x ⟨a, ha, rfl⟩
[GOAL]
case mp.refine'_4.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
c : R
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ ∃ a_1 x, (Finsupp.sum a_1 fun i c => c • f i) = c • Finsupp.sum a fun i c => c • f i
[PROOFSTEP]
refine' ⟨c • a, fun i => I.mul_mem_left c (ha i), _⟩
[GOAL]
case mp.refine'_4.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
c : R
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum (c • a) fun i c => c • f i) = c • Finsupp.sum a fun i c => c • f i
[PROOFSTEP]
rw [Finsupp.sum_smul_index, Finsupp.smul_sum]
[GOAL]
case mp.refine'_4.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
c : R
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum a fun i a => (c * a) • f i) = Finsupp.sum a fun a b => c • b • f a
[PROOFSTEP]
intros
[GOAL]
case mp.refine'_4.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
c : R
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ ∀ (i : ι), 0 • f i = 0
[PROOFSTEP]
intros
[GOAL]
case mp.refine'_4.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
c : R
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum a fun i a => (c * a) • f i) = Finsupp.sum a fun a b => c • b • f a
[PROOFSTEP]
simp only [zero_smul, mul_smul]
[GOAL]
case mp.refine'_4.intro.intro
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
f : ι → M
x : M
hx : x ∈ I • span R (Set.range f)
c : R
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
i✝ : ι
⊢ 0 • f i✝ = 0
[PROOFSTEP]
simp only [zero_smul, mul_smul]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
ι : Type u_3
s : Set ι
f : ι → M
x : M
⊢ x ∈ I • span R (f '' s) ↔ ∃ a x_1, (Finsupp.sum a fun i c => c • f ↑i) = x
[PROOFSTEP]
rw [← Submodule.mem_ideal_smul_span_iff_exists_sum, ← Set.image_eq_range]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
N : Submodule R M
x : { x // x ∈ N }
⊢ x ∈ I • ⊤ ↔ ↑x ∈ I • N
[PROOFSTEP]
change _ ↔ N.subtype x ∈ I • N
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
N : Submodule R M
x : { x // x ∈ N }
⊢ x ∈ I • ⊤ ↔ ↑(Submodule.subtype N) x ∈ I • N
[PROOFSTEP]
have : Submodule.map N.subtype (I • ⊤) = I • N := by
  rw [Submodule.map_smul'', Submodule.map_top, Submodule.range_subtype]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
N : Submodule R M
x : { x // x ∈ N }
⊢ map (Submodule.subtype N) (I • ⊤) = I • N
[PROOFSTEP]
rw [Submodule.map_smul'', Submodule.map_top, Submodule.range_subtype]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
N : Submodule R M
x : { x // x ∈ N }
this : map (Submodule.subtype N) (I • ⊤) = I • N
⊢ x ∈ I • ⊤ ↔ ↑(Submodule.subtype N) x ∈ I • N
[PROOFSTEP]
rw [← this]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I J : Ideal R
N✝ P : Submodule R M
S : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
N : Submodule R M
x : { x // x ∈ N }
this : map (Submodule.subtype N) (I • ⊤) = I • N
⊢ x ∈ I • ⊤ ↔ ↑(Submodule.subtype N) x ∈ map (Submodule.subtype N) (I • ⊤)
[PROOFSTEP]
exact (Function.Injective.mem_set_image N.injective_subtype).symm
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I✝ J : Ideal R
N P : Submodule R M
S✝ : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
f : M →ₗ[R] M'
S : Submodule R M'
I : Ideal R
⊢ I • comap f S ≤ comap f (I • S)
[PROOFSTEP]
refine' Submodule.smul_le.mpr fun r hr x hx => _
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I✝ J : Ideal R
N P : Submodule R M
S✝ : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
f : M →ₗ[R] M'
S : Submodule R M'
I : Ideal R
r : R
hr : r ∈ I
x : M
hx : x ∈ comap f S
⊢ r • x ∈ comap f (I • S)
[PROOFSTEP]
rw [Submodule.mem_comap] at hx ⊢
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I✝ J : Ideal R
N P : Submodule R M
S✝ : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
f : M →ₗ[R] M'
S : Submodule R M'
I : Ideal R
r : R
hr : r ∈ I
x : M
hx : ↑f x ∈ S
⊢ ↑f (r • x) ∈ I • S
[PROOFSTEP]
rw [f.map_smul]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝⁴ : CommSemiring R
inst✝³ : AddCommMonoid M
inst✝² : Module R M
I✝ J : Ideal R
N P : Submodule R M
S✝ : Set R
T : Set M
M' : Type w
inst✝¹ : AddCommMonoid M'
inst✝ : Module R M'
f : M →ₗ[R] M'
S : Submodule R M'
I : Ideal R
r : R
hr : r ∈ I
x : M
hx : ↑f x ∈ S
⊢ r • ↑f x ∈ I • S
[PROOFSTEP]
exact Submodule.smul_mem_smul hr hx
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
N✝ N₁ N₂ P P₁ P₂ N : Submodule R M
x : M
r : R
⊢ r ∈ colon N (span R {x}) ↔ ∀ (a : R), r • a • x ∈ N
[PROOFSTEP]
simp [Submodule.mem_colon, Submodule.mem_span_singleton]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
N✝ N₁ N₂ P P₁ P₂ N : Submodule R M
x : M
r : R
⊢ (∀ (a : R), r • a • x ∈ N) ↔ r • x ∈ N
[PROOFSTEP]
simp_rw [fun (a : R) ↦ smul_comm r a x]
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
N✝ N₁ N₂ P P₁ P₂ N : Submodule R M
x : M
r : R
⊢ (∀ (a : R), a • r • x ∈ N) ↔ r • x ∈ N
[PROOFSTEP]
exact SetLike.forall_smul_mem_iff
[GOAL]
R : Type u
M : Type v
F : Type u_1
G : Type u_2
inst✝² : CommRing R
inst✝¹ : AddCommGroup M
inst✝ : Module R M
N N₁ N₂ P P₁ P₂ : Submodule R M
I : Ideal R
x r : R
⊢ r ∈ colon I (Ideal.span {x}) ↔ r * x ∈ I
[PROOFSTEP]
simp only [← Ideal.submodule_span_eq, Submodule.mem_colon_singleton, smul_eq_mul]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
⊢ 1 = ⊤
[PROOFSTEP]
erw [Submodule.one_eq_range, LinearMap.range_id]
[GOAL]
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ (∀ (i : ι), i ∈ s → x i ∈ I i) → ∏ i in s, x i ∈ ∏ i in s, I i
[PROOFSTEP]
classical
refine Finset.induction_on s ?_ ?_
· intro
  rw [Finset.prod_empty, Finset.prod_empty, one_eq_top]
  exact Submodule.mem_top
· intro a s ha IH h
  rw [Finset.prod_insert ha, Finset.prod_insert ha]
  exact mul_mem_mul (h a <| Finset.mem_insert_self a s) (IH fun i hi => h i <| Finset.mem_insert_of_mem hi)
[GOAL]
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ (∀ (i : ι), i ∈ s → x i ∈ I i) → ∏ i in s, x i ∈ ∏ i in s, I i
[PROOFSTEP]
refine Finset.induction_on s ?_ ?_
[GOAL]
case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ (∀ (i : ι), i ∈ ∅ → x i ∈ I i) → ∏ i in ∅, x i ∈ ∏ i in ∅, I i
[PROOFSTEP]
intro
[GOAL]
case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
a✝ : ∀ (i : ι), i ∈ ∅ → x i ∈ I i
⊢ ∏ i in ∅, x i ∈ ∏ i in ∅, I i
[PROOFSTEP]
rw [Finset.prod_empty, Finset.prod_empty, one_eq_top]
[GOAL]
case refine_1
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
a✝ : ∀ (i : ι), i ∈ ∅ → x i ∈ I i
⊢ 1 ∈ ⊤
[PROOFSTEP]
exact Submodule.mem_top
[GOAL]
case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → Ideal R
x : ι → R
⊢ ∀ ⦃a : ι⦄ {s : Finset ι},
    ¬a ∈ s →
      ((∀ (i : ι), i ∈ s → x i ∈ I i) → ∏ i in s, x i ∈ ∏ i in s, I i) →
        (∀ (i : ι), i ∈ insert a s → x i ∈ I i) → ∏ i in insert a s, x i ∈ ∏ i in insert a s, I i
[PROOFSTEP]
intro a s ha IH h
[GOAL]
case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s✝ : Finset ι
I : ι → Ideal R
x : ι → R
a : ι
s : Finset ι
ha : ¬a ∈ s
IH : (∀ (i : ι), i ∈ s → x i ∈ I i) → ∏ i in s, x i ∈ ∏ i in s, I i
h : ∀ (i : ι), i ∈ insert a s → x i ∈ I i
⊢ ∏ i in insert a s, x i ∈ ∏ i in insert a s, I i
[PROOFSTEP]
rw [Finset.prod_insert ha, Finset.prod_insert ha]
[GOAL]
case refine_2
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s✝ : Finset ι
I : ι → Ideal R
x : ι → R
a : ι
s : Finset ι
ha : ¬a ∈ s
IH : (∀ (i : ι), i ∈ s → x i ∈ I i) → ∏ i in s, x i ∈ ∏ i in s, I i
h : ∀ (i : ι), i ∈ insert a s → x i ∈ I i
⊢ x a * ∏ x_1 in s, x x_1 ∈ I a * ∏ x in s, I x
[PROOFSTEP]
exact mul_mem_mul (h a <| Finset.mem_insert_self a s) (IH fun i hi => h i <| Finset.mem_insert_of_mem hi)
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
S T : Set R
⊢ span S * span T = span (S * T)
[PROOFSTEP]
unfold span
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
S T : Set R
⊢ Submodule.span R S * Submodule.span R T = Submodule.span R (S * T)
[PROOFSTEP]
rw [Submodule.span_mul_span]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
r s : R
⊢ span {r} * span {s} = span {r * s}
[PROOFSTEP]
unfold span
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
r s : R
⊢ Submodule.span R {r} * Submodule.span R {s} = Submodule.span R {r * s}
[PROOFSTEP]
rw [Submodule.span_mul_span, Set.singleton_mul_singleton]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
n : ℕ
⊢ span {s} ^ n = span {s ^ n}
[PROOFSTEP]
induction' n with n ih
[GOAL]
case zero
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
⊢ span {s} ^ Nat.zero = span {s ^ Nat.zero}
[PROOFSTEP]
simp [Set.singleton_one]
[GOAL]
case succ
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : R
n : ℕ
ih : span {s} ^ n = span {s ^ n}
⊢ span {s} ^ Nat.succ n = span {s ^ Nat.succ n}
[PROOFSTEP]
simp only [pow_succ, ih, span_singleton_mul_span_singleton]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
x y : R
I : Ideal R
⊢ x ∈ span {y} * I ↔ ∃ z, z ∈ I ∧ y * z = x
[PROOFSTEP]
simp only [mul_comm, mem_mul_span_singleton]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
⊢ (∀ {zI : R}, zI ∈ I → zI ∈ span {x} * J) ↔ ∀ (zI : R), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zJ = zI
[PROOFSTEP]
simp only [mem_span_singleton_mul]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
⊢ span {x} * I ≤ J ↔ ∀ (z : R), z ∈ I → x * z ∈ J
[PROOFSTEP]
simp only [mul_le, mem_span_singleton_mul, mem_span_singleton]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
⊢ (∀ (r : R), x ∣ r → ∀ (s : R), s ∈ I → r * s ∈ J) ↔ ∀ (z : R), z ∈ I → x * z ∈ J
[PROOFSTEP]
constructor
[GOAL]
case mp
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
⊢ (∀ (r : R), x ∣ r → ∀ (s : R), s ∈ I → r * s ∈ J) → ∀ (z : R), z ∈ I → x * z ∈ J
[PROOFSTEP]
intro h zI hzI
[GOAL]
case mp
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
h : ∀ (r : R), x ∣ r → ∀ (s : R), s ∈ I → r * s ∈ J
zI : R
hzI : zI ∈ I
⊢ x * zI ∈ J
[PROOFSTEP]
exact h x (dvd_refl x) zI hzI
[GOAL]
case mpr
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
⊢ (∀ (z : R), z ∈ I → x * z ∈ J) → ∀ (r : R), x ∣ r → ∀ (s : R), s ∈ I → r * s ∈ J
[PROOFSTEP]
rintro h _ ⟨z, rfl⟩ zI hzI
[GOAL]
case mpr.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
h : ∀ (z : R), z ∈ I → x * z ∈ J
z zI : R
hzI : zI ∈ I
⊢ x * z * zI ∈ J
[PROOFSTEP]
rw [mul_comm x z, mul_assoc]
[GOAL]
case mpr.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
h : ∀ (z : R), z ∈ I → x * z ∈ J
z zI : R
hzI : zI ∈ I
⊢ z * (x * zI) ∈ J
[PROOFSTEP]
exact J.mul_mem_left _ (h zI hzI)
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x y : R
I J : Ideal R
⊢ span {x} * I ≤ span {y} * J ↔ ∀ (zI : R), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zI = y * zJ
[PROOFSTEP]
simp only [span_singleton_mul_le_iff, mem_span_singleton_mul, eq_comm]
[GOAL]
R : Type u
ι : Type u_1
inst✝¹ : CommSemiring R
I J K L : Ideal R
inst✝ : IsDomain R
x : R
hx : x ≠ 0
⊢ span {x} * I ≤ span {x} * J ↔ I ≤ J
[PROOFSTEP]
simp_rw [span_singleton_mul_le_span_singleton_mul, mul_right_inj' hx, exists_eq_right', SetLike.le_def]
[GOAL]
R : Type u
ι : Type u_1
inst✝¹ : CommSemiring R
I J K L : Ideal R
inst✝ : IsDomain R
x : R
hx : x ≠ 0
⊢ I * span {x} ≤ J * span {x} ↔ I ≤ J
[PROOFSTEP]
simpa only [mul_comm I, mul_comm J] using span_singleton_mul_right_mono hx
[GOAL]
R : Type u
ι : Type u_1
inst✝¹ : CommSemiring R
I J K L : Ideal R
inst✝ : IsDomain R
x : R
hx : x ≠ 0
⊢ span {x} * I = span {x} * J ↔ I = J
[PROOFSTEP]
simp only [le_antisymm_iff, span_singleton_mul_right_mono hx]
[GOAL]
R : Type u
ι : Type u_1
inst✝¹ : CommSemiring R
I J K L : Ideal R
inst✝ : IsDomain R
x : R
hx : x ≠ 0
⊢ I * span {x} = J * span {x} ↔ I = J
[PROOFSTEP]
simp only [le_antisymm_iff, span_singleton_mul_left_mono hx]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x : R
I J : Ideal R
⊢ I = span {x} * J ↔ (∀ (zI : R), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zJ = zI) ∧ ∀ (z : R), z ∈ J → x * z ∈ I
[PROOFSTEP]
simp only [le_antisymm_iff, le_span_singleton_mul_iff, span_singleton_mul_le_iff]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L : Ideal R
x y : R
I J : Ideal R
⊢ span {x} * I = span {y} * J ↔
    (∀ (zI : R), zI ∈ I → ∃ zJ, zJ ∈ J ∧ x * zI = y * zJ) ∧ ∀ (zJ : R), zJ ∈ J → ∃ zI, zI ∈ I ∧ x * zI = y * zJ
[PROOFSTEP]
simp only [le_antisymm_iff, span_singleton_mul_le_span_singleton_mul, eq_comm]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
m : Multiset R
⊢ Multiset.prod (Multiset.map (fun x => span {x}) 0) = span {Multiset.prod 0}
[PROOFSTEP]
simp
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
m✝ : Multiset R
a : R
m : Multiset R
ih : Multiset.prod (Multiset.map (fun x => span {x}) m) = span {Multiset.prod m}
⊢ Multiset.prod (Multiset.map (fun x => span {x}) (a ::ₘ m)) = span {Multiset.prod (a ::ₘ m)}
[PROOFSTEP]
simp only [Multiset.map_cons, Multiset.prod_cons, ih, ← Ideal.span_singleton_mul_span_singleton]
[GOAL]
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → R
hI : Set.Pairwise (↑s) (IsCoprime on I)
⊢ (Finset.inf s fun i => span {I i}) = span {∏ i in s, I i}
[PROOFSTEP]
ext x
[GOAL]
case h
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → R
hI : Set.Pairwise (↑s) (IsCoprime on I)
x : R
⊢ (x ∈ Finset.inf s fun i => span {I i}) ↔ x ∈ span {∏ i in s, I i}
[PROOFSTEP]
simp only [Submodule.mem_finset_inf, Ideal.mem_span_singleton]
[GOAL]
case h
R : Type u
ι✝ : Type u_1
inst✝ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
s : Finset ι
I : ι → R
hI : Set.Pairwise (↑s) (IsCoprime on I)
x : R
⊢ (∀ (i : ι), i ∈ s → I i ∣ x) ↔ ∏ i in s, I i ∣ x
[PROOFSTEP]
exact ⟨Finset.prod_dvd_of_coprime hI, fun h i hi => (Finset.dvd_prod_of_mem _ hi).trans h⟩
[GOAL]
R : Type u
ι✝ : Type u_1
inst✝¹ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
inst✝ : Fintype ι
I : ι → R
hI : ∀ (i j : ι), i ≠ j → IsCoprime (I i) (I j)
⊢ ⨅ (i : ι), span {I i} = span {∏ i : ι, I i}
[PROOFSTEP]
rw [← Finset.inf_univ_eq_iInf, finset_inf_span_singleton]
[GOAL]
case hI
R : Type u
ι✝ : Type u_1
inst✝¹ : CommSemiring R
I✝ J K L : Ideal R
ι : Type u_2
inst✝ : Fintype ι
I : ι → R
hI : ∀ (i j : ι), i ≠ j → IsCoprime (I i) (I j)
⊢ Set.Pairwise (↑Finset.univ) (IsCoprime on fun i => I i)
[PROOFSTEP]
rwa [Finset.coe_univ, Set.pairwise_univ]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y : R
⊢ span {x} ⊔ span {y} = ⊤ ↔ IsCoprime x y
[PROOFSTEP]
rw [eq_top_iff_one, Submodule.mem_sup]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y : R
⊢ (∃ y_1, y_1 ∈ span {x} ∧ ∃ z, z ∈ span {y} ∧ y_1 + z = 1) ↔ IsCoprime x y
[PROOFSTEP]
constructor
[GOAL]
case mp
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y : R
⊢ (∃ y_1, y_1 ∈ span {x} ∧ ∃ z, z ∈ span {y} ∧ y_1 + z = 1) → IsCoprime x y
[PROOFSTEP]
rintro ⟨u, hu, v, hv, h1⟩
[GOAL]
case mp.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y u : R
hu : u ∈ span {x}
v : R
hv : v ∈ span {y}
h1 : u + v = 1
⊢ IsCoprime x y
[PROOFSTEP]
rw [mem_span_singleton'] at hu hv 
[GOAL]
case mp.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y u : R
hu : ∃ a, a * x = u
v : R
hv : ∃ a, a * y = v
h1 : u + v = 1
⊢ IsCoprime x y
[PROOFSTEP]
rw [← hu.choose_spec, ← hv.choose_spec] at h1 
[GOAL]
case mp.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y u : R
hu : ∃ a, a * x = u
v : R
hv : ∃ a, a * y = v
h1 : Exists.choose hu * x + Exists.choose hv * y = 1
⊢ IsCoprime x y
[PROOFSTEP]
exact ⟨_, _, h1⟩
[GOAL]
case mpr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝ : CommSemiring R
x y : R
⊢ IsCoprime x y → ∃ y_1, y_1 ∈ span {x} ∧ ∃ z, z ∈ span {y} ∧ y_1 + z = 1
[PROOFSTEP]
exact fun ⟨u, v, h1⟩ => ⟨_, mem_span_singleton'.mpr ⟨_, rfl⟩, _, mem_span_singleton'.mpr ⟨_, rfl⟩, h1⟩
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod s ≤ Multiset.inf s
[PROOFSTEP]
classical
refine' s.induction_on _ _
· rw [Multiset.inf_zero]
  exact le_top
intro a s ih
rw [Multiset.prod_cons, Multiset.inf_cons]
exact le_trans mul_le_inf (inf_le_inf le_rfl ih)
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod s ≤ Multiset.inf s
[PROOFSTEP]
refine' s.induction_on _ _
[GOAL]
case refine'_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod 0 ≤ Multiset.inf 0
[PROOFSTEP]
rw [Multiset.inf_zero]
[GOAL]
case refine'_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ Multiset.prod 0 ≤ ⊤
[PROOFSTEP]
exact le_top
[GOAL]
case refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
⊢ ∀ ⦃a : Ideal R⦄ {s : Multiset (Ideal R)},
    Multiset.prod s ≤ Multiset.inf s → Multiset.prod (a ::ₘ s) ≤ Multiset.inf (a ::ₘ s)
[PROOFSTEP]
intro a s ih
[GOAL]
case refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s✝ : Multiset (Ideal R)
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod s ≤ Multiset.inf s
⊢ Multiset.prod (a ::ₘ s) ≤ Multiset.inf (a ::ₘ s)
[PROOFSTEP]
rw [Multiset.prod_cons, Multiset.inf_cons]
[GOAL]
case refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s✝ : Multiset (Ideal R)
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod s ≤ Multiset.inf s
⊢ a * Multiset.prod s ≤ a ⊓ Multiset.inf s
[PROOFSTEP]
exact le_trans mul_le_inf (inf_le_inf le_rfl ih)
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ J = ⊤
i : R
hi : i ∈ I ⊔ K
⊢ i ∈ I ⊔ J * K
[PROOFSTEP]
rw [eq_top_iff_one] at h 
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : 1 ∈ I ⊔ J
i : R
hi : i ∈ I ⊔ K
⊢ i ∈ I ⊔ J * K
[PROOFSTEP]
rw [Submodule.mem_sup] at h hi ⊢
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : ∃ y, y ∈ I ∧ ∃ z, z ∈ J ∧ y + z = 1
i : R
hi : ∃ y, y ∈ I ∧ ∃ z, z ∈ K ∧ y + z = i
⊢ ∃ y, y ∈ I ∧ ∃ z, z ∈ J * K ∧ y + z = i
[PROOFSTEP]
obtain ⟨i1, hi1, j, hj, h⟩ := h
[GOAL]
case intro.intro.intro.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
i : R
hi : ∃ y, y ∈ I ∧ ∃ z, z ∈ K ∧ y + z = i
i1 : R
hi1 : i1 ∈ I
j : R
hj : j ∈ J
h : i1 + j = 1
⊢ ∃ y, y ∈ I ∧ ∃ z, z ∈ J * K ∧ y + z = i
[PROOFSTEP]
obtain ⟨i', hi', k, hk, hi⟩ := hi
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
i i1 : R
hi1 : i1 ∈ I
j : R
hj : j ∈ J
h : i1 + j = 1
i' : R
hi' : i' ∈ I
k : R
hk : k ∈ K
hi : i' + k = i
⊢ ∃ y, y ∈ I ∧ ∃ z, z ∈ J * K ∧ y + z = i
[PROOFSTEP]
refine' ⟨_, add_mem hi' (mul_mem_right k _ hi1), _, mul_mem_mul hj hk, _⟩
[GOAL]
case intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
i i1 : R
hi1 : i1 ∈ I
j : R
hj : j ∈ J
h : i1 + j = 1
i' : R
hi' : i' ∈ I
k : R
hk : k ∈ K
hi : i' + k = i
⊢ i' + i1 * k + j * k = i
[PROOFSTEP]
rw [add_assoc, ← add_mul, h, one_mul, hi]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ K = ⊤
⊢ I ⊔ J * K = I ⊔ J
[PROOFSTEP]
rw [mul_comm]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ K = ⊤
⊢ I ⊔ K * J = I ⊔ J
[PROOFSTEP]
exact sup_mul_eq_of_coprime_left h
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : I ⊔ J = ⊤
⊢ I * K ⊔ J = K ⊔ J
[PROOFSTEP]
rw [sup_comm] at h 
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : J ⊔ I = ⊤
⊢ I * K ⊔ J = K ⊔ J
[PROOFSTEP]
rw [sup_comm, sup_mul_eq_of_coprime_left h, sup_comm]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : K ⊔ J = ⊤
⊢ I * K ⊔ J = I ⊔ J
[PROOFSTEP]
rw [sup_comm] at h 
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
h : J ⊔ K = ⊤
⊢ I * K ⊔ J = I ⊔ J
[PROOFSTEP]
rw [sup_comm, sup_mul_eq_of_coprime_right h, sup_comm]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J✝ K L : Ideal R
s : Finset ι
J : ι → Ideal R
h : ∀ (i : ι), i ∈ s → I ⊔ J i = ⊤
⊢ (fun J => I ⊔ J = ⊤) 1
[PROOFSTEP]
simp_rw [one_eq_top, sup_top_eq]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n : ℕ
h : I ⊔ J = ⊤
⊢ I ⊔ J ^ n = ⊤
[PROOFSTEP]
rw [← Finset.card_range n, ← Finset.prod_const]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n : ℕ
h : I ⊔ J = ⊤
⊢ I ⊔ ∏ _x in Finset.range n, J = ⊤
[PROOFSTEP]
exact sup_prod_eq_top fun _ _ => h
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n : ℕ
h : I ⊔ J = ⊤
⊢ I ^ n ⊔ J = ⊤
[PROOFSTEP]
rw [← Finset.card_range n, ← Finset.prod_const]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n : ℕ
h : I ⊔ J = ⊤
⊢ (∏ _x in Finset.range n, I) ⊔ J = ⊤
[PROOFSTEP]
exact prod_sup_eq_top fun _ _ => h
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
⊢ I * ⊥ = ⊥
[PROOFSTEP]
simp
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
⊢ ⊥ * I = ⊥
[PROOFSTEP]
simp
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
m n : ℕ
h : m ≤ n
⊢ I ^ n ≤ I ^ m
[PROOFSTEP]
cases' Nat.exists_eq_add_of_le h with k hk
[GOAL]
case intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
m n : ℕ
h : m ≤ n
k : ℕ
hk : n = m + k
⊢ I ^ n ≤ I ^ m
[PROOFSTEP]
rw [hk, pow_add]
[GOAL]
case intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
m n : ℕ
h : m ≤ n
k : ℕ
hk : n = m + k
⊢ I ^ m * I ^ k ≤ I ^ m
[PROOFSTEP]
exact le_trans mul_le_inf inf_le_left
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L I J : Ideal R
e : I ≤ J
n : ℕ
⊢ I ^ n ≤ J ^ n
[PROOFSTEP]
induction' n with _ hn
[GOAL]
case zero
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L I J : Ideal R
e : I ≤ J
⊢ I ^ Nat.zero ≤ J ^ Nat.zero
[PROOFSTEP]
rw [pow_zero, pow_zero]
[GOAL]
case succ
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L I J : Ideal R
e : I ≤ J
n✝ : ℕ
hn : I ^ n✝ ≤ J ^ n✝
⊢ I ^ Nat.succ n✝ ≤ J ^ Nat.succ n✝
[PROOFSTEP]
rw [pow_succ, pow_succ]
[GOAL]
case succ
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J✝ K L I J : Ideal R
e : I ≤ J
n✝ : ℕ
hn : I ^ n✝ ≤ J ^ n✝
⊢ I * I ^ n✝ ≤ J * J ^ n✝
[PROOFSTEP]
exact Ideal.mul_mono e hn
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝² : CommSemiring R✝
I✝ J✝ K L : Ideal R✝
R : Type u_2
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
I J : Ideal R
h : I = ⊥ ∨ J = ⊥
⊢ I * J = ⊥
[PROOFSTEP]
cases' h with h h
[GOAL]
case inl
R✝ : Type u
ι : Type u_1
inst✝² : CommSemiring R✝
I✝ J✝ K L : Ideal R✝
R : Type u_2
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
I J : Ideal R
h : I = ⊥
⊢ I * J = ⊥
[PROOFSTEP]
rw [← Ideal.mul_bot, h, Ideal.mul_comm]
[GOAL]
case inr
R✝ : Type u
ι : Type u_1
inst✝² : CommSemiring R✝
I✝ J✝ K L : Ideal R✝
R : Type u_2
inst✝¹ : CommSemiring R
inst✝ : NoZeroDivisors R
I J : Ideal R
h : J = ⊥
⊢ I * J = ⊥
[PROOFSTEP]
rw [← Ideal.mul_bot, h, Ideal.mul_comm]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝² : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝¹ : CommRing R
inst✝ : IsDomain R
s : Multiset (Ideal R)
⊢ Multiset.prod s = ⊥ ↔ ∃ I, I ∈ s ∧ I = ⊥
[PROOFSTEP]
rw [bot_eq_zero, prod_zero_iff_exists_zero]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝² : CommSemiring R✝
I J K L : Ideal R✝
R : Type u_2
inst✝¹ : CommRing R
inst✝ : IsDomain R
s : Multiset (Ideal R)
⊢ (∃ r x, r = 0) ↔ ∃ I, I ∈ s ∧ I = 0
[PROOFSTEP]
simp
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
w x y z : R
⊢ span {w, x} * span {y, z} = span {w * y, w * z, x * y, x * z}
[PROOFSTEP]
simp_rw [span_insert, sup_mul, mul_sup, span_singleton_mul_span_singleton, sup_assoc]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
r s : R
⊢ s ∈
      {
            toAddSubsemigroup :=
              { carrier := {r | ∃ n, r ^ n ∈ I},
                add_mem' :=
                  (_ :
                    ∀ {x y : R}, x ∈ {r | ∃ n, r ^ n ∈ I} → y ∈ {r | ∃ n, r ^ n ∈ I} → x + y ∈ {r | ∃ n, r ^ n ∈ I}) },
            zero_mem' := (_ : ∃ n, 0 ^ n ∈ I) }.toAddSubsemigroup.carrier →
    r • s ∈
      {
            toAddSubsemigroup :=
              { carrier := {r | ∃ n, r ^ n ∈ I},
                add_mem' :=
                  (_ :
                    ∀ {x y : R}, x ∈ {r | ∃ n, r ^ n ∈ I} → y ∈ {r | ∃ n, r ^ n ∈ I} → x + y ∈ {r | ∃ n, r ^ n ∈ I}) },
            zero_mem' := (_ : ∃ n, 0 ^ n ∈ I) }.toAddSubsemigroup.carrier
[PROOFSTEP]
exact fun ⟨n, h⟩ ↦ ⟨n, (mul_pow r s n).symm ▸ I.mul_mem_left (r ^ n) h⟩
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
⊢ radical I = I ↔ IsRadical I
[PROOFSTEP]
rw [le_antisymm_iff, and_iff_left le_radical, IsRadical]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
⊢ radical (I * J) = radical I ⊓ radical J
[PROOFSTEP]
refine le_antisymm ?_ fun r ⟨⟨m, hrm⟩, ⟨n, hrn⟩⟩ => ⟨m + n, (pow_add r m n).symm ▸ mul_mem_mul hrm hrn⟩
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
⊢ radical (I * J) ≤ radical I ⊓ radical J
[PROOFSTEP]
have := radical_mono <| @mul_le_inf _ _ I J
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
this : radical (I * J) ≤ radical (I ⊓ J)
⊢ radical (I * J) ≤ radical I ⊓ radical J
[PROOFSTEP]
simp_rw [radical_inf I J] at this 
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
this : radical (I * J) ≤ radical I ⊓ radical J
⊢ radical (I * J) ≤ radical I ⊓ radical J
[PROOFSTEP]
assumption
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
r : R
hr : r ∈ sInf {J | I ≤ J ∧ IsPrime J}
hri : ¬r ∈ radical I
m : Ideal R
hrm : ¬r ∈ radical m
him : I ≤ m
hm : ∀ (z : Ideal R), z ∈ {K | ¬r ∈ radical K} → m ≤ z → z = m
this : ∀ (x : R), ¬x ∈ m → r ∈ radical (m ⊔ span {x})
⊢ m ≠ ⊤
[PROOFSTEP]
rintro rfl
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
r : R
hr : r ∈ sInf {J | I ≤ J ∧ IsPrime J}
hri : ¬r ∈ radical I
hrm : ¬r ∈ radical ⊤
him : I ≤ ⊤
hm : ∀ (z : Ideal R), z ∈ {K | ¬r ∈ radical K} → ⊤ ≤ z → z = ⊤
this : ∀ (x : R), ¬x ∈ ⊤ → r ∈ radical (⊤ ⊔ span {x})
⊢ False
[PROOFSTEP]
rw [radical_top] at hrm 
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
r : R
hr : r ∈ sInf {J | I ≤ J ∧ IsPrime J}
hri : ¬r ∈ radical I
hrm : ¬r ∈ ⊤
him : I ≤ ⊤
hm : ∀ (z : Ideal R), z ∈ {K | ¬r ∈ radical K} → ⊤ ≤ z → z = ⊤
this : ∀ (x : R), ¬x ∈ ⊤ → r ∈ radical (⊤ ⊔ span {x})
⊢ False
[PROOFSTEP]
exact hrm trivial
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
r : R
hr : r ∈ sInf {J | I ≤ J ∧ IsPrime J}
hri : ¬r ∈ radical I
m : Ideal R
hrm : ¬r ∈ radical m
him : I ≤ m
hm : ∀ (z : Ideal R), z ∈ {K | ¬r ∈ radical K} → m ≤ z → z = m
this : ∀ (x : R), ¬x ∈ m → r ∈ radical (m ⊔ span {x})
x y : R
hxym : x * y ∈ m
hxm : ¬x ∈ m
hym : ¬y ∈ m
n : ℕ
hrn : r ^ n ∈ m ⊔ span {x}
p : R
hpm : p ∈ m
q : R
hq : q ∈ span {x}
hpqrn : p + q = r ^ n
c : R
hcxq : c * x = q
k : ℕ
hrk : r ^ k ∈ m ⊔ span {y}
f : R
hfm : f ∈ m
g : R
hg : g ∈ span {y}
hfgrk : f + g = r ^ k
d : R
hdyg : d * y = g
⊢ r ^ (n + k) ∈ m
[PROOFSTEP]
rw [pow_add, ← hpqrn, ← hcxq, ← hfgrk, ← hdyg, add_mul, mul_add (c * x), mul_assoc c x (d * y), mul_left_comm x, ←
  mul_assoc]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
r : R
hr : r ∈ sInf {J | I ≤ J ∧ IsPrime J}
hri : ¬r ∈ radical I
m : Ideal R
hrm : ¬r ∈ radical m
him : I ≤ m
hm : ∀ (z : Ideal R), z ∈ {K | ¬r ∈ radical K} → m ≤ z → z = m
this : ∀ (x : R), ¬x ∈ m → r ∈ radical (m ⊔ span {x})
x y : R
hxym : x * y ∈ m
hxm : ¬x ∈ m
hym : ¬y ∈ m
n : ℕ
hrn : r ^ n ∈ m ⊔ span {x}
p : R
hpm : p ∈ m
q : R
hq : q ∈ span {x}
hpqrn : p + q = r ^ n
c : R
hcxq : c * x = q
k : ℕ
hrk : r ^ k ∈ m ⊔ span {y}
f : R
hfm : f ∈ m
g : R
hg : g ∈ span {y}
hfgrk : f + g = r ^ k
d : R
hdyg : d * y = g
⊢ p * (f + d * y) + (c * x * f + c * d * (x * y)) ∈ m
[PROOFSTEP]
refine' m.add_mem (m.mul_mem_right _ hpm) (m.add_mem (m.mul_mem_left _ hfm) (m.mul_mem_left _ hxym))
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ n : ℕ
ih : ⊤ ^ n = ⊤
⊢ ⊤ ^ Nat.succ n = ⊤
[PROOFSTEP]
rw [pow_succ, ih, top_mul]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n : ℕ
H : n > 0
⊢ ¬Nat.zero > 0
[PROOFSTEP]
decide
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ : ℕ
H✝¹ : n✝ > 0
n : ℕ
ih : n > 0 → radical (I ^ n) = radical I
H✝ : Nat.succ n > 0
H : 0 < n
⊢ radical (I ^ (n + 1)) = radical I ⊓ radical (I ^ n)
[PROOFSTEP]
rw [pow_succ]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ : ℕ
H✝¹ : n✝ > 0
n : ℕ
ih : n > 0 → radical (I ^ n) = radical I
H✝ : Nat.succ n > 0
H : 0 < n
⊢ radical (I * I ^ n) = radical I ⊓ radical (I ^ n)
[PROOFSTEP]
exact radical_mul _ _
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
n✝ : ℕ
H✝¹ : n✝ > 0
n : ℕ
ih : n > 0 → radical (I ^ n) = radical I
H✝ : Nat.succ n > 0
H : 0 < n
⊢ radical I ⊓ radical (I ^ n) = radical I ⊓ radical I
[PROOFSTEP]
rw [ih H]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
⊢ Multiset.prod s ≤ P ↔ ∃ I, I ∈ s ∧ I ≤ P
[PROOFSTEP]
suffices s.prod ≤ P → ∃ I ∈ s, I ≤ P from
  ⟨this, fun ⟨i, his, hip⟩ => le_trans multiset_prod_le_inf <| le_trans (Multiset.inf_le his) hip⟩
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
⊢ Multiset.prod s ≤ P → ∃ I, I ∈ s ∧ I ≤ P
[PROOFSTEP]
classical
obtain ⟨b, hb⟩ : ∃ b, b ∈ s := Multiset.exists_mem_of_ne_zero hne
obtain ⟨t, rfl⟩ : ∃ t, s = b ::ₘ t
exact ⟨s.erase b, (Multiset.cons_erase hb).symm⟩
refine' t.induction_on _ _
· simp only [exists_prop, Multiset.cons_zero, Multiset.prod_singleton, Multiset.mem_singleton, exists_eq_left, imp_self]
intro a s ih h
rw [Multiset.cons_swap, Multiset.prod_cons, hp.mul_le] at h 
rw [Multiset.cons_swap]
cases' h with h h
· exact ⟨a, Multiset.mem_cons_self a _, h⟩
obtain ⟨I, hI, ih⟩ : ∃ I ∈ b ::ₘ s, I ≤ P := ih h
exact ⟨I, Multiset.mem_cons_of_mem hI, ih⟩
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
⊢ Multiset.prod s ≤ P → ∃ I, I ∈ s ∧ I ≤ P
[PROOFSTEP]
obtain ⟨b, hb⟩ : ∃ b, b ∈ s := Multiset.exists_mem_of_ne_zero hne
[GOAL]
case intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
b : Ideal R
hb : b ∈ s
⊢ Multiset.prod s ≤ P → ∃ I, I ∈ s ∧ I ≤ P
[PROOFSTEP]
obtain ⟨t, rfl⟩ : ∃ t, s = b ::ₘ t
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset (Ideal R)
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
b : Ideal R
hb : b ∈ s
⊢ ∃ t, s = b ::ₘ t
case intro.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
⊢ Multiset.prod (b ::ₘ t) ≤ P → ∃ I, I ∈ b ::ₘ t ∧ I ≤ P
[PROOFSTEP]
exact ⟨s.erase b, (Multiset.cons_erase hb).symm⟩
[GOAL]
case intro.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
⊢ Multiset.prod (b ::ₘ t) ≤ P → ∃ I, I ∈ b ::ₘ t ∧ I ≤ P
[PROOFSTEP]
refine' t.induction_on _ _
[GOAL]
case intro.intro.refine'_1
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
⊢ Multiset.prod (b ::ₘ 0) ≤ P → ∃ I, I ∈ b ::ₘ 0 ∧ I ≤ P
[PROOFSTEP]
simp only [exists_prop, Multiset.cons_zero, Multiset.prod_singleton, Multiset.mem_singleton, exists_eq_left, imp_self]
[GOAL]
case intro.intro.refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
⊢ ∀ ⦃a : Ideal R⦄ {s : Multiset (Ideal R)},
    (Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P) →
      Multiset.prod (b ::ₘ a ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ a ::ₘ s ∧ I ≤ P
[PROOFSTEP]
intro a s ih h
[GOAL]
case intro.intro.refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P
h : Multiset.prod (b ::ₘ a ::ₘ s) ≤ P
⊢ ∃ I, I ∈ b ::ₘ a ::ₘ s ∧ I ≤ P
[PROOFSTEP]
rw [Multiset.cons_swap, Multiset.prod_cons, hp.mul_le] at h 
[GOAL]
case intro.intro.refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P
h : a ≤ P ∨ Multiset.prod (b ::ₘ s) ≤ P
⊢ ∃ I, I ∈ b ::ₘ a ::ₘ s ∧ I ≤ P
[PROOFSTEP]
rw [Multiset.cons_swap]
[GOAL]
case intro.intro.refine'_2
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P
h : a ≤ P ∨ Multiset.prod (b ::ₘ s) ≤ P
⊢ ∃ I, I ∈ a ::ₘ b ::ₘ s ∧ I ≤ P
[PROOFSTEP]
cases' h with h h
[GOAL]
case intro.intro.refine'_2.inl
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P
h : a ≤ P
⊢ ∃ I, I ∈ a ::ₘ b ::ₘ s ∧ I ≤ P
[PROOFSTEP]
exact ⟨a, Multiset.mem_cons_self a _, h⟩
[GOAL]
case intro.intro.refine'_2.inr
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
a : Ideal R
s : Multiset (Ideal R)
ih : Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P
h : Multiset.prod (b ::ₘ s) ≤ P
⊢ ∃ I, I ∈ a ::ₘ b ::ₘ s ∧ I ≤ P
[PROOFSTEP]
obtain ⟨I, hI, ih⟩ : ∃ I ∈ b ::ₘ s, I ≤ P := ih h
[GOAL]
case intro.intro.refine'_2.inr.intro.intro
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L P : Ideal R
hp : IsPrime P
b : Ideal R
t : Multiset (Ideal R)
hne : b ::ₘ t ≠ 0
hb : b ∈ b ::ₘ t
a : Ideal R
s : Multiset (Ideal R)
ih✝ : Multiset.prod (b ::ₘ s) ≤ P → ∃ I, I ∈ b ::ₘ s ∧ I ≤ P
h : Multiset.prod (b ::ₘ s) ≤ P
I : Ideal R
hI : I ∈ b ::ₘ s
ih : I ≤ P
⊢ ∃ I, I ∈ a ::ₘ b ::ₘ s ∧ I ≤ P
[PROOFSTEP]
exact ⟨I, Multiset.mem_cons_of_mem hI, ih⟩
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset ι
f : ι → Ideal R
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
⊢ Multiset.prod (Multiset.map f s) ≤ P ↔ ∃ i, i ∈ s ∧ f i ≤ P
[PROOFSTEP]
rw [hp.multiset_prod_le (mt Multiset.map_eq_zero.mp hne)]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
s : Multiset ι
f : ι → Ideal R
P : Ideal R
hp : IsPrime P
hne : s ≠ 0
⊢ (∃ I, I ∈ Multiset.map f s ∧ I ≤ P) ↔ ∃ i, i ∈ s ∧ f i ≤ P
[PROOFSTEP]
simp_rw [Multiset.mem_map, exists_exists_and_eq_and]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) ↔ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
suffices ((I : Set R) ⊆ f a ∪ f b ∪ ⋃ i ∈ (↑s : Set ι), f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i ∈ s, I ≤ f i from
  ⟨this, fun h =>
    Or.casesOn h
      (fun h => Set.Subset.trans h <| Set.Subset.trans (Set.subset_union_left _ _) (Set.subset_union_left _ _)) fun h =>
      Or.casesOn h
        (fun h => Set.Subset.trans h <| Set.Subset.trans (Set.subset_union_right _ _) (Set.subset_union_left _ _))
        fun ⟨i, his, hi⟩ => by refine' Set.Subset.trans hi <| Set.Subset.trans _ <| Set.subset_union_right _ _;
        exact Set.subset_biUnion_of_mem (u := fun x ↦ (f x : Set R)) (Finset.mem_coe.2 his)⟩
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
this : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
h✝ : I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
h : I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
x✝ : ∃ i, i ∈ s ∧ I ≤ f i
i : ι
his : i ∈ s
hi : I ≤ f i
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
[PROOFSTEP]
refine' Set.Subset.trans hi <| Set.Subset.trans _ <| Set.subset_union_right _ _
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
this : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
h✝ : I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
h : I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
x✝ : ∃ i, i ∈ s ∧ I ≤ f i
i : ι
his : i ∈ s
hi : I ≤ f i
⊢ ↑(f i) ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
[PROOFSTEP]
exact Set.subset_biUnion_of_mem (u := fun x ↦ (f x : Set R)) (Finset.mem_coe.2 his)
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
generalize hn : s.card = n
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n : ℕ
hn : Finset.card s = n
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
intro h
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n : ℕ
hn : Finset.card s = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
induction' n with n ih generalizing a b s
[GOAL]
case zero
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n : ℕ
hn✝ : Finset.card s✝ = n
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
s : Finset ι
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
hn : Finset.card s = Nat.zero
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
clear hp
[GOAL]
case zero
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n : ℕ
hn✝ : Finset.card s✝ = n
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
s : Finset ι
a b : ι
hn : Finset.card s = Nat.zero
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
rw [Finset.card_eq_zero] at hn 
[GOAL]
case zero
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n : ℕ
hn✝ : Finset.card s✝ = n
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
s : Finset ι
a b : ι
hn : s = ∅
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
subst hn
[GOAL]
case zero
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n : ℕ
hn : Finset.card s = n
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
a b : ι
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑∅), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ ∅ ∧ I ≤ f i
[PROOFSTEP]
rw [Finset.coe_empty, Set.biUnion_empty, Set.union_empty, subset_union] at h 
[GOAL]
case zero
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n : ℕ
hn : Finset.card s = n
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
a b : ι
h : I ≤ f a ∨ I ≤ f b
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ ∅ ∧ I ≤ f i
[PROOFSTEP]
simpa only [exists_prop, Finset.not_mem_empty, false_and_iff, exists_false, or_false_iff]
[GOAL]
case succ
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
s : Finset ι
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
hn : Finset.card s = Nat.succ n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
classical
replace hn : ∃ (i : ι) (t : Finset ι), i ∉ t ∧ insert i t = s ∧ t.card = n := Finset.card_eq_succ.1 hn
rcases hn with ⟨i, t, hit, rfl, hn⟩
replace hp : IsPrime (f i) ∧ ∀ x ∈ t, IsPrime (f x) := (t.forall_mem_insert _ _).1 hp
by_cases Ht : ∃ j ∈ t, f j ≤ f i
· obtain ⟨j, hjt, hfji⟩ : ∃ j ∈ t, f j ≤ f i := Ht
  obtain ⟨u, hju, rfl⟩ : ∃ u, j ∉ u ∧ insert j u = t := ⟨t.erase j, t.not_mem_erase j, Finset.insert_erase hjt⟩
  have hp' : ∀ k ∈ insert i u, IsPrime (f k) :=
    by
    rw [Finset.forall_mem_insert] at hp ⊢
    exact ⟨hp.1, hp.2.2⟩
  have hiu : i ∉ u := mt Finset.mem_insert_of_mem hit
  have hn' : (insert i u).card = n := by
    rwa [Finset.card_insert_of_not_mem] at hn ⊢
    exacts [hiu, hju]
  have h' : (I : Set R) ⊆ f a ∪ f b ∪ ⋃ k ∈ (↑(insert i u) : Set ι), f k :=
    by
    rw [Finset.coe_insert] at h ⊢
    rw [Finset.coe_insert] at h 
    simp only [Set.biUnion_insert] at h ⊢
    rw [← Set.union_assoc (f i : Set R)] at h 
    erw [Set.union_eq_self_of_subset_right hfji] at h 
    exact h
  specialize ih hp' hn' h'
  refine' ih.imp id (Or.imp id (Exists.imp fun k => _))
  exact And.imp (fun hk => Finset.insert_subset_insert i (Finset.subset_insert j u) hk) id
by_cases Ha : f a ≤ f i
· have h' : (I : Set R) ⊆ f i ∪ f b ∪ ⋃ j ∈ (↑t : Set ι), f j :=
    by
    rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_assoc, Set.union_right_comm (f a : Set R)] at h 
    erw [Set.union_eq_self_of_subset_left Ha] at h 
    exact h
  specialize ih hp.2 hn h'
  right
  rcases ih with (ih | ih | ⟨k, hkt, ih⟩)
  · exact Or.inr ⟨i, Finset.mem_insert_self i t, ih⟩
  · exact Or.inl ih
  · exact Or.inr ⟨k, Finset.mem_insert_of_mem hkt, ih⟩
by_cases Hb : f b ≤ f i
· have h' : (I : Set R) ⊆ f a ∪ f i ∪ ⋃ j ∈ (↑t : Set ι), f j :=
    by
    rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_assoc, Set.union_assoc (f a : Set R)] at h 
    erw [Set.union_eq_self_of_subset_left Hb] at h 
    exact h
  specialize ih hp.2 hn h'
  rcases ih with (ih | ih | ⟨k, hkt, ih⟩)
  · exact Or.inl ih
  · exact Or.inr (Or.inr ⟨i, Finset.mem_insert_self i t, ih⟩)
  · exact Or.inr (Or.inr ⟨k, Finset.mem_insert_of_mem hkt, ih⟩)
by_cases Hi : I ≤ f i
· exact Or.inr (Or.inr ⟨i, Finset.mem_insert_self i t, Hi⟩)
have : ¬I ⊓ f a ⊓ f b ⊓ t.inf f ≤ f i :=
  by
  rcases t.eq_empty_or_nonempty with (rfl | hsne)
  · rw [Finset.inf_empty, inf_top_eq, hp.1.inf_le, hp.1.inf_le, not_or, not_or]
    exact ⟨⟨Hi, Ha⟩, Hb⟩
  simp only [hp.1.inf_le, hp.1.inf_le' hsne, not_or]
  exact ⟨⟨⟨Hi, Ha⟩, Hb⟩, Ht⟩
rcases Set.not_subset.1 this with ⟨r, ⟨⟨⟨hrI, hra⟩, hrb⟩, hr⟩, hri⟩
by_cases HI : (I : Set R) ⊆ f a ∪ f b ∪ ⋃ j ∈ (↑t : Set ι), f j
· specialize ih hp.2 hn HI
  rcases ih with (ih | ih | ⟨k, hkt, ih⟩)
  · left
    exact ih
  · right
    left
    exact ih
  · right
    right
    exact ⟨k, Finset.mem_insert_of_mem hkt, ih⟩
exfalso
rcases Set.not_subset.1 HI with ⟨s, hsI, hs⟩
rw [Finset.coe_insert, Set.biUnion_insert] at h 
have hsi : s ∈ f i := ((h hsI).resolve_left (mt Or.inl hs)).resolve_right (mt Or.inr hs)
rcases h (I.add_mem hrI hsI) with (⟨ha | hb⟩ | hi | ht)
· exact hs (Or.inl <| Or.inl <| add_sub_cancel' r s ▸ (f a).sub_mem ha hra)
· exact hs (Or.inl <| Or.inr <| add_sub_cancel' r s ▸ (f b).sub_mem hb hrb)
· exact hri (add_sub_cancel r s ▸ (f i).sub_mem hi hsi)
· rw [Set.mem_iUnion₂] at ht 
  rcases ht with ⟨j, hjt, hj⟩
  simp only [Finset.inf_eq_iInf, SetLike.mem_coe, Submodule.mem_iInf] at hr 
  exact hs (Or.inr <| Set.mem_biUnion hjt <| add_sub_cancel' r s ▸ (f j).sub_mem hj <| hr j hjt)
[GOAL]
case succ
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
s : Finset ι
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
hn : Finset.card s = Nat.succ n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
replace hn : ∃ (i : ι) (t : Finset ι), i ∉ t ∧ insert i t = s ∧ t.card = n := Finset.card_eq_succ.1 hn
[GOAL]
case succ
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
s : Finset ι
a b : ι
hp : ∀ (i : ι), i ∈ s → IsPrime (f i)
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
hn : ∃ i t, ¬i ∈ t ∧ insert i t = s ∧ Finset.card t = n
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
rcases hn with ⟨i, t, hit, rfl, hn⟩
[GOAL]
case succ.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → IsPrime (f i_1)
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
replace hp : IsPrime (f i) ∧ ∀ x ∈ t, IsPrime (f x) := (t.forall_mem_insert _ _).1 hp
[GOAL]
case succ.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
by_cases Ht : ∃ j ∈ t, f j ≤ f i
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ∃ j, j ∈ t ∧ f j ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
obtain ⟨j, hjt, hfji⟩ : ∃ j ∈ t, f j ≤ f i := Ht
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
j : ι
hjt : j ∈ t
hfji : f j ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
obtain ⟨u, hju, rfl⟩ : ∃ u, j ∉ u ∧ insert j u = t := ⟨t.erase j, t.not_mem_erase j, Finset.insert_erase hjt⟩
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i (insert j u) ∧ I ≤ f i_1
[PROOFSTEP]
have hp' : ∀ k ∈ insert i u, IsPrime (f k) :=
  by
  rw [Finset.forall_mem_insert] at hp ⊢
  exact ⟨hp.1, hp.2.2⟩
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
⊢ ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
[PROOFSTEP]
rw [Finset.forall_mem_insert] at hp ⊢
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ IsPrime (f j) ∧ ∀ (x : ι), x ∈ u → IsPrime (f x)
hjt : j ∈ insert j u
⊢ IsPrime (f i) ∧ ∀ (x : ι), x ∈ u → IsPrime (f x)
[PROOFSTEP]
exact ⟨hp.1, hp.2.2⟩
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i (insert j u) ∧ I ≤ f i_1
[PROOFSTEP]
have hiu : i ∉ u := mt Finset.mem_insert_of_mem hit
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i (insert j u) ∧ I ≤ f i_1
[PROOFSTEP]
have hn' : (insert i u).card = n := by
  rwa [Finset.card_insert_of_not_mem] at hn ⊢
  exacts [hiu, hju]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
⊢ Finset.card (insert i u) = n
[PROOFSTEP]
rwa [Finset.card_insert_of_not_mem] at hn ⊢
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card u + 1 = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
⊢ ¬i ∈ u
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
⊢ ¬j ∈ u
[PROOFSTEP]
exacts [hiu, hju]
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i (insert j u) ∧ I ≤ f i_1
[PROOFSTEP]
have h' : (I : Set R) ⊆ f a ∪ f b ∪ ⋃ k ∈ (↑(insert i u) : Set ι), f k :=
  by
  rw [Finset.coe_insert] at h ⊢
  rw [Finset.coe_insert] at h 
  simp only [Set.biUnion_insert] at h ⊢
  rw [← Set.union_assoc (f i : Set R)] at h 
  erw [Set.union_eq_self_of_subset_right hfji] at h 
  exact h
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (k : ι) (_ : k ∈ ↑(insert i u)), ↑(f k)
[PROOFSTEP]
rw [Finset.coe_insert] at h ⊢
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ insert i ↑(insert j u)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (k : ι) (_ : k ∈ insert i ↑u), ↑(f k)
[PROOFSTEP]
rw [Finset.coe_insert] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ insert i (insert j ↑u)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (k : ι) (_ : k ∈ insert i ↑u), ↑(f k)
[PROOFSTEP]
simp only [Set.biUnion_insert] at h ⊢
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ (↑(f j) ∪ ⋃ (x : ι) (_ : x ∈ ↑u), ↑(f x)))
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑u), ↑(f x))
[PROOFSTEP]
rw [← Set.union_assoc (f i : Set R)] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ↑(f j) ∪ ⋃ (x : ι) (_ : x ∈ ↑u), ↑(f x))
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑u), ↑(f x))
[PROOFSTEP]
erw [Set.union_eq_self_of_subset_right hfji] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑u), ↑(f x))
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑u), ↑(f x))
[PROOFSTEP]
exact h
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
h' : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (k : ι) (_ : k ∈ ↑(insert i u)), ↑(f k)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i (insert j u) ∧ I ≤ f i_1
[PROOFSTEP]
specialize ih hp' hn' h'
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
h' : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (k : ι) (_ : k ∈ ↑(insert i u)), ↑(f k)
ih : I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i u ∧ I ≤ f i_1
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i (insert j u) ∧ I ≤ f i_1
[PROOFSTEP]
refine' ih.imp id (Or.imp id (Exists.imp fun k => _))
[GOAL]
case pos.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i j : ι
hfji : f j ≤ f i
u : Finset ι
hju : ¬j ∈ u
hit : ¬i ∈ insert j u
hn : Finset.card (insert j u) = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert j u))), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ insert j u → IsPrime (f x)
hjt : j ∈ insert j u
hp' : ∀ (k : ι), k ∈ insert i u → IsPrime (f k)
hiu : ¬i ∈ u
hn' : Finset.card (insert i u) = n
h' : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (k : ι) (_ : k ∈ ↑(insert i u)), ↑(f k)
ih : I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i u ∧ I ≤ f i_1
k : ι
⊢ k ∈ insert i u ∧ I ≤ f k → k ∈ insert i (insert j u) ∧ I ≤ f k
[PROOFSTEP]
exact And.imp (fun hk => Finset.insert_subset_insert i (Finset.subset_insert j u) hk) id
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
by_cases Ha : f a ≤ f i
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
have h' : (I : Set R) ⊆ f i ∪ f b ∪ ⋃ j ∈ (↑t : Set ι), f j :=
  by
  rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_assoc, Set.union_right_comm (f a : Set R)] at h 
  erw [Set.union_eq_self_of_subset_left Ha] at h 
  exact h
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
⊢ ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
[PROOFSTEP]
rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_assoc, Set.union_right_comm (f a : Set R)] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ↑(f b) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
⊢ ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
[PROOFSTEP]
erw [Set.union_eq_self_of_subset_left Ha] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
⊢ ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
[PROOFSTEP]
exact h
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
h' : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
specialize ih hp.2 hn h'
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
h' : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f i ∨ I ≤ f b ∨ ∃ i, i ∈ t ∧ I ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
right
[GOAL]
case pos.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
h' : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f i ∨ I ≤ f b ∨ ∃ i, i ∈ t ∧ I ≤ f i
⊢ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
rcases ih with (ih | ih | ⟨k, hkt, ih⟩)
[GOAL]
case pos.h.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
h' : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f i
⊢ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inr ⟨i, Finset.mem_insert_self i t, ih⟩
[GOAL]
case pos.h.inr.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
h' : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f b
⊢ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inl ih
[GOAL]
case pos.h.inr.inr.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : f a ≤ f i
h' : ↑I ⊆ ↑(f i) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
k : ι
hkt : k ∈ t
ih : I ≤ f k
⊢ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inr ⟨k, Finset.mem_insert_of_mem hkt, ih⟩
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
by_cases Hb : f b ≤ f i
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
have h' : (I : Set R) ⊆ f a ∪ f i ∪ ⋃ j ∈ (↑t : Set ι), f j :=
  by
  rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_assoc, Set.union_assoc (f a : Set R)] at h 
  erw [Set.union_eq_self_of_subset_left Hb] at h 
  exact h
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
[PROOFSTEP]
rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_assoc, Set.union_assoc (f a : Set R)] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ (↑(f b) ∪ ↑(f i)) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
[PROOFSTEP]
erw [Set.union_eq_self_of_subset_left Hb] at h 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
⊢ ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
[PROOFSTEP]
exact h
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
h' : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
specialize ih hp.2 hn h'
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
h' : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f a ∨ I ≤ f i ∨ ∃ i, i ∈ t ∧ I ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
rcases ih with (ih | ih | ⟨k, hkt, ih⟩)
[GOAL]
case pos.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
h' : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f a
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inl ih
[GOAL]
case pos.inr.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
h' : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inr (Or.inr ⟨i, Finset.mem_insert_self i t, ih⟩)
[GOAL]
case pos.inr.inr.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : f b ≤ f i
h' : ↑I ⊆ ↑(f a) ∪ ↑(f i) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
k : ι
hkt : k ∈ t
ih : I ≤ f k
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inr (Or.inr ⟨k, Finset.mem_insert_of_mem hkt, ih⟩)
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
by_cases Hi : I ≤ f i
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : I ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact Or.inr (Or.inr ⟨i, Finset.mem_insert_self i t, Hi⟩)
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
have : ¬I ⊓ f a ⊓ f b ⊓ t.inf f ≤ f i :=
  by
  rcases t.eq_empty_or_nonempty with (rfl | hsne)
  · rw [Finset.inf_empty, inf_top_eq, hp.1.inf_le, hp.1.inf_le, not_or, not_or]
    exact ⟨⟨Hi, Ha⟩, Hb⟩
  simp only [hp.1.inf_le, hp.1.inf_le' hsne, not_or]
  exact ⟨⟨⟨Hi, Ha⟩, Hb⟩, Ht⟩
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
⊢ ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
[PROOFSTEP]
rcases t.eq_empty_or_nonempty with (rfl | hsne)
[GOAL]
case inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
hit : ¬i ∈ ∅
hn : Finset.card ∅ = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i ∅)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ ∅ → IsPrime (f x)
Ht : ¬∃ j, j ∈ ∅ ∧ f j ≤ f i
⊢ ¬I ⊓ f a ⊓ f b ⊓ Finset.inf ∅ f ≤ f i
[PROOFSTEP]
rw [Finset.inf_empty, inf_top_eq, hp.1.inf_le, hp.1.inf_le, not_or, not_or]
[GOAL]
case inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
hit : ¬i ∈ ∅
hn : Finset.card ∅ = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i ∅)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ ∅ → IsPrime (f x)
Ht : ¬∃ j, j ∈ ∅ ∧ f j ≤ f i
⊢ (¬I ≤ f i ∧ ¬f a ≤ f i) ∧ ¬f b ≤ f i
[PROOFSTEP]
exact ⟨⟨Hi, Ha⟩, Hb⟩
[GOAL]
case inr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
hsne : Finset.Nonempty t
⊢ ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
[PROOFSTEP]
simp only [hp.1.inf_le, hp.1.inf_le' hsne, not_or]
[GOAL]
case inr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
hsne : Finset.Nonempty t
⊢ ((¬I ≤ f i ∧ ¬f a ≤ f i) ∧ ¬f b ≤ f i) ∧ ¬∃ i_1, i_1 ∈ t ∧ f i_1 ≤ f i
[PROOFSTEP]
exact ⟨⟨⟨Hi, Ha⟩, Hb⟩, Ht⟩
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
rcases Set.not_subset.1 this with ⟨r, ⟨⟨⟨hrI, hra⟩, hrb⟩, hr⟩, hri⟩
[GOAL]
case neg.intro.intro.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
by_cases HI : (I : Set R) ⊆ f a ∪ f b ∪ ⋃ j ∈ (↑t : Set ι), f j
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
specialize ih hp.2 hn HI
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ t ∧ I ≤ f i
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
rcases ih with (ih | ih | ⟨k, hkt, ih⟩)
[GOAL]
case pos.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f a
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
left
[GOAL]
case pos.inl.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f a
⊢ I ≤ f a
[PROOFSTEP]
exact ih
[GOAL]
case pos.inr.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f b
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
right
[GOAL]
case pos.inr.inl.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f b
⊢ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
left
[GOAL]
case pos.inr.inl.h.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
ih : I ≤ f b
⊢ I ≤ f b
[PROOFSTEP]
exact ih
[GOAL]
case pos.inr.inr.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
k : ι
hkt : k ∈ t
ih : I ≤ f k
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
right
[GOAL]
case pos.inr.inr.intro.intro.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
k : ι
hkt : k ∈ t
ih : I ≤ f k
⊢ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
right
[GOAL]
case pos.inr.inr.intro.intro.h.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
k : ι
hkt : k ∈ t
ih : I ≤ f k
⊢ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exact ⟨k, Finset.mem_insert_of_mem hkt, ih⟩
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ I ≤ f a ∨ I ≤ f b ∨ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
exfalso
[GOAL]
case neg.h
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ False
[PROOFSTEP]
rcases Set.not_subset.1 HI with ⟨s, hsI, hs⟩
[GOAL]
case neg.h.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ False
[PROOFSTEP]
rw [Finset.coe_insert, Set.biUnion_insert] at h 
[GOAL]
case neg.h.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
⊢ False
[PROOFSTEP]
have hsi : s ∈ f i := ((h hsI).resolve_left (mt Or.inl hs)).resolve_right (mt Or.inr hs)
[GOAL]
case neg.h.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
⊢ False
[PROOFSTEP]
rcases h (I.add_mem hrI hsI) with (⟨ha | hb⟩ | hi | ht)
[GOAL]
case neg.h.intro.intro.inl.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
ha : r + s ∈ ↑(f a)
⊢ False
[PROOFSTEP]
exact hs (Or.inl <| Or.inl <| add_sub_cancel' r s ▸ (f a).sub_mem ha hra)
[GOAL]
case neg.h.intro.intro.inl.inr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
hb : r + s ∈ ↑(f b)
⊢ False
[PROOFSTEP]
exact hs (Or.inl <| Or.inr <| add_sub_cancel' r s ▸ (f b).sub_mem hb hrb)
[GOAL]
case neg.h.intro.intro.inr.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
hi : r + s ∈ ↑(f i)
⊢ False
[PROOFSTEP]
exact hri (add_sub_cancel r s ▸ (f i).sub_mem hi hsi)
[GOAL]
case neg.h.intro.intro.inr.inr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
ht : r + s ∈ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x)
⊢ False
[PROOFSTEP]
rw [Set.mem_iUnion₂] at ht 
[GOAL]
case neg.h.intro.intro.inr.inr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
ht : ∃ i j, r + s ∈ ↑(f i)
⊢ False
[PROOFSTEP]
rcases ht with ⟨j, hjt, hj⟩
[GOAL]
case neg.h.intro.intro.inr.inr.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hr : r ∈ ↑(Finset.inf t f)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
j : ι
hjt : j ∈ ↑t
hj : r + s ∈ ↑(f j)
⊢ False
[PROOFSTEP]
simp only [Finset.inf_eq_iInf, SetLike.mem_coe, Submodule.mem_iInf] at hr 
[GOAL]
case neg.h.intro.intro.inr.inr.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s✝ : Finset ι
f : ι → Ideal R
a✝ b✝ : ι
hp✝ : ∀ (i : ι), i ∈ s✝ → IsPrime (f i)
I : Ideal R
n✝ : ℕ
hn✝ : Finset.card s✝ = n✝
h✝ : ↑I ⊆ ↑(f a✝) ∪ ↑(f b✝) ∪ ⋃ (i : ι) (_ : i ∈ ↑s✝), ↑(f i)
n : ℕ
ih :
  ∀ {s : Finset ι} {a b : ι},
    (∀ (i : ι), i ∈ s → IsPrime (f i)) →
      Finset.card s = n →
        ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ s ∧ I ≤ f i
a b i : ι
t : Finset ι
hit : ¬i ∈ t
hn : Finset.card t = n
h : ↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ (↑(f i) ∪ ⋃ (x : ι) (_ : x ∈ ↑t), ↑(f x))
hp : IsPrime (f i) ∧ ∀ (x : ι), x ∈ t → IsPrime (f x)
Ht : ¬∃ j, j ∈ t ∧ f j ≤ f i
Ha : ¬f a ≤ f i
Hb : ¬f b ≤ f i
Hi : ¬I ≤ f i
this : ¬I ⊓ f a ⊓ f b ⊓ Finset.inf t f ≤ f i
r : R
hri : ¬r ∈ ↑(f i)
hrb : r ∈ ↑(f b)
hrI : r ∈ ↑I
hra : r ∈ ↑(f a)
HI : ¬↑I ⊆ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
s : R
hsI : s ∈ ↑I
hs : ¬s ∈ ↑(f a) ∪ ↑(f b) ∪ ⋃ (j : ι) (_ : j ∈ ↑t), ↑(f j)
hsi : s ∈ f i
j : ι
hjt : j ∈ ↑t
hj : r + s ∈ ↑(f j)
hr : ∀ (i : ι), i ∈ t → r ∈ f i
⊢ False
[PROOFSTEP]
exact hs (Or.inr <| Set.mem_biUnion hjt <| add_sub_cancel' r s ▸ (f j).sub_mem hj <| hr j hjt)
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
classical
by_cases has : a ∈ s
· obtain ⟨t, hat, rfl⟩ : ∃ t, a ∉ t ∧ insert a t = s := ⟨s.erase a, Finset.not_mem_erase a s, Finset.insert_erase has⟩
  by_cases hbt : b ∈ t
  · obtain ⟨u, hbu, rfl⟩ : ∃ u, b ∉ u ∧ insert b u = t := ⟨t.erase b, Finset.not_mem_erase b t, Finset.insert_erase hbt⟩
    have hp' : ∀ i ∈ u, IsPrime (f i) := by
      intro i hiu
      refine' hp i (Finset.mem_insert_of_mem (Finset.mem_insert_of_mem hiu)) _ _ <;> rintro rfl <;>
        solve_by_elim only [Finset.mem_insert_of_mem, *]
    rw [Finset.coe_insert, Finset.coe_insert, Set.biUnion_insert, Set.biUnion_insert, ← Set.union_assoc,
      subset_union_prime' hp'] at h 
    rwa [Finset.exists_mem_insert, Finset.exists_mem_insert]
  · have hp' : ∀ j ∈ t, IsPrime (f j) := by
      intro j hj
      refine' hp j (Finset.mem_insert_of_mem hj) _ _ <;> rintro rfl <;> solve_by_elim only [Finset.mem_insert_of_mem, *]
    rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_self (f a : Set R), subset_union_prime' hp', ← or_assoc,
      or_self_iff] at h 
    rwa [Finset.exists_mem_insert]
· by_cases hbs : b ∈ s
  · obtain ⟨t, hbt, rfl⟩ : ∃ t, b ∉ t ∧ insert b t = s := ⟨s.erase b, Finset.not_mem_erase b s, Finset.insert_erase hbs⟩
    have hp' : ∀ j ∈ t, IsPrime (f j) := by
      intro j hj
      refine' hp j (Finset.mem_insert_of_mem hj) _ _ <;> rintro rfl <;> solve_by_elim only [Finset.mem_insert_of_mem, *]
    rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_self (f b : Set R), subset_union_prime' hp', ← or_assoc,
      or_self_iff] at h 
    rwa [Finset.exists_mem_insert]
  cases' s.eq_empty_or_nonempty with hse hsne
  · subst hse
    rw [Finset.coe_empty, Set.biUnion_empty, Set.subset_empty_iff] at h 
    have : (I : Set R) ≠ ∅ := Set.Nonempty.ne_empty (Set.nonempty_of_mem I.zero_mem)
    exact absurd h this
  · cases' hsne.bex with i his
    obtain ⟨t, _, rfl⟩ : ∃ t, i ∉ t ∧ insert i t = s := ⟨s.erase i, Finset.not_mem_erase i s, Finset.insert_erase his⟩
    have hp' : ∀ j ∈ t, IsPrime (f j) := by
      intro j hj
      refine' hp j (Finset.mem_insert_of_mem hj) _ _ <;> rintro rfl <;> solve_by_elim only [Finset.mem_insert_of_mem, *]
    rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_self (f i : Set R), subset_union_prime' hp', ← or_assoc,
      or_self_iff] at h 
    rwa [Finset.exists_mem_insert]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
by_cases has : a ∈ s
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : a ∈ s
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
obtain ⟨t, hat, rfl⟩ : ∃ t, a ∉ t ∧ insert a t = s := ⟨s.erase a, Finset.not_mem_erase a s, Finset.insert_erase has⟩
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
⊢ ∃ i, i ∈ insert a t ∧ I ≤ f i
[PROOFSTEP]
by_cases hbt : b ∈ t
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : b ∈ t
⊢ ∃ i, i ∈ insert a t ∧ I ≤ f i
[PROOFSTEP]
obtain ⟨u, hbu, rfl⟩ : ∃ u, b ∉ u ∧ insert b u = t := ⟨t.erase b, Finset.not_mem_erase b t, Finset.insert_erase hbt⟩
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a (insert b u))), ↑(f i)
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
⊢ ∃ i, i ∈ insert a (insert b u) ∧ I ≤ f i
[PROOFSTEP]
have hp' : ∀ i ∈ u, IsPrime (f i) := by
  intro i hiu
  refine' hp i (Finset.mem_insert_of_mem (Finset.mem_insert_of_mem hiu)) _ _ <;> rintro rfl <;>
    solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a (insert b u))), ↑(f i)
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
⊢ ∀ (i : ι), i ∈ u → IsPrime (f i)
[PROOFSTEP]
intro i hiu
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a (insert b u))), ↑(f i)
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
i : ι
hiu : i ∈ u
⊢ IsPrime (f i)
[PROOFSTEP]
refine' hp i (Finset.mem_insert_of_mem (Finset.mem_insert_of_mem hiu)) _ _
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a (insert b u))), ↑(f i)
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
i : ι
hiu : i ∈ u
⊢ i ≠ a
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a (insert b u))), ↑(f i)
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
i : ι
hiu : i ∈ u
⊢ i ≠ b
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hbt : b ∈ insert b u
i : ι
hiu : i ∈ u
hat : ¬i ∈ insert b u
hp : ∀ (i_1 : ι), i_1 ∈ insert i (insert b u) → i_1 ≠ i → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i (insert b u))), ↑(f i_1)
has : i ∈ insert i (insert b u)
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a : ι
I : Ideal R
u : Finset ι
i : ι
hiu : i ∈ u
hbu : ¬i ∈ u
hat : ¬a ∈ insert i u
hp : ∀ (i_1 : ι), i_1 ∈ insert a (insert i u) → i_1 ≠ a → i_1 ≠ i → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert a (insert i u))), ↑(f i_1)
has : a ∈ insert a (insert i u)
hbt : i ∈ insert i u
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a (insert b u))), ↑(f i)
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
hp' : ∀ (i : ι), i ∈ u → IsPrime (f i)
⊢ ∃ i, i ∈ insert a (insert b u) ∧ I ≤ f i
[PROOFSTEP]
rw [Finset.coe_insert, Finset.coe_insert, Set.biUnion_insert, Set.biUnion_insert, ← Set.union_assoc,
  subset_union_prime' hp'] at h 
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
u : Finset ι
hbu : ¬b ∈ u
hat : ¬a ∈ insert b u
hp : ∀ (i : ι), i ∈ insert a (insert b u) → i ≠ a → i ≠ b → IsPrime (f i)
h : I ≤ f a ∨ I ≤ f b ∨ ∃ i, i ∈ u ∧ I ≤ f i
has : a ∈ insert a (insert b u)
hbt : b ∈ insert b u
hp' : ∀ (i : ι), i ∈ u → IsPrime (f i)
⊢ ∃ i, i ∈ insert a (insert b u) ∧ I ≤ f i
[PROOFSTEP]
rwa [Finset.exists_mem_insert, Finset.exists_mem_insert]
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : ¬b ∈ t
⊢ ∃ i, i ∈ insert a t ∧ I ≤ f i
[PROOFSTEP]
have hp' : ∀ j ∈ t, IsPrime (f j) := by
  intro j hj
  refine' hp j (Finset.mem_insert_of_mem hj) _ _ <;> rintro rfl <;> solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : ¬b ∈ t
⊢ ∀ (j : ι), j ∈ t → IsPrime (f j)
[PROOFSTEP]
intro j hj
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : ¬b ∈ t
j : ι
hj : j ∈ t
⊢ IsPrime (f j)
[PROOFSTEP]
refine' hp j (Finset.mem_insert_of_mem hj) _ _
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : ¬b ∈ t
j : ι
hj : j ∈ t
⊢ j ≠ a
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : ¬b ∈ t
j : ι
hj : j ∈ t
⊢ j ≠ b
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
j : ι
hj : j ∈ t
hat : ¬j ∈ t
hp : ∀ (i : ι), i ∈ insert j t → i ≠ j → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert j t)), ↑(f i)
has : j ∈ insert j t
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
j : ι
hj : j ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ j → IsPrime (f i)
hbt : ¬j ∈ t
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert a t)), ↑(f i)
has : a ∈ insert a t
hbt : ¬b ∈ t
hp' : ∀ (j : ι), j ∈ t → IsPrime (f j)
⊢ ∃ i, i ∈ insert a t ∧ I ≤ f i
[PROOFSTEP]
rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_self (f a : Set R), subset_union_prime' hp', ← or_assoc,
  or_self_iff] at h 
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hat : ¬a ∈ t
hp : ∀ (i : ι), i ∈ insert a t → i ≠ a → i ≠ b → IsPrime (f i)
h : I ≤ f a ∨ ∃ i, i ∈ t ∧ I ≤ f i
has : a ∈ insert a t
hbt : ¬b ∈ t
hp' : ∀ (j : ι), j ∈ t → IsPrime (f j)
⊢ ∃ i, i ∈ insert a t ∧ I ≤ f i
[PROOFSTEP]
rwa [Finset.exists_mem_insert]
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : ¬a ∈ s
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
by_cases hbs : b ∈ s
[GOAL]
case pos
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : ¬a ∈ s
hbs : b ∈ s
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
obtain ⟨t, hbt, rfl⟩ : ∃ t, b ∉ t ∧ insert b t = s := ⟨s.erase b, Finset.not_mem_erase b s, Finset.insert_erase hbs⟩
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
⊢ ∃ i, i ∈ insert b t ∧ I ≤ f i
[PROOFSTEP]
have hp' : ∀ j ∈ t, IsPrime (f j) := by
  intro j hj
  refine' hp j (Finset.mem_insert_of_mem hj) _ _ <;> rintro rfl <;> solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
⊢ ∀ (j : ι), j ∈ t → IsPrime (f j)
[PROOFSTEP]
intro j hj
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
j : ι
hj : j ∈ t
⊢ IsPrime (f j)
[PROOFSTEP]
refine' hp j (Finset.mem_insert_of_mem hj) _ _
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
j : ι
hj : j ∈ t
⊢ j ≠ a
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
j : ι
hj : j ∈ t
⊢ j ≠ b
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
hbs : b ∈ insert b t
j : ι
hj : j ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ j → i ≠ b → IsPrime (f i)
has : ¬j ∈ insert b t
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a : ι
I : Ideal R
t : Finset ι
j : ι
hj : j ∈ t
hbt : ¬j ∈ t
hp : ∀ (i : ι), i ∈ insert j t → i ≠ a → i ≠ j → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert j t)), ↑(f i)
has : ¬a ∈ insert j t
hbs : j ∈ insert j t
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑(insert b t)), ↑(f i)
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
hp' : ∀ (j : ι), j ∈ t → IsPrime (f j)
⊢ ∃ i, i ∈ insert b t ∧ I ≤ f i
[PROOFSTEP]
rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_self (f b : Set R), subset_union_prime' hp', ← or_assoc,
  or_self_iff] at h 
[GOAL]
case pos.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
t : Finset ι
hbt : ¬b ∈ t
hp : ∀ (i : ι), i ∈ insert b t → i ≠ a → i ≠ b → IsPrime (f i)
h : I ≤ f b ∨ ∃ i, i ∈ t ∧ I ≤ f i
has : ¬a ∈ insert b t
hbs : b ∈ insert b t
hp' : ∀ (j : ι), j ∈ t → IsPrime (f j)
⊢ ∃ i, i ∈ insert b t ∧ I ≤ f i
[PROOFSTEP]
rwa [Finset.exists_mem_insert]
[GOAL]
case neg
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : ¬a ∈ s
hbs : ¬b ∈ s
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
cases' s.eq_empty_or_nonempty with hse hsne
[GOAL]
case neg.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : ¬a ∈ s
hbs : ¬b ∈ s
hse : s = ∅
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
subst hse
[GOAL]
case neg.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
hp : ∀ (i : ι), i ∈ ∅ → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑∅), ↑(f i)
has : ¬a ∈ ∅
hbs : ¬b ∈ ∅
⊢ ∃ i, i ∈ ∅ ∧ I ≤ f i
[PROOFSTEP]
rw [Finset.coe_empty, Set.biUnion_empty, Set.subset_empty_iff] at h 
[GOAL]
case neg.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
hp : ∀ (i : ι), i ∈ ∅ → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I = ∅
has : ¬a ∈ ∅
hbs : ¬b ∈ ∅
⊢ ∃ i, i ∈ ∅ ∧ I ≤ f i
[PROOFSTEP]
have : (I : Set R) ≠ ∅ := Set.Nonempty.ne_empty (Set.nonempty_of_mem I.zero_mem)
[GOAL]
case neg.inl
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
hp : ∀ (i : ι), i ∈ ∅ → i ≠ a → i ≠ b → IsPrime (f i)
h : ↑I = ∅
has : ¬a ∈ ∅
hbs : ¬b ∈ ∅
this : ↑I ≠ ∅
⊢ ∃ i, i ∈ ∅ ∧ I ≤ f i
[PROOFSTEP]
exact absurd h this
[GOAL]
case neg.inr
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : ¬a ∈ s
hbs : ¬b ∈ s
hsne : Finset.Nonempty s
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
cases' hsne.bex with i his
[GOAL]
case neg.inr.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
h : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
has : ¬a ∈ s
hbs : ¬b ∈ s
hsne : Finset.Nonempty s
i : ι
his : i ∈ s
⊢ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
obtain ⟨t, _, rfl⟩ : ∃ t, i ∉ t ∧ insert i t = s := ⟨s.erase i, Finset.not_mem_erase i s, Finset.insert_erase his⟩
[GOAL]
case neg.inr.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
⊢ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
have hp' : ∀ j ∈ t, IsPrime (f j) := by
  intro j hj
  refine' hp j (Finset.mem_insert_of_mem hj) _ _ <;> rintro rfl <;> solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
⊢ ∀ (j : ι), j ∈ t → IsPrime (f j)
[PROOFSTEP]
intro j hj
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
j : ι
hj : j ∈ t
⊢ IsPrime (f j)
[PROOFSTEP]
refine' hp j (Finset.mem_insert_of_mem hj) _ _
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
j : ι
hj : j ∈ t
⊢ j ≠ a
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
j : ι
hj : j ∈ t
⊢ j ≠ b
[PROOFSTEP]
rintro rfl
[GOAL]
case refine'_1
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
j : ι
hj : j ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ j → i_1 ≠ b → IsPrime (f i_1)
has : ¬j ∈ insert i t
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case refine'_2
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
j : ι
hj : j ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ j → IsPrime (f i_1)
hbs : ¬j ∈ insert i t
⊢ False
[PROOFSTEP]
solve_by_elim only [Finset.mem_insert_of_mem, *]
[GOAL]
case neg.inr.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : ↑I ⊆ ⋃ (i_1 : ι) (_ : i_1 ∈ ↑(insert i t)), ↑(f i_1)
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
hp' : ∀ (j : ι), j ∈ t → IsPrime (f j)
⊢ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
rw [Finset.coe_insert, Set.biUnion_insert, ← Set.union_self (f i : Set R), subset_union_prime' hp', ← or_assoc,
  or_self_iff] at h 
[GOAL]
case neg.inr.intro.intro.intro
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
f : ι → Ideal R
a b : ι
I : Ideal R
i : ι
t : Finset ι
left✝ : ¬i ∈ t
hp : ∀ (i_1 : ι), i_1 ∈ insert i t → i_1 ≠ a → i_1 ≠ b → IsPrime (f i_1)
h : I ≤ f i ∨ ∃ i, i ∈ t ∧ I ≤ f i
has : ¬a ∈ insert i t
hbs : ¬b ∈ insert i t
hsne : Finset.Nonempty (insert i t)
his : i ∈ insert i t
hp' : ∀ (j : ι), j ∈ t → IsPrime (f j)
⊢ ∃ i_1, i_1 ∈ insert i t ∧ I ≤ f i_1
[PROOFSTEP]
rwa [Finset.exists_mem_insert]
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
this : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → ∃ i, i ∈ s ∧ I ≤ f i
⊢ ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) ↔ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
have aux := fun h => (bex_def.2 <| this h)
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
this : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → ∃ i, i ∈ s ∧ I ≤ f i
aux : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → ∃ x x_1, I ≤ f x
⊢ ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) ↔ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
simp_rw [exists_prop] at aux 
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
this aux : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → ∃ x, x ∈ s ∧ I ≤ f x
⊢ ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) ↔ ∃ i, i ∈ s ∧ I ≤ f i
[PROOFSTEP]
refine ⟨aux, fun ⟨i, his, hi⟩ ↦ Set.Subset.trans hi ?_⟩
[GOAL]
R✝ : Type u
ι : Type u_1
inst✝¹ : CommSemiring R✝
I✝ J K L : Ideal R✝
R : Type u
inst✝ : CommRing R
s : Finset ι
f : ι → Ideal R
a b : ι
hp : ∀ (i : ι), i ∈ s → i ≠ a → i ≠ b → IsPrime (f i)
I : Ideal R
this aux : ↑I ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i) → ∃ x, x ∈ s ∧ I ≤ f x
x✝ : ∃ i, i ∈ s ∧ I ≤ f i
i : ι
his : i ∈ s
hi : I ≤ f i
⊢ ↑(f i) ⊆ ⋃ (i : ι) (_ : i ∈ ↑s), ↑(f i)
[PROOFSTEP]
apply Set.subset_biUnion_of_mem (show i ∈ (↑s : Set ι) from his)
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I✝ J K L I : Ideal R
h : I = ⊤
⊢ ⊤ = I * ⊤
[PROOFSTEP]
rw [mul_top, h]
[GOAL]
R : Type u
ι : Type u_1
inst✝ : CommSemiring R
I J K L : Ideal R
u : (Ideal R)ˣ
⊢ ↑u = 1
[PROOFSTEP]
rw [isUnit_iff.mp u.isUnit, one_eq_top]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L I : Ideal S
x y : R
hx : x ∈ ↑f ⁻¹' ↑I
hy : y ∈ ↑f ⁻¹' ↑I
⊢ x + y ∈ ↑f ⁻¹' ↑I
[PROOFSTEP]
simp only [Set.mem_preimage, SetLike.mem_coe, map_add] at hx hy ⊢
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L I : Ideal S
x y : R
hx : ↑f x ∈ I
hy : ↑f y ∈ I
⊢ ↑f x + ↑f y ∈ I
[PROOFSTEP]
exact add_mem hx hy
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L I : Ideal S
⊢ 0 ∈ { carrier := ↑f ⁻¹' ↑I, add_mem' := (_ : ∀ {x y : R}, x ∈ ↑f ⁻¹' ↑I → y ∈ ↑f ⁻¹' ↑I → x + y ∈ ↑f ⁻¹' ↑I) }.carrier
[PROOFSTEP]
simp only [Set.mem_preimage, map_zero, SetLike.mem_coe, Submodule.zero_mem]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L I : Ideal S
c x : R
hx :
  x ∈
    {
          toAddSubsemigroup :=
            { carrier := ↑f ⁻¹' ↑I, add_mem' := (_ : ∀ {x y : R}, x ∈ ↑f ⁻¹' ↑I → y ∈ ↑f ⁻¹' ↑I → x + y ∈ ↑f ⁻¹' ↑I) },
          zero_mem' := (_ : 0 ∈ ↑f ⁻¹' ↑I) }.toAddSubsemigroup.carrier
⊢ c • x ∈
    {
          toAddSubsemigroup :=
            { carrier := ↑f ⁻¹' ↑I, add_mem' := (_ : ∀ {x y : R}, x ∈ ↑f ⁻¹' ↑I → y ∈ ↑f ⁻¹' ↑I → x + y ∈ ↑f ⁻¹' ↑I) },
          zero_mem' := (_ : 0 ∈ ↑f ⁻¹' ↑I) }.toAddSubsemigroup.carrier
[PROOFSTEP]
simp only [smul_eq_mul, Set.mem_preimage, map_mul, SetLike.mem_coe] at *
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L I : Ideal S
c x : R
hx : ↑f x ∈ I
⊢ ↑f c * ↑f x ∈ I
[PROOFSTEP]
exact mul_mem_left I _ hx
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
hK : K ≠ ⊤
⊢ ¬1 ∈ comap f K
[PROOFSTEP]
rw [mem_comap, map_one]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
hK : K ≠ ⊤
⊢ ¬1 ∈ K
[PROOFSTEP]
exact (ne_top_iff_one _).1 hK
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ↑g ↑f ↑I
⊢ map f I ≤ comap g I
[PROOFSTEP]
refine' Ideal.span_le.2 _
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ↑g ↑f ↑I
⊢ ↑f '' ↑I ⊆ ↑(comap g I)
[PROOFSTEP]
rintro x ⟨x, hx, rfl⟩
[GOAL]
case intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ↑g ↑f ↑I
x : R
hx : x ∈ ↑I
⊢ ↑f x ∈ ↑(comap g I)
[PROOFSTEP]
rw [SetLike.mem_coe, mem_comap, hf hx]
[GOAL]
case intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
g : G
I : Ideal R
hf : Set.LeftInvOn ↑g ↑f ↑I
x : R
hx : x ∈ ↑I
⊢ x ∈ I
[PROOFSTEP]
exact hx
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
hK : IsPrime K
x y : R
⊢ x * y ∈ Ideal.comap f K → x ∈ Ideal.comap f K ∨ y ∈ Ideal.comap f K
[PROOFSTEP]
simp only [mem_comap, map_mul]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
hK : IsPrime K
x y : R
⊢ ↑f x * ↑f y ∈ K → ↑f x ∈ K ∨ ↑f y ∈ K
[PROOFSTEP]
apply hK.2
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f✝ : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
f : F
s : Set R
⊢ map f (span s) = span (↑f '' s)
[PROOFSTEP]
refine (Submodule.span_eq_of_le _ ?_ ?_).symm
[GOAL]
case refine_1
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f✝ : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
f : F
s : Set R
⊢ ↑f '' s ⊆ ↑(map f (span s))
[PROOFSTEP]
rintro _ ⟨x, hx, rfl⟩
[GOAL]
case refine_1.intro.intro
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f✝ : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
f : F
s : Set R
x : R
hx : x ∈ s
⊢ ↑f x ∈ ↑(map f (span s))
[PROOFSTEP]
exact mem_map_of_mem f (subset_span hx)
[GOAL]
case refine_2
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f✝ : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
f : F
s : Set R
⊢ map f (span s) ≤ Submodule.span S (↑f '' s)
[PROOFSTEP]
rw [map_le_iff_le_comap, span_le, coe_comap, ← Set.image_subset_iff]
[GOAL]
case refine_2
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f✝ : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
f : F
s : Set R
⊢ ↑f '' s ⊆ ↑(Submodule.span S (↑f '' s))
[PROOFSTEP]
exact subset_span
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I✝ J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
I : Ideal S
h : I = ⊤
⊢ comap f I = ⊤
[PROOFSTEP]
rw [h, comap_top]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
ι : Sort u_3
s : Set (Ideal S)
⊢ ⨅ (I : Ideal S) (_ : I ∈ s), comap f I = ⨅ (I : Ideal R) (_ : I ∈ comap f '' s), I
[PROOFSTEP]
rw [iInf_image]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
ι : Sort u_3
H : IsPrime K
x y : R
h : x * y ∈ comap f K
⊢ ↑f x * ↑f y ∈ K
[PROOFSTEP]
rwa [mem_comap, map_mul] at h 
[GOAL]
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
⊢ I • ⊤ = Submodule.restrictScalars R (map (algebraMap R S) I)
[PROOFSTEP]
refine' le_antisymm (Submodule.smul_le.mpr fun r hr y _ => _) fun x hx => Submodule.span_induction hx _ _ _ _
[GOAL]
case refine'_1
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
r : R
hr : r ∈ I
y : S
x✝ : y ∈ ⊤
⊢ r • y ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
[PROOFSTEP]
rw [Algebra.smul_def]
[GOAL]
case refine'_1
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
r : R
hr : r ∈ I
y : S
x✝ : y ∈ ⊤
⊢ ↑(algebraMap R S) r * y ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
[PROOFSTEP]
exact mul_mem_right _ _ (mem_map_of_mem _ hr)
[GOAL]
case refine'_2
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x : S
hx : x ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
⊢ ∀ (x : S), x ∈ ↑(algebraMap R S) '' ↑I → x ∈ I • ⊤
[PROOFSTEP]
rintro _ ⟨x, hx, rfl⟩
[GOAL]
case refine'_2.intro.intro
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
x : R
hx : x ∈ ↑I
⊢ ↑(algebraMap R S) x ∈ I • ⊤
[PROOFSTEP]
rw [← mul_one (algebraMap R S x), ← Algebra.smul_def]
[GOAL]
case refine'_2.intro.intro
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
x : R
hx : x ∈ ↑I
⊢ x • 1 ∈ I • ⊤
[PROOFSTEP]
exact Submodule.smul_mem_smul hx Submodule.mem_top
[GOAL]
case refine'_3
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x : S
hx : x ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
⊢ 0 ∈ I • ⊤
[PROOFSTEP]
exact Submodule.zero_mem _
[GOAL]
case refine'_4
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x : S
hx : x ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
⊢ ∀ (x y : S), x ∈ I • ⊤ → y ∈ I • ⊤ → x + y ∈ I • ⊤
[PROOFSTEP]
intro x y
[GOAL]
case refine'_4
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
x y : S
⊢ x ∈ I • ⊤ → y ∈ I • ⊤ → x + y ∈ I • ⊤
[PROOFSTEP]
exact Submodule.add_mem _
[GOAL]
case refine'_5
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x : S
hx : x ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
⊢ ∀ (a x : S), x ∈ I • ⊤ → a • x ∈ I • ⊤
[PROOFSTEP]
intro a x hx
[GOAL]
case refine'_5
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x : S
hx : x ∈ I • ⊤
⊢ a • x ∈ I • ⊤
[PROOFSTEP]
refine' Submodule.smul_induction_on hx _ _
[GOAL]
case refine'_5.refine'_1
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x : S
hx : x ∈ I • ⊤
⊢ ∀ (r : R), r ∈ I → ∀ (n : S), n ∈ ⊤ → a • r • n ∈ I • ⊤
[PROOFSTEP]
intro r hr s _
[GOAL]
case refine'_5.refine'_1
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x : S
hx : x ∈ I • ⊤
r : R
hr : r ∈ I
s : S
a✝ : s ∈ ⊤
⊢ a • r • s ∈ I • ⊤
[PROOFSTEP]
rw [smul_comm]
[GOAL]
case refine'_5.refine'_1
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x : S
hx : x ∈ I • ⊤
r : R
hr : r ∈ I
s : S
a✝ : s ∈ ⊤
⊢ r • a • s ∈ I • ⊤
[PROOFSTEP]
exact Submodule.smul_mem_smul hr Submodule.mem_top
[GOAL]
case refine'_5.refine'_2
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝ : S
hx✝ : x✝ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x : S
hx : x ∈ I • ⊤
⊢ ∀ (x y : S), a • x ∈ I • ⊤ → a • y ∈ I • ⊤ → a • (x + y) ∈ I • ⊤
[PROOFSTEP]
intro x y hx hy
[GOAL]
case refine'_5.refine'_2
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝¹ : S
hx✝¹ : x✝¹ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x✝ : S
hx✝ : x✝ ∈ I • ⊤
x y : S
hx : a • x ∈ I • ⊤
hy : a • y ∈ I • ⊤
⊢ a • (x + y) ∈ I • ⊤
[PROOFSTEP]
rw [smul_add]
[GOAL]
case refine'_5.refine'_2
R✝ : Type u
S✝ : Type v
F : Type u_1
inst✝⁴ : Semiring R✝
inst✝³ : Semiring S✝
rc : RingHomClass F R✝ S✝
f : F
I✝ J : Ideal R✝
K L : Ideal S✝
G : Type u_2
rcg : RingHomClass G S✝ R✝
ι : Sort u_3
R : Type u_4
S : Type u_5
inst✝² : CommSemiring R
inst✝¹ : CommSemiring S
inst✝ : Algebra R S
I : Ideal R
x✝¹ : S
hx✝¹ : x✝¹ ∈ Submodule.restrictScalars R (map (algebraMap R S) I)
a x✝ : S
hx✝ : x✝ ∈ I • ⊤
x y : S
hx : a • x ∈ I • ⊤
hy : a • y ∈ I • ⊤
⊢ a • x + a • y ∈ I • ⊤
[PROOFSTEP]
exact Submodule.add_mem _ hx hy
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
ι : Sort u_3
hf : Function.Injective ↑f
⊢ comap f ⊥ ≤ I
[PROOFSTEP]
refine' le_trans (fun x hx => _) bot_le
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
ι : Sort u_3
hf : Function.Injective ↑f
x : R
hx : x ∈ comap f ⊥
⊢ x ∈ ⊥
[PROOFSTEP]
rw [mem_comap, Submodule.mem_bot, ← map_zero f] at hx 
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
G : Type u_2
rcg : RingHomClass G S R
ι : Sort u_3
hf : Function.Injective ↑f
x : R
hx : ↑f x = ↑f 0
⊢ x ∈ ⊥
[PROOFSTEP]
exact Eq.symm (hf hx) ▸ Submodule.zero_mem ⊥
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Surjective ↑f
I : Ideal R
r : R
h : ↑f r ∈ map f I
s : R
hsi : s ∈ ↑I
hfsr : ↑f s = ↑f r
⊢ ↑f (r - s) = 0
[PROOFSTEP]
rw [map_sub, hfsr, sub_self]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Surjective ↑f
I : Ideal R
H : IsMaximal I
⊢ map f I = ⊤ ∨ IsMaximal (map f I)
[PROOFSTEP]
refine' or_iff_not_imp_left.2 fun ne_top => ⟨⟨fun h => ne_top h, fun J hJ => _⟩⟩
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Surjective ↑f
I : Ideal R
H : IsMaximal I
ne_top : ¬map f I = ⊤
J : Ideal S
hJ : map f I < J
⊢ J = ⊤
[PROOFSTEP]
refine'
  (relIsoOfSurjective f hf).injective
    (Subtype.ext_iff.2 (Eq.trans (H.1.2 (comap f J) (lt_of_le_of_ne _ _)) comap_top.symm))
[GOAL]
case refine'_1
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Surjective ↑f
I : Ideal R
H : IsMaximal I
ne_top : ¬map f I = ⊤
J : Ideal S
hJ : map f I < J
⊢ I ≤ comap f J
[PROOFSTEP]
exact map_le_iff_le_comap.1 (le_of_lt hJ)
[GOAL]
case refine'_2
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Surjective ↑f
I : Ideal R
H : IsMaximal I
ne_top : ¬map f I = ⊤
J : Ideal S
hJ : map f I < J
⊢ I ≠ comap f J
[PROOFSTEP]
exact fun h => hJ.right (le_map_of_comap_le_of_surjective f hf (le_of_eq h.symm))
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
⊢ IsMaximal (comap f K)
[PROOFSTEP]
refine' ⟨⟨comap_ne_top _ H.1.1, fun J hJ => _⟩⟩
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
⊢ J = ⊤
[PROOFSTEP]
suffices map f J = ⊤ by
  have := congr_arg (comap f) this
  rw [comap_top, comap_map_of_surjective _ hf, eq_top_iff] at this 
  rw [eq_top_iff]
  exact le_trans this (sup_le (le_of_eq rfl) (le_trans (comap_mono bot_le) (le_of_lt hJ)))
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
this : map f J = ⊤
⊢ J = ⊤
[PROOFSTEP]
have := congr_arg (comap f) this
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
this✝ : map f J = ⊤
this : comap f (map f J) = comap f ⊤
⊢ J = ⊤
[PROOFSTEP]
rw [comap_top, comap_map_of_surjective _ hf, eq_top_iff] at this 
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
this✝ : map f J = ⊤
this : ⊤ ≤ J ⊔ comap f ⊥
⊢ J = ⊤
[PROOFSTEP]
rw [eq_top_iff]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
this✝ : map f J = ⊤
this : ⊤ ≤ J ⊔ comap f ⊥
⊢ ⊤ ≤ J
[PROOFSTEP]
exact le_trans this (sup_le (le_of_eq rfl) (le_trans (comap_mono bot_le) (le_of_lt hJ)))
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
⊢ map f J = ⊤
[PROOFSTEP]
refine'
  H.1.2 (map f J)
    (lt_of_le_of_ne (le_map_of_comap_le_of_surjective _ hf (le_of_lt hJ)) fun h =>
      ne_of_lt hJ (_root_.trans (congr_arg (comap f) h) _))
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
h : K = map f J
⊢ comap f (map f J) = J
[PROOFSTEP]
rw [comap_map_of_surjective _ hf, sup_eq_left]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I : Ideal R
hf : Function.Surjective ↑f
K : Ideal S
H : IsMaximal K
J : Ideal R
hJ : comap f K < J
h : K = map f J
⊢ comap f ⊥ ≤ J
[PROOFSTEP]
exact le_trans (comap_mono bot_le) (le_of_lt hJ)
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f✝ : F
I✝ I : Ideal R
f : R ≃+* S
⊢ map (↑(RingEquiv.symm f)) (map (↑f) I) = I
[PROOFSTEP]
rw [← RingEquiv.toRingHom_eq_coe, ← RingEquiv.toRingHom_eq_coe, map_map, RingEquiv.toRingHom_eq_coe,
  RingEquiv.toRingHom_eq_coe, RingEquiv.symm_comp, map_id]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f✝ : F
I✝ I : Ideal R
f : R ≃+* S
⊢ comap (↑f) (comap (↑(RingEquiv.symm f)) I) = I
[PROOFSTEP]
rw [← RingEquiv.toRingHom_eq_coe, ← RingEquiv.toRingHom_eq_coe, comap_comap, RingEquiv.toRingHom_eq_coe,
  RingEquiv.toRingHom_eq_coe, RingEquiv.symm_comp, comap_id]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ↑f
I : Ideal R
H : IsMaximal I
⊢ IsMaximal (map f I)
[PROOFSTEP]
refine' or_iff_not_imp_left.1 (map_eq_top_or_isMaximal_of_surjective f hf.right H) fun h => H.1.1 _
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ↑f
I : Ideal R
H : IsMaximal I
h : map f I = ⊤
⊢ I = ⊤
[PROOFSTEP]
calc
  I = comap f (map f I) := ((relIsoOfBijective f hf).right_inv I).symm
  _ = comap f ⊤ := by rw [h]
  _ = ⊤ := by rw [comap_top]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ↑f
I : Ideal R
H : IsMaximal I
h : map f I = ⊤
⊢ comap f (map f I) = comap f ⊤
[PROOFSTEP]
rw [h]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝² : Ring R
inst✝¹ : Ring S
inst✝ : RingHomClass F R S
f : F
I✝ : Ideal R
hf : Function.Bijective ↑f
I : Ideal R
H : IsMaximal I
h : map f I = ⊤
⊢ comap f ⊤ = ⊤
[PROOFSTEP]
rw [comap_top]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
r : R
hri : r ∈ I
s : R
hsj : s ∈ J
⊢ ↑f (r * s) ∈ map f I * map f J
[PROOFSTEP]
rw [_root_.map_mul]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
r : R
hri : r ∈ I
s : R
hsj : s ∈ J
⊢ ↑f r * ↑f s ∈ map f I * map f J
[PROOFSTEP]
exact mul_mem_mul (mem_map_of_mem f hri) (mem_map_of_mem f hsj)
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
i : S
x✝¹ : i ∈ ↑f '' ↑I
r : R
hri : r ∈ ↑I
hfri : ↑f r = i
j : S
x✝ : j ∈ ↑f '' ↑J
s : R
hsj : s ∈ ↑J
hfsj : ↑f s = j
⊢ ↑f r * ↑f s ∈ ↑(map f (I * J))
[PROOFSTEP]
rw [← _root_.map_mul]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
i : S
x✝¹ : i ∈ ↑f '' ↑I
r : R
hri : r ∈ ↑I
hfri : ↑f r = i
j : S
x✝ : j ∈ ↑f '' ↑J
s : R
hsj : s ∈ ↑J
hfsj : ↑f s = j
⊢ ↑f (r * s) ∈ ↑(map f (I * J))
[PROOFSTEP]
exact mem_map_of_mem f (mul_mem_mul hri hsj)
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
⊢ ZeroHom.toFun { toFun := map f, map_zero' := (_ : map f ⊥ = ⊥) } 1 = 1
[PROOFSTEP]
simp only [one_eq_top]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
⊢ map f ⊤ = ⊤
[PROOFSTEP]
exact Ideal.map_top f
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
⊢ comap f (radical K) = radical (comap f K)
[PROOFSTEP]
ext
[GOAL]
case h
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
x✝ : R
⊢ x✝ ∈ comap f (radical K) ↔ x✝ ∈ radical (comap f K)
[PROOFSTEP]
simp [radical]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
hK : IsRadical K
⊢ IsRadical (Ideal.comap f K)
[PROOFSTEP]
rw [← hK.radical, comap_radical]
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
hK : IsRadical K
⊢ IsRadical (Ideal.radical (Ideal.comap f K))
[PROOFSTEP]
apply radical_isRadical
[GOAL]
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
n : ℕ
⊢ comap f K ^ n ≤ comap f (K ^ n)
[PROOFSTEP]
induction' n with n n_ih
[GOAL]
case zero
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
⊢ comap f K ^ Nat.zero ≤ comap f (K ^ Nat.zero)
[PROOFSTEP]
rw [pow_zero, pow_zero, Ideal.one_eq_top, Ideal.one_eq_top]
[GOAL]
case zero
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
⊢ ⊤ ≤ comap f ⊤
[PROOFSTEP]
exact rfl.le
[GOAL]
case succ
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
n : ℕ
n_ih : comap f K ^ n ≤ comap f (K ^ n)
⊢ comap f K ^ Nat.succ n ≤ comap f (K ^ Nat.succ n)
[PROOFSTEP]
rw [pow_succ, pow_succ]
[GOAL]
case succ
R : Type u
S : Type v
F : Type u_1
inst✝¹ : CommRing R
inst✝ : CommRing S
rc : RingHomClass F R S
f : F
I J : Ideal R
K L : Ideal S
n : ℕ
n_ih : comap f K ^ n ≤ comap f (K ^ n)
⊢ comap f K * comap f K ^ n ≤ comap f (K * K ^ n)
[PROOFSTEP]
exact (Ideal.mul_mono_right n_ih).trans (Ideal.le_comap_mul f)
[GOAL]
R : Type u
inst✝ : CommSemiring R
I : Ideal R
hi : IsPrimary I
x y : R
x✝ : x * y ∈ radical I
m : ℕ
hxy : (x * y) ^ m ∈ I
⊢ x ∈ radical I ∨ y ∈ radical I
[PROOFSTEP]
rw [mul_pow] at hxy 
[GOAL]
R : Type u
inst✝ : CommSemiring R
I : Ideal R
hi : IsPrimary I
x y : R
x✝ : x * y ∈ radical I
m : ℕ
hxy : x ^ m * y ^ m ∈ I
⊢ x ∈ radical I ∨ y ∈ radical I
[PROOFSTEP]
cases' hi.2 hxy with h h
[GOAL]
case inl
R : Type u
inst✝ : CommSemiring R
I : Ideal R
hi : IsPrimary I
x y : R
x✝ : x * y ∈ radical I
m : ℕ
hxy : x ^ m * y ^ m ∈ I
h : x ^ m ∈ I
⊢ x ∈ radical I ∨ y ∈ radical I
[PROOFSTEP]
exact Or.inl ⟨m, h⟩
[GOAL]
case inr
R : Type u
inst✝ : CommSemiring R
I : Ideal R
hi : IsPrimary I
x y : R
x✝ : x * y ∈ radical I
m : ℕ
hxy : x ^ m * y ^ m ∈ I
h : y ^ m ∈ radical I
⊢ x ∈ radical I ∨ y ∈ radical I
[PROOFSTEP]
exact Or.inr (mem_radical_of_pow_mem h)
[GOAL]
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
⊢ x ∈ I ⊓ J ∨ y ∈ radical (I ⊓ J)
[PROOFSTEP]
rw [radical_inf, hij, inf_idem]
[GOAL]
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
[PROOFSTEP]
cases' hi.2 hxyi with hxi hyi
[GOAL]
case inl
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
hxi : x ∈ I
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
case inr
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
hyi : y ∈ radical I
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
[PROOFSTEP]
cases' hj.2 hxyj with hxj hyj
[GOAL]
case inl.inl
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
hxi : x ∈ I
hxj : x ∈ J
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
[PROOFSTEP]
exact Or.inl ⟨hxi, hxj⟩
[GOAL]
case inl.inr
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
hxi : x ∈ I
hyj : y ∈ radical J
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
[PROOFSTEP]
exact Or.inr hyj
[GOAL]
case inr
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
hyi : y ∈ radical I
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
[PROOFSTEP]
rw [hij] at hyi 
[GOAL]
case inr
R : Type u
inst✝ : CommSemiring R
I J : Ideal R
hi : IsPrimary I
hj : IsPrimary J
hij : radical I = radical J
x y : R
x✝ : x * y ∈ I ⊓ J
hxyi : x * y ∈ ↑I
hxyj : x * y ∈ ↑J
hyi : y ∈ radical J
⊢ x ∈ I ⊓ J ∨ y ∈ radical J
[PROOFSTEP]
exact Or.inr hyi
[GOAL]
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
f : ι →₀ { x // x ∈ I }
⊢ ↑(finsuppTotal ι M I v) f = Finsupp.sum f fun i x => ↑x • v i
[PROOFSTEP]
dsimp [finsuppTotal]
[GOAL]
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
f : ι →₀ { x // x ∈ I }
⊢ ↑(Finsupp.total ι M R v) (Finsupp.mapRange Subtype.val (_ : ↑(Submodule.subtype I) 0 = 0) f) =
    Finsupp.sum f fun i x => ↑x • v i
[PROOFSTEP]
rw [Finsupp.total_apply, Finsupp.sum_mapRange_index]
[GOAL]
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
f : ι →₀ { x // x ∈ I }
⊢ ∀ (a : ι), 0 • v a = 0
[PROOFSTEP]
exact fun _ => zero_smul _ _
[GOAL]
ι : Type u_1
M : Type u_2
inst✝³ : AddCommGroup M
R : Type u_3
inst✝² : CommRing R
inst✝¹ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
inst✝ : Fintype ι
f : ι →₀ { x // x ∈ I }
⊢ ↑(finsuppTotal ι M I v) f = ∑ i : ι, ↑(↑f i) • v i
[PROOFSTEP]
rw [finsuppTotal_apply, Finsupp.sum_fintype]
[GOAL]
case h
ι : Type u_1
M : Type u_2
inst✝³ : AddCommGroup M
R : Type u_3
inst✝² : CommRing R
inst✝¹ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
inst✝ : Fintype ι
f : ι →₀ { x // x ∈ I }
⊢ ∀ (i : ι), ↑0 • v i = 0
[PROOFSTEP]
exact fun _ => zero_smul _ _
[GOAL]
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
⊢ LinearMap.range (finsuppTotal ι M I v) = I • Submodule.span R (Set.range v)
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
x✝ : M
⊢ x✝ ∈ LinearMap.range (finsuppTotal ι M I v) ↔ x✝ ∈ I • Submodule.span R (Set.range v)
[PROOFSTEP]
rw [Submodule.mem_ideal_smul_span_iff_exists_sum]
[GOAL]
case h
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
x✝ : M
⊢ x✝ ∈ LinearMap.range (finsuppTotal ι M I v) ↔ ∃ a x, (Finsupp.sum a fun i c => c • v i) = x✝
[PROOFSTEP]
refine' ⟨fun ⟨f, h⟩ => ⟨Finsupp.mapRange.linearMap I.subtype f, fun i => (f i).2, h⟩, _⟩
[GOAL]
case h
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
x✝ : M
⊢ (∃ a x, (Finsupp.sum a fun i c => c • v i) = x✝) → x✝ ∈ LinearMap.range (finsuppTotal ι M I v)
[PROOFSTEP]
rintro ⟨a, ha, rfl⟩
[GOAL]
case h.intro.intro
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum a fun i c => c • v i) ∈ LinearMap.range (finsuppTotal ι M I v)
[PROOFSTEP]
classical
refine' ⟨a.mapRange (fun r => if h : r ∈ I then ⟨r, h⟩ else 0) (by simp), _⟩
rw [finsuppTotal_apply, Finsupp.sum_mapRange_index]
· apply Finsupp.sum_congr
  intro i _
  rw [dif_pos (ha i)]
· exact fun _ => zero_smul _ _
[GOAL]
case h.intro.intro
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum a fun i c => c • v i) ∈ LinearMap.range (finsuppTotal ι M I v)
[PROOFSTEP]
refine' ⟨a.mapRange (fun r => if h : r ∈ I then ⟨r, h⟩ else 0) (by simp), _⟩
[GOAL]
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (fun r => if h : r ∈ I then { val := r, property := h } else 0) 0 = 0
[PROOFSTEP]
simp
[GOAL]
case h.intro.intro
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ ↑(finsuppTotal ι M I v)
      (Finsupp.mapRange (fun r => if h : r ∈ I then { val := r, property := h } else 0)
        (_ : (if h : 0 ∈ I then { val := 0, property := h } else 0) = 0) a) =
    Finsupp.sum a fun i c => c • v i
[PROOFSTEP]
rw [finsuppTotal_apply, Finsupp.sum_mapRange_index]
[GOAL]
case h.intro.intro
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ (Finsupp.sum a fun a b => ↑(if h : b ∈ I then { val := b, property := h } else 0) • v a) =
    Finsupp.sum a fun i c => c • v i
[PROOFSTEP]
apply Finsupp.sum_congr
[GOAL]
case h.intro.intro.h
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ ∀ (x : ι), x ∈ a.support → ↑(if h : ↑a x ∈ I then { val := ↑a x, property := h } else 0) • v x = ↑a x • v x
[PROOFSTEP]
intro i _
[GOAL]
case h.intro.intro.h
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
i : ι
a✝ : i ∈ a.support
⊢ ↑(if h : ↑a i ∈ I then { val := ↑a i, property := h } else 0) • v i = ↑a i • v i
[PROOFSTEP]
rw [dif_pos (ha i)]
[GOAL]
case h.intro.intro
ι : Type u_1
M : Type u_2
inst✝² : AddCommGroup M
R : Type u_3
inst✝¹ : CommRing R
inst✝ : Module R M
I : Ideal R
v : ι → M
hv : Submodule.span R (Set.range v) = ⊤
a : ι →₀ R
ha : ∀ (i : ι), ↑a i ∈ I
⊢ ∀ (a : ι), ↑0 • v a = 0
[PROOFSTEP]
exact fun _ => zero_smul _ _
[GOAL]
ι : Type u_1
R : Type u_2
S : Type u_3
inst✝³ : CommSemiring R
inst✝² : CommRing S
inst✝¹ : IsDomain S
inst✝ : Algebra R S
b : Basis ι R S
x : S
hx : x ≠ 0
⊢ LinearMap.range (↑(Algebra.lmul R S) x) = Submodule.restrictScalars R (span {x})
[PROOFSTEP]
ext
[GOAL]
case h
ι : Type u_1
R : Type u_2
S : Type u_3
inst✝³ : CommSemiring R
inst✝² : CommRing S
inst✝¹ : IsDomain S
inst✝ : Algebra R S
b : Basis ι R S
x : S
hx : x ≠ 0
x✝ : S
⊢ x✝ ∈ LinearMap.range (↑(Algebra.lmul R S) x) ↔ x✝ ∈ Submodule.restrictScalars R (span {x})
[PROOFSTEP]
simp [mem_span_singleton', mul_comm]
[GOAL]
ι : Type u_1
R : Type u_2
S : Type u_3
inst✝³ : CommSemiring R
inst✝² : CommRing S
inst✝¹ : IsDomain S
inst✝ : Algebra R S
b : Basis ι R S
x : S
hx : x ≠ 0
i : ι
⊢ ↑(↑(basisSpanSingleton b hx) i) = x * ↑b i
[PROOFSTEP]
simp only [basisSpanSingleton, Basis.map_apply, LinearEquiv.trans_apply, Submodule.restrictScalarsEquiv_apply,
  LinearEquiv.ofInjective_apply, LinearEquiv.coe_ofEq_apply, LinearEquiv.restrictScalars_apply, Algebra.coe_lmul_eq_mul,
  LinearMap.mul_apply']
[GOAL]
ι : Type u_1
R : Type u_2
S : Type u_3
inst✝⁶ : CommSemiring R
inst✝⁵ : CommRing S
inst✝⁴ : IsDomain S
inst✝³ : Algebra R S
N : Type u_4
inst✝² : Semiring N
inst✝¹ : Module N S
inst✝ : SMulCommClass R N S
b : Basis ι R S
x : S
hx : x ≠ 0
i : ι
⊢ ↑(AddHom.toFun (↑(Basis.constr b N)).toAddHom (Subtype.val ∘ ↑(basisSpanSingleton b hx))) (↑b i) =
    ↑(↑(Algebra.lmul R S) x) (↑b i)
[PROOFSTEP]
erw [Basis.constr_basis, Function.comp_apply, basisSpanSingleton_apply, LinearMap.mul_apply']
[GOAL]
R : Type u_1
inst✝ : CommSemiring R
r : R
⊢ Associates.mk (Ideal.span {r}) ≠ 0 ↔ r ≠ 0
[PROOFSTEP]
rw [Associates.mk_ne_zero, Ideal.zero_eq_bot, Ne.def, Ideal.span_singleton_eq_bot]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
G : Type u_2
inst✝² : Semiring R
inst✝¹ : Semiring S
inst✝ : Semiring T
rcf : RingHomClass F R S
rcg : RingHomClass G T S
f : F
g : G
r : R
⊢ r ∈ ker f ↔ ↑f r = 0
[PROOFSTEP]
rw [ker, Ideal.mem_comap, Submodule.mem_bot]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
G : Type u_2
inst✝² : Semiring R
inst✝¹ : Semiring S
inst✝ : Semiring T
rcf : RingHomClass F R S
rcg : RingHomClass G T S
f✝ : F
g✝ : G
f : S →+* R
g : T →+* S
⊢ Ideal.comap g (ker f) = ker (comp f g)
[PROOFSTEP]
rw [RingHom.ker_eq_comap_bot, Ideal.comap_comap, RingHom.ker_eq_comap_bot]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
G : Type u_2
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : Semiring T
rcf : RingHomClass F R S
rcg : RingHomClass G T S
f✝ : F
g : G
inst✝ : Nontrivial S
f : F
⊢ ¬1 ∈ ker f
[PROOFSTEP]
rw [mem_ker, map_one]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
G : Type u_2
inst✝³ : Semiring R
inst✝² : Semiring S
inst✝¹ : Semiring T
rcf : RingHomClass F R S
rcg : RingHomClass G T S
f✝ : F
g : G
inst✝ : Nontrivial S
f : F
⊢ ¬1 = 0
[PROOFSTEP]
exact one_ne_zero
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝¹ : Ring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
⊢ Function.Injective ↑f ↔ ker f = ⊥
[PROOFSTEP]
rw [SetLike.ext'_iff, ker_eq, Set.ext_iff]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝¹ : Ring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
⊢ Function.Injective ↑f ↔ ∀ (x : R), x ∈ ↑f ⁻¹' {0} ↔ x ∈ ↑⊥
[PROOFSTEP]
exact injective_iff_map_eq_zero' f
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝¹ : Ring R
inst✝ : Semiring S
rc : RingHomClass F R S
f : F
⊢ ker f = ⊥ ↔ ∀ (x : R), ↑f x = 0 → x = 0
[PROOFSTEP]
rw [← injective_iff_map_eq_zero f, injective_iff_ker_eq_bot]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝¹ : Ring R
inst✝ : Semiring S
rc : RingHomClass F R S
f✝ : F
f : R ≃+* S
⊢ ker ↑f = ⊥
[PROOFSTEP]
simpa only [← injective_iff_ker_eq_bot] using EquivLike.injective f
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝² : Ring R
inst✝¹ : Semiring S
rc : RingHomClass F R S
f✝ : F
F' : Type u_2
inst✝ : RingEquivClass F' R S
f : F'
⊢ ker f = ⊥
[PROOFSTEP]
simpa only [← injective_iff_ker_eq_bot] using EquivLike.injective f
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
x y : R
⊢ x - y ∈ ker f ↔ ↑f x = ↑f y
[PROOFSTEP]
rw [mem_ker, map_sub, sub_eq_zero]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝³ : Ring R
inst✝² : Ring S
inst✝¹ : IsDomain S
inst✝ : RingHomClass F R S
f : F
⊢ ker f ≠ ⊤
[PROOFSTEP]
rw [Ne.def, Ideal.eq_top_iff_one]
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝³ : Ring R
inst✝² : Ring S
inst✝¹ : IsDomain S
inst✝ : RingHomClass F R S
f : F
⊢ ¬1 ∈ ker f
[PROOFSTEP]
exact not_one_mem_ker f
[GOAL]
R : Type u
S : Type v
T : Type w
F : Type u_1
inst✝³ : Ring R
inst✝² : Ring S
inst✝¹ : IsDomain S
inst✝ : RingHomClass F R S
f : F
x y : R
⊢ x * y ∈ ker f → x ∈ ker f ∨ y ∈ ker f
[PROOFSTEP]
simpa only [mem_ker, map_mul] using @eq_zero_or_eq_zero_of_mul_eq_zero S _ _ _ _ _
[GOAL]
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
⊢ Ideal.IsMaximal (ker f)
[PROOFSTEP]
refine' Ideal.isMaximal_iff.mpr ⟨fun h1 => one_ne_zero' K <| map_one f ▸ (mem_ker f).mp h1, fun J x hJ hxf hxJ => _⟩
[GOAL]
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
J : Ideal R
x : R
hJ : ker f ≤ J
hxf : ¬x ∈ ker f
hxJ : x ∈ J
⊢ 1 ∈ J
[PROOFSTEP]
obtain ⟨y, hy⟩ := hf (f x)⁻¹
[GOAL]
case intro
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
J : Ideal R
x : R
hJ : ker f ≤ J
hxf : ¬x ∈ ker f
hxJ : x ∈ J
y : R
hy : ↑f y = (↑f x)⁻¹
⊢ 1 ∈ J
[PROOFSTEP]
have H : 1 = y * x - (y * x - 1) := (sub_sub_cancel _ _).symm
[GOAL]
case intro
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
J : Ideal R
x : R
hJ : ker f ≤ J
hxf : ¬x ∈ ker f
hxJ : x ∈ J
y : R
hy : ↑f y = (↑f x)⁻¹
H : 1 = y * x - (y * x - 1)
⊢ 1 ∈ J
[PROOFSTEP]
rw [H]
[GOAL]
case intro
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
J : Ideal R
x : R
hJ : ker f ≤ J
hxf : ¬x ∈ ker f
hxJ : x ∈ J
y : R
hy : ↑f y = (↑f x)⁻¹
H : 1 = y * x - (y * x - 1)
⊢ y * x - (y * x - 1) ∈ J
[PROOFSTEP]
refine' J.sub_mem (J.mul_mem_left _ hxJ) (hJ _)
[GOAL]
case intro
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
J : Ideal R
x : R
hJ : ker f ≤ J
hxf : ¬x ∈ ker f
hxJ : x ∈ J
y : R
hy : ↑f y = (↑f x)⁻¹
H : 1 = y * x - (y * x - 1)
⊢ y * x - 1 ∈ ker f
[PROOFSTEP]
rw [mem_ker]
[GOAL]
case intro
R✝ : Type u
S : Type v
T : Type w
R : Type u_1
K : Type u_2
F : Type u_3
inst✝² : Ring R
inst✝¹ : Field K
inst✝ : RingHomClass F R K
f : F
hf : Function.Surjective ↑f
J : Ideal R
x : R
hJ : ker f ≤ J
hxf : ¬x ∈ ker f
hxJ : x ∈ J
y : R
hy : ↑f y = (↑f x)⁻¹
H : 1 = y * x - (y * x - 1)
⊢ ↑f (y * x - 1) = 0
[PROOFSTEP]
simp only [hy, map_sub, map_one, map_mul, inv_mul_cancel (mt (mem_ker f).mpr hxf), sub_self]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Semiring R
inst✝ : Semiring S
rc : RingHomClass F R S
I : Ideal R
f : F
⊢ map f I = ⊥ ↔ I ≤ RingHom.ker f
[PROOFSTEP]
rw [RingHom.ker, eq_bot_iff, map_le_iff_le_comap]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
⊢ (∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J) → map f (sInf A) = sInf (map f '' A)
[PROOFSTEP]
refine' fun h => le_antisymm (le_sInf _) _
[GOAL]
case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
⊢ ∀ (b : Ideal S), b ∈ map f '' A → map f (sInf A) ≤ b
[PROOFSTEP]
intro j hj y hy
[GOAL]
case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
⊢ y ∈ j
[PROOFSTEP]
cases' (mem_map_iff_of_surjective f hf).1 hy with x hx
[GOAL]
case refine'_1.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
x : R
hx : x ∈ sInf A ∧ ↑f x = y
⊢ y ∈ j
[PROOFSTEP]
cases' (Set.mem_image _ _ _).mp hj with J hJ
[GOAL]
case refine'_1.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
x : R
hx : x ∈ sInf A ∧ ↑f x = y
J : Ideal R
hJ : J ∈ A ∧ map f J = j
⊢ y ∈ j
[PROOFSTEP]
rw [← hJ.right, ← hx.right]
[GOAL]
case refine'_1.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
j : Ideal S
hj : j ∈ map f '' A
y : S
hy : y ∈ map f (sInf A)
x : R
hx : x ∈ sInf A ∧ ↑f x = y
J : Ideal R
hJ : J ∈ A ∧ map f J = j
⊢ ↑f x ∈ map f J
[PROOFSTEP]
exact mem_map_of_mem f (sInf_le_of_le hJ.left (le_of_eq rfl) hx.left)
[GOAL]
case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
⊢ sInf (map f '' A) ≤ map f (sInf A)
[PROOFSTEP]
intro y hy
[GOAL]
case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
⊢ y ∈ map f (sInf A)
[PROOFSTEP]
cases' hf y with x hx
[GOAL]
case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
⊢ y ∈ map f (sInf A)
[PROOFSTEP]
refine' hx ▸ mem_map_of_mem f _
[GOAL]
case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
⊢ x ∈ sInf A
[PROOFSTEP]
have : ∀ I ∈ A, y ∈ map f I := by simpa using hy
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
⊢ ∀ (I : Ideal R), I ∈ A → y ∈ map f I
[PROOFSTEP]
simpa using hy
[GOAL]
case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
this : ∀ (I : Ideal R), I ∈ A → y ∈ map f I
⊢ x ∈ sInf A
[PROOFSTEP]
rw [Submodule.mem_sInf]
[GOAL]
case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
this : ∀ (I : Ideal R), I ∈ A → y ∈ map f I
⊢ ∀ (p : Submodule R R), p ∈ A → x ∈ p
[PROOFSTEP]
intro J hJ
[GOAL]
case refine'_2.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
y : S
hy : y ∈ sInf (map f '' A)
x : R
hx : ↑f x = y
this : ∀ (I : Ideal R), I ∈ A → y ∈ map f I
J : Submodule R R
hJ : J ∈ A
⊢ x ∈ J
[PROOFSTEP]
rcases(mem_map_iff_of_surjective f hf).1 (this J hJ) with ⟨x', hx', rfl⟩
[GOAL]
case refine'_2.intro.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
⊢ x ∈ J
[PROOFSTEP]
have : x - x' ∈ J := by
  apply h J hJ
  rw [RingHom.mem_ker, map_sub, hx, sub_self]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
⊢ x - x' ∈ J
[PROOFSTEP]
apply h J hJ
[GOAL]
case a
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
⊢ x - x' ∈ RingHom.ker f
[PROOFSTEP]
rw [RingHom.mem_ker, map_sub, hx, sub_self]
[GOAL]
case refine'_2.intro.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
A : Set (Ideal R)
f : F
hf : Function.Surjective ↑f
h : ∀ (J : Ideal R), J ∈ A → RingHom.ker f ≤ J
x : R
J : Submodule R R
hJ : J ∈ A
x' : R
hx' : x' ∈ J
hy : ↑f x' ∈ sInf (map f '' A)
hx : ↑f x = ↑f x'
this✝ : ∀ (I : Ideal R), I ∈ A → ↑f x' ∈ map f I
this : x - x' ∈ J
⊢ x ∈ J
[PROOFSTEP]
simpa only [sub_add_cancel] using J.add_mem this hx'
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
⊢ IsPrime (map f I)
[PROOFSTEP]
refine' ⟨fun h => H.ne_top (eq_top_iff.2 _), fun {x y} => _⟩
[GOAL]
case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
h : map f I = ⊤
⊢ ⊤ ≤ I
[PROOFSTEP]
replace h := congr_arg (comap f) h
[GOAL]
case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
h : comap f (map f I) = comap f ⊤
⊢ ⊤ ≤ I
[PROOFSTEP]
rw [comap_map_of_surjective _ hf, comap_top] at h 
[GOAL]
case refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
h : I ⊔ comap f ⊥ = ⊤
⊢ ⊤ ≤ I
[PROOFSTEP]
exact h ▸ sup_le (le_of_eq rfl) hk
[GOAL]
case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
⊢ x * y ∈ map f I → x ∈ map f I ∨ y ∈ map f I
[PROOFSTEP]
refine' fun hxy => (hf x).recOn fun a ha => (hf y).recOn fun b hb => _
[GOAL]
case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
hxy : x * y ∈ map f I
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
⊢ x ∈ map f I ∨ y ∈ map f I
[PROOFSTEP]
rw [← ha, ← hb, ← _root_.map_mul f, mem_map_iff_of_surjective _ hf] at hxy 
[GOAL]
case refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hxy : ∃ x, x ∈ I ∧ ↑f x = ↑f (a * b)
hb : ↑f b = y
⊢ x ∈ map f I ∨ y ∈ map f I
[PROOFSTEP]
rcases hxy with ⟨c, hc, hc'⟩
[GOAL]
case refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc' : ↑f c = ↑f (a * b)
⊢ x ∈ map f I ∨ y ∈ map f I
[PROOFSTEP]
rw [← sub_eq_zero, ← map_sub] at hc' 
[GOAL]
case refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ x ∈ map f I ∨ y ∈ map f I
[PROOFSTEP]
have : a * b ∈ I := by
  convert I.sub_mem hc (hk (hc' : c - a * b ∈ RingHom.ker f)) using 1
  abel
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ a * b ∈ I
[PROOFSTEP]
convert I.sub_mem hc (hk (hc' : c - a * b ∈ RingHom.ker f)) using 1
[GOAL]
case h.e'_4
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ a * b = c - (c - a * b)
[PROOFSTEP]
abel
[GOAL]
case h.e'_4
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
⊢ a * b = c - (c - a * b)
[PROOFSTEP]
abel
[GOAL]
case refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
f : F
hf : Function.Surjective ↑f
I : Ideal R
H : IsPrime I
hk : RingHom.ker f ≤ I
x y : S
a : R
ha : ↑f a = x
b : R
hb : ↑f b = y
c : R
hc : c ∈ I
hc'✝ : ↑f c = ↑f (a * b)
hc' : ↑f (c - a * b) = 0
this : a * b ∈ I
⊢ x ∈ map f I ∨ y ∈ map f I
[PROOFSTEP]
exact (H.mem_or_mem this).imp (fun h => ha ▸ mem_map_of_mem f h) fun h => hb ▸ mem_map_of_mem f h
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : Ring R
inst✝ : Ring S
rc : RingHomClass F R S
I : Ideal R
f : F
hf : Function.Injective ↑f
⊢ map f I = ⊥ ↔ I = ⊥
[PROOFSTEP]
rw [map_eq_bot_iff_le_ker, (RingHom.injective_iff_ker_eq_bot f).mp hf, le_bot_iff]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝³ : Ring R
inst✝² : Ring S
rc : RingHomClass F R S
F' : Type u_4
inst✝¹ : RingEquivClass F' R S
f : F'
I : Ideal R
inst✝ : IsPrime I
⊢ RingHom.ker f ≤ I
[PROOFSTEP]
simp only [RingHom.ker_equiv, bot_le]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
I J : Ideal R
f : R →+* S
hf : Function.Surjective ↑f
⊢ map f I = map f J ↔ I ⊔ RingHom.ker f = J ⊔ RingHom.ker f
[PROOFSTEP]
rw [← (comap_injective_of_surjective f hf).eq_iff, comap_map_of_surjective f hf, comap_map_of_surjective f hf,
  RingHom.ker_eq_comap_bot]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
⊢ map f (radical I) = radical (map f I)
[PROOFSTEP]
rw [radical_eq_sInf, radical_eq_sInf]
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
⊢ map f (sInf {J | I ≤ J ∧ IsPrime J}) = sInf {J | map f I ≤ J ∧ IsPrime J}
[PROOFSTEP]
have : ∀ J ∈ {J : Ideal R | I ≤ J ∧ J.IsPrime}, RingHom.ker f ≤ J := fun J hJ => h.trans hJ.left
[GOAL]
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
⊢ map f (sInf {J | I ≤ J ∧ IsPrime J}) = sInf {J | map f I ≤ J ∧ IsPrime J}
[PROOFSTEP]
convert map_sInf hf this
[GOAL]
case h.e'_3.h.e'_3
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
⊢ {J | map f I ≤ J ∧ IsPrime J} = map f '' {J | I ≤ J ∧ IsPrime J}
[PROOFSTEP]
refine' funext fun j => propext ⟨_, _⟩
[GOAL]
case h.e'_3.h.e'_3.refine'_1
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
j : Ideal S
⊢ setOf (fun J => map f I ≤ J ∧ IsPrime J) j → (map f '' {J | I ≤ J ∧ IsPrime J}) j
[PROOFSTEP]
rintro ⟨hj, hj'⟩
[GOAL]
case h.e'_3.h.e'_3.refine'_1.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
j : Ideal S
hj : map f I ≤ j
hj' : IsPrime j
⊢ (map f '' {J | I ≤ J ∧ IsPrime J}) j
[PROOFSTEP]
haveI : j.IsPrime := hj'
[GOAL]
case h.e'_3.h.e'_3.refine'_1.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this✝ : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
j : Ideal S
hj : map f I ≤ j
hj' this : IsPrime j
⊢ (map f '' {J | I ≤ J ∧ IsPrime J}) j
[PROOFSTEP]
exact ⟨comap f j, ⟨⟨map_le_iff_le_comap.1 hj, comap_isPrime f j⟩, map_comap_of_surjective f hf j⟩⟩
[GOAL]
case h.e'_3.h.e'_3.refine'_2
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
j : Ideal S
⊢ (map f '' {J | I ≤ J ∧ IsPrime J}) j → setOf (fun J => map f I ≤ J ∧ IsPrime J) j
[PROOFSTEP]
rintro ⟨J, ⟨hJ, hJ'⟩⟩
[GOAL]
case h.e'_3.h.e'_3.refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
j : Ideal S
J : Ideal R
hJ : J ∈ {J | I ≤ J ∧ IsPrime J}
hJ' : map f J = j
⊢ setOf (fun J => map f I ≤ J ∧ IsPrime J) j
[PROOFSTEP]
haveI : J.IsPrime := hJ.right
[GOAL]
case h.e'_3.h.e'_3.refine'_2.intro.intro
R : Type u_1
S : Type u_2
F : Type u_3
inst✝¹ : CommRing R
inst✝ : CommRing S
f : R →+* S
hf : Function.Surjective ↑f
I : Ideal R
h : RingHom.ker f ≤ I
this✝ : ∀ (J : Ideal R), J ∈ {J | I ≤ J ∧ IsPrime J} → RingHom.ker f ≤ J
j : Ideal S
J : Ideal R
hJ : J ∈ {J | I ≤ J ∧ IsPrime J}
hJ' : map f J = j
this : IsPrime J
⊢ setOf (fun J => map f I ≤ J ∧ IsPrime J) j
[PROOFSTEP]
refine' ⟨hJ' ▸ map_mono hJ.left, hJ' ▸ map_isPrime_of_surjective hf (le_trans h hJ.left)⟩
[GOAL]
R : Type u
M : Type v
inst✝² : CommSemiring R
inst✝¹ : AddCommMonoid M
inst✝ : Module R M
⊢ ∀ (b : Submodule R M), 1 • b = b
[PROOFSTEP]
simp
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
⊢ (fun b => ↑g (f_inv b)) 1 = 1
[PROOFSTEP]
rw [← map_one g, ← sub_eq_zero, ← map_sub g, ← mem_ker g]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
⊢ f_inv 1 - 1 ∈ ker g
[PROOFSTEP]
apply hg
[GOAL]
case a
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
⊢ f_inv 1 - 1 ∈ ker f
[PROOFSTEP]
rw [mem_ker f, map_sub f, sub_eq_zero, map_one f]
[GOAL]
case a
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
⊢ ↑f (f_inv 1) = 1
[PROOFSTEP]
exact hf 1
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
⊢ ∀ (x y : B),
    OneHom.toFun { toFun := fun b => ↑g (f_inv b), map_one' := (_ : (fun b => ↑g (f_inv b)) 1 = 1) } (x * y) =
      OneHom.toFun { toFun := fun b => ↑g (f_inv b), map_one' := (_ : (fun b => ↑g (f_inv b)) 1 = 1) } x *
        OneHom.toFun { toFun := fun b => ↑g (f_inv b), map_one' := (_ : (fun b => ↑g (f_inv b)) 1 = 1) } y
[PROOFSTEP]
intro x y
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
x y : B
⊢ OneHom.toFun { toFun := fun b => ↑g (f_inv b), map_one' := (_ : (fun b => ↑g (f_inv b)) 1 = 1) } (x * y) =
    OneHom.toFun { toFun := fun b => ↑g (f_inv b), map_one' := (_ : (fun b => ↑g (f_inv b)) 1 = 1) } x *
      OneHom.toFun { toFun := fun b => ↑g (f_inv b), map_one' := (_ : (fun b => ↑g (f_inv b)) 1 = 1) } y
[PROOFSTEP]
rw [← map_mul g, ← sub_eq_zero, ← map_sub g, ← mem_ker g]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
x y : B
⊢ f_inv (x * y) - f_inv x * f_inv y ∈ ker g
[PROOFSTEP]
apply hg
[GOAL]
case a
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
x y : B
⊢ f_inv (x * y) - f_inv x * f_inv y ∈ ker f
[PROOFSTEP]
rw [mem_ker f, map_sub f, sub_eq_zero, map_mul f]
[GOAL]
case a
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
src✝ : (fun x => B →+ C) { val := toAddMonoidHom g, property := hg } :=
  ↑(AddMonoidHom.liftOfRightInverse (toAddMonoidHom f) f_inv hf) { val := toAddMonoidHom g, property := hg }
x y : B
⊢ ↑f (f_inv (x * y)) = ↑f (f_inv x) * ↑f (f_inv y)
[PROOFSTEP]
simp only [hf _]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
φ : B →+* C
x : A
hx : x ∈ ker f
⊢ ↑(comp φ f) x = 0
[PROOFSTEP]
simp [(mem_ker _).mp hx]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : { g // ker f ≤ ker g }
⊢ (fun φ => { val := comp φ f, property := (_ : ∀ (x : A), x ∈ ker f → x ∈ ker (comp φ f)) })
      ((fun g => liftOfRightInverseAux f f_inv hf ↑g (_ : ker f ≤ ker ↑g)) g) =
    g
[PROOFSTEP]
ext
[GOAL]
case a.a
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : { g // ker f ≤ ker g }
x✝ : A
⊢ ↑↑((fun φ => { val := comp φ f, property := (_ : ∀ (x : A), x ∈ ker f → x ∈ ker (comp φ f)) })
            ((fun g => liftOfRightInverseAux f f_inv hf ↑g (_ : ker f ≤ ker ↑g)) g))
      x✝ =
    ↑↑g x✝
[PROOFSTEP]
simp only [comp_apply, liftOfRightInverseAux_comp_apply, Subtype.coe_mk]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
φ : B →+* C
⊢ (fun g => liftOfRightInverseAux f f_inv hf ↑g (_ : ker f ≤ ker ↑g))
      ((fun φ => { val := comp φ f, property := (_ : ∀ (x : A), x ∈ ker f → x ∈ ker (comp φ f)) }) φ) =
    φ
[PROOFSTEP]
ext b
[GOAL]
case a
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
φ : B →+* C
b : B
⊢ ↑((fun g => liftOfRightInverseAux f f_inv hf ↑g (_ : ker f ≤ ker ↑g))
          ((fun φ => { val := comp φ f, property := (_ : ∀ (x : A), x ∈ ker f → x ∈ ker (comp φ f)) }) φ))
      b =
    ↑φ b
[PROOFSTEP]
simp [liftOfRightInverseAux, hf b]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
h : B →+* C
hh : comp h f = g
⊢ h = ↑(liftOfRightInverse f f_inv hf) { val := g, property := hg }
[PROOFSTEP]
simp_rw [← hh]
[GOAL]
A : Type u_1
B : Type u_2
C : Type u_3
inst✝² : Ring A
inst✝¹ : Ring B
inst✝ : Ring C
f : A →+* B
f_inv : B → A
hf : Function.RightInverse f_inv ↑f
g : A →+* C
hg : ker f ≤ ker g
h : B →+* C
hh : comp h f = g
⊢ h = ↑(liftOfRightInverse f f_inv hf) { val := comp h f, property := (_ : (fun g => ker f ≤ ker g) (comp h f)) }
[PROOFSTEP]
exact ((f.liftOfRightInverse f_inv hf).apply_symm_apply _).symm
