Theorem: Ring.DirectLimit.Polynomial.exists_of
File: Mathlib/Algebra/DirectLimit.lean

Proof steps:
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✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
z : DirectLimit G fun i j h => ⇑(f' i j h)
i : ι
x : G i
h : (of G (fun i j h => ⇑(f' i j h)) i) x = z
⊢ Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) (C x) = C z
state_after: no goals
tactic: rw [map_C, 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✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) (Polynomial.map (f' i₁ i h1) p₁ + Polynomial.map (f' i₂ i h2) p₂) =
    q₁ + q₂
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✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ Polynomial.map ((of G (fun i j h => ⇑(f' i j h)) i).comp (f' i₁ i h1)) p₁ +
      Polynomial.map ((of G (fun i j h => ⇑(f' i j h)) i).comp (f' i₂ i h2)) p₂ =
    Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₁) p₁ + Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₂) p₂
tactic: rw [Polynomial.map_add, map_map, map_map, ← ih₁, ← ih₂]
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✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
q₁ q₂ : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
x✝¹ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = q₁
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = q₂
i₁ : ι
p₁ : (G i₁)[X]
ih₁ : Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₁) p₁ = q₁
i₂ : ι
p₂ : (G i₂)[X]
ih₂ : Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₂) p₂ = q₂
i : ι
h1 : i₁ ≤ i
h2 : i₂ ≤ i
⊢ Polynomial.map ((of G (fun i j h => ⇑(f' i j h)) i).comp (f' i₁ i h1)) p₁ +
      Polynomial.map ((of G (fun i j h => ⇑(f' i j h)) i).comp (f' i₂ i h2)) p₂ =
    Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₁) p₁ + Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i₂) p₂
state_after: no goals
tactic: congr 2 <;> ext x <;> simp_rw [RingHom.comp_apply, of_f]
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✝¹ : Nonempty ι
inst✝ : IsDirected ι fun x x_1 => x ≤ x_1
q : (DirectLimit G fun i j h => ⇑(f' i j h))[X]
n : ℕ
z : DirectLimit G fun i j h => ⇑(f' i j h)
x✝ : ∃ i p, Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) p = C z * X ^ n
i : ι
x : G i
h : (of G (fun i j h => ⇑(f' i j h)) i) x = z
⊢ Polynomial.map (of G (fun i j h => ⇑(f' i j h)) i) (C x * X ^ (n + 1)) = C z * X ^ (n + 1)
state_after: no goals
tactic: rw [Polynomial.map_mul, map_C, h, Polynomial.map_pow, map_X]