Theorem: Profinite.extensivity_injective
Proof state before:
case intro.intro.intro.intro.intro
α : Type
inst✝ : Fintype α
X : Profinite
Z : α → Profinite
π : (a : α) → Z a ⟶ X
Y : Profinite
f : Y ⟶ X
HIso : IsIso (finiteCoproduct.desc (fun a => Z a) π)
ζ : (finiteCoproduct fun a => pullback f (π a)) ⟶ finiteCoproduct Z :=
  finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.snd f (π a) ≫ finiteCoproduct.ι Z a
σ : (finiteCoproduct fun a => pullback f (π a)) ⟶ Y :=
  finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a)
β : (finiteCoproduct fun a => Z a) ⟶ X := finiteCoproduct.desc (fun a => Z a) π
comm : ζ ≫ β = σ ≫ f
R₁ R₂ : (forget Profinite).obj (finiteCoproduct fun a => pullback f (π a))
himage : ↑ζ R₁ = ↑ζ R₂
Hfst : R₁.fst = R₂.fst
a₁ : α
r₁ : ↑((fun a => pullback f (π a)) a₁).toCompHaus.toTop
h₁ : R₁ = ↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₁) r₁
a₂ : α
r₂ : ↑((fun a => pullback f (π a)) a₂).toCompHaus.toTop
h₂ : R₂ = ↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₂) r₂
ha₁ : a₁ = R₁.fst
ha₂ : a₂ = R₂.fst
ha : a₁ = a₂
xr' : (forget Profinite).obj (pullback f (π a₂))
hR :
  ↑(finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
      (↑(finiteCoproduct.ι (fun a => pullback f (π a)) a₂) xr') =
    ↑(finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
      (↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₂) r₂)
hr' : ↑(finiteCoproduct.ι (fun a => pullback f (π a)) a₂) xr' = R₁
⊢ R₁ = R₂
Tactic:
have hf : ∀ (a : α), Function.Injective 
    ((finiteCoproduct.ι _ a) ≫ (finiteCoproduct.desc _ ((fun a => pullback.fst f (π a)))))
Proof state after:
case hf
α : Type
inst✝ : Fintype α
X : Profinite
Z : α → Profinite
π : (a : α) → Z a ⟶ X
Y : Profinite
f : Y ⟶ X
HIso : IsIso (finiteCoproduct.desc (fun a => Z a) π)
ζ : (finiteCoproduct fun a => pullback f (π a)) ⟶ finiteCoproduct Z :=
  finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.snd f (π a) ≫ finiteCoproduct.ι Z a
σ : (finiteCoproduct fun a => pullback f (π a)) ⟶ Y :=
  finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a)
β : (finiteCoproduct fun a => Z a) ⟶ X := finiteCoproduct.desc (fun a => Z a) π
comm : ζ ≫ β = σ ≫ f
R₁ R₂ : (forget Profinite).obj (finiteCoproduct fun a => pullback f (π a))
himage : ↑ζ R₁ = ↑ζ R₂
Hfst : R₁.fst = R₂.fst
a₁ : α
r₁ : ↑((fun a => pullback f (π a)) a₁).toCompHaus.toTop
h₁ : R₁ = ↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₁) r₁
a₂ : α
r₂ : ↑((fun a => pullback f (π a)) a₂).toCompHaus.toTop
h₂ : R₂ = ↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₂) r₂
ha₁ : a₁ = R₁.fst
ha₂ : a₂ = R₂.fst
ha : a₁ = a₂
xr' : (forget Profinite).obj (pullback f (π a₂))
hR :
  ↑(finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
      (↑(finiteCoproduct.ι (fun a => pullback f (π a)) a₂) xr') =
    ↑(finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
      (↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₂) r₂)
hr' : ↑(finiteCoproduct.ι (fun a => pullback f (π a)) a₂) xr' = R₁
⊢ ∀ (a : α),
    Function.Injective
      ↑(finiteCoproduct.ι (fun a => pullback f (π a)) a ≫
          finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))

case intro.intro.intro.intro.intro
α : Type
inst✝ : Fintype α
X : Profinite
Z : α → Profinite
π : (a : α) → Z a ⟶ X
Y : Profinite
f : Y ⟶ X
HIso : IsIso (finiteCoproduct.desc (fun a => Z a) π)
ζ : (finiteCoproduct fun a => pullback f (π a)) ⟶ finiteCoproduct Z :=
  finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.snd f (π a) ≫ finiteCoproduct.ι Z a
σ : (finiteCoproduct fun a => pullback f (π a)) ⟶ Y :=
  finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a)
β : (finiteCoproduct fun a => Z a) ⟶ X := finiteCoproduct.desc (fun a => Z a) π
comm : ζ ≫ β = σ ≫ f
R₁ R₂ : (forget Profinite).obj (finiteCoproduct fun a => pullback f (π a))
himage : ↑ζ R₁ = ↑ζ R₂
Hfst : R₁.fst = R₂.fst
a₁ : α
r₁ : ↑((fun a => pullback f (π a)) a₁).toCompHaus.toTop
h₁ : R₁ = ↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₁) r₁
a₂ : α
r₂ : ↑((fun a => pullback f (π a)) a₂).toCompHaus.toTop
h₂ : R₂ = ↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₂) r₂
ha₁ : a₁ = R₁.fst
ha₂ : a₂ = R₂.fst
ha : a₁ = a₂
xr' : (forget Profinite).obj (pullback f (π a₂))
hR :
  ↑(finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
      (↑(finiteCoproduct.ι (fun a => pullback f (π a)) a₂) xr') =
    ↑(finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
      (↑(finiteCoproduct.ι (fun a => (fun a => pullback f (π a)) a) a₂) r₂)
hr' : ↑(finiteCoproduct.ι (fun a => pullback f (π a)) a₂) xr' = R₁
hf :
  ∀ (a : α),
    Function.Injective
      ↑(finiteCoproduct.ι (fun a => pullback f (π a)) a ≫
          finiteCoproduct.desc (fun a => pullback f (π a)) fun a => pullback.fst f (π a))
⊢ R₁ = R₂