topology.hom.open
⟷
Mathlib.Topology.Hom.Open
The following section lists changes to this file in mathlib3 and mathlib4 that occured after the initial port. Most recent changes are shown first. Hovering over a commit will show all commits associated with the same mathlib3 commit.
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(no changes)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -79,7 +79,7 @@ instance : ContinuousOpenMapClass (α →CO β) α β
/-- Helper instance for when there's too many metavariables to apply `fun_like.has_coe_to_fun`
directly. -/
instance : CoeFun (α →CO β) fun _ => α → β :=
- FunLike.hasCoeToFun
+ DFunLike.hasCoeToFun
#print ContinuousOpenMap.toFun_eq_coe /-
@[simp]
@@ -91,7 +91,7 @@ theorem toFun_eq_coe {f : α →CO β} : f.toFun = (f : α → β) :=
#print ContinuousOpenMap.ext /-
@[ext]
theorem ext {f g : α →CO β} (h : ∀ a, f a = g a) : f = g :=
- FunLike.ext f g h
+ DFunLike.ext f g h
#align continuous_open_map.ext ContinuousOpenMap.ext
-/
@@ -112,7 +112,7 @@ theorem coe_copy (f : α →CO β) (f' : α → β) (h : f' = f) : ⇑(f.copy f'
#print ContinuousOpenMap.copy_eq /-
theorem copy_eq (f : α →CO β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
- FunLike.ext' h
+ DFunLike.ext' h
#align continuous_open_map.copy_eq ContinuousOpenMap.copy_eq
-/
@@ -190,7 +190,7 @@ theorem id_comp (f : α →CO β) : (ContinuousOpenMap.id β).comp f = f :=
#print ContinuousOpenMap.cancel_right /-
theorem cancel_right {g₁ g₂ : β →CO γ} {f : α →CO β} (hf : Surjective f) :
g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
- ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, congr_arg _⟩
+ ⟨fun h => ext <| hf.forall.2 <| DFunLike.ext_iff.1 h, congr_arg _⟩
#align continuous_open_map.cancel_right ContinuousOpenMap.cancel_right
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,7 +3,7 @@ Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-/
-import Mathbin.Topology.ContinuousFunction.Basic
+import Topology.ContinuousFunction.Basic
#align_import topology.hom.open from "leanprover-community/mathlib"@"ad0089aca372256fe53dde13ca0dfea569bf5ac7"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,14 +2,11 @@
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-
-! This file was ported from Lean 3 source module topology.hom.open
-! leanprover-community/mathlib commit ad0089aca372256fe53dde13ca0dfea569bf5ac7
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Topology.ContinuousFunction.Basic
+#align_import topology.hom.open from "leanprover-community/mathlib"@"ad0089aca372256fe53dde13ca0dfea569bf5ac7"
+
/-!
# Continuous open maps
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -43,7 +43,6 @@ structure ContinuousOpenMap (α β : Type _) [TopologicalSpace α] [TopologicalS
#align continuous_open_map ContinuousOpenMap
-/
--- mathport name: «expr →CO »
infixr:25 " →CO " => ContinuousOpenMap
section
@@ -85,30 +84,40 @@ directly. -/
instance : CoeFun (α →CO β) fun _ => α → β :=
FunLike.hasCoeToFun
+#print ContinuousOpenMap.toFun_eq_coe /-
@[simp]
theorem toFun_eq_coe {f : α →CO β} : f.toFun = (f : α → β) :=
rfl
#align continuous_open_map.to_fun_eq_coe ContinuousOpenMap.toFun_eq_coe
+-/
+#print ContinuousOpenMap.ext /-
@[ext]
theorem ext {f g : α →CO β} (h : ∀ a, f a = g a) : f = g :=
FunLike.ext f g h
#align continuous_open_map.ext ContinuousOpenMap.ext
+-/
+#print ContinuousOpenMap.copy /-
/-- Copy of a `continuous_open_map` with a new `continuous_map` equal to the old one. Useful to fix
definitional equalities. -/
protected def copy (f : α →CO β) (f' : α → β) (h : f' = f) : α →CO β :=
⟨f.toContinuousMap.copy f' <| h, h.symm.subst f.map_open'⟩
#align continuous_open_map.copy ContinuousOpenMap.copy
+-/
+#print ContinuousOpenMap.coe_copy /-
@[simp]
theorem coe_copy (f : α →CO β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' :=
rfl
#align continuous_open_map.coe_copy ContinuousOpenMap.coe_copy
+-/
+#print ContinuousOpenMap.copy_eq /-
theorem copy_eq (f : α →CO β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
FunLike.ext' h
#align continuous_open_map.copy_eq ContinuousOpenMap.copy_eq
+-/
variable (α)
@@ -122,17 +131,21 @@ protected def id : α →CO α :=
instance : Inhabited (α →CO α) :=
⟨ContinuousOpenMap.id _⟩
+#print ContinuousOpenMap.coe_id /-
@[simp]
theorem coe_id : ⇑(ContinuousOpenMap.id α) = id :=
rfl
#align continuous_open_map.coe_id ContinuousOpenMap.coe_id
+-/
variable {α}
+#print ContinuousOpenMap.id_apply /-
@[simp]
theorem id_apply (a : α) : ContinuousOpenMap.id α a = a :=
rfl
#align continuous_open_map.id_apply ContinuousOpenMap.id_apply
+-/
#print ContinuousOpenMap.comp /-
/-- Composition of `continuous_open_map`s as a `continuous_open_map`. -/
@@ -141,41 +154,55 @@ def comp (f : β →CO γ) (g : α →CO β) : ContinuousOpenMap α γ :=
#align continuous_open_map.comp ContinuousOpenMap.comp
-/
+#print ContinuousOpenMap.coe_comp /-
@[simp]
theorem coe_comp (f : β →CO γ) (g : α →CO β) : (f.comp g : α → γ) = f ∘ g :=
rfl
#align continuous_open_map.coe_comp ContinuousOpenMap.coe_comp
+-/
+#print ContinuousOpenMap.comp_apply /-
@[simp]
theorem comp_apply (f : β →CO γ) (g : α →CO β) (a : α) : (f.comp g) a = f (g a) :=
rfl
#align continuous_open_map.comp_apply ContinuousOpenMap.comp_apply
+-/
+#print ContinuousOpenMap.comp_assoc /-
@[simp]
theorem comp_assoc (f : γ →CO δ) (g : β →CO γ) (h : α →CO β) :
(f.comp g).comp h = f.comp (g.comp h) :=
rfl
#align continuous_open_map.comp_assoc ContinuousOpenMap.comp_assoc
+-/
+#print ContinuousOpenMap.comp_id /-
@[simp]
theorem comp_id (f : α →CO β) : f.comp (ContinuousOpenMap.id α) = f :=
ext fun a => rfl
#align continuous_open_map.comp_id ContinuousOpenMap.comp_id
+-/
+#print ContinuousOpenMap.id_comp /-
@[simp]
theorem id_comp (f : α →CO β) : (ContinuousOpenMap.id β).comp f = f :=
ext fun a => rfl
#align continuous_open_map.id_comp ContinuousOpenMap.id_comp
+-/
+#print ContinuousOpenMap.cancel_right /-
theorem cancel_right {g₁ g₂ : β →CO γ} {f : α →CO β} (hf : Surjective f) :
g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, congr_arg _⟩
#align continuous_open_map.cancel_right ContinuousOpenMap.cancel_right
+-/
+#print ContinuousOpenMap.cancel_left /-
theorem cancel_left {g : β →CO γ} {f₁ f₂ : α →CO β} (hg : Injective g) :
g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
⟨fun h => ext fun a => hg <| by rw [← comp_apply, h, comp_apply], congr_arg _⟩
#align continuous_open_map.cancel_left ContinuousOpenMap.cancel_left
+-/
end ContinuousOpenMap
mathlib commit https://github.com/leanprover-community/mathlib/commit/cca40788df1b8755d5baf17ab2f27dacc2e17acb
@@ -38,7 +38,7 @@ variable {F α β γ δ : Type _}
#print ContinuousOpenMap /-
/-- The type of continuous open maps from `α` to `β`, aka Priestley homomorphisms. -/
structure ContinuousOpenMap (α β : Type _) [TopologicalSpace α] [TopologicalSpace β] extends
- ContinuousMap α β where
+ ContinuousMap α β where
map_open' : IsOpenMap to_fun
#align continuous_open_map ContinuousOpenMap
-/
@@ -53,7 +53,7 @@ section
You should extend this class when you extend `continuous_open_map`. -/
class ContinuousOpenMapClass (F : Type _) (α β : outParam <| Type _) [TopologicalSpace α]
- [TopologicalSpace β] extends ContinuousMapClass F α β where
+ [TopologicalSpace β] extends ContinuousMapClass F α β where
map_open (f : F) : IsOpenMap f
#align continuous_open_map_class ContinuousOpenMapClass
-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -85,57 +85,27 @@ directly. -/
instance : CoeFun (α →CO β) fun _ => α → β :=
FunLike.hasCoeToFun
-/- warning: continuous_open_map.to_fun_eq_coe -> ContinuousOpenMap.toFun_eq_coe is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2}, Eq.{max (succ u1) (succ u2)} (α -> β) (ContinuousMap.toFun.{u1, u2} α β _inst_1 _inst_2 (ContinuousOpenMap.toContinuousMap.{u1, u2} α β _inst_1 _inst_2 f)) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2}, Eq.{max (succ u2) (succ u1)} (α -> β) (ContinuousMap.toFun.{u2, u1} α β _inst_1 _inst_2 (ContinuousOpenMap.toContinuousMap.{u2, u1} α β _inst_1 _inst_2 f)) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2))) f)
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.to_fun_eq_coe ContinuousOpenMap.toFun_eq_coeₓ'. -/
@[simp]
theorem toFun_eq_coe {f : α →CO β} : f.toFun = (f : α → β) :=
rfl
#align continuous_open_map.to_fun_eq_coe ContinuousOpenMap.toFun_eq_coe
-/- warning: continuous_open_map.ext -> ContinuousOpenMap.ext is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] {f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2} {g : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u2} β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f a) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a)) -> (Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) f g)
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] {f : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2} {g : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2}, (forall (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2))) f a) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2))) g a)) -> (Eq.{max (succ u2) (succ u1)} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) f g)
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.ext ContinuousOpenMap.extₓ'. -/
@[ext]
theorem ext {f g : α →CO β} (h : ∀ a, f a = g a) : f = g :=
FunLike.ext f g h
#align continuous_open_map.ext ContinuousOpenMap.ext
-/- warning: continuous_open_map.copy -> ContinuousOpenMap.copy is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2)
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β), (Eq.{max (succ u1) (succ u2)} (α -> β) f' (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u1, u2} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u1 u2, u1, u2} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2))) f)) -> (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2)
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.copy ContinuousOpenMap.copyₓ'. -/
/-- Copy of a `continuous_open_map` with a new `continuous_map` equal to the old one. Useful to fix
definitional equalities. -/
protected def copy (f : α →CO β) (f' : α → β) (h : f' = f) : α →CO β :=
⟨f.toContinuousMap.copy f' <| h, h.symm.subst f.map_open'⟩
#align continuous_open_map.copy ContinuousOpenMap.copy
-/- warning: continuous_open_map.coe_copy -> ContinuousOpenMap.coe_copy is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (α -> β) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) (ContinuousOpenMap.copy.{u1, u2} α β _inst_1 _inst_2 f f' h)) f'
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2))) f)), Eq.{max (succ u2) (succ u1)} (forall (ᾰ : α), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) ᾰ) (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2))) (ContinuousOpenMap.copy.{u2, u1} α β _inst_1 _inst_2 f f' h)) f'
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.coe_copy ContinuousOpenMap.coe_copyₓ'. -/
@[simp]
theorem coe_copy (f : α →CO β) (f' : α → β) (h : f' = f) : ⇑(f.copy f' h) = f' :=
rfl
#align continuous_open_map.coe_copy ContinuousOpenMap.coe_copy
-/- warning: continuous_open_map.copy_eq -> ContinuousOpenMap.copy_eq is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u1) (succ u2)} (α -> β) f' (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)), Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousOpenMap.copy.{u1, u2} α β _inst_1 _inst_2 f f' h) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) (f' : α -> β) (h : Eq.{max (succ u2) (succ u1)} (α -> β) f' (FunLike.coe.{max (succ u2) (succ u1), succ u2, succ u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u2 u1, u2, u1} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2))) f)), Eq.{max (succ u2) (succ u1)} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousOpenMap.copy.{u2, u1} α β _inst_1 _inst_2 f f' h) f
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.copy_eq ContinuousOpenMap.copy_eqₓ'. -/
theorem copy_eq (f : α →CO β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
FunLike.ext' h
#align continuous_open_map.copy_eq ContinuousOpenMap.copy_eq
@@ -152,12 +122,6 @@ protected def id : α →CO α :=
instance : Inhabited (α →CO α) :=
⟨ContinuousOpenMap.id _⟩
-/- warning: continuous_open_map.coe_id -> ContinuousOpenMap.coe_id is a dubious translation:
-lean 3 declaration is
- forall (α : Type.{u1}) [_inst_1 : TopologicalSpace.{u1} α], Eq.{succ u1} (α -> α) (coeFn.{succ u1, succ u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) (fun (_x : ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) => α -> α) (ContinuousOpenMap.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (ContinuousOpenMap.id.{u1} α _inst_1)) (id.{succ u1} α)
-but is expected to have type
- forall (α : Type.{u1}) [_inst_1 : TopologicalSpace.{u1} α], Eq.{succ u1} (forall (ᾰ : α), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => α) ᾰ) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => α) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (ContinuousOpenMapClass.toContinuousMapClass.{u1, u1, u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1))) (ContinuousOpenMap.id.{u1} α _inst_1)) (id.{succ u1} α)
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.coe_id ContinuousOpenMap.coe_idₓ'. -/
@[simp]
theorem coe_id : ⇑(ContinuousOpenMap.id α) = id :=
rfl
@@ -165,12 +129,6 @@ theorem coe_id : ⇑(ContinuousOpenMap.id α) = id :=
variable {α}
-/- warning: continuous_open_map.id_apply -> ContinuousOpenMap.id_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] (a : α), Eq.{succ u1} α (coeFn.{succ u1, succ u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) (fun (_x : ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) => α -> α) (ContinuousOpenMap.hasCoeToFun.{u1, u1} α α _inst_1 _inst_1) (ContinuousOpenMap.id.{u1} α _inst_1) a) a
-but is expected to have type
- forall {α : Type.{u1}} [_inst_1 : TopologicalSpace.{u1} α] (a : α), Eq.{succ u1} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => α) a) (FunLike.coe.{succ u1, succ u1, succ u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => α) _x) (ContinuousMapClass.toFunLike.{u1, u1, u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (ContinuousOpenMapClass.toContinuousMapClass.{u1, u1, u1} (ContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1) α α _inst_1 _inst_1 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u1} α α _inst_1 _inst_1))) (ContinuousOpenMap.id.{u1} α _inst_1) a) a
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.id_apply ContinuousOpenMap.id_applyₓ'. -/
@[simp]
theorem id_apply (a : α) : ContinuousOpenMap.id α a = a :=
rfl
@@ -183,79 +141,37 @@ def comp (f : β →CO γ) (g : α →CO β) : ContinuousOpenMap α γ :=
#align continuous_open_map.comp ContinuousOpenMap.comp
-/
-/- warning: continuous_open_map.coe_comp -> ContinuousOpenMap.coe_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) (g : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} ((fun (_x : ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g)) (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (ContinuousOpenMap.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u2, succ u3} α β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (ContinuousOpenMap.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f) (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (f : ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) (g : ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (forall (a : α), (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => γ) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => γ) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u1, u2} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (ContinuousOpenMapClass.toContinuousMapClass.{max u1 u2, u1, u2} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3))) (ContinuousOpenMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g)) (Function.comp.{succ u1, succ u3, succ u2} α β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) _x) (ContinuousMapClass.toFunLike.{max u3 u2, u3, u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousOpenMapClass.toContinuousMapClass.{max u3 u2, u3, u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3))) f) (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u3, u1, u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u1 u3, u1, u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2))) g))
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.coe_comp ContinuousOpenMap.coe_compₓ'. -/
@[simp]
theorem coe_comp (f : β →CO γ) (g : α →CO β) : (f.comp g : α → γ) = f ∘ g :=
rfl
#align continuous_open_map.coe_comp ContinuousOpenMap.coe_comp
-/- warning: continuous_open_map.comp_apply -> ContinuousOpenMap.comp_apply is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] (f : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) (g : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (a : α), Eq.{succ u3} γ (coeFn.{max (succ u1) (succ u3), max (succ u1) (succ u3)} (ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) (fun (_x : ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) => α -> γ) (ContinuousOpenMap.hasCoeToFun.{u1, u3} α γ _inst_1 _inst_3) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 f g) a) (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (ContinuousOpenMap.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) f (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) g a))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] (f : ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) (g : ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) (a : α), Eq.{succ u2} ((fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => γ) a) (FunLike.coe.{max (succ u1) (succ u2), succ u1, succ u2} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => γ) _x) (ContinuousMapClass.toFunLike.{max u1 u2, u1, u2} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (ContinuousOpenMapClass.toContinuousMapClass.{max u1 u2, u1, u2} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) α γ _inst_1 _inst_3 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3))) (ContinuousOpenMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 f g) a) (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) _x) (ContinuousMapClass.toFunLike.{max u3 u2, u3, u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousOpenMapClass.toContinuousMapClass.{max u3 u2, u3, u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3))) f (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u3, u1, u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u1 u3, u1, u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2))) g a))
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.comp_apply ContinuousOpenMap.comp_applyₓ'. -/
@[simp]
theorem comp_apply (f : β →CO γ) (g : α →CO β) (a : α) : (f.comp g) a = f (g a) :=
rfl
#align continuous_open_map.comp_apply ContinuousOpenMap.comp_apply
-/- warning: continuous_open_map.comp_assoc -> ContinuousOpenMap.comp_assoc is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} {δ : Type.{u4}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] [_inst_4 : TopologicalSpace.{u4} δ] (f : ContinuousOpenMap.{u3, u4} γ δ _inst_3 _inst_4) (g : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) (h : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u4)} (ContinuousOpenMap.{u1, u4} α δ _inst_1 _inst_4) (ContinuousOpenMap.comp.{u1, u2, u4} α β δ _inst_1 _inst_2 _inst_4 (ContinuousOpenMap.comp.{u2, u3, u4} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (ContinuousOpenMap.comp.{u1, u3, u4} α γ δ _inst_1 _inst_3 _inst_4 f (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g h))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u4}} {δ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u4} γ] [_inst_4 : TopologicalSpace.{u3} δ] (f : ContinuousOpenMap.{u4, u3} γ δ _inst_3 _inst_4) (g : ContinuousOpenMap.{u2, u4} β γ _inst_2 _inst_3) (h : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u3)} (ContinuousOpenMap.{u1, u3} α δ _inst_1 _inst_4) (ContinuousOpenMap.comp.{u1, u2, u3} α β δ _inst_1 _inst_2 _inst_4 (ContinuousOpenMap.comp.{u2, u4, u3} β γ δ _inst_2 _inst_3 _inst_4 f g) h) (ContinuousOpenMap.comp.{u1, u4, u3} α γ δ _inst_1 _inst_3 _inst_4 f (ContinuousOpenMap.comp.{u1, u2, u4} α β γ _inst_1 _inst_2 _inst_3 g h))
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.comp_assoc ContinuousOpenMap.comp_assocₓ'. -/
@[simp]
theorem comp_assoc (f : γ →CO δ) (g : β →CO γ) (h : α →CO β) :
(f.comp g).comp h = f.comp (g.comp h) :=
rfl
#align continuous_open_map.comp_assoc ContinuousOpenMap.comp_assoc
-/- warning: continuous_open_map.comp_id -> ContinuousOpenMap.comp_id is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousOpenMap.comp.{u1, u1, u2} α α β _inst_1 _inst_1 _inst_2 f (ContinuousOpenMap.id.{u1} α _inst_1)) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousOpenMap.comp.{u2, u2, u1} α α β _inst_1 _inst_1 _inst_2 f (ContinuousOpenMap.id.{u2} α _inst_1)) f
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.comp_id ContinuousOpenMap.comp_idₓ'. -/
@[simp]
theorem comp_id (f : α →CO β) : f.comp (ContinuousOpenMap.id α) = f :=
ext fun a => rfl
#align continuous_open_map.comp_id ContinuousOpenMap.comp_id
-/- warning: continuous_open_map.id_comp -> ContinuousOpenMap.id_comp is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] (f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2), Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (ContinuousOpenMap.comp.{u1, u2, u2} α β β _inst_1 _inst_2 _inst_2 (ContinuousOpenMap.id.{u2} β _inst_2) f) f
-but is expected to have type
- forall {α : Type.{u2}} {β : Type.{u1}} [_inst_1 : TopologicalSpace.{u2} α] [_inst_2 : TopologicalSpace.{u1} β] (f : ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2), Eq.{max (succ u2) (succ u1)} (ContinuousOpenMap.{u2, u1} α β _inst_1 _inst_2) (ContinuousOpenMap.comp.{u2, u1, u1} α β β _inst_1 _inst_2 _inst_2 (ContinuousOpenMap.id.{u1} β _inst_2) f) f
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.id_comp ContinuousOpenMap.id_compₓ'. -/
@[simp]
theorem id_comp (f : α →CO β) : (ContinuousOpenMap.id β).comp f = f :=
ext fun a => rfl
#align continuous_open_map.id_comp ContinuousOpenMap.id_comp
-/- warning: continuous_open_map.cancel_right -> ContinuousOpenMap.cancel_right is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g₁ : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3} {g₂ : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3} {f : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u2} α β (coeFn.{max (succ u1) (succ u2), max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) (fun (_x : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) => α -> β) (ContinuousOpenMap.hasCoeToFun.{u1, u2} α β _inst_1 _inst_2) f)) -> (Iff (Eq.{max (succ u1) (succ u3)} (ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u2) (succ u3)} (ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) g₁ g₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g₁ : ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3} {g₂ : ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3} {f : ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2}, (Function.Surjective.{succ u1, succ u3} α β (FunLike.coe.{max (succ u1) (succ u3), succ u1, succ u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α (fun (_x : α) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : α) => β) _x) (ContinuousMapClass.toFunLike.{max u1 u3, u1, u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMapClass.toContinuousMapClass.{max u1 u3, u1, u3} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) α β _inst_1 _inst_2 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2))) f)) -> (Iff (Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) (ContinuousOpenMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g₁ f) (ContinuousOpenMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g₂ f)) (Eq.{max (succ u3) (succ u2)} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) g₁ g₂))
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.cancel_right ContinuousOpenMap.cancel_rightₓ'. -/
theorem cancel_right {g₁ g₂ : β →CO γ} {f : α →CO β} (hf : Surjective f) :
g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, congr_arg _⟩
#align continuous_open_map.cancel_right ContinuousOpenMap.cancel_right
-/- warning: continuous_open_map.cancel_left -> ContinuousOpenMap.cancel_left is a dubious translation:
-lean 3 declaration is
- forall {α : Type.{u1}} {β : Type.{u2}} {γ : Type.{u3}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u2} β] [_inst_3 : TopologicalSpace.{u3} γ] {g : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3} {f₁ : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2} {f₂ : ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2}, (Function.Injective.{succ u2, succ u3} β γ (coeFn.{max (succ u2) (succ u3), max (succ u2) (succ u3)} (ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) (fun (_x : ContinuousOpenMap.{u2, u3} β γ _inst_2 _inst_3) => β -> γ) (ContinuousOpenMap.hasCoeToFun.{u2, u3} β γ _inst_2 _inst_3) g)) -> (Iff (Eq.{max (succ u1) (succ u3)} (ContinuousOpenMap.{u1, u3} α γ _inst_1 _inst_3) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₁) (ContinuousOpenMap.comp.{u1, u2, u3} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α β _inst_1 _inst_2) f₁ f₂))
-but is expected to have type
- forall {α : Type.{u1}} {β : Type.{u3}} {γ : Type.{u2}} [_inst_1 : TopologicalSpace.{u1} α] [_inst_2 : TopologicalSpace.{u3} β] [_inst_3 : TopologicalSpace.{u2} γ] {g : ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3} {f₁ : ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2} {f₂ : ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2}, (Function.Injective.{succ u3, succ u2} β γ (FunLike.coe.{max (succ u3) (succ u2), succ u3, succ u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β (fun (_x : β) => (fun (x._@.Mathlib.Topology.ContinuousFunction.Basic._hyg.699 : β) => γ) _x) (ContinuousMapClass.toFunLike.{max u3 u2, u3, u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousOpenMapClass.toContinuousMapClass.{max u3 u2, u3, u2} (ContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3) β γ _inst_2 _inst_3 (ContinuousOpenMap.instContinuousOpenMapClassContinuousOpenMap.{u3, u2} β γ _inst_2 _inst_3))) g)) -> (Iff (Eq.{max (succ u1) (succ u2)} (ContinuousOpenMap.{u1, u2} α γ _inst_1 _inst_3) (ContinuousOpenMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₁) (ContinuousOpenMap.comp.{u1, u3, u2} α β γ _inst_1 _inst_2 _inst_3 g f₂)) (Eq.{max (succ u1) (succ u3)} (ContinuousOpenMap.{u1, u3} α β _inst_1 _inst_2) f₁ f₂))
-Case conversion may be inaccurate. Consider using '#align continuous_open_map.cancel_left ContinuousOpenMap.cancel_leftₓ'. -/
theorem cancel_left {g : β →CO γ} {f₁ f₂ : α →CO β} (hg : Injective g) :
g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
⟨fun h => ext fun a => hg <| by rw [← comp_apply, h, comp_apply], congr_arg _⟩
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -76,10 +76,7 @@ variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [Topo
instance : ContinuousOpenMapClass (α →CO β) α β
where
coe f := f.toFun
- coe_injective' f g h := by
- obtain ⟨⟨_, _⟩, _⟩ := f
- obtain ⟨⟨_, _⟩, _⟩ := g
- congr
+ coe_injective' f g h := by obtain ⟨⟨_, _⟩, _⟩ := f; obtain ⟨⟨_, _⟩, _⟩ := g; congr
map_continuous f := f.continuous_toFun
map_open f := f.map_open'
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
Homogenises porting notes via capitalisation and addition of whitespace.
It makes the following changes:
@@ -78,7 +78,7 @@ theorem toFun_eq_coe {f : α →CO β} : f.toFun = (f : α → β) :=
rfl
#align continuous_open_map.to_fun_eq_coe ContinuousOpenMap.toFun_eq_coe
-@[simp] -- porting note: new, simpNF of `toFun_eq_coe`
+@[simp] -- Porting note: new, simpNF of `toFun_eq_coe`
theorem coe_toContinuousMap (f : α →CO β) : (f.toContinuousMap : α → β) = f := rfl
@[ext]
The FunLike hierarchy is very big and gets scanned through each time we need a coercion (via the CoeFun
instance). It looks like unbundled inheritance suits Lean 4 better here. The only class that still extends FunLike
is EquivLike
, since that has a custom coe_injective'
field that is easier to implement. All other classes should take FunLike
or EquivLike
as a parameter.
Previously, morphism classes would be Type
-valued and extend FunLike
:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
extends FunLike F A B :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
After this PR, they should be Prop
-valued and take FunLike
as a parameter:
/-- `MyHomClass F A B` states that `F` is a type of `MyClass.op`-preserving morphisms.
You should extend this class when you extend `MyHom`. -/
class MyHomClass (F : Type*) (A B : outParam <| Type*) [MyClass A] [MyClass B]
[FunLike F A B] : Prop :=
(map_op : ∀ (f : F) (x y : A), f (MyClass.op x y) = MyClass.op (f x) (f y))
(Note that A B
stay marked as outParam
even though they are not purely required to be so due to the FunLike
parameter already filling them in. This is required to see through type synonyms, which is important in the category theory library. Also, I think keeping them as outParam
is slightly faster.)
Similarly, MyEquivClass
should take EquivLike
as a parameter.
As a result, every mention of [MyHomClass F A B]
should become [FunLike F A B] [MyHomClass F A B]
.
While overall this gives some great speedups, there are some cases that are noticeably slower. In particular, a failing application of a lemma such as map_mul
is more expensive. This is due to suboptimal processing of arguments. For example:
variable [FunLike F M N] [Mul M] [Mul N] (f : F) (x : M) (y : M)
theorem map_mul [MulHomClass F M N] : f (x * y) = f x * f y
example [AddHomClass F A B] : f (x * y) = f x * f y := map_mul f _ _
Before this PR, applying map_mul f
gives the goals [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Since M
and N
are out_param
s, [MulHomClass F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found.
After this PR, the goals become [FunLike F ?M ?N] [Mul ?M] [Mul ?N] [MulHomClass F ?M ?N]
. Now [FunLike F ?M ?N]
is synthesized first, supplies values for ?M
and ?N
and then the Mul M
and Mul N
instances can be found, before trying MulHomClass F M N
which fails. Since the Mul
hierarchy is very big, this can be slow to fail, especially when there is no such Mul
instance.
A long-term but harder to achieve solution would be to specify the order in which instance goals get solved. For example, we'd like to change the arguments to map_mul
to look like [FunLike F M N] [Mul M] [Mul N] [highPriority <| MulHomClass F M N]
because MulHomClass
fails or succeeds much faster than the others.
As a consequence, the simpNF
linter is much slower since by design it tries and fails to apply many map_
lemmas. The same issue occurs a few times in existing calls to simp [map_mul]
, where map_mul
is tried "too soon" and fails. Thanks to the speedup of leanprover/lean4#2478 the impact is very limited, only in files that already were close to the timeout.
simp
not firing sometimesThis affects map_smulₛₗ
and related definitions. For simp
lemmas Lean apparently uses a slightly different mechanism to find instances, so that rw
can find every argument to map_smulₛₗ
successfully but simp
can't: leanprover/lean4#3701.
Especially in the category theory library, we might sometimes have a type A
which is also accessible as a synonym (Bundled A hA).1
. Instance synthesis doesn't always work if we have f : A →* B
but x * y : (Bundled A hA).1
or vice versa. This seems to be mostly fixed by keeping A B
as outParam
s in MulHomClass F A B
. (Presumably because Lean will do a definitional check A =?= (Bundled A hA).1
instead of using the syntax in the discrimination tree.)
The timeouts can be worked around for now by specifying which map_mul
we mean, either as map_mul f
for some explicit f
, or as e.g. MonoidHomClass.map_mul
.
map_smulₛₗ
not firing as simp
lemma can be worked around by going back to the pre-FunLike situation and making LinearMap.map_smulₛₗ
a simp
lemma instead of the generic map_smulₛₗ
. Writing simp [map_smulₛₗ _]
also works.
Co-authored-by: Matthew Ballard <matt@mrb.email> Co-authored-by: Scott Morrison <scott.morrison@gmail.com> Co-authored-by: Scott Morrison <scott@tqft.net> Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -43,7 +43,7 @@ section
You should extend this class when you extend `ContinuousOpenMap`. -/
class ContinuousOpenMapClass (F : Type*) (α β : outParam <| Type*) [TopologicalSpace α]
- [TopologicalSpace β] extends ContinuousMapClass F α β where
+ [TopologicalSpace β] [FunLike F α β] extends ContinuousMapClass F α β : Prop where
map_open (f : F) : IsOpenMap f
#align continuous_open_map_class ContinuousOpenMapClass
@@ -51,7 +51,8 @@ end
export ContinuousOpenMapClass (map_open)
-instance [TopologicalSpace α] [TopologicalSpace β] [ContinuousOpenMapClass F α β] :
+instance [TopologicalSpace α] [TopologicalSpace β] [FunLike F α β]
+ [ContinuousOpenMapClass F α β] :
CoeTC F (α →CO β) :=
⟨fun f => ⟨f, map_open f⟩⟩
@@ -62,12 +63,14 @@ namespace ContinuousOpenMap
variable [TopologicalSpace α] [TopologicalSpace β] [TopologicalSpace γ] [TopologicalSpace δ]
-instance : ContinuousOpenMapClass (α →CO β) α β where
+instance instFunLike : FunLike (α →CO β) α β where
coe f := f.toFun
coe_injective' f g h := by
obtain ⟨⟨_, _⟩, _⟩ := f
obtain ⟨⟨_, _⟩, _⟩ := g
congr
+
+instance : ContinuousOpenMapClass (α →CO β) α β where
map_continuous f := f.continuous_toFun
map_open f := f.map_open'
FunLike
to DFunLike
(#9785)
This prepares for the introduction of a non-dependent synonym of FunLike, which helps a lot with keeping #8386 readable.
This is entirely search-and-replace in 680197f combined with manual fixes in 4145626, e900597 and b8428f8. The commands that generated this change:
sed -i 's/\bFunLike\b/DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoFunLike\b/toDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/import Mathlib.Data.DFunLike/import Mathlib.Data.FunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bHom_FunLike\b/Hom_DFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\binstFunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\bfunLike\b/instDFunLike/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
sed -i 's/\btoo many metavariables to apply `fun_like.has_coe_to_fun`/too many metavariables to apply `DFunLike.hasCoeToFun`/g' {Archive,Counterexamples,Mathlib,test}/**/*.lean
Co-authored-by: Anne Baanen <Vierkantor@users.noreply.github.com>
@@ -12,7 +12,7 @@ import Mathlib.Topology.ContinuousFunction.Basic
This file defines bundled continuous open maps.
-We use the `FunLike` design, so each type of morphisms has a companion typeclass which is meant to
+We use the `DFunLike` design, so each type of morphisms has a companion typeclass which is meant to
be satisfied by itself and all stricter types.
## Types of morphisms
@@ -80,7 +80,7 @@ theorem coe_toContinuousMap (f : α →CO β) : (f.toContinuousMap : α → β)
@[ext]
theorem ext {f g : α →CO β} (h : ∀ a, f a = g a) : f = g :=
- FunLike.ext f g h
+ DFunLike.ext f g h
#align continuous_open_map.ext ContinuousOpenMap.ext
/-- Copy of a `ContinuousOpenMap` with a new `ContinuousMap` equal to the old one. Useful to fix
@@ -95,7 +95,7 @@ theorem coe_copy (f : α →CO β) (f' : α → β) (h : f' = f) : ⇑(f.copy f'
#align continuous_open_map.coe_copy ContinuousOpenMap.coe_copy
theorem copy_eq (f : α →CO β) (f' : α → β) (h : f' = f) : f.copy f' h = f :=
- FunLike.ext' h
+ DFunLike.ext' h
#align continuous_open_map.copy_eq ContinuousOpenMap.copy_eq
variable (α)
@@ -154,7 +154,7 @@ theorem id_comp (f : α →CO β) : (ContinuousOpenMap.id β).comp f = f :=
@[simp]
theorem cancel_right {g₁ g₂ : β →CO γ} {f : α →CO β} (hf : Surjective f) :
g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
- ⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, fun h => congr_arg₂ _ h rfl⟩
+ ⟨fun h => ext <| hf.forall.2 <| DFunLike.ext_iff.1 h, fun h => congr_arg₂ _ h rfl⟩
#align continuous_open_map.cancel_right ContinuousOpenMap.cancel_right
@[simp]
@@ -151,15 +151,16 @@ theorem id_comp (f : α →CO β) : (ContinuousOpenMap.id β).comp f = f :=
ext fun _ => rfl
#align continuous_open_map.id_comp ContinuousOpenMap.id_comp
+@[simp]
theorem cancel_right {g₁ g₂ : β →CO γ} {f : α →CO β} (hf : Surjective f) :
g₁.comp f = g₂.comp f ↔ g₁ = g₂ :=
⟨fun h => ext <| hf.forall.2 <| FunLike.ext_iff.1 h, fun h => congr_arg₂ _ h rfl⟩
#align continuous_open_map.cancel_right ContinuousOpenMap.cancel_right
+@[simp]
theorem cancel_left {g : β →CO γ} {f₁ f₂ : α →CO β} (hg : Injective g) :
g.comp f₁ = g.comp f₂ ↔ f₁ = f₂ :=
⟨fun h => ext fun a => hg <| by rw [← comp_apply, h, comp_apply], congr_arg _⟩
#align continuous_open_map.cancel_left ContinuousOpenMap.cancel_left
end ContinuousOpenMap
-
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -27,10 +27,10 @@ be satisfied by itself and all stricter types.
open Function
-variable {F α β γ δ : Type _}
+variable {F α β γ δ : Type*}
/-- The type of continuous open maps from `α` to `β`, aka Priestley homomorphisms. -/
-structure ContinuousOpenMap (α β : Type _) [TopologicalSpace α] [TopologicalSpace β] extends
+structure ContinuousOpenMap (α β : Type*) [TopologicalSpace α] [TopologicalSpace β] extends
ContinuousMap α β where
map_open' : IsOpenMap toFun
#align continuous_open_map ContinuousOpenMap
@@ -42,7 +42,7 @@ section
/-- `ContinuousOpenMapClass F α β` states that `F` is a type of continuous open maps.
You should extend this class when you extend `ContinuousOpenMap`. -/
-class ContinuousOpenMapClass (F : Type _) (α β : outParam <| Type _) [TopologicalSpace α]
+class ContinuousOpenMapClass (F : Type*) (α β : outParam <| Type*) [TopologicalSpace α]
[TopologicalSpace β] extends ContinuousMapClass F α β where
map_open (f : F) : IsOpenMap f
#align continuous_open_map_class ContinuousOpenMapClass
@@ -2,14 +2,11 @@
Copyright (c) 2022 Yaël Dillies. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yaël Dillies
-
-! This file was ported from Lean 3 source module topology.hom.open
-! leanprover-community/mathlib commit 98e83c3d541c77cdb7da20d79611a780ff8e7d90
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Topology.ContinuousFunction.Basic
+#align_import topology.hom.open from "leanprover-community/mathlib"@"98e83c3d541c77cdb7da20d79611a780ff8e7d90"
+
/-!
# Continuous open maps
The unported dependencies are