Theorem: Ring.DirectLimit.of.zero_exact_aux
File: Mathlib/Algebra/DirectLimit.lean

tactic: have := Classical.decEq
state_before: R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      x.IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0
state_after: R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      x.IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0

tactic: refine span_induction (Ideal.Quotient.eq_zero_iff_mem.1 H) ?_ ?_ ?_ ?_
state_before: R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      x.IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0
state_after: case refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∀
    x ∈
      {a |
        (∃ i j,
            ∃ (H : i ≤ j), ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
          (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
            (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
              ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a},
    ∃ j s,
      ∃ (H : ∀ k ∈ s, k.fst ≤ j),
        x.IsSupported s ∧
          ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0

case refine_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      IsSupported 0 s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) 0) = 0

case refine_3
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∀ (x y : FreeCommRing ((i : ι) × G i)),
    (∃ j s,
        ∃ (H : ∀ k ∈ s, k.fst ≤ j),
          x.IsSupported s ∧
            ∀ [inst : DecidablePred fun x => x ∈ s],
              (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0) →
      (∃ j s,
          ∃ (H : ∀ k ∈ s, k.fst ≤ j),
            y.IsSupported s ∧
              ∀ [inst : DecidablePred fun x => x ∈ s],
                (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) y) = 0) →
        ∃ j s,
          ∃ (H : ∀ k ∈ s, k.fst ≤ j),
            (x + y).IsSupported s ∧
              ∀ [inst : DecidablePred fun x => x ∈ s],
                (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y)) = 0

case refine_4
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∀ (a x : FreeCommRing ((i : ι) × G i)),
    (∃ j s,
        ∃ (H : ∀ k ∈ s, k.fst ≤ j),
          x.IsSupported s ∧
            ∀ [inst : DecidablePred fun x => x ∈ s],
              (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0) →
      ∃ j s,
        ∃ (H : ∀ k ∈ s, k.fst ≤ j),
          (a • x).IsSupported s ∧
            ∀ [inst : DecidablePred fun x => x ∈ s],
              (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (a • x)) = 0

tactic: rintro x (⟨i, j, hij, x, rfl⟩ | ⟨i, rfl⟩ | ⟨i, x, y, rfl⟩ | ⟨i, x, y, rfl⟩)
state_before: case refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∀
    x ∈
      {a |
        (∃ i j,
            ∃ (H : i ≤ j), ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
          (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
            (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
              ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a},
    ∃ j s,
      ∃ (H : ∀ k ∈ s, k.fst ≤ j),
        x.IsSupported s ∧
          ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0
state_after: case refine_1.inl.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ∃ j_1 s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j_1),
      (FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ - FreeCommRing.of ⟨i, x⟩).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j_1 ⋯) (↑ix).snd)
              ((restriction s) (FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ - FreeCommRing.of ⟨i, x⟩)) =
            0

case refine_1.inr.inl.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (FreeCommRing.of ⟨i, 1⟩ - 1).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, 1⟩ - 1)) = 0

case refine_1.inr.inr.inl.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩)).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd)
              ((restriction s) (FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩))) =
            0

case refine_1.inr.inr.inr.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd)
              ((restriction s) (FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩)) =
            0

tactic: refine
  ⟨j, {⟨i, x⟩, ⟨j, f' i j hij x⟩}, ?_,
    isSupported_sub (isSupported_of.2 <| Or.inr (Set.mem_singleton _))
      (isSupported_of.2 <| Or.inl rfl), fun [_] => ?_⟩
state_before: case refine_1.inl.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ∃ j_1 s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j_1),
      (FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ - FreeCommRing.of ⟨i, x⟩).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j_1 ⋯) (↑ix).snd)
              ((restriction s) (FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ - FreeCommRing.of ⟨i, x⟩)) =
            0
state_after: case refine_1.inl.intro.intro.intro.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ∀ k ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}, k.fst ≤ j

case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd)
      ((restriction {⟨i, x⟩, ⟨j, (f' i j hij) x⟩})
        (FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ - FreeCommRing.of ⟨i, x⟩)) =
    0

tactic: rintro k (rfl | ⟨rfl | _⟩)
state_before: case refine_1.inl.intro.intro.intro.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ∀ k ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}, k.fst ≤ j
state_after: case refine_1.inl.intro.intro.intro.intro.refine_1.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ⟨i, x⟩.fst ≤ j

case refine_1.inl.intro.intro.intro.intro.refine_1.inr.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ⟨j, (f' i j hij) x⟩.fst ≤ j

tactic: exact hij
state_before: case refine_1.inl.intro.intro.intro.intro.refine_1.inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ⟨i, x⟩.fst ≤ j
state_after: no goals

tactic: rfl
state_before: case refine_1.inl.intro.intro.intro.intro.refine_1.inr.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
⊢ ⟨j, (f' i j hij) x⟩.fst ≤ j
state_after: no goals

tactic: rw [(restriction _).map_sub, RingHom.map_sub, restriction_of, dif_pos,
  restriction_of, dif_pos, lift_of, lift_of]
state_before: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd)
      ((restriction {⟨i, x⟩, ⟨j, (f' i j hij) x⟩})
        (FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ - FreeCommRing.of ⟨i, x⟩)) =
    0
state_after: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ (f' (↑⟨⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).fst j ⋯)
        (↑⟨⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).snd -
      (f' (↑⟨⟨i, x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).fst j ⋯)
        (↑⟨⟨i, x⟩, ?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
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}

case refine_1.inl.intro.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}

tactic: exacts [Or.inl rfl, Or.inr rfl]
state_before: case refine_1.inl.intro.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}

case refine_1.inl.intro.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ ⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩ ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
state_after: no goals

tactic: dsimp only
state_before: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ (f' (↑⟨⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).fst j ⋯)
        (↑⟨⟨j, (fun i j h => ⇑(f' i j h)) i j hij x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).snd -
      (f' (↑⟨⟨i, x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).fst j ⋯)
        (↑⟨⟨i, x⟩, ?refine_1.inl.intro.intro.intro.intro.refine_2.hc⟩).snd =
    0
state_after: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ (f' j j ⋯) ((f' i j hij) x) - (f' i j ⋯) x = 0

tactic: have := DirectedSystem.map_map (fun i j h => f' i j h) hij (le_refl j : j ≤ j)
state_before: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
⊢ (f' j j ⋯) ((f' i j hij) x) - (f' i j ⋯) x = 0
state_after: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
this : ∀ (x : G i), (f' j j ⋯) ((f' i j hij) x) = (f' i j ⋯) x
⊢ (f' j j ⋯) ((f' i j hij) x) - (f' i j ⋯) x = 0

tactic: rw [this]
state_before: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
this : ∀ (x : G i), (f' j j ⋯) ((f' i j hij) x) = (f' i j ⋯) x
⊢ (f' j j ⋯) ((f' i j hij) x) - (f' i j ⋯) x = 0
state_after: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
this : ∀ (x : G i), (f' j j ⋯) ((f' i j hij) x) = (f' i j ⋯) x
⊢ (f' i j ⋯) x - (f' i j ⋯) x = 0

tactic: exact sub_self _
state_before: case refine_1.inl.intro.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
i j : ι
hij : i ≤ j
x : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x⟩, ⟨j, (f' i j hij) x⟩}
this : ∀ (x : G i), (f' j j ⋯) ((f' i j hij) x) = (f' i j ⋯) x
⊢ (f' i j ⋯) x - (f' i j ⋯) x = 0
state_after: no goals

tactic: refine ⟨i, {⟨i, 1⟩}, ?_, isSupported_sub (isSupported_of.2 (Set.mem_singleton _))
  isSupported_one, fun [_] => ?_⟩
state_before: case refine_1.inr.inl.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (FreeCommRing.of ⟨i, 1⟩ - 1).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of ⟨i, 1⟩ - 1)) = 0
state_after: case refine_1.inr.inl.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
⊢ ∀ k ∈ {⟨i, 1⟩}, k.fst ≤ i

case refine_1.inr.inl.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
inst✝ : DecidablePred fun x => x ∈ {⟨i, 1⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction {⟨i, 1⟩}) (FreeCommRing.of ⟨i, 1⟩ - 1)) = 0

tactic: rintro k (rfl | h)
state_before: case refine_1.inr.inl.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
⊢ ∀ k ∈ {⟨i, 1⟩}, k.fst ≤ i
state_after: case refine_1.inr.inl.intro.refine_1.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
⊢ ⟨i, 1⟩.fst ≤ i

tactic: rfl
state_before: case refine_1.inr.inl.intro.refine_1.refl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
⊢ ⟨i, 1⟩.fst ≤ i
state_after: no goals

tactic: rw [RingHom.map_sub, RingHom.map_sub]
state_before: case refine_1.inr.inl.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
inst✝ : DecidablePred fun x => x ∈ {⟨i, 1⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction {⟨i, 1⟩}) (FreeCommRing.of ⟨i, 1⟩ - 1)) = 0
state_after: case refine_1.inr.inl.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
inst✝ : DecidablePred fun x => x ∈ {⟨i, 1⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction {⟨i, 1⟩}) (FreeCommRing.of ⟨i, 1⟩)) -
      (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction {⟨i, 1⟩}) 1) =
    0

tactic: erw [lift_of, dif_pos rfl, RingHom.map_one, lift_of, RingHom.map_one, sub_self]
state_before: case refine_1.inr.inl.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
inst✝ : DecidablePred fun x => x ∈ {⟨i, 1⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction {⟨i, 1⟩}) (FreeCommRing.of ⟨i, 1⟩)) -
      (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction {⟨i, 1⟩}) 1) =
    0
state_after: no goals

tactic: 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 (Set.mem_singleton _))),
    fun [_] => ?_⟩
state_before: case refine_1.inr.inr.inl.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩)).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd)
              ((restriction s) (FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩))) =
            0
state_after: case refine_1.inr.inr.inl.intro.intro.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∀ k ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}, k.fst ≤ i

case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd)
      ((restriction {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩})
        (FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩))) =
    0

tactic: rintro k (rfl | ⟨rfl | ⟨rfl | hk⟩⟩) <;> rfl
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∀ k ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}, k.fst ≤ i
state_after: no goals

tactic: 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]
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd)
      ((restriction {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩})
        (FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩))) =
    0
state_after: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' (↑⟨⟨i, x + y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
        (↑⟨⟨i, x + y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).snd -
      ((f' (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).snd +
        (f' (↑⟨⟨i, y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, y⟩, ?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
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, y⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x + y⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

tactic: all_goals tauto
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x + y⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, y⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x + y⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
state_after: no goals

tactic: dsimp only
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' (↑⟨⟨i, x + y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
        (↑⟨⟨i, x + y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).snd -
      ((f' (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).snd +
        (f' (↑⟨⟨i, y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, y⟩, ?refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc⟩).snd) =
    0
state_after: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) (x + y) - ((f' i i ⋯) x + (f' i i ⋯) y) = 0

tactic: rw [(f' i i _).map_add]
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) (x + y) - ((f' i i ⋯) x + (f' i i ⋯) y) = 0
state_after: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) x + (f' i i ⋯) y - ((f' i i ⋯) x + (f' i i ⋯) y) = 0

case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x + y⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}

tactic: exact sub_self _
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) x + (f' i i ⋯) y - ((f' i i ⋯) x + (f' i i ⋯) y) = 0
state_after: no goals

tactic: tauto
state_before: case refine_1.inr.inr.inl.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x + y⟩, ⟨i, x⟩, ⟨i, y⟩}
state_after: no goals

tactic: 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 (Set.mem_singleton _))), fun [_] => ?_⟩
state_before: case refine_1.inr.inr.inr.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd)
              ((restriction s) (FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩)) =
            0
state_after: case refine_1.inr.inr.inr.intro.intro.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∀ k ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}, k.fst ≤ i

case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd)
      ((restriction {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩})
        (FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩)) =
    0

tactic: rintro k (rfl | ⟨rfl | ⟨rfl | hk⟩⟩) <;> rfl
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_1
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
⊢ ∀ k ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}, k.fst ≤ i
state_after: no goals

tactic: 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]
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd)
      ((restriction {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩})
        (FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩)) =
    0
state_after: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' (↑⟨⟨i, x * y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
        (↑⟨⟨i, x * y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).snd -
      (f' (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).snd *
        (f' (↑⟨⟨i, y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, y⟩, ?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
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, y⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x * y⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

tactic: all_goals tauto
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x * y⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, y⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x * y⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
state_after: no goals

tactic: dsimp only
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' (↑⟨⟨i, x * y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
        (↑⟨⟨i, x * y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).snd -
      (f' (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, x⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).snd *
        (f' (↑⟨⟨i, y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).fst i ⋯)
          (↑⟨⟨i, y⟩, ?refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc⟩).snd =
    0
state_after: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) (x * y) - (f' i i ⋯) x * (f' i i ⋯) y = 0

tactic: rw [(f' i i _).map_mul]
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) (x * y) - (f' i i ⋯) x * (f' i i ⋯) y = 0
state_after: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) x * (f' i i ⋯) y - (f' i i ⋯) x * (f' i i ⋯) y = 0

case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x * y⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}

tactic: exact sub_self _
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ (f' i i ⋯) x * (f' i i ⋯) y - (f' i i ⋯) x * (f' i i ⋯) y = 0
state_after: no goals

tactic: tauto
state_before: case refine_1.inr.inr.inr.intro.intro.intro.refine_2.hc
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
i : ι
x y : G i
inst✝ : DecidablePred fun x_1 => x_1 ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
⊢ ⟨i, x⟩ ∈ {⟨i, x * y⟩, ⟨i, x⟩, ⟨i, y⟩}
state_after: no goals

tactic: refine Nonempty.elim (by infer_instance) fun ind : ι => ?_
state_before: case refine_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      IsSupported 0 s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) 0) = 0
state_after: case refine_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
ind : ι
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      IsSupported 0 s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) 0) = 0

tactic: refine ⟨ind, ∅, fun _ => False.elim, isSupported_zero, fun [_] => ?_⟩
state_before: case refine_2
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
ind : ι
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      IsSupported 0 s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) 0) = 0
state_after: case refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
ind : ι
inst✝ : DecidablePred fun x => x ∈ ∅
⊢ (lift fun ix => (f' (↑ix).fst ind ⋯) (↑ix).snd) ((restriction ∅) 0) = 0

tactic: rw [RingHom.map_zero, (FreeCommRing.lift _).map_zero]
state_before: case refine_2
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
ind : ι
inst✝ : DecidablePred fun x => x ∈ ∅
⊢ (lift fun ix => (f' (↑ix).fst ind ⋯) (↑ix).snd) ((restriction ∅) 0) = 0
state_after: no goals

tactic: infer_instance
state_before: R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ Nonempty ι
state_after: no goals

tactic: intro x y ⟨i, s, hi, hxs, ihs⟩ ⟨j, t, hj, hyt, iht⟩
state_before: case refine_3
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∀ (x y : FreeCommRing ((i : ι) × G i)),
    (∃ j s,
        ∃ (H : ∀ k ∈ s, k.fst ≤ j),
          x.IsSupported s ∧
            ∀ [inst : DecidablePred fun x => x ∈ s],
              (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0) →
      (∃ j s,
          ∃ (H : ∀ k ∈ s, k.fst ≤ j),
            y.IsSupported s ∧
              ∀ [inst : DecidablePred fun x => x ∈ s],
                (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) y) = 0) →
        ∃ j s,
          ∃ (H : ∀ k ∈ s, k.fst ≤ j),
            (x + y).IsSupported s ∧
              ∀ [inst : DecidablePred fun x => x ∈ s],
                (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y)) = 0
state_after: case refine_3
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x + y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y)) = 0

tactic: obtain ⟨k, hik, hjk⟩ := exists_ge_ge i j
state_before: case refine_3
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x + y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y)) = 0
state_after: case refine_3.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x + y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y)) = 0

tactic: refine
  ⟨k, s ∪ t, this,
    isSupported_add (isSupported_upwards hxs Set.subset_union_left)
      (isSupported_upwards hyt Set.subset_union_right), fun [_] => ?_⟩
state_before: case refine_3.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ s ∪ t, z.fst ≤ k
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x + y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y)) = 0
state_after: case refine_3.intro.intro
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ s ∪ t, z.fst ≤ k
inst✝ : DecidablePred fun x => x ∈ s ∪ t
⊢ (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction (s ∪ t)) (x + y)) = 0

tactic: classical rw [RingHom.map_add, (FreeCommRing.lift _).map_add, ←
  of.zero_exact_aux2 G f' hxs hi this hik Set.subset_union_left, ←
  of.zero_exact_aux2 G f' hyt hj this hjk Set.subset_union_right, ihs,
  (f' i k hik).map_zero, iht, (f' j k hjk).map_zero, zero_add]
state_before: case refine_3.intro.intro
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ s ∪ t, z.fst ≤ k
inst✝ : DecidablePred fun x => x ∈ s ∪ t
⊢ (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction (s ∪ t)) (x + y)) = 0
state_after: no goals

tactic: rintro z (hz | hz)
state_before: R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∀ z ∈ s ∪ t, z.fst ≤ k
state_after: case inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑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
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑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

tactic: exact le_trans (hi z hz) hik
state_before: case inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑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
state_after: no goals

tactic: exact le_trans (hj z hz) hjk
state_before: case inr
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑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
state_after: no goals

tactic: rw [RingHom.map_add, (FreeCommRing.lift _).map_add, ←
of.zero_exact_aux2 G f' hxs hi this hik Set.subset_union_left, ←
of.zero_exact_aux2 G f' hyt hj this hjk Set.subset_union_right, ihs,
(f' i k hik).map_zero, iht, (f' j k hjk).map_zero, zero_add]
state_before: case refine_3.intro.intro
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
i : ι
s : Set ((i : ι) × G i)
hi : ∀ k ∈ s, k.fst ≤ i
hxs : x.IsSupported s
ihs : ∀ [inst : DecidablePred fun x => x ∈ s], (lift fun ix => (f' (↑ix).fst i ⋯) (↑ix).snd) ((restriction s) x) = 0
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ s ∪ t, z.fst ≤ k
inst✝ : DecidablePred fun x => x ∈ s ∪ t
⊢ (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction (s ∪ t)) (x + y)) = 0
state_after: no goals

tactic: rintro x y ⟨j, t, hj, hyt, iht⟩
state_before: case refine_4
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x =
    0
this : (α : Sort ?u.617921) → DecidableEq α
⊢ ∀ (a x : FreeCommRing ((i : ι) × G i)),
    (∃ j s,
        ∃ (H : ∀ k ∈ s, k.fst ≤ j),
          x.IsSupported s ∧
            ∀ [inst : DecidablePred fun x => x ∈ s],
              (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x) = 0) →
      ∃ j s,
        ∃ (H : ∀ k ∈ s, k.fst ≤ j),
          (a • x).IsSupported s ∧
            ∀ [inst : DecidablePred fun x => x ∈ s],
              (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (a • x)) = 0
state_after: case refine_4.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x • y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x • y)) = 0

tactic: rw [smul_eq_mul]
state_before: case refine_4.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x • y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x • y)) = 0
state_after: case refine_4.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0

tactic: rcases exists_finset_support x with ⟨s, hxs⟩
state_before: case refine_4.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0
state_after: case refine_4.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0

tactic: rcases (s.image Sigma.fst).exists_le with ⟨i, hi⟩
state_before: case refine_4.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Sort ?u.617921) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0
state_after: case refine_4.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0

tactic: obtain ⟨k, hik, hjk⟩ := exists_ge_ge i j
state_before: case refine_4.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0

tactic: 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]
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ ↑s ∪ t, z.fst ≤ k
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0

tactic: refine
  ⟨k, ↑s ∪ t, this,
    isSupported_mul (isSupported_upwards hxs Set.subset_union_left)
      (isSupported_upwards hyt Set.subset_union_right), fun [_] => ?_⟩
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ ↑s ∪ t, z.fst ≤ k
⊢ ∃ j s,
    ∃ (H : ∀ k ∈ s, k.fst ≤ j),
      (x * y).IsSupported s ∧
        ∀ [inst : DecidablePred fun x => x ∈ s],
          (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x * y)) = 0
state_after: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ ↑s ∪ t, z.fst ≤ k
inst✝ : DecidablePred fun x => x ∈ ↑s ∪ t
⊢ (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction (↑s ∪ t)) (x * y)) = 0

tactic: classical rw [RingHom.map_mul, (FreeCommRing.lift _).map_mul, ←
  of.zero_exact_aux2 G f' hyt hj this hjk Set.subset_union_right, iht,
  (f' j k hjk).map_zero, mul_zero]
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ ↑s ∪ t, z.fst ≤ k
inst✝ : DecidablePred fun x => x ∈ ↑s ∪ t
⊢ (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction (↑s ∪ t)) (x * y)) = 0
state_after: no goals

tactic: rintro z (hz | hz)
state_before: R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
⊢ ∀ z ∈ ↑s ∪ t, z.fst ≤ k
state_after: case inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ 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
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ 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

tactic: exacts [(hi z.1 <| Finset.mem_image.2 ⟨z, hz, rfl⟩).trans hik, (hj z hz).trans hjk]
state_before: case inl
R : Type u
inst✝⁵ : Ring R
ι : Type v
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ 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
inst✝⁴ : Preorder ι
G : ι → Type w
inst✝³ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝² : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ 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
state_after: no goals

tactic: rw [RingHom.map_mul, (FreeCommRing.lift _).map_mul, ←
of.zero_exact_aux2 G f' hyt hj this hjk Set.subset_union_right, iht,
(f' j k hjk).map_zero, mul_zero]
state_before: case refine_4.intro.intro.intro.intro.intro.intro.intro.intro
R : Type u
inst✝⁶ : Ring R
ι : Type v
inst✝⁵ : Preorder ι
G : ι → Type w
inst✝⁴ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝³ : DirectedSystem G fun i j h => ⇑(f' i j h)
inst✝² : Nonempty ι
inst✝¹ : IsDirected ι fun x x_1 => x ≤ x_1
x✝ : FreeCommRing ((i : ι) × G i)
H :
  (Ideal.Quotient.mk
        (Ideal.span
          {a |
            (∃ i j,
                ∃ (H : i ≤ j),
                  ∃ x, FreeCommRing.of ⟨j, (fun i j h => ⇑(f' i j h)) i j H x⟩ - FreeCommRing.of ⟨i, x⟩ = a) ∨
              (∃ i, FreeCommRing.of ⟨i, 1⟩ - 1 = a) ∨
                (∃ i x y, FreeCommRing.of ⟨i, x + y⟩ - (FreeCommRing.of ⟨i, x⟩ + FreeCommRing.of ⟨i, y⟩) = a) ∨
                  ∃ i x y, FreeCommRing.of ⟨i, x * y⟩ - FreeCommRing.of ⟨i, x⟩ * FreeCommRing.of ⟨i, y⟩ = a}))
      x✝ =
    0
this✝ : (α : Type v) → DecidableEq α
x y : FreeCommRing ((i : ι) × G i)
j : ι
t : Set ((i : ι) × G i)
hj : ∀ k ∈ t, k.fst ≤ j
hyt : y.IsSupported t
iht : ∀ [inst : DecidablePred fun x => x ∈ t], (lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction t) y) = 0
s : Finset ((i : ι) × G i)
hxs : x.IsSupported ↑s
i : ι
hi : ∀ i_1 ∈ Finset.image Sigma.fst s, i_1 ≤ i
k : ι
hik : i ≤ k
hjk : j ≤ k
this : ∀ z ∈ ↑s ∪ t, z.fst ≤ k
inst✝ : DecidablePred fun x => x ∈ ↑s ∪ t
⊢ (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction (↑s ∪ t)) (x * y)) = 0
state_after: no goals