/-- Pulling back functions into a topological ring along a continuous map is a ring homomorphism. -/
def pullback {X Y : TopCatᵒᵖ} (f : X ⟶ Y) (R : TopCommRingCat) :
    continuousFunctions X R ⟶ continuousFunctions Y R where
  toFun g := f.unop ≫ g
  map_one' := rfl
  map_zero' := rfl
  map_add' := by 

Proof state:
X✝ : TopCat
X Y : TopCatᵒᵖ
f : X ⟶ Y
R : TopCommRingCat
⊢ ∀ (x y : ↑(continuousFunctions X R)),
    OneHom.toFun
        (↑{
            toOneHom :=
              { toFun := fun g => f.unop ≫ g, map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) },
            map_mul' :=
              (_ :
                ∀ (x y : ↑(continuousFunctions X R)),
                  OneHom.toFun
                      { toFun := fun g => f.unop ≫ g,
                        map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                      (x * y) =
                    OneHom.toFun
                        { toFun := fun g => f.unop ≫ g,
                          map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                        x *
                      OneHom.toFun
                        { toFun := fun g => f.unop ≫ g,
                          map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                        y) })
        (x + y) =
      OneHom.toFun
          (↑{
              toOneHom :=
                { toFun := fun g => f.unop ≫ g, map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) },
              map_mul' :=
                (_ :
                  ∀ (x y : ↑(continuousFunctions X R)),
                    OneHom.toFun
                        { toFun := fun g => f.unop ≫ g,
                          map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                        (x * y) =
                      OneHom.toFun
                          { toFun := fun g => f.unop ≫ g,
                            map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                          x *
                        OneHom.toFun
                          { toFun := fun g => f.unop ≫ g,
                            map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                          y) })
          x +
        OneHom.toFun
          (↑{
              toOneHom :=
                { toFun := fun g => f.unop ≫ g, map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) },
              map_mul' :=
                (_ :
                  ∀ (x y : ↑(continuousFunctions X R)),
                    OneHom.toFun
                        { toFun := fun g => f.unop ≫ g,
                          map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                        (x * y) =
                      OneHom.toFun
                          { toFun := fun g => f.unop ≫ g,
                            map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                          x *
                        OneHom.toFun
                          { toFun := fun g => f.unop ≫ g,
                            map_one' := (_ : (fun g => f.unop ≫ g) 1 = (fun g => f.unop ≫ g) 1) }
                          y) })
          y

Next tactic:
aesop_cat