/-- Local homeomorphism version of the trivialization change. -/
def trivChange (i j : ι) : PartialHomeomorph (B × F) (B × F) where
  source := (Z.baseSet i ∩ Z.baseSet j) ×ˢ univ
  target := (Z.baseSet i ∩ Z.baseSet j) ×ˢ univ
  toFun p := ⟨p.1, Z.coordChange i j p.1 p.2⟩
  invFun p := ⟨p.1, Z.coordChange j i p.1 p.2⟩
  map_source' p hp := by simpa using hp
  map_target' p hp := by simpa using hp
  left_inv' := by
    rintro ⟨x, v⟩ hx
    simp only [prod_mk_mem_set_prod_eq, mem_inter_iff, and_true, mem_univ] at hx
    dsimp only
    rw [coordChange_comp, Z.coordChange_self]
    exacts [hx.1, ⟨⟨hx.1, hx.2⟩, hx.1⟩]
  right_inv' := by
    rintro ⟨x, v⟩ hx
    simp only [prod_mk_mem_set_prod_eq, mem_inter_iff, and_true_iff, mem_univ] at hx
    dsimp only
    rw [Z.coordChange_comp, Z.coordChange_self]
    · exact hx.2
    · simp [hx]
  open_source := ((Z.isOpen_baseSet i).inter (Z.isOpen_baseSet j)).prod isOpen_univ
  open_target := ((Z.isOpen_baseSet i).inter (Z.isOpen_baseSet j)).prod isOpen_univ
  continuousOn_toFun := continuous_fst.continuousOn.prod (Z.continuousOn_coordChange i j)
  continuousOn_invFun := by
    

Proof state:
ι : Type u_1
B : Type u_2
F : Type u_3
X : Type u_4
inst✝² : TopologicalSpace X
inst✝¹ : TopologicalSpace B
inst✝ : TopologicalSpace F
Z : FiberBundleCore ι B F
i j : ι
⊢ ContinuousOn
    { toFun := fun p => (p.1, coordChange Z i j p.1 p.2), invFun := fun p => (p.1, coordChange Z j i p.1 p.2),
        source := (baseSet Z i ∩ baseSet Z j) ×ˢ univ, target := (baseSet Z i ∩ baseSet Z j) ×ˢ univ,
        map_source' :=
          (_ :
            ∀ p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ,
              (fun p => (p.1, coordChange Z i j p.1 p.2)) p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ),
        map_target' :=
          (_ :
            ∀ p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ,
              (fun p => (p.1, coordChange Z j i p.1 p.2)) p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ),
        left_inv' :=
          (_ :
            ∀ ⦃x : B × F⦄,
              x ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ →
                (fun p => (p.1, coordChange Z j i p.1 p.2)) ((fun p => (p.1, coordChange Z i j p.1 p.2)) x) = x),
        right_inv' :=
          (_ :
            ∀ ⦃x : B × F⦄,
              x ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ →
                (fun p => (p.1, coordChange Z i j p.1 p.2)) ((fun p => (p.1, coordChange Z j i p.1 p.2)) x) =
                  x) }.invFun
    { toFun := fun p => (p.1, coordChange Z i j p.1 p.2), invFun := fun p => (p.1, coordChange Z j i p.1 p.2),
        source := (baseSet Z i ∩ baseSet Z j) ×ˢ univ, target := (baseSet Z i ∩ baseSet Z j) ×ˢ univ,
        map_source' :=
          (_ :
            ∀ p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ,
              (fun p => (p.1, coordChange Z i j p.1 p.2)) p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ),
        map_target' :=
          (_ :
            ∀ p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ,
              (fun p => (p.1, coordChange Z j i p.1 p.2)) p ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ),
        left_inv' :=
          (_ :
            ∀ ⦃x : B × F⦄,
              x ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ →
                (fun p => (p.1, coordChange Z j i p.1 p.2)) ((fun p => (p.1, coordChange Z i j p.1 p.2)) x) = x),
        right_inv' :=
          (_ :
            ∀ ⦃x : B × F⦄,
              x ∈ (baseSet Z i ∩ baseSet Z j) ×ˢ univ →
                (fun p => (p.1, coordChange Z i j p.1 p.2)) ((fun p => (p.1, coordChange Z j i p.1 p.2)) x) =
                  x) }.target

Next tactic:
simpa [inter_comm] using continuous_fst.continuousOn.prod (Z.continuousOn_coordChange j i)