/-- The preimage of an open set, as an open set. -/
def comap (f : C(α, β)) : FrameHom (Opens β) (Opens α) where
  toFun s := ⟨f ⁻¹' s, s.2.preimage f.continuous⟩
  map_sSup' s := ext <| by 

Proof state:
ι : Type u_1
α : Type u_2
β : Type u_3
γ : Type u_4
inst✝² : TopologicalSpace α
inst✝¹ : TopologicalSpace β
inst✝ : TopologicalSpace γ
f : C(α, β)
s : Set (Opens β)
⊢ ↑(InfHom.toFun
        {
            toInfHom :=
              { toFun := fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) },
                map_inf' :=
                  (_ :
                    ∀ (a b : Opens β),
                      (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) }) (a ⊓ b) =
                        (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) }) (a ⊓ b)) },
            map_top' :=
              (_ :
                InfHom.toFun
                    { toFun := fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) },
                      map_inf' :=
                        (_ :
                          ∀ (a b : Opens β),
                            (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) }) (a ⊓ b) =
                              (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) })
                                (a ⊓ b)) }
                    ⊤ =
                  InfHom.toFun
                    { toFun := fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) },
                      map_inf' :=
                        (_ :
                          ∀ (a b : Opens β),
                            (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) }) (a ⊓ b) =
                              (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) })
                                (a ⊓ b)) }
                    ⊤) }.toInfHom
        (sSup s)) =
    ↑(sSup
        ({
                toInfHom :=
                  { toFun := fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) },
                    map_inf' :=
                      (_ :
                        ∀ (a b : Opens β),
                          (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) }) (a ⊓ b) =
                            (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) }) (a ⊓ b)) },
                map_top' :=
                  (_ :
                    InfHom.toFun
                        { toFun := fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) },
                          map_inf' :=
                            (_ :
                              ∀ (a b : Opens β),
                                (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) })
                                    (a ⊓ b) =
                                  (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) })
                                    (a ⊓ b)) }
                        ⊤ =
                      InfHom.toFun
                        { toFun := fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) },
                          map_inf' :=
                            (_ :
                              ∀ (a b : Opens β),
                                (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) })
                                    (a ⊓ b) =
                                  (fun s => { carrier := ⇑f ⁻¹' ↑s, is_open' := (_ : IsOpen (⇑f ⁻¹' s.carrier)) })
                                    (a ⊓ b)) }
                        ⊤) }.toInfHom.toFun ''
          s))

Next tactic:
simp only [coe_sSup, preimage_iUnion, biUnion_image, coe_mk]