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

tactic: refine Subring.InClosure.recOn hxs ?_ ?_ ?_ ?_
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) x)
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) 1)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) 1)

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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (-1))) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (-1))

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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ z ∈ FreeCommRing.of '' s,
    ∀ (n : FreeCommRing ((i : ι) × G i)),
      (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) →
        (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (z * n))) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (z * n))

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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ {x y : FreeCommRing ((i : ι) × G i)},
    (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x)) =
        (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) x) →
      (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) y)) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) y) →
        (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y))) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (x + y))

tactic: rw [(restriction _).map_one, (FreeCommRing.lift _).map_one, (f' j k hjk).map_one,
  (restriction _).map_one, (FreeCommRing.lift _).map_one]
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) 1)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) 1)
state_after: no goals

tactic: rw [(restriction _).map_neg, (restriction _).map_one, RingHom.map_neg,
  (FreeCommRing.lift _).map_one, (f' j k hjk).map_neg, (f' j k hjk).map_one,
  (restriction _).map_neg, (restriction _).map_one, RingHom.map_neg,
  (FreeCommRing.lift _).map_one]
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (-1))) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (-1))
state_after: no goals

tactic: rintro _ ⟨p, hps, rfl⟩ n ih
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ z ∈ FreeCommRing.of '' s,
    ∀ (n : FreeCommRing ((i : ι) × G i)),
      (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) →
        (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (z * n))) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (z * n))
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of p * n))) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (FreeCommRing.of p * n))

tactic: rw [(restriction _).map_mul, (FreeCommRing.lift _).map_mul, (f' j k hjk).map_mul, ih,
  (restriction _).map_mul, (FreeCommRing.lift _).map_mul, restriction_of, dif_pos hps, lift_of,
  restriction_of, dif_pos (hst hps), lift_of]
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (FreeCommRing.of p * n))) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (FreeCommRing.of p * n))
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
⊢ (f' j k hjk) ((f' (↑⟨p, hps⟩).fst j ⋯) (↑⟨p, hps⟩).snd) *
      (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) =
    (f' (↑⟨p, ⋯⟩).fst k ⋯) (↑⟨p, ⋯⟩).snd * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)

tactic: dsimp only
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
⊢ (f' j k hjk) ((f' (↑⟨p, hps⟩).fst j ⋯) (↑⟨p, hps⟩).snd) *
      (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) =
    (f' (↑⟨p, ⋯⟩).fst k ⋯) (↑⟨p, ⋯⟩).snd * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
⊢ (f' j k hjk) ((f' p.fst j ⋯) p.snd) * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) =
    (f' p.fst k ⋯) p.snd * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)

tactic: have := DirectedSystem.map_map (fun i j h => f' i j h) (hj p hps) hjk
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
⊢ (f' j k hjk) ((f' p.fst j ⋯) p.snd) * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) =
    (f' p.fst k ⋯) p.snd * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
this : ∀ (x : G p.fst), (f' j k hjk) ((f' p.fst j ⋯) x) = (f' p.fst k ⋯) x
⊢ (f' j k hjk) ((f' p.fst j ⋯) p.snd) * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) =
    (f' p.fst k ⋯) p.snd * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)

tactic: rw [this]
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) n)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
this : ∀ (x : G p.fst), (f' j k hjk) ((f' p.fst j ⋯) x) = (f' p.fst k ⋯) x
⊢ (f' j k hjk) ((f' p.fst j ⋯) p.snd) * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n) =
    (f' p.fst k ⋯) p.snd * (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) n)
state_after: no goals

tactic: rintro x y ihx ihy
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)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ {x y : FreeCommRing ((i : ι) × G i)},
    (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x)) =
        (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) x) →
      (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) y)) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) y) →
        (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y))) =
          (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (x + y))
state_after: 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)
x✝ : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x✝.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
x y : FreeCommRing ((i : ι) × G i)
ihx :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) x)
ihy :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) y)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) y)
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y))) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (x + y))

tactic: rw [(restriction _).map_add, (FreeCommRing.lift _).map_add, (f' j k hjk).map_add, ihx, ihy,
  (restriction _).map_add, (FreeCommRing.lift _).map_add]
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)
x✝ : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
inst✝¹ : DecidablePred fun x => x ∈ s
inst✝ : DecidablePred fun x => x ∈ t
hxs : x✝.IsSupported s
j k : ι
hj : ∀ z ∈ s, z.fst ≤ j
hk : ∀ z ∈ t, z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
x y : FreeCommRing ((i : ι) × G i)
ihx :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) x)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) x)
ihy :
  (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) y)) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) y)
⊢ (f' j k hjk) ((lift fun ix => (f' (↑ix).fst j ⋯) (↑ix).snd) ((restriction s) (x + y))) =
    (lift fun ix => (f' (↑ix).fst k ⋯) (↑ix).snd) ((restriction t) (x + y))
state_after: no goals