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
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) x)

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
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) 1)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) 1)

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
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (-1))) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (-1))

tactic: rintro _ ⟨p, hps, rfl⟩ n ih
state_before: case refine'_3
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ (z : FreeCommRing ((i : ι) × G i)),
    z ∈ FreeCommRing.of '' s →
      ∀ (n : FreeCommRing ((i : ι) × G i)),
        ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
            ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) →
          ↑(f' j k hjk)
              (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (z * n))) =
            ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (z * n))

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
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
⊢ ↑(f' j k hjk)
      (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (FreeCommRing.of p * n))) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (FreeCommRing.of p * n))

tactic: dsimp only
state_before: case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
⊢ ↑(f' j k hjk)
        (↑(f' (↑{ val := p, property := hps }).fst j (_ : (↑{ val := p, property := hps }).fst ≤ j))
          (↑{ val := p, property := hps }).snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' (↑{ val := p, property := (_ : p ∈ t) }).fst k (_ : (↑{ val := p, property := (_ : p ∈ t) }).fst ≤ k))
        (↑{ val := p, property := (_ : p ∈ t) }).snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)

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
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
⊢ ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) p.snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' p.fst k (_ : p.fst ≤ k)) p.snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)

tactic: dsimp only at this
state_before: case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
this : ∀ (x : G p.fst), ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) x) = ↑(f' p.fst k (_ : p.fst ≤ k)) x
⊢ ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) p.snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' p.fst k (_ : p.fst ≤ k)) p.snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)

tactic: rw [this]
state_before: case refine'_3.intro.intro
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
p : (i : ι) × G i
hps : p ∈ s
n : FreeCommRing ((i : ι) × G i)
ih :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) n)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)
this : ∀ (x : G p.fst), ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) x) = ↑(f' p.fst k (_ : p.fst ≤ k)) x
⊢ ↑(f' j k hjk) (↑(f' p.fst j (_ : p.fst ≤ j)) p.snd) *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n) =
    ↑(f' p.fst k (_ : p.fst ≤ k)) p.snd *
      ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) n)

tactic: rintro x y ihx ihy
state_before: case refine'_4
R : Type u
inst✝³ : Ring R
ι : Type v
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
⊢ ∀ {x y : FreeCommRing ((i : ι) × G i)},
    ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x)) =
        ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) x) →
      ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) y)) =
          ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) y) →
        ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y))) =
          ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (x + y))

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
dec_ι : DecidableEq ι
inst✝² : Preorder ι
G : ι → Type w
inst✝¹ : (i : ι) → CommRing (G i)
f : (i j : ι) → i ≤ j → G i → G j
f' : (i j : ι) → i ≤ j → G i →+* G j
inst✝ : DirectedSystem G fun i j h => ↑(f' i j h)
x✝ : FreeCommRing ((i : ι) × G i)
s t : Set ((i : ι) × G i)
hxs : IsSupported x✝ s
j k : ι
hj : ∀ (z : (i : ι) × G i), z ∈ s → z.fst ≤ j
hk : ∀ (z : (i : ι) × G i), z ∈ t → z.fst ≤ k
hjk : j ≤ k
hst : s ⊆ t
x y : FreeCommRing ((i : ι) × G i)
ihx :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) x)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) x)
ihy :
  ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) y)) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) y)
⊢ ↑(f' j k hjk) (↑(↑lift fun ix => ↑(f' (↑ix).fst j (_ : (↑ix).fst ≤ j)) (↑ix).snd) (↑(restriction s) (x + y))) =
    ↑(↑lift fun ix => ↑(f' (↑ix).fst k (_ : (↑ix).fst ≤ k)) (↑ix).snd) (↑(restriction t) (x + y))