l3lab/ntp-mathlib huggingface dataset:
/-- The derivative of a `circleTransform` is locally bounded. -/
theorem circleTransformDeriv_bound {R : ℝ} (hR : 0 < R) {z x : ℂ} {f : ℂ → ℂ} (hx : x ∈ ball z R)
    (hf : ContinuousOn f (sphere z R)) : ∃ B ε : ℝ, 0 < ε ∧
      ball x ε ⊆ ball z R ∧ ∀ (t : ℝ), ∀ y ∈ ball x ε, ‖circleTransformDeriv R z y f t‖ ≤ B := by
  obtain ⟨r, hr, hrx⟩ := exists_lt_mem_ball_of_mem_ball hx
  obtain ⟨ε', hε', H⟩ := exists_ball_subset_ball hrx
  obtain ⟨⟨⟨a, b⟩, ⟨ha, hb⟩⟩, hab⟩ :=
    abs_circleTransformBoundingFunction_le hr (pos_of_mem_ball hrx).le z
  let V : ℝ → ℂ → ℂ := fun θ w => circleTransformDeriv R z w (fun _ => 1) θ
  have funccomp : ContinuousOn (fun r => abs (f r)) (sphere z R) := by
    have cabs : ContinuousOn abs ⊤ := by apply continuous_abs.continuousOn
    apply cabs.comp hf; rw [MapsTo]; tauto
  have sbou :=
    IsCompact.exists_isMaxOn (isCompact_sphere z R) (NormedSpace.sphere_nonempty.2 hR.le) funccomp
  obtain ⟨X, HX, HX2⟩ := sbou
  refine' ⟨abs (V b a) * abs (f X), ε', hε', Subset.trans H (ball_subset_ball hr.le), _⟩
  intro y v hv
  obtain ⟨y1, hy1, hfun⟩ :=
    Periodic.exists_mem_Ico₀ (circleTransformDeriv_periodic R z v f) Real.two_pi_pos y
  have hy2 : y1 ∈ [[0, 2 * π]] := by
    convert Ico_subset_Icc_self hy1 using 1
    simp [uIcc_of_le Real.two_pi_pos.le]
  simp only [IsMaxOn, IsMaxFilter, eventually_principal, mem_sphere_iff_norm, norm_eq_abs] at HX2
  have := mul_le_mul (hab ⟨⟨v, y1⟩, ⟨ball_subset_closedBall (H hv), hy2⟩⟩)
    (HX2 (circleMap z R y1) (circleMap_mem_sphere z hR.le y1)) (Complex.abs.nonneg _)
    (Complex.abs.nonneg _)
  

Proof state:
case intro.intro.intro.intro.intro.mk.mk.intro.intro.intro.intro.intro
E : Type u_1
inst✝¹ : NormedAddCommGroup E
inst✝ : NormedSpace ℂ E
R✝ : ℝ
z✝ w : ℂ
R : ℝ
hR : 0 < R
z x : ℂ
f : ℂ → ℂ
hx : x ∈ ball z R
hf : ContinuousOn f (sphere z R)
r : ℝ
hr : r < R
hrx : x ∈ ball z r
ε' : ℝ
hε' : ε' > 0
H : ball x ε' ⊆ ball z r
a : ℂ
b : ℝ
ha : (a, b).1 ∈ closedBall z r
hb : (a, b).2 ∈ [[0, 2 * π]]
hab :
  ∀ (y : ↑(closedBall z r ×ˢ [[0, 2 * π]])),
    abs (circleTransformBoundingFunction R z ↑y) ≤
      abs
        (circleTransformBoundingFunction R z
          ↑{ val := (a, b), property := (_ : (a, b).1 ∈ closedBall z r ∧ (a, b).2 ∈ [[0, 2 * π]]) })
V : ℝ → ℂ → ℂ := fun θ w => circleTransformDeriv R z w (fun x => 1) θ
funccomp : ContinuousOn (fun r => abs (f r)) (sphere z R)
X : ℂ
HX : X ∈ sphere z R
y : ℝ
v : ℂ
hv : v ∈ ball x ε'
y1 : ℝ
hy1 : y1 ∈ Ico 0 (2 * π)
hfun : circleTransformDeriv R z v f y = circleTransformDeriv R z v f y1
hy2 : y1 ∈ [[0, 2 * π]]
HX2 : ∀ (x : ℂ), abs (x - z) = R → abs (f x) ≤ abs (f X)
this :
  abs
        (circleTransformBoundingFunction R z
          ↑{ val := (v, y1), property := (_ : (v, y1).1 ∈ closedBall z r ∧ (v, y1).2 ∈ [[0, 2 * π]]) }) *
      abs (f (circleMap z R y1)) ≤
    abs
        (circleTransformBoundingFunction R z
          ↑{ val := (a, b), property := (_ : (a, b).1 ∈ closedBall z r ∧ (a, b).2 ∈ [[0, 2 * π]]) }) *
      abs (f X)
⊢ ‖circleTransformDeriv R z v f y‖ ≤ abs (V b a) * abs (f X)

Next tactic:
simp_rw [hfun]
instance Sum.discreteTopology [TopologicalSpace α] [TopologicalSpace β] [hα : DiscreteTopology α]
    [hβ : DiscreteTopology β] : DiscreteTopology (Sum α β) :=
  ⟨sup_eq_bot_iff.2 <| by 

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝¹ : TopologicalSpace α
inst✝ : TopologicalSpace β
hα : DiscreteTopology α
hβ : DiscreteTopology β
⊢ coinduced inl inst✝¹ = ⊥ ∧ coinduced inr inst✝ = ⊥

Next tactic:
simp [hα.eq_bot, hβ.eq_bot]
instance Sigma.discreteTopology {β : α → Type v} [∀ a, TopologicalSpace (β a)]
    [h : ∀ a, DiscreteTopology (β a)] : DiscreteTopology (Sigma β) :=
  ⟨iSup_eq_bot.2 <| fun _ => by 

Proof state:
α : Type u
β✝ : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
β : α → Type v
inst✝ : (a : α) → TopologicalSpace (β a)
h : ∀ (a : α), DiscreteTopology (β a)
x✝ : α
⊢ coinduced (mk x✝) ((fun a => inst✝ a) x✝) = ⊥

Next tactic:
simp only [(h _).eq_bot, coinduced_bot]
theorem nhdsWithin_subtype_eq_bot_iff {s t : Set α} {x : s} :
    𝓝[((↑) : s → α) ⁻¹' t] x = ⊥ ↔ 𝓝[t] (x : α) ⊓ 𝓟 s = ⊥ := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝ : TopologicalSpace α
s t : Set α
x : ↑s
⊢ 𝓝[Subtype.val ⁻¹' t] x = ⊥ ↔ 𝓝[t] ↑x ⊓ 𝓟 s = ⊥

Next tactic:
rw [inf_principal_eq_bot_iff_comap, nhdsWithin, nhdsWithin, comap_inf, comap_principal,
    nhds_induced]
theorem nhds_ne_subtype_eq_bot_iff {S : Set α} {x : S} :
    𝓝[≠] x = ⊥ ↔ 𝓝[≠] (x : α) ⊓ 𝓟 S = ⊥ := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝ : TopologicalSpace α
S : Set α
x : ↑S
⊢ 𝓝[≠] x = ⊥ ↔ 𝓝[≠] ↑x ⊓ 𝓟 S = ⊥

Next tactic:
rw [← nhdsWithin_subtype_eq_bot_iff, preimage_compl, ← image_singleton,
    Subtype.coe_injective.preimage_image]
theorem nhds_ne_subtype_neBot_iff {S : Set α} {x : S} :
    (𝓝[≠] x).NeBot ↔ (𝓝[≠] (x : α) ⊓ 𝓟 S).NeBot := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝ : TopologicalSpace α
S : Set α
x : ↑S
⊢ NeBot (𝓝[≠] x) ↔ NeBot (𝓝[≠] ↑x ⊓ 𝓟 S)

Next tactic:
rw [neBot_iff, neBot_iff, not_iff_not, nhds_ne_subtype_eq_bot_iff]
theorem discreteTopology_subtype_iff {S : Set α} :
    DiscreteTopology S ↔ ∀ x ∈ S, 𝓝[≠] x ⊓ 𝓟 S = ⊥ := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝ : TopologicalSpace α
S : Set α
⊢ DiscreteTopology ↑S ↔ ∀ x ∈ S, 𝓝[≠] x ⊓ 𝓟 S = ⊥

Next tactic:
simp_rw [discreteTopology_iff_nhds_ne, SetCoe.forall', nhds_ne_subtype_eq_bot_iff]
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by 

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
⊢ (fun s => Set.Nonempty s → Set.Finite sᶜ) univ

Next tactic:
simp
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by simp
  isOpen_inter s t := by
    

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s t : Set (CofiniteTopology α)
⊢ (fun s => Set.Nonempty s → Set.Finite sᶜ) s →
    (fun s => Set.Nonempty s → Set.Finite sᶜ) t → (fun s => Set.Nonempty s → Set.Finite sᶜ) (s ∩ t)

Next tactic:
rintro hs ht ⟨x, hxs, hxt⟩
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by simp
  isOpen_inter s t := by
    rintro hs ht ⟨x, hxs, hxt⟩
    

Proof state:
case intro.intro
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s t : Set (CofiniteTopology α)
hs : Set.Nonempty s → Set.Finite sᶜ
ht : Set.Nonempty t → Set.Finite tᶜ
x : CofiniteTopology α
hxs : x ∈ s
hxt : x ∈ t
⊢ Set.Finite (s ∩ t)ᶜ

Next tactic:
rw [compl_inter]
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by simp
  isOpen_inter s t := by
    rintro hs ht ⟨x, hxs, hxt⟩
    rw [compl_inter]
    

Proof state:
case intro.intro
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s t : Set (CofiniteTopology α)
hs : Set.Nonempty s → Set.Finite sᶜ
ht : Set.Nonempty t → Set.Finite tᶜ
x : CofiniteTopology α
hxs : x ∈ s
hxt : x ∈ t
⊢ Set.Finite (sᶜ ∪ tᶜ)

Next tactic:
exact (hs ⟨x, hxs⟩).union (ht ⟨x, hxt⟩)
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by simp
  isOpen_inter s t := by
    rintro hs ht ⟨x, hxs, hxt⟩
    rw [compl_inter]
    exact (hs ⟨x, hxs⟩).union (ht ⟨x, hxt⟩)
  isOpen_sUnion := by
    

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
⊢ ∀ (s : Set (Set (CofiniteTopology α))),
    (∀ t ∈ s, (fun s => Set.Nonempty s → Set.Finite sᶜ) t) → (fun s => Set.Nonempty s → Set.Finite sᶜ) (⋃₀ s)

Next tactic:
rintro s h ⟨x, t, hts, hzt⟩
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by simp
  isOpen_inter s t := by
    rintro hs ht ⟨x, hxs, hxt⟩
    rw [compl_inter]
    exact (hs ⟨x, hxs⟩).union (ht ⟨x, hxt⟩)
  isOpen_sUnion := by
    rintro s h ⟨x, t, hts, hzt⟩
    

Proof state:
case intro.intro.intro
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s : Set (Set (CofiniteTopology α))
h : ∀ t ∈ s, (fun s => Set.Nonempty s → Set.Finite sᶜ) t
x : CofiniteTopology α
t : Set (CofiniteTopology α)
hts : t ∈ s
hzt : x ∈ t
⊢ Set.Finite (⋃₀ s)ᶜ

Next tactic:
rw [Set.compl_sUnion]
instance : TopologicalSpace (CofiniteTopology α) where
  IsOpen s := s.Nonempty → Set.Finite sᶜ
  isOpen_univ := by simp
  isOpen_inter s t := by
    rintro hs ht ⟨x, hxs, hxt⟩
    rw [compl_inter]
    exact (hs ⟨x, hxs⟩).union (ht ⟨x, hxt⟩)
  isOpen_sUnion := by
    rintro s h ⟨x, t, hts, hzt⟩
    rw [Set.compl_sUnion]
    

Proof state:
case intro.intro.intro
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s : Set (Set (CofiniteTopology α))
h : ∀ t ∈ s, (fun s => Set.Nonempty s → Set.Finite sᶜ) t
x : CofiniteTopology α
t : Set (CofiniteTopology α)
hts : t ∈ s
hzt : x ∈ t
⊢ Set.Finite (⋂₀ (compl '' s))

Next tactic:
exact Set.Finite.sInter (mem_image_of_mem _ hts) (h t hts ⟨x, hzt⟩)
theorem isOpen_iff' {s : Set (CofiniteTopology α)} : IsOpen s ↔ s = ∅ ∨ sᶜ.Finite := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s : Set (CofiniteTopology α)
⊢ IsOpen s ↔ s = ∅ ∨ Set.Finite sᶜ

Next tactic:
simp only [isOpen_iff, nonempty_iff_ne_empty, or_iff_not_imp_left]
theorem isClosed_iff {s : Set (CofiniteTopology α)} : IsClosed s ↔ s = univ ∨ s.Finite := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
s : Set (CofiniteTopology α)
⊢ IsClosed s ↔ s = univ ∨ Set.Finite s

Next tactic:
simp only [← isOpen_compl_iff, isOpen_iff', compl_compl, compl_empty_iff]
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
⊢ 𝓝 a = pure a ⊔ cofinite

Next tactic:
ext U
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  ext U
  

Proof state:
case a
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ U ∈ 𝓝 a ↔ U ∈ pure a ⊔ cofinite

Next tactic:
rw [mem_nhds_iff]
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  ext U
  rw [mem_nhds_iff]
  

Proof state:
case a
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ (∃ t ⊆ U, IsOpen t ∧ a ∈ t) ↔ U ∈ pure a ⊔ cofinite

Next tactic:
constructor
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  ext U
  rw [mem_nhds_iff]
  constructor
  · 

Proof state:
case a.mp
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ (∃ t ⊆ U, IsOpen t ∧ a ∈ t) → U ∈ pure a ⊔ cofinite

Next tactic:
rintro ⟨V, hVU, V_op, haV⟩
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  ext U
  rw [mem_nhds_iff]
  constructor
  · rintro ⟨V, hVU, V_op, haV⟩
    

Proof state:
case a.mp.intro.intro.intro
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
U V : Set (CofiniteTopology α)
hVU : V ⊆ U
V_op : IsOpen V
haV : a ∈ V
⊢ U ∈ pure a ⊔ cofinite

Next tactic:
exact mem_sup.mpr ⟨hVU haV, mem_of_superset (V_op ⟨_, haV⟩) hVU⟩
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  ext U
  rw [mem_nhds_iff]
  constructor
  · rintro ⟨V, hVU, V_op, haV⟩
    exact mem_sup.mpr ⟨hVU haV, mem_of_superset (V_op ⟨_, haV⟩) hVU⟩
  · 

Proof state:
case a.mpr
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
U : Set (CofiniteTopology α)
⊢ U ∈ pure a ⊔ cofinite → ∃ t ⊆ U, IsOpen t ∧ a ∈ t

Next tactic:
rintro ⟨hU : a ∈ U, hU' : Uᶜ.Finite⟩
theorem nhds_eq (a : CofiniteTopology α) : 𝓝 a = pure a ⊔ cofinite := by
  ext U
  rw [mem_nhds_iff]
  constructor
  · rintro ⟨V, hVU, V_op, haV⟩
    exact mem_sup.mpr ⟨hVU haV, mem_of_superset (V_op ⟨_, haV⟩) hVU⟩
  · rintro ⟨hU : a ∈ U, hU' : Uᶜ.Finite⟩
    

Proof state:
case a.mpr.intro
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
U : Set (CofiniteTopology α)
hU : a ∈ U
hU' : Set.Finite Uᶜ
⊢ ∃ t ⊆ U, IsOpen t ∧ a ∈ t

Next tactic:
exact ⟨U, Subset.rfl, fun _ => hU', hU⟩
theorem mem_nhds_iff {a : CofiniteTopology α} {s : Set (CofiniteTopology α)} :
    s ∈ 𝓝 a ↔ a ∈ s ∧ sᶜ.Finite := by 

Proof state:
α : Type u
β : Type v
γ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
a : CofiniteTopology α
s : Set (CofiniteTopology α)
⊢ s ∈ 𝓝 a ↔ a ∈ s ∧ Set.Finite sᶜ

Next tactic:
simp [nhds_eq]
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27065
β : Type ?u.27071
γ : Type ?u.27077
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
⊢ Sort ?u.27079

Next tactic:
haveI := ta1
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27065
β : Type ?u.27071
γ : Type ?u.27077
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
this : TopologicalSpace α
⊢ Sort ?u.27079

Next tactic:
haveI := tb1
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27065
β : Type ?u.27071
γ : Type ?u.27077
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
this✝ : TopologicalSpace α
this : TopologicalSpace β
⊢ Sort ?u.27079

Next tactic:
exact Continuous fun p : α × β => f p.1 p.2
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27065
β : Type ?u.27071
γ : Type ?u.27077
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
⊢ Sort ?u.27082

Next tactic:
haveI := ta1 ⊓ ta2
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    haveI := ta1 ⊓ ta2; 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27065
β : Type ?u.27071
γ : Type ?u.27077
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
this : TopologicalSpace α
⊢ Sort ?u.27082

Next tactic:
haveI := tb1 ⊓ tb2
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    haveI := ta1 ⊓ ta2; haveI := tb1 ⊓ tb2; 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27065
β : Type ?u.27071
γ : Type ?u.27077
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
this✝ : TopologicalSpace α
this : TopologicalSpace β
⊢ Sort ?u.27082

Next tactic:
exact Continuous fun p : α × β => f p.1 p.2
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    haveI := ta1 ⊓ ta2; haveI := tb1 ⊓ tb2; exact Continuous fun p : α × β => f p.1 p.2 := by
  

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type u_5
β : Type u_6
γ : Type u_7
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
⊢ Continuous fun p => f p.1 p.2

Next tactic:
have ha := @continuous_inf_dom_left _ _ id ta1 ta2 ta1 (@continuous_id _ (id _))
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    haveI := ta1 ⊓ ta2; haveI := tb1 ⊓ tb2; exact Continuous fun p : α × β => f p.1 p.2 := by
  have ha := @continuous_inf_dom_left _ _ id ta1 ta2 ta1 (@continuous_id _ (id _))
  

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type u_5
β : Type u_6
γ : Type u_7
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
ha : Continuous id
⊢ Continuous fun p => f p.1 p.2

Next tactic:
have hb := @continuous_inf_dom_left _ _ id tb1 tb2 tb1 (@continuous_id _ (id _))
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    haveI := ta1 ⊓ ta2; haveI := tb1 ⊓ tb2; exact Continuous fun p : α × β => f p.1 p.2 := by
  have ha := @continuous_inf_dom_left _ _ id ta1 ta2 ta1 (@continuous_id _ (id _))
  have hb := @continuous_inf_dom_left _ _ id tb1 tb2 tb1 (@continuous_id _ (id _))
  

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type u_5
β : Type u_6
γ : Type u_7
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
ha : Continuous id
hb : Continuous id
⊢ Continuous fun p => f p.1 p.2

Next tactic:
have h_continuous_id := @Continuous.prod_map _ _ _ _ ta1 tb1 (ta1 ⊓ ta2) (tb1 ⊓ tb2) _ _ ha hb
/-- A version of `continuous_inf_dom_left` for binary functions -/
theorem continuous_inf_dom_left₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta1; haveI := tb1; exact Continuous fun p : α × β => f p.1 p.2) : by
    haveI := ta1 ⊓ ta2; haveI := tb1 ⊓ tb2; exact Continuous fun p : α × β => f p.1 p.2 := by
  have ha := @continuous_inf_dom_left _ _ id ta1 ta2 ta1 (@continuous_id _ (id _))
  have hb := @continuous_inf_dom_left _ _ id tb1 tb2 tb1 (@continuous_id _ (id _))
  have h_continuous_id := @Continuous.prod_map _ _ _ _ ta1 tb1 (ta1 ⊓ ta2) (tb1 ⊓ tb2) _ _ ha hb
  

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type u_5
β : Type u_6
γ : Type u_7
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
h : Continuous fun p => f p.1 p.2
ha : Continuous id
hb : Continuous id
h_continuous_id : Continuous fun x => (id x.1, id x.2)
⊢ Continuous fun p => f p.1 p.2

Next tactic:
exact @Continuous.comp _ _ _ (id _) (id _) _ _ _ h h_continuous_id
/-- A version of `continuous_inf_dom_right` for binary functions -/
theorem continuous_inf_dom_right₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27758
β : Type ?u.27764
γ : Type ?u.27770
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
⊢ Sort ?u.27772

Next tactic:
haveI := ta2
/-- A version of `continuous_inf_dom_right` for binary functions -/
theorem continuous_inf_dom_right₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta2; 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27758
β : Type ?u.27764
γ : Type ?u.27770
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
this : TopologicalSpace α
⊢ Sort ?u.27772

Next tactic:
haveI := tb2
/-- A version of `continuous_inf_dom_right` for binary functions -/
theorem continuous_inf_dom_right₂ {α β γ} {f : α → β → γ} {ta1 ta2 : TopologicalSpace α}
    {tb1 tb2 : TopologicalSpace β} {tc1 : TopologicalSpace γ}
    (h : by haveI := ta2; haveI := tb2; 

Proof state:
α✝ : Type u
β✝ : Type v
γ✝ : Type u_1
δ : Type u_2
ε : Type u_3
ζ : Type u_4
inst✝⁵ : TopologicalSpace α✝
inst✝⁴ : TopologicalSpace β✝
inst✝³ : TopologicalSpace γ✝
inst✝² : TopologicalSpace δ
inst✝¹ : TopologicalSpace ε
inst✝ : TopologicalSpace ζ
α : Type ?u.27758
β : Type ?u.27764
γ : Type ?u.27770
f : α → β → γ
ta1 ta2 : TopologicalSpace α
tb1 tb2 : TopologicalSpace β
tc1 : TopologicalSpace γ
this✝ : TopologicalSpace α
this : TopologicalSpace β
⊢ Sort ?u.27772

Next tactic:
exact Continuous fun p : α × β => f p.1 p.2