[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (G i)
inst✝² : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
⊢ Nonempty ι
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (G i)
inst✝² : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z✝ : DirectLimit G f
ind : ι
z p q : ⨁ (i : ι), G i
x✝¹ : ∃ i x, ↑(of R ι G f i) x = Quotient.mk'' p
x✝ : ∃ i x, ↑(of R ι G f i) x = Quotient.mk'' q
i : ι
x : G i
ihx : ↑(of R ι G f i) x = Quotient.mk'' p
j : ι
y : G j
ihy : ↑(of R ι G f j) y = Quotient.mk'' q
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(of R ι G f k) (↑(f i k hik) x + ↑(f j k hjk) y) = Quotient.mk'' (p + q)
[PROOFSTEP]
rw [LinearMap.map_add, of_f, of_f, ihx, ihy]
  -- porting note: was `rfl`
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (G i)
inst✝² : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z✝ : DirectLimit G f
ind : ι
z p q : ⨁ (i : ι), G i
x✝¹ : ∃ i x, ↑(of R ι G f i) x = Quotient.mk'' p
x✝ : ∃ i x, ↑(of R ι G f i) x = Quotient.mk'' q
i : ι
x : G i
ihx : ↑(of R ι G f i) x = Quotient.mk'' p
j : ι
y : G j
ihy : ↑(of R ι G f j) y = Quotient.mk'' q
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ Quotient.mk'' p + Quotient.mk'' q = Quotient.mk'' (p + q)
[PROOFSTEP]
simp only [Submodule.Quotient.mk''_eq_mk, Quotient.mk_add]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (G i)
inst✝² : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝¹ : AddCommGroup P
inst✝ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
a : ⨁ (i : ι), G i
x✝ : a ∈ {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i j : ι
hij : i ≤ j
x : G i
hx : ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j hij) x) = a
⊢ a ∈ ↑(LinearMap.ker (DirectSum.toModule R ι P g))
[PROOFSTEP]
rw [← hx, SetLike.mem_coe, LinearMap.sub_mem_ker_iff, DirectSum.toModule_lof, DirectSum.toModule_lof, Hg]
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →ₗ[R] P
x✝ : DirectLimit G f
i j : ι
hij : i ≤ j
x : G i
⊢ ↑((fun i => LinearMap.comp F (of R ι G f i)) j) (↑(f i j hij) x) = ↑((fun i => LinearMap.comp F (of R ι G f i)) i) x
[PROOFSTEP]
rw [LinearMap.comp_apply, of_f]
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →ₗ[R] P
x✝ : DirectLimit G f
i j : ι
hij : i ≤ j
x : G i
⊢ ↑F (↑(of R ι G f i) x) = ↑((fun i => LinearMap.comp F (of R ι G f i)) i) x
[PROOFSTEP]
rfl
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →ₗ[R] P
x✝ : DirectLimit G f
i : ι
x : G i
⊢ ↑F (↑(of R ι G f i) x) =
    ↑(lift R ι G f (fun i => LinearMap.comp F (of R ι G f i))
          (_ :
            ∀ (i j : ι) (hij : i ≤ j) (x : G i),
              ↑((fun i => LinearMap.comp F (of R ι G f i)) j) (↑(f i j hij) x) =
                ↑((fun i => LinearMap.comp F (of R ι G f i)) i) x))
      (↑(of R ι G f i) x)
[PROOFSTEP]
rw [lift_of]
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →ₗ[R] P
x✝ : DirectLimit G f
i : ι
x : G i
⊢ ↑F (↑(of R ι G f i) x) = ↑(LinearMap.comp F (of R ι G f i)) x
[PROOFSTEP]
rfl
[GOAL]
R : Type u
inst✝⁶ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → AddCommGroup (G i)
inst✝³ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝² : AddCommGroup P
inst✝¹ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝ : DirectedSystem G fun i j h => ↑(f i j h)
x : DirectSum ι G
i j : ι
hij : i ≤ j
hx : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
⊢ ↑(DirectSum.toModule R ι (G j) fun k => totalize G f k j) x =
    ↑(f i j hij) (↑(DirectSum.toModule R ι (G i) fun k => totalize G f k i) x)
[PROOFSTEP]
rw [← @DFinsupp.sum_single ι G _ _ _ x]
[GOAL]
R : Type u
inst✝⁶ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → AddCommGroup (G i)
inst✝³ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝² : AddCommGroup P
inst✝¹ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝ : DirectedSystem G fun i j h => ↑(f i j h)
x : DirectSum ι G
i j : ι
hij : i ≤ j
hx : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
⊢ ↑(DirectSum.toModule R ι (G j) fun k => totalize G f k j) (DFinsupp.sum x DFinsupp.single) =
    ↑(f i j hij) (↑(DirectSum.toModule R ι (G i) fun k => totalize G f k i) (DFinsupp.sum x DFinsupp.single))
[PROOFSTEP]
unfold DFinsupp.sum
[GOAL]
R : Type u
inst✝⁶ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → AddCommGroup (G i)
inst✝³ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝² : AddCommGroup P
inst✝¹ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝ : DirectedSystem G fun i j h => ↑(f i j h)
x : DirectSum ι G
i j : ι
hij : i ≤ j
hx : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
⊢ ↑(DirectSum.toModule R ι (G j) fun k => totalize G f k j)
      (Finset.sum (DFinsupp.support x) fun i => DFinsupp.single i (↑x i)) =
    ↑(f i j hij)
      (↑(DirectSum.toModule R ι (G i) fun k => totalize G f k i)
        (Finset.sum (DFinsupp.support x) fun i => DFinsupp.single i (↑x i)))
[PROOFSTEP]
simp only [LinearMap.map_sum]
[GOAL]
R : Type u
inst✝⁶ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → AddCommGroup (G i)
inst✝³ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝² : AddCommGroup P
inst✝¹ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝ : DirectedSystem G fun i j h => ↑(f i j h)
x : DirectSum ι G
i j : ι
hij : i ≤ j
hx : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
⊢ (Finset.sum (DFinsupp.support x) fun x_1 =>
      ↑(DirectSum.toModule R ι (G j) fun k => totalize G f k j) (DFinsupp.single x_1 (↑x x_1))) =
    Finset.sum (DFinsupp.support x) fun x_1 =>
      ↑(f i j hij) (↑(DirectSum.toModule R ι (G i) fun k => totalize G f k i) (DFinsupp.single x_1 (↑x x_1)))
[PROOFSTEP]
refine' Finset.sum_congr rfl fun k hk => _
[GOAL]
R : Type u
inst✝⁶ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → AddCommGroup (G i)
inst✝³ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝² : AddCommGroup P
inst✝¹ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝ : DirectedSystem G fun i j h => ↑(f i j h)
x : DirectSum ι G
i j : ι
hij : i ≤ j
hx : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
k : ι
hk : k ∈ DFinsupp.support x
⊢ ↑(DirectSum.toModule R ι (G j) fun k => totalize G f k j) (DFinsupp.single k (↑x k)) =
    ↑(f i j hij) (↑(DirectSum.toModule R ι (G i) fun k => totalize G f k i) (DFinsupp.single k (↑x k)))
[PROOFSTEP]
rw [DirectSum.single_eq_lof R k (x k), DirectSum.toModule_lof, DirectSum.toModule_lof, totalize_of_le (hx k hk),
  totalize_of_le (le_trans (hx k hk) hij), DirectedSystem.map_map]
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
⊢ Nonempty ι
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝¹ : DirectSum ι G
H : Submodule.Quotient.mk x✝¹ = 0
ind : ι
x : DirectSum ι G
x✝ : x ∈ {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i j : ι
hij : i ≤ j
y : G i
hxy : ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) = x
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ (∀ (k_1 : ι), k_1 ∈ DFinsupp.support x → k_1 ≤ k) ∧ ↑(DirectSum.toModule R ι (G k) fun i => totalize G f i k) x = 0
[PROOFSTEP]
subst hxy
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
⊢ (∀ (k_1 : ι),
      k_1 ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y)) → k_1 ≤ k) ∧
    ↑(DirectSum.toModule R ι (G k) fun i => totalize G f i k)
        (↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y)) =
      0
[PROOFSTEP]
constructor
[GOAL]
case left
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
⊢ ∀ (k_1 : ι), k_1 ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y)) → k_1 ≤ k
[PROOFSTEP]
intro i0 hi0
[GOAL]
case left
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi0 : i0 ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y))
⊢ i0 ≤ k
[PROOFSTEP]
rw [DFinsupp.mem_support_iff, DirectSum.sub_apply, ← DirectSum.single_eq_lof, ← DirectSum.single_eq_lof,
  DFinsupp.single_apply, DFinsupp.single_apply] at hi0 
[GOAL]
case left
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi0 : ((if h : i = i0 then Eq.recOn h y else 0) - if h : j = i0 then Eq.recOn h (↑(f i j hij) y) else 0) ≠ 0
⊢ i0 ≤ k
[PROOFSTEP]
split_ifs at hi0  with hi hj hj
[GOAL]
case pos
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi : i = i0
hj : j = i0
hi0 : Eq.recOn hi y - Eq.recOn hj (↑(f i j hij) y) ≠ 0
⊢ i0 ≤ k
[PROOFSTEP]
rwa [hi] at hik 
[GOAL]
case neg
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi : i = i0
hj : ¬j = i0
hi0 : Eq.recOn hi y - 0 ≠ 0
⊢ i0 ≤ k
[PROOFSTEP]
rwa [hi] at hik 
[GOAL]
case pos
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi : ¬i = i0
hj : j = i0
hi0 : 0 - Eq.recOn hj (↑(f i j hij) y) ≠ 0
⊢ i0 ≤ k
[PROOFSTEP]
rwa [hj] at hjk 
[GOAL]
case neg
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi : ¬i = i0
hj : ¬j = i0
hi0 : 0 - 0 ≠ 0
⊢ i0 ≤ k
[PROOFSTEP]
exfalso
[GOAL]
case neg.h
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi : ¬i = i0
hj : ¬j = i0
hi0 : 0 - 0 ≠ 0
⊢ False
[PROOFSTEP]
apply hi0
[GOAL]
case neg.h
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
i0 : ι
hi : ¬i = i0
hj : ¬j = i0
hi0 : 0 - 0 ≠ 0
⊢ 0 - 0 = 0
[PROOFSTEP]
rw [sub_zero]
[GOAL]
case right
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : DirectSum ι G
H : Submodule.Quotient.mk x = 0
ind i j : ι
hij : i ≤ j
y : G i
k : ι
hik : i ≤ k
hjk : j ≤ k
x✝ :
  ↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y) ∈
    {a | ∃ i j H x, ↑(DirectSum.lof R ι G i) x - ↑(DirectSum.lof R ι G j) (↑(f i j H) x) = a}
⊢ ↑(DirectSum.toModule R ι (G k) fun i => totalize G f i k)
      (↑(DirectSum.lof R ι G i) y - ↑(DirectSum.lof R ι G j) (↑(f i j hij) y)) =
    0
[PROOFSTEP]
simp [LinearMap.map_sub, totalize_of_le, hik, hjk, DirectedSystem.map_map, DirectSum.apply_eq_component,
  DirectSum.component.of]
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝² : DirectSum ι G
H : Submodule.Quotient.mk x✝² = 0
ind : ι
x y : DirectSum ι G
x✝¹ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support x → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) x = 0
x✝ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support y → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) y = 0
i : ι
hi : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
hxi : ↑(DirectSum.toModule R ι (G i) fun i_1 => totalize G f i_1 i) x = 0
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support y → k ≤ j
hyj : ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) y = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(DirectSum.toModule R ι (G k) fun i => totalize G f i k) (x + y) = 0
[PROOFSTEP]
simp only [map_add]
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝² : DirectSum ι G
H : Submodule.Quotient.mk x✝² = 0
ind : ι
x y : DirectSum ι G
x✝¹ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support x → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) x = 0
x✝ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support y → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) y = 0
i : ι
hi : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
hxi : ↑(DirectSum.toModule R ι (G i) fun i_1 => totalize G f i_1 i) x = 0
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support y → k ≤ j
hyj : ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) y = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(DirectSum.toModule R ι (G k) fun i => totalize G f i k) x +
      ↑(DirectSum.toModule R ι (G k) fun i => totalize G f i k) y =
    0
[PROOFSTEP]
rw [toModule_totalize_of_le hik hi, toModule_totalize_of_le hjk hj]
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝² : DirectSum ι G
H : Submodule.Quotient.mk x✝² = 0
ind : ι
x y : DirectSum ι G
x✝¹ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support x → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) x = 0
x✝ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support y → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) y = 0
i : ι
hi : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
hxi : ↑(DirectSum.toModule R ι (G i) fun i_1 => totalize G f i_1 i) x = 0
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support y → k ≤ j
hyj : ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) y = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(f i k hik) (↑(DirectSum.toModule R ι (G i) fun k => totalize (fun i => G i) f k i) x) +
      ↑(f j k hjk) (↑(DirectSum.toModule R ι (G j) fun k => totalize (fun i => G i) f k j) y) =
    0
[PROOFSTEP]
simp [hxi, hyj]
[GOAL]
R : Type u
inst✝⁸ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁷ : Preorder ι
G : ι → Type w
inst✝⁶ : (i : ι) → AddCommGroup (G i)
inst✝⁵ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝⁴ : AddCommGroup P
inst✝³ : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝² : DirectedSystem G fun i j h => ↑(f i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝¹ : DirectSum ι G
H : Submodule.Quotient.mk x✝¹ = 0
ind : ι
a : R
x : DirectSum ι G
x✝ : ∃ j, (∀ (k : ι), k ∈ DFinsupp.support x → k ≤ j) ∧ ↑(DirectSum.toModule R ι (G j) fun i => totalize G f i j) x = 0
i : ι
hi : ∀ (k : ι), k ∈ DFinsupp.support x → k ≤ i
hxi : ↑(DirectSum.toModule R ι (G i) fun i_1 => totalize G f i_1 i) x = 0
⊢ ↑(DirectSum.toModule R ι (G i) fun i_1 => totalize G f i_1 i) (a • x) = 0
[PROOFSTEP]
simp [LinearMap.map_smul, hxi]
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : DirectedSystem G fun i j h => ↑(f i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
H : ↑(of R ι G f i) x = 0
this : Nonempty ι
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) x) → k ≤ j
hxj : ↑(DirectSum.toModule R ι (G j) fun i => totalize G (fun i j H => f i j H) i j) (↑(DirectSum.lof R ι G i) x) = 0
hx0 : x = 0
⊢ ↑(f i i (_ : i ≤ i)) x = 0
[PROOFSTEP]
simp [hx0]
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : DirectedSystem G fun i j h => ↑(f i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
H : ↑(of R ι G f i) x = 0
this : Nonempty ι
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) x) → k ≤ j
hxj : ↑(DirectSum.toModule R ι (G j) fun i => totalize G (fun i j H => f i j H) i j) (↑(DirectSum.lof R ι G i) x) = 0
hx0 : ¬x = 0
⊢ i ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) x)
[PROOFSTEP]
simp [DirectSum.apply_eq_component, hx0]
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : DirectedSystem G fun i j h => ↑(f i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
H : ↑(of R ι G f i) x = 0
this : Nonempty ι
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) x) → k ≤ j
hxj : ↑(DirectSum.toModule R ι (G j) fun i => totalize G (fun i j H => f i j H) i j) (↑(DirectSum.lof R ι G i) x) = 0
hx0 : ¬x = 0
hij : i ≤ j
⊢ ↑(f i j hij) x = 0
[PROOFSTEP]
simp only [DirectSum.toModule_lof] at hxj 
[GOAL]
R : Type u
inst✝⁷ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁶ : Preorder ι
G : ι → Type w
inst✝⁵ : (i : ι) → AddCommGroup (G i)
inst✝⁴ : (i : ι) → Module R (G i)
f : (i j : ι) → i ≤ j → G i →ₗ[R] G j
P : Type u₁
inst✝³ : AddCommGroup P
inst✝² : Module R P
g : (i : ι) → G i →ₗ[R] P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : DirectedSystem G fun i j h => ↑(f i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
H : ↑(of R ι G f i) x = 0
this : Nonempty ι
j : ι
hj : ∀ (k : ι), k ∈ DFinsupp.support (↑(DirectSum.lof R ι G i) x) → k ≤ j
hx0 : ¬x = 0
hij : i ≤ j
hxj : ↑(totalize G (fun i j H => f i j H) i j) x = 0
⊢ ↑(f i j hij) x = 0
[PROOFSTEP]
rwa [totalize_of_le hij] at hxj 
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (G i)
f : (i j : ι) → i ≤ j → G i →+ G j
P : Type u₁
inst✝² : AddCommGroup P
g : (i : ι) → G i →+ P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →+ P
x✝ : DirectLimit G f
i j : ι
hij : i ≤ j
x : G i
⊢ ↑((fun i => AddMonoidHom.comp F (LinearMap.toAddMonoidHom (of G f i))) j) (↑(f i j hij) x) =
    ↑((fun i => AddMonoidHom.comp F (LinearMap.toAddMonoidHom (of G f i))) i) x
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → AddCommGroup (G i)
f : (i j : ι) → i ≤ j → G i →+ G j
P : Type u₁
inst✝² : AddCommGroup P
g : (i : ι) → G i →+ P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (↑(f i j hij) x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →+ P
x✝ : DirectLimit G f
i : ι
x : G i
⊢ ↑F (↑(of G f i) x) =
    ↑(lift G f P (fun i => AddMonoidHom.comp F (LinearMap.toAddMonoidHom (of G f i)))
          (_ : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑F (↑(of G f j) (↑(f i j hij) x)) = ↑F (↑(of G f i) x)))
      (↑(of G f i) x)
[PROOFSTEP]
simp
[GOAL]
R : Type u
inst✝² : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝¹ : Preorder ι
G : ι → Type w
inst✝ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
⊢ Zero (DirectLimit G f)
[PROOFSTEP]
unfold DirectLimit
[GOAL]
R : Type u
inst✝² : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝¹ : Preorder ι
G : ι → Type w
inst✝ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
⊢ Zero
    (FreeCommRing ((i : ι) × G i) ⧸
      Ideal.span
        {a |
          (∃ i j H x, of { fst := j, snd := f i j H x } - of { fst := i, snd := x } = a) ∨
            (∃ i, of { fst := i, snd := 1 } - 1 = a) ∨
              (∃ i x y, of { fst := i, snd := x + y } - (of { fst := i, snd := x } + of { fst := i, snd := y }) = a) ∨
                ∃ i x y, of { fst := i, snd := x * y } - of { fst := i, snd := x } * of { fst := i, snd := y } = a})
[PROOFSTEP]
exact ⟨0⟩
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
⊢ Nonempty ι
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝ : FreeCommRing ((i : ι) × G i)
s✝ : Multiplicative (Multiset ((i : ι) × G i))
a : (i : ι) × G i
s : Multiset ((i : ι) × G i)
ih : ∃ i x, ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
i : ι
x : G i
j : ι
y : G j
hs : ↑(of G f j) y = Quotient.mk'' (FreeAbelianGroup.of s)
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(of G f k) (f i k hik x * f j k hjk y) = Quotient.mk'' (FreeAbelianGroup.of ({ fst := i, snd := x } ::ₘ s))
[PROOFSTEP]
rw [(of G f k).map_mul, of_f, of_f, hs]
  /- porting note: In Lean3, from here, this was `by refl`. I have added
                the lemma `FreeCommRing.of_cons` to fix this proof. -/
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝ : FreeCommRing ((i : ι) × G i)
s✝ : Multiplicative (Multiset ((i : ι) × G i))
a : (i : ι) × G i
s : Multiset ((i : ι) × G i)
ih : ∃ i x, ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
i : ι
x : G i
j : ι
y : G j
hs : ↑(of G f j) y = Quotient.mk'' (FreeAbelianGroup.of s)
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(of G f i) x * Quotient.mk'' (FreeAbelianGroup.of s) =
    Quotient.mk'' (FreeAbelianGroup.of ({ fst := i, snd := x } ::ₘ s))
[PROOFSTEP]
apply congr_arg Quotient.mk''
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝ : FreeCommRing ((i : ι) × G i)
s✝ : Multiplicative (Multiset ((i : ι) × G i))
a : (i : ι) × G i
s : Multiset ((i : ι) × G i)
ih : ∃ i x, ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
i : ι
x : G i
j : ι
y : G j
hs : ↑(of G f j) y = Quotient.mk'' (FreeAbelianGroup.of s)
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ (fun x x_1 => x * x_1) (FreeCommRing.of { fst := i, snd := x }) (FreeAbelianGroup.of s) =
    FreeAbelianGroup.of ({ fst := i, snd := x } ::ₘ s)
[PROOFSTEP]
symm
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝ : FreeCommRing ((i : ι) × G i)
s✝ : Multiplicative (Multiset ((i : ι) × G i))
a : (i : ι) × G i
s : Multiset ((i : ι) × G i)
ih : ∃ i x, ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
i : ι
x : G i
j : ι
y : G j
hs : ↑(of G f j) y = Quotient.mk'' (FreeAbelianGroup.of s)
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ FreeAbelianGroup.of ({ fst := i, snd := x } ::ₘ s) =
    (fun x x_1 => x * x_1) (FreeCommRing.of { fst := i, snd := x }) (FreeAbelianGroup.of s)
[PROOFSTEP]
apply FreeCommRing.of_cons
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝¹ : FreeCommRing ((i : ι) × G i)
s : Multiplicative (Multiset ((i : ι) × G i))
x✝ : ∃ i x, ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
i : ι
x : G i
ih : ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
⊢ ↑(of G f i) (-x) = Quotient.mk'' (-FreeAbelianGroup.of s)
[PROOFSTEP]
rw [(of G f i).map_neg, ih]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝¹ : FreeCommRing ((i : ι) × G i)
s : Multiplicative (Multiset ((i : ι) × G i))
x✝ : ∃ i x, ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
i : ι
x : G i
ih : ↑(of G f i) x = Quotient.mk'' (FreeAbelianGroup.of s)
⊢ -Quotient.mk'' (FreeAbelianGroup.of s) = Quotient.mk'' (-FreeAbelianGroup.of s)
[PROOFSTEP]
rfl
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝² : FreeCommRing ((i : ι) × G i)
p q : FreeAbelianGroup (Multiplicative (Multiset ((i : ι) × G i)))
x✝¹ : ∃ i x, ↑(of G f i) x = Quotient.mk'' p
x✝ : ∃ i x, ↑(of G f i) x = Quotient.mk'' q
i : ι
x : G i
ihx : ↑(of G f i) x = Quotient.mk'' p
j : ι
y : G j
ihy : ↑(of G f j) y = Quotient.mk'' q
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ↑(of G f k) (f i k hik x + f j k hjk y) = Quotient.mk'' (p + q)
[PROOFSTEP]
rw [(of _ _ _).map_add, of_f, of_f, ihx, ihy]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
z : DirectLimit G f
ind : ι
x✝² : FreeCommRing ((i : ι) × G i)
p q : FreeAbelianGroup (Multiplicative (Multiset ((i : ι) × G i)))
x✝¹ : ∃ i x, ↑(of G f i) x = Quotient.mk'' p
x✝ : ∃ i x, ↑(of G f i) x = Quotient.mk'' q
i : ι
x : G i
ihx : ↑(of G f i) x = Quotient.mk'' p
j : ι
y : G j
ihy : ↑(of G f j) y = Quotient.mk'' q
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ Quotient.mk'' p + Quotient.mk'' q = Quotient.mk'' (p + q)
[PROOFSTEP]
rfl
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
z : DirectLimit G fun i j h => ↑(f' i j h)
i : ι
x : G i
h : ↑(of G (fun i j h => ↑(f' i j h)) i) x = z
⊢ Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) (↑C x) = ↑C z
[PROOFSTEP]
rw [map_C, h]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ↑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) (Polynomial.map (f' i₁ i h1) p₁ + Polynomial.map (f' i₂ i h2) p₂) =
    q₁ + q₂
[PROOFSTEP]
rw [Polynomial.map_add, map_map, map_map, ← ih₁, ← ih₂]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ↑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ Polynomial.map (RingHom.comp (of G (fun i j h => ↑(f' i j h)) i) (f' i₁ i h1)) p₁ +
      Polynomial.map (RingHom.comp (of G (fun i j h => ↑(f' i j h)) i) (f' i₂ i h2)) p₂ =
    Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ + Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂
[PROOFSTEP]
congr 2
[GOAL]
case e_a.e_f
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ↑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ RingHom.comp (of G (fun i j h => ↑(f' i j h)) i) (f' i₁ i h1) = of G (fun i j h => ↑(f' i j h)) i₁
[PROOFSTEP]
ext x
[GOAL]
case e_a.e_f
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ↑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ RingHom.comp (of G (fun i j h => ↑(f' i j h)) i) (f' i₂ i h2) = of G (fun i j h => ↑(f' i j h)) i₂
[PROOFSTEP]
ext x
[GOAL]
case e_a.e_f.a
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ↑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
x : G i₁
⊢ ↑(RingHom.comp (of G (fun i j h => ↑(f' i j h)) i) (f' i₁ i h1)) x = ↑(of G (fun i j h => ↑(f' i j h)) i₁) x
[PROOFSTEP]
simp_rw [RingHom.comp_apply, of_f]
[GOAL]
case e_a.e_f.a
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ↑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ↑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
x : G i₂
⊢ ↑(RingHom.comp (of G (fun i j h => ↑(f' i j h)) i) (f' i₂ i h2)) x = ↑(of G (fun i j h => ↑(f' i j h)) i₂) x
[PROOFSTEP]
simp_rw [RingHom.comp_apply, of_f]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ↑(f' i j h))[X]
n : ℕ
z : DirectLimit G fun i j h => ↑(f' i j h)
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) p = ↑C z * X ^ n
i : ι
x : G i
h : ↑(of G (fun i j h => ↑(f' i j h)) i) x = z
⊢ Polynomial.map (of G (fun i j h => ↑(f' i j h)) i) (↑C x * X ^ (n + 1)) = ↑C z * X ^ (n + 1)
[PROOFSTEP]
rw [Polynomial.map_mul, map_C, h, Polynomial.map_pow, map_X]
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) x)
[PROOFSTEP]
refine' Subring.InClosure.recOn hxs _ _ _ _
[GOAL]
case refine'_1
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) 1)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) 1)
[PROOFSTEP]
rw [(restriction _).map_one, (FreeCommRing.lift _).map_one, (f' j k hjk).map_one, (restriction _).map_one,
  (FreeCommRing.lift _).map_one]
[GOAL]
case refine'_2
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (-1))) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (-1))
[PROOFSTEP]
rw [(restriction _).map_neg, (restriction _).map_one, RingHom.map_neg, (FreeCommRing.lift _).map_one,
  (f' j k hjk).map_neg, (f' j k hjk).map_one,
  -- porting note: similarly here I give strictly less information(restriction _).map_neg, (restriction _).map_one,
  RingHom.map_neg, (FreeCommRing.lift _).map_one]
[GOAL]
case refine'_3
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ (z : FreeCommRing ((i : ι) × G i)),
    z ∈ FreeCommRing.of '' s →
      ∀ (n : FreeCommRing ((i : ι) × G i)),
        ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
            ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) →
          ↑(f' j k hjk)
              (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (z * n))) =
            ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (z * n))
[PROOFSTEP]
rintro _ ⟨p, hps, rfl⟩ n ih
[GOAL]
case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
⊢ ↑(f' j k hjk)
      (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (FreeCommRing.of p * n))) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (FreeCommRing.of p * n))
[PROOFSTEP]
rw [(restriction _).map_mul, (FreeCommRing.lift _).map_mul, (f' j k hjk).map_mul, ih, (restriction _).map_mul,
  (FreeCommRing.lift _).map_mul, restriction_of, dif_pos hps, lift_of, restriction_of, dif_pos (hst hps), lift_of]
[GOAL]
case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
⊢ ↑(f' j k hjk)
        (↑(f' (↑{ val := p, property := hps }).fst j (_ : (↑{ val := p, property := hps }).fst ≤ j))
          (↑{ val := p, property := hps }).snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' (↑{ val := p, property := (_ : p ∈ t) }).fst k (_ : (↑{ val := p, property := (_ : p ∈ t) }).fst ≤ k))
        (↑{ val := p, property := (_ : p ∈ t) }).snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
[PROOFSTEP]
dsimp only
  -- porting note: Lean 3 could get away with far fewer hints for inputs in the line below
[GOAL]
case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
⊢ ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) p.snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' p.fst k (_ : p.fst ≤ k)) p.snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
[PROOFSTEP]
have := DirectedSystem.map_map (fun i j h => f' i j h) (hj p hps) hjk
[GOAL]
case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
this : ∀ (x : G p.fst), ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) x) = ↑(f' p.fst k (_ : p.fst ≤ k)) x
⊢ ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) p.snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' p.fst k (_ : p.fst ≤ k)) p.snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
[PROOFSTEP]
dsimp only at this 
[GOAL]
case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
this : ∀ (x : G p.fst), ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) x) = ↑(f' p.fst k (_ : p.fst ≤ k)) x
⊢ ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) p.snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' p.fst k (_ : p.fst ≤ k)) p.snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
[PROOFSTEP]
rw [this]
[GOAL]
case refine'_4
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ {x y : FreeCommRing ((i : ι) × G i)},
    ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x)) =
        ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) x) →
      ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) y)) =
          ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) y) →
        ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y))) =
          ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (x + y))
[PROOFSTEP]
rintro x y ihx ihy
[GOAL]
case refine'_4
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x✝ : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x✝ s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
x y : FreeCommRing ((i : ι) × G i)
ihx :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) x)
ihy :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) y)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) y)
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y))) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (x + y))
[PROOFSTEP]
rw [(restriction _).map_add, (FreeCommRing.lift _).map_add, (f' j k hjk).map_add, ihx, ihy, (restriction _).map_add,
  (FreeCommRing.lift _).map_add]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
⊢ ∃ j s H, IsSupported x s ∧ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x) = 0
[PROOFSTEP]
refine' span_induction (Ideal.Quotient.eq_zero_iff_mem.1 H) _ _ _ _
[GOAL]
case refine'_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
⊢ ∀ (x : FreeCommRing ((i : ι) × G i)),
    x ∈
        {a |
          (∃ i j H x,
              FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                  FreeCommRing.of { fst := i, snd := x } =
                a) ∨
            (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
              (∃ i x y,
                  FreeCommRing.of { fst := i, snd := x + y } -
                      (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                    a) ∨
                ∃ i x y,
                  FreeCommRing.of { fst := i, snd := x * y } -
                      FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                    a} →
      ∃ j s H,
        IsSupported x s ∧ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x) = 0
[PROOFSTEP]
rintro x (⟨i, j, hij, x, rfl⟩ | ⟨i, rfl⟩ | ⟨i, x, y, rfl⟩ | ⟨i, x, y, rfl⟩)
[GOAL]
case refine'_1.inl.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ ∃ j_1 s H,
    IsSupported
        (FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } -
          FreeCommRing.of { fst := i, snd := x })
        s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j_1 (_ : (↑ix).fst ≤ j_1)) (↑ix).snd)
          (↑(restriction s)
            (FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } -
              FreeCommRing.of { fst := i, snd := x })) =
        0
[PROOFSTEP]
refine'
  ⟨j, {⟨i, x⟩, ⟨j, f' i j hij x⟩}, _, isSupported_sub (isSupported_of.2 <| Or.inr rfl) (isSupported_of.2 <| Or.inl rfl),
    _⟩
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ ∀ (k : (i : ι) × G i),
    k ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }} → k.fst ≤ j
[PROOFSTEP]
rintro k (rfl | ⟨rfl | _⟩)
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_1.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x }.fst ≤ j
case refine'_1.inl.intro.intro.intro.intro.refine'_1.inr.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }.fst ≤ j
[PROOFSTEP]
exact hij
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_1.inr.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }.fst ≤ j
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd)
      (↑(restriction {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }})
        (FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } -
          FreeCommRing.of { fst := i, snd := x })) =
    0
[PROOFSTEP]
rw [(restriction _).map_sub, RingHom.map_sub, restriction_of, dif_pos, restriction_of, dif_pos, lift_of, lift_of]
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ ↑(f'
            (↑{ val := { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x },
                  property := ?refine'_1.inl.intro.intro.intro.intro.refine'_2.hc }).fst
            j
            (_ :
              (↑{ val := { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x },
                      property := ?refine'_1.inl.intro.intro.intro.intro.refine'_2.hc }).fst ≤
                j))
        (↑{ val := { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x },
              property := ?refine'_1.inl.intro.intro.intro.intro.refine'_2.hc }).snd -
      ↑(f' (↑{ val := { fst := i, snd := x }, property := ?refine'_1.inl.intro.intro.intro.intro.refine'_2.hc }).fst j
            (_ :
              (↑{ val := { fst := i, snd := x },
                      property := ?refine'_1.inl.intro.intro.intro.intro.refine'_2.hc }).fst ≤
                j))
        (↑{ val := { fst := i, snd := x }, property := ?refine'_1.inl.intro.intro.intro.intro.refine'_2.hc }).snd =
    0
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
[PROOFSTEP]
dsimp only
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ ↑(f' j j (_ : j ≤ j)) (↑(f' i j hij) x) - ↑(f' i j (_ : i ≤ j)) x = 0
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
[PROOFSTEP]
have := DirectedSystem.map_map (fun i j h => f' i j h) hij (le_refl j : j ≤ j)
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
this : ∀ (x : G i), ↑(f' j j (_ : j ≤ j)) (↑(f' i j hij) x) = ↑(f' i j (_ : i ≤ j)) x
⊢ ↑(f' j j (_ : j ≤ j)) (↑(f' i j hij) x) - ↑(f' i j (_ : i ≤ j)) x = 0
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
[PROOFSTEP]
dsimp only at this 
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
this : ∀ (x : G i), ↑(f' j j (_ : j ≤ j)) (↑(f' i j hij) x) = ↑(f' i j (_ : i ≤ j)) x
⊢ ↑(f' j j (_ : j ≤ j)) (↑(f' i j hij) x) - ↑(f' i j (_ : i ≤ j)) x = 0
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
[PROOFSTEP]
rw [this]
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
this : ∀ (x : G i), ↑(f' j j (_ : j ≤ j)) (↑(f' i j hij) x) = ↑(f' i j (_ : i ≤ j)) x
⊢ ↑(f' i j (_ : i ≤ j)) x - ↑(f' i j (_ : i ≤ j)) x = 0
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
[PROOFSTEP]
exact sub_self _
[GOAL]
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
case refine'_1.inl.intro.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i j : ι
hij : i ≤ j
x : G i
⊢ { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x } ∈
    {{ fst := i, snd := x }, { fst := j, snd := (fun i j h => ↑(f' i j h)) i j hij x }}
[PROOFSTEP]
exacts [Or.inr rfl, Or.inl rfl]
[GOAL]
case refine'_1.inr.inl.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
i : ι
⊢ ∃ j s H,
    IsSupported (FreeCommRing.of { fst := i, snd := 1 } - 1) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd)
          (↑(restriction s) (FreeCommRing.of { fst := i, snd := 1 } - 1)) =
        0
[PROOFSTEP]
refine' ⟨i, {⟨i, 1⟩}, _, isSupported_sub (isSupported_of.2 rfl) isSupported_one, _⟩
[GOAL]
case refine'_1.inr.inl.intro.refine'_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
i : ι
⊢ ∀ (k : (i : ι) × G i), k ∈ {{ fst := i, snd := 1 }} → k.fst ≤ i
[PROOFSTEP]
rintro k (rfl | h)
[GOAL]
case refine'_1.inr.inl.intro.refine'_1.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
i : ι
⊢ { fst := i, snd := 1 }.fst ≤ i
[PROOFSTEP]
rfl
  -- porting note: the Lean3 proof contained `rw [restriction_of]`, but this
          -- lemma does not seem to work here
[GOAL]
case refine'_1.inr.inl.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
i : ι
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd)
      (↑(restriction {{ fst := i, snd := 1 }}) (FreeCommRing.of { fst := i, snd := 1 } - 1)) =
    0
[PROOFSTEP]
rw [RingHom.map_sub, RingHom.map_sub]
[GOAL]
case refine'_1.inr.inl.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
i : ι
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd)
        (↑(restriction {{ fst := i, snd := 1 }}) (FreeCommRing.of { fst := i, snd := 1 })) -
      ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction {{ fst := i, snd := 1 }}) 1) =
    0
[PROOFSTEP]
erw [lift_of, dif_pos rfl, RingHom.map_one, RingHom.map_one, lift_of, RingHom.map_one, sub_self]
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ∃ j s H,
    IsSupported
        (FreeCommRing.of { fst := i, snd := x + y } -
          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }))
        s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd)
          (↑(restriction s)
            (FreeCommRing.of { fst := i, snd := x + y } -
              (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }))) =
        0
[PROOFSTEP]
refine'
  ⟨i, {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}, _,
    isSupported_sub (isSupported_of.2 <| Or.inl rfl)
      (isSupported_add (isSupported_of.2 <| Or.inr <| Or.inl rfl) (isSupported_of.2 <| Or.inr <| Or.inr rfl)),
    _⟩
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ∀ (k : (i : ι) × G i), k ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }} → k.fst ≤ i
[PROOFSTEP]
rintro k (rfl | ⟨rfl | ⟨rfl | hk⟩⟩)
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_1.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y }.fst ≤ i
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_1.inr.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x }.fst ≤ i
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_1.inr.inr.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y }.fst ≤ i
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd)
      (↑(restriction {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }})
        (FreeCommRing.of { fst := i, snd := x + y } -
          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }))) =
    0
[PROOFSTEP]
rw [(restriction _).map_sub, (restriction _).map_add, restriction_of, restriction_of, restriction_of, dif_pos, dif_pos,
  dif_pos, RingHom.map_sub, (FreeCommRing.lift _).map_add, lift_of, lift_of, lift_of]
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(f' (↑{ val := { fst := i, snd := x + y }, property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).fst i
            (_ :
              (↑{ val := { fst := i, snd := x + y },
                      property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).fst ≤
                i))
        (↑{ val := { fst := i, snd := x + y },
              property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).snd -
      (↑(f' (↑{ val := { fst := i, snd := x }, property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).fst
              i
              (_ :
                (↑{ val := { fst := i, snd := x },
                        property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).fst ≤
                  i))
          (↑{ val := { fst := i, snd := x }, property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).snd +
        ↑(f' (↑{ val := { fst := i, snd := y }, property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).fst
              i
              (_ :
                (↑{ val := { fst := i, snd := y },
                        property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).fst ≤
                  i))
          (↑{ val := { fst := i, snd := y }, property := ?refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc }).snd) =
    0
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
dsimp only
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(f' i i (_ : i ≤ i)) (x + y) - (↑(f' i i (_ : i ≤ i)) x + ↑(f' i i (_ : i ≤ i)) y) = 0
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
rw [(f' i i _).map_add]
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(f' i i (_ : i ≤ i)) x + ↑(f' i i (_ : i ≤ i)) y - (↑(f' i i (_ : i ≤ i)) x + ↑(f' i i (_ : i ≤ i)) y) = 0
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
exact sub_self _
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
all_goals tauto
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x + y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
tauto
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
tauto
[GOAL]
case refine'_1.inr.inr.inl.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x + y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
tauto
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ∃ j s H,
    IsSupported
        (FreeCommRing.of { fst := i, snd := x * y } -
          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y })
        s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd)
          (↑(restriction s)
            (FreeCommRing.of { fst := i, snd := x * y } -
              FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y })) =
        0
[PROOFSTEP]
refine'
  ⟨i, {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}, _,
    isSupported_sub (isSupported_of.2 <| Or.inl rfl)
      (isSupported_mul (isSupported_of.2 <| Or.inr <| Or.inl rfl) (isSupported_of.2 <| Or.inr <| Or.inr rfl)),
    _⟩
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ∀ (k : (i : ι) × G i), k ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }} → k.fst ≤ i
[PROOFSTEP]
rintro k (rfl | ⟨rfl | ⟨rfl | hk⟩⟩)
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_1.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y }.fst ≤ i
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_1.inr.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x }.fst ≤ i
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_1.inr.inr.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y }.fst ≤ i
[PROOFSTEP]
rfl
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd)
      (↑(restriction {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }})
        (FreeCommRing.of { fst := i, snd := x * y } -
          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y })) =
    0
[PROOFSTEP]
rw [(restriction _).map_sub, (restriction _).map_mul, restriction_of, restriction_of, restriction_of, dif_pos, dif_pos,
  dif_pos, RingHom.map_sub, (FreeCommRing.lift _).map_mul, lift_of, lift_of, lift_of]
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(f' (↑{ val := { fst := i, snd := x * y }, property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).fst i
            (_ :
              (↑{ val := { fst := i, snd := x * y },
                      property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).fst ≤
                i))
        (↑{ val := { fst := i, snd := x * y },
              property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).snd -
      ↑(f' (↑{ val := { fst := i, snd := x }, property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).fst i
              (_ :
                (↑{ val := { fst := i, snd := x },
                        property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).fst ≤
                  i))
          (↑{ val := { fst := i, snd := x }, property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).snd *
        ↑(f' (↑{ val := { fst := i, snd := y }, property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).fst
              i
              (_ :
                (↑{ val := { fst := i, snd := y },
                        property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).fst ≤
                  i))
          (↑{ val := { fst := i, snd := y }, property := ?refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc }).snd =
    0
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
dsimp only
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(f' i i (_ : i ≤ i)) (x * y) - ↑(f' i i (_ : i ≤ i)) x * ↑(f' i i (_ : i ≤ i)) y = 0
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
rw [(f' i i _).map_mul]
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ ↑(f' i i (_ : i ≤ i)) x * ↑(f' i i (_ : i ≤ i)) y - ↑(f' i i (_ : i ≤ i)) x * ↑(f' i i (_ : i ≤ i)) y = 0
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
exact sub_self _
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
all_goals
  tauto
    -- porting note: was
            --exacts [sub_self _, Or.inl rfl, Or.inr (Or.inr rfl), Or.inr (Or.inl rfl)]
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x * y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
tauto
  -- porting note: was
          --exacts [sub_self _, Or.inl rfl, Or.inr (Or.inr rfl), Or.inr (Or.inl rfl)]
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := x } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
tauto
  -- porting note: was
          --exacts [sub_self _, Or.inl rfl, Or.inr (Or.inr rfl), Or.inr (Or.inl rfl)]
[GOAL]
case refine'_1.inr.inr.inr.intro.intro.intro.refine'_2.hc
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
i : ι
x y : G i
⊢ { fst := i, snd := y } ∈ {{ fst := i, snd := x * y }, { fst := i, snd := x }, { fst := i, snd := y }}
[PROOFSTEP]
tauto
  -- porting note: was
          --exacts [sub_self _, Or.inl rfl, Or.inr (Or.inr rfl), Or.inr (Or.inl rfl)]
[GOAL]
case refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
⊢ ∃ j s H, IsSupported 0 s ∧ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) 0) = 0
[PROOFSTEP]
refine' Nonempty.elim (by infer_instance) fun ind : ι => _
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
⊢ Nonempty ι
[PROOFSTEP]
infer_instance
[GOAL]
case refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
ind : ι
⊢ ∃ j s H, IsSupported 0 s ∧ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) 0) = 0
[PROOFSTEP]
refine'
  ⟨ind, ∅, fun _ => False.elim, isSupported_zero, _⟩
    -- porting note: `RingHom.map_zero` was `(restriction _).map_zero`
[GOAL]
case refine'_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
ind : ι
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst ind (_ : (↑ix).fst ≤ ind)) (↑ix).snd) (↑(restriction ∅) 0) = 0
[PROOFSTEP]
rw [RingHom.map_zero, (FreeCommRing.lift _).map_zero]
[GOAL]
case refine'_3
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
⊢ ∀ (x y : FreeCommRing ((i : ι) × G i)),
    (∃ j s H,
        IsSupported x s ∧ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x) = 0) →
      (∃ j s H,
          IsSupported y s ∧
            ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) y) = 0) →
        ∃ j s H,
          IsSupported (x + y) s ∧
            ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y)) = 0
[PROOFSTEP]
rintro x y ⟨i, s, hi, hxs, ihs⟩ ⟨j, t, hj, hyt, iht⟩
[GOAL]
case refine'_3.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
⊢ ∃ j s H,
    IsSupported (x + y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y)) = 0
[PROOFSTEP]
obtain ⟨k, hik, hjk⟩ := exists_ge_ge i j
[GOAL]
case refine'_3.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∃ j s H,
    IsSupported (x + y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y)) = 0
[PROOFSTEP]
have : ∀ z : Σ i, G i, z ∈ s ∪ t → z.1 ≤ k := by
  rintro z (hz | hz)
  exact le_trans (hi z hz) hik
  exact le_trans (hj z hz) hjk
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∀ (z : (i : ι) × G i), z ∈ s ∪ t → z.fst ≤ k
[PROOFSTEP]
rintro z (hz | hz)
[GOAL]
case inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
z : (i : ι) × G i
hz : z ∈ s
⊢ z.fst ≤ k
case inr
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
z : (i : ι) × G i
hz : z ∈ t
⊢ z.fst ≤ k
[PROOFSTEP]
exact le_trans (hi z hz) hik
[GOAL]
case inr
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
z : (i : ι) × G i
hz : z ∈ t
⊢ z.fst ≤ k
[PROOFSTEP]
exact le_trans (hj z hz) hjk
[GOAL]
case refine'_3.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ (z : (i : ι) × G i), z ∈ s ∪ t → z.fst ≤ k
⊢ ∃ j s H,
    IsSupported (x + y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y)) = 0
[PROOFSTEP]
refine'
  ⟨k, s ∪ t, this,
    isSupported_add (isSupported_upwards hxs <| Set.subset_union_left s t)
      (isSupported_upwards hyt <| Set.subset_union_right s t),
    _⟩
[GOAL]
case refine'_3.intro.intro.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ i
hxs : IsSupported x s
ihs : ↑(↑lift fun ix => ↑(f' (↑ix).fst i (_ : (↑ix).fst ≤ i)) (↑ix).snd) (↑(restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ (z : (i : ι) × G i), z ∈ s ∪ t → z.fst ≤ k
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction (s ∪ t)) (x + y)) = 0
[PROOFSTEP]
rw [RingHom.map_add, (FreeCommRing.lift _).map_add, ←
  of.zero_exact_aux2 G f' hxs hi this hik (Set.subset_union_left s t), ←
  of.zero_exact_aux2 G f' hyt hj this hjk (Set.subset_union_right s t), ihs, (f' i k hik).map_zero, iht,
  (f' j k hjk).map_zero, zero_add]
[GOAL]
case refine'_4
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x =
    0
⊢ ∀ (a x : FreeCommRing ((i : ι) × G i)),
    (∃ j s H,
        IsSupported x s ∧ ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x) = 0) →
      ∃ j s H,
        IsSupported (a • x) s ∧
          ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (a • x)) = 0
[PROOFSTEP]
rintro x y ⟨j, t, hj, hyt, iht⟩
[GOAL]
case refine'_4.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
⊢ ∃ j s H,
    IsSupported (x • y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x • y)) = 0
[PROOFSTEP]
rw [smul_eq_mul]
[GOAL]
case refine'_4.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
⊢ ∃ j s H,
    IsSupported (x * y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x * y)) = 0
[PROOFSTEP]
rcases exists_finset_support x with ⟨s, hxs⟩
[GOAL]
case refine'_4.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
⊢ ∃ j s H,
    IsSupported (x * y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x * y)) = 0
[PROOFSTEP]
rcases(s.image Sigma.fst).exists_le with ⟨i, hi⟩
[GOAL]
case refine'_4.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
⊢ ∃ j s H,
    IsSupported (x * y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x * y)) = 0
[PROOFSTEP]
obtain ⟨k, hik, hjk⟩ := exists_ge_ge i j
[GOAL]
case refine'_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∃ j s H,
    IsSupported (x * y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x * y)) = 0
[PROOFSTEP]
have : ∀ z : Σ i, G i, z ∈ ↑s ∪ t → z.1 ≤ k := by
  rintro z (hz | hz)
  exacts [(hi z.1 <| Finset.mem_image.2 ⟨z, hz, rfl⟩).trans hik, (hj z hz).trans hjk]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∀ (z : (i : ι) × G i), z ∈ ↑s ∪ t → z.fst ≤ k
[PROOFSTEP]
rintro z (hz | hz)
[GOAL]
case inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
z : (i : ι) × G i
hz : z ∈ ↑s
⊢ z.fst ≤ k
case inr
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
z : (i : ι) × G i
hz : z ∈ t
⊢ z.fst ≤ k
[PROOFSTEP]
exacts [(hi z.1 <| Finset.mem_image.2 ⟨z, hz, rfl⟩).trans hik, (hj z hz).trans hjk]
[GOAL]
case refine'_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ (z : (i : ι) × G i), z ∈ ↑s ∪ t → z.fst ≤ k
⊢ ∃ j s H,
    IsSupported (x * y) s ∧
      ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x * y)) = 0
[PROOFSTEP]
refine'
  ⟨k, ↑s ∪ t, this,
    isSupported_mul (isSupported_upwards hxs <| Set.subset_union_left (↑s) t)
      (isSupported_upwards hyt <| Set.subset_union_right (↑s) t),
    _⟩
    -- porting note: RingHom.map_mul was `(restriction _).map_mul`
[GOAL]
case refine'_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  ↑(Ideal.Quotient.mk
          (Ideal.span
            {a |
              (∃ i j H x,
                  FreeCommRing.of { fst := j, snd := (fun i j h => ↑(f' i j h)) i j H x } -
                      FreeCommRing.of { fst := i, snd := x } =
                    a) ∨
                (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                  (∃ i x y,
                      FreeCommRing.of { fst := i, snd := x + y } -
                          (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                        a) ∨
                    ∃ i x y,
                      FreeCommRing.of { fst := i, snd := x * y } -
                          FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                        a}))
      x✝ =
    0
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ (k : (i : ι) × G i), k ∈ t → k.fst ≤ j
hyt : IsSupported y t
iht : ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : IsSupported x ↑s
i : ι
hi : ∀ (i_1 : ι), i_1 ∈ Finset.image Sigma.fst s → i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ (z : (i : ι) × G i), z ∈ ↑s ∪ t → z.fst ≤ k
⊢ ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction (↑s ∪ t)) (x * y)) = 0
[PROOFSTEP]
rw [RingHom.map_mul, (FreeCommRing.lift _).map_mul, ←
  of.zero_exact_aux2 G f' hyt hj this hjk (Set.subset_union_right (↑s) t), iht, (f' j k hjk).map_zero, mul_zero]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ j
hxs : IsSupported (FreeCommRing.of { fst := i, snd := x }) s
hx :
  ↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd)
      (↑(restriction s) (FreeCommRing.of { fst := i, snd := x })) =
    0
hixs : { fst := i, snd := x } ∈ s
⊢ ↑(f' i j (_ : { fst := i, snd := x }.fst ≤ j)) x = 0
[PROOFSTEP]
rw [restriction_of, dif_pos hixs, lift_of] at hx 
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : DirectedSystem G fun i j h => ↑(f' i j h)
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
i : ι
x : G i
hix : ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0
this : Nonempty ι
j : ι
s : Set ((i : ι) × G i)
H : ∀ (k : (i : ι) × G i), k ∈ s → k.fst ≤ j
hxs : IsSupported (FreeCommRing.of { fst := i, snd := x }) s
hixs : { fst := i, snd := x } ∈ s
hx :
  ↑(f' (↑{ val := { fst := i, snd := x }, property := hixs }).fst j
          (_ : (↑{ val := { fst := i, snd := x }, property := hixs }).fst ≤ j))
      (↑{ val := { fst := i, snd := x }, property := hixs }).snd =
    0
⊢ ↑(f' i j (_ : { fst := i, snd := x }.fst ≤ j)) x = 0
[PROOFSTEP]
exact hx
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
⊢ Function.Injective ↑(of G (fun i j h => ↑(f' i j h)) i)
[PROOFSTEP]
suffices ∀ x, of G (fun i j h => f' i j h) i x = 0 → x = 0
  by
  intro x y hxy
  rw [← sub_eq_zero]
  apply this
  rw [(of G _ i).map_sub, hxy, sub_self]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
this : ∀ (x : G i), ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0 → x = 0
⊢ Function.Injective ↑(of G (fun i j h => ↑(f' i j h)) i)
[PROOFSTEP]
intro x y hxy
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
this : ∀ (x : G i), ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0 → x = 0
x y : G i
hxy : ↑(of G (fun i j h => ↑(f' i j h)) i) x = ↑(of G (fun i j h => ↑(f' i j h)) i) y
⊢ x = y
[PROOFSTEP]
rw [← sub_eq_zero]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
this : ∀ (x : G i), ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0 → x = 0
x y : G i
hxy : ↑(of G (fun i j h => ↑(f' i j h)) i) x = ↑(of G (fun i j h => ↑(f' i j h)) i) y
⊢ x - y = 0
[PROOFSTEP]
apply this
[GOAL]
case a
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
this : ∀ (x : G i), ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0 → x = 0
x y : G i
hxy : ↑(of G (fun i j h => ↑(f' i j h)) i) x = ↑(of G (fun i j h => ↑(f' i j h)) i) y
⊢ ↑(of G (fun i j h => ↑(f' i j h)) i) (x - y) = 0
[PROOFSTEP]
rw [(of G _ i).map_sub, hxy, sub_self]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
⊢ ∀ (x : G i), ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0 → x = 0
[PROOFSTEP]
intro x hx
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
x : G i
hx : ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0
⊢ x = 0
[PROOFSTEP]
rcases of.zero_exact hx with ⟨j, hij, hfx⟩
[GOAL]
case intro.intro
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
x : G i
hx : ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0
j : ι
hij : i ≤ j
hfx : ↑(f' i j hij) x = 0
⊢ x = 0
[PROOFSTEP]
apply hf i j hij
[GOAL]
case intro.intro.a
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
hf : ∀ (i j : ι) (hij : i ≤ j), Function.Injective ↑(f' i j hij)
i : ι
x : G i
hx : ↑(of G (fun i j h => ↑(f' i j h)) i) x = 0
j : ι
hij : i ≤ j
hfx : ↑(f' i j hij) x = 0
⊢ ↑(f' i j hij) x = ↑(f' i j hij) 0
[PROOFSTEP]
rw [hfx, (f' i j hij).map_zero]
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
⊢ ∀ (a : FreeCommRing ((i : ι) × G i)),
    a ∈
        Ideal.span
          {a |
            (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
              (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                (∃ i x y,
                    FreeCommRing.of { fst := i, snd := x + y } -
                        (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                      a) ∨
                  ∃ i x y,
                    FreeCommRing.of { fst := i, snd := x * y } -
                        FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                      a} →
      ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) a = 0
[PROOFSTEP]
suffices Ideal.span _ ≤ Ideal.comap (FreeCommRing.lift fun x : Σ i : ι, G i => g x.fst x.snd) ⊥
  by
  intro x hx
  exact (mem_bot P).1 (this hx)
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
this : Ideal.span ?m.2207035 ≤ Ideal.comap (↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) ⊥
⊢ ∀ (a : FreeCommRing ((i : ι) × G i)),
    a ∈
        Ideal.span
          {a |
            (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
              (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
                (∃ i x y,
                    FreeCommRing.of { fst := i, snd := x + y } -
                        (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                      a) ∨
                  ∃ i x y,
                    FreeCommRing.of { fst := i, snd := x * y } -
                        FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                      a} →
      ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) a = 0
[PROOFSTEP]
intro x hx
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
this : Ideal.span ?m.2207035 ≤ Ideal.comap (↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) ⊥
x : FreeCommRing ((i : ι) × G i)
hx :
  x ∈
    Ideal.span
      {a |
        (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
          (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
            (∃ i x y,
                FreeCommRing.of { fst := i, snd := x + y } -
                    (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                  a) ∨
              ∃ i x y,
                FreeCommRing.of { fst := i, snd := x * y } -
                    FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                  a}
⊢ ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) x = 0
[PROOFSTEP]
exact (mem_bot P).1 (this hx)
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
⊢ Ideal.span
      {a |
        (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
          (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
            (∃ i x y,
                FreeCommRing.of { fst := i, snd := x + y } -
                    (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                  a) ∨
              ∃ i x y,
                FreeCommRing.of { fst := i, snd := x * y } -
                    FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                  a} ≤
    Ideal.comap (↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) ⊥
[PROOFSTEP]
rw [Ideal.span_le]
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
⊢ {a |
      (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
        (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
          (∃ i x y,
              FreeCommRing.of { fst := i, snd := x + y } -
                  (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                a) ∨
            ∃ i x y,
              FreeCommRing.of { fst := i, snd := x * y } -
                  FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                a} ⊆
    ↑(Ideal.comap (↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) ⊥)
[PROOFSTEP]
intro x hx
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
x : FreeCommRing ((i : ι) × G i)
hx :
  x ∈
    {a |
      (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
        (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
          (∃ i x y,
              FreeCommRing.of { fst := i, snd := x + y } -
                  (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                a) ∨
            ∃ i x y,
              FreeCommRing.of { fst := i, snd := x * y } -
                  FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                a}
⊢ x ∈ ↑(Ideal.comap (↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) ⊥)
[PROOFSTEP]
rw [SetLike.mem_coe, Ideal.mem_comap, mem_bot]
[GOAL]
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
x : FreeCommRing ((i : ι) × G i)
hx :
  x ∈
    {a |
      (∃ i j H x, FreeCommRing.of { fst := j, snd := f i j H x } - FreeCommRing.of { fst := i, snd := x } = a) ∨
        (∃ i, FreeCommRing.of { fst := i, snd := 1 } - 1 = a) ∨
          (∃ i x y,
              FreeCommRing.of { fst := i, snd := x + y } -
                  (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y }) =
                a) ∨
            ∃ i x y,
              FreeCommRing.of { fst := i, snd := x * y } -
                  FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y } =
                a}
⊢ ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) x = 0
[PROOFSTEP]
rcases hx with (⟨i, j, hij, x, rfl⟩ | ⟨i, rfl⟩ | ⟨i, x, y, rfl⟩ | ⟨i, x, y, rfl⟩)
[GOAL]
case inl.intro.intro.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
i j : ι
hij : i ≤ j
x : G i
⊢ ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd)
      (FreeCommRing.of { fst := j, snd := f i j hij x } - FreeCommRing.of { fst := i, snd := x }) =
    0
[PROOFSTEP]
simp only [RingHom.map_sub, lift_of, Hg, RingHom.map_one, RingHom.map_add, RingHom.map_mul, (g i).map_one,
  (g i).map_add, (g i).map_mul, sub_self]
[GOAL]
case inr.inl.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
i : ι
⊢ ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd) (FreeCommRing.of { fst := i, snd := 1 } - 1) = 0
[PROOFSTEP]
simp only [RingHom.map_sub, lift_of, Hg, RingHom.map_one, RingHom.map_add, RingHom.map_mul, (g i).map_one,
  (g i).map_add, (g i).map_mul, sub_self]
[GOAL]
case inr.inr.inl.intro.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
i : ι
x y : G i
⊢ ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd)
      (FreeCommRing.of { fst := i, snd := x + y } -
        (FreeCommRing.of { fst := i, snd := x } + FreeCommRing.of { fst := i, snd := y })) =
    0
[PROOFSTEP]
simp only [RingHom.map_sub, lift_of, Hg, RingHom.map_one, RingHom.map_add, RingHom.map_mul, (g i).map_one,
  (g i).map_add, (g i).map_mul, sub_self]
[GOAL]
case inr.inr.inr.intro.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝ : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
i : ι
x y : G i
⊢ ↑(↑FreeCommRing.lift fun x => ↑(g x.fst) x.snd)
      (FreeCommRing.of { fst := i, snd := x * y } -
        FreeCommRing.of { fst := i, snd := x } * FreeCommRing.of { fst := i, snd := y }) =
    0
[PROOFSTEP]
simp only [RingHom.map_sub, lift_of, Hg, RingHom.map_one, RingHom.map_add, RingHom.map_mul, (g i).map_one,
  (g i).map_add, (g i).map_mul, sub_self]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝² : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →+* P
x✝ : DirectLimit G f
i j : ι
hij : i ≤ j
x : G i
⊢ ↑((fun i => RingHom.comp F (of G f i)) j) (f i j hij x) = ↑((fun i => RingHom.comp F (of G f i)) i) x
[PROOFSTEP]
simp [of_f]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
P : Type u₁
inst✝² : CommRing P
g : (i : ι) → G i →+* P
Hg : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑(g j) (f i j hij x) = ↑(g i) x
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
F : DirectLimit G f →+* P
x✝ : DirectLimit G f
i : ι
x : G i
⊢ ↑F (↑(of G f i) x) =
    ↑(lift G f P (fun i => RingHom.comp F (of G f i))
          (_ : ∀ (i j : ι) (hij : i ≤ j) (x : G i), ↑F (↑(of G f j) (f i j hij x)) = ↑F (↑(of G f i) x)))
      (↑(of G f i) x)
[PROOFSTEP]
simp [lift_of]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
⊢ Nonempty ι
[PROOFSTEP]
infer_instance
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
⊢ 0 ≠ 1
[PROOFSTEP]
change (0 : Ring.DirectLimit G fun i j h => f' i j h) ≠ 1
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
⊢ 0 ≠ 1
[PROOFSTEP]
rw [← (Ring.DirectLimit.of _ _ _).map_one]
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
⊢ 0 ≠ ↑(Ring.DirectLimit.of G (fun i j h => ↑(f' i j h)) ?m.2568554) 1
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
⊢ ι
[PROOFSTEP]
intro H
[GOAL]
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
H : 0 = ↑(Ring.DirectLimit.of G (fun i j h => ↑(f' i j h)) ?m.2568554) 1
⊢ False
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
⊢ ι
[PROOFSTEP]
rcases Ring.DirectLimit.of.zero_exact H.symm with ⟨j, hij, hf⟩
[GOAL]
case intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
H : 0 = ↑(Ring.DirectLimit.of G (fun i j h => ↑(f' i j h)) ?m.2568554) 1
j : ι
hij : ?m.2568554 ≤ j
hf : ↑(f' ?m.2568554 j hij) 1 = 0
⊢ False
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
⊢ ι
[PROOFSTEP]
rw [(f' i j hij).map_one] at hf 
[GOAL]
case intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : Nonempty ι
inst✝² : IsDirected ι fun x x_1 => x ≤ x_1
inst✝¹ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
i : ι
H : 0 = ↑(Ring.DirectLimit.of G (fun i j h => ↑(f' i j h)) i) 1
j : ι
hij : i ≤ j
hf : 1 = 0
⊢ False
[PROOFSTEP]
exact one_ne_zero hf
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
p : Ring.DirectLimit G f
i : ι
x : G i
H : ↑(Ring.DirectLimit.of G f i) x ≠ 0
⊢ ↑(Ring.DirectLimit.of G f i) x * ↑(Ring.DirectLimit.of G f i) x⁻¹ = 1
[PROOFSTEP]
erw [← (Ring.DirectLimit.of _ _ _).map_mul,
  mul_inv_cancel fun h : x = 0 => H <| by rw [h, (Ring.DirectLimit.of _ _ _).map_zero],
  (Ring.DirectLimit.of _ _ _).map_one]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
p : Ring.DirectLimit G f
i : ι
x : G i
H : ↑(Ring.DirectLimit.of G f i) x ≠ 0
h : x = 0
⊢ ↑(Ring.DirectLimit.of G f i) x = 0
[PROOFSTEP]
rw [h, (Ring.DirectLimit.of _ _ _).map_zero]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
p : Ring.DirectLimit G f
hp : p ≠ 0
⊢ p * inv G f p = 1
[PROOFSTEP]
rw [inv, dif_neg hp, Classical.choose_spec (DirectLimit.exists_inv G f hp)]
[GOAL]
R : Type u
inst✝⁴ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝³ : Preorder ι
G : ι → Type w
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
inst✝ : (i : ι) → Field (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
p : Ring.DirectLimit G f
hp : p ≠ 0
⊢ inv G f p * p = 1
[PROOFSTEP]
rw [_root_.mul_comm, DirectLimit.mul_inv_cancel G f hp]
