analysis.calculus.conformal.normed_space
⟷
Mathlib.Analysis.Calculus.Conformal.NormedSpace
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)
(last sync)
mathlib commit https://github.com/leanprover-community/mathlib/commit/65a1391a0106c9204fe45bc73a039f056558cb83
@@ -4,10 +4,10 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yourong Zang
-/
import Analysis.NormedSpace.ConformalLinearMap
-import Analysis.Calculus.Fderiv.Add
-import Analysis.Calculus.Fderiv.Mul
-import Analysis.Calculus.Fderiv.Equiv
-import Analysis.Calculus.Fderiv.RestrictScalars
+import Analysis.Calculus.FDeriv.Add
+import Analysis.Calculus.FDeriv.Mul
+import Analysis.Calculus.FDeriv.Equiv
+import Analysis.Calculus.FDeriv.RestrictScalars
#align_import analysis.calculus.conformal.normed_space from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/ce64cd319bb6b3e82f31c2d38e79080d377be451
@@ -3,11 +3,11 @@ Copyright (c) 2021 Yourong Zang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yourong Zang
-/
-import Mathbin.Analysis.NormedSpace.ConformalLinearMap
-import Mathbin.Analysis.Calculus.Fderiv.Add
-import Mathbin.Analysis.Calculus.Fderiv.Mul
-import Mathbin.Analysis.Calculus.Fderiv.Equiv
-import Mathbin.Analysis.Calculus.Fderiv.RestrictScalars
+import Analysis.NormedSpace.ConformalLinearMap
+import Analysis.Calculus.Fderiv.Add
+import Analysis.Calculus.Fderiv.Mul
+import Analysis.Calculus.Fderiv.Equiv
+import Analysis.Calculus.Fderiv.RestrictScalars
#align_import analysis.calculus.conformal.normed_space from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
mathlib commit https://github.com/leanprover-community/mathlib/commit/8ea5598db6caeddde6cb734aa179cc2408dbd345
@@ -2,11 +2,6 @@
Copyright (c) 2021 Yourong Zang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yourong Zang
-
-! This file was ported from Lean 3 source module analysis.calculus.conformal.normed_space
-! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathbin.Analysis.NormedSpace.ConformalLinearMap
import Mathbin.Analysis.Calculus.Fderiv.Add
@@ -14,6 +9,8 @@ import Mathbin.Analysis.Calculus.Fderiv.Mul
import Mathbin.Analysis.Calculus.Fderiv.Equiv
import Mathbin.Analysis.Calculus.Fderiv.RestrictScalars
+#align_import analysis.calculus.conformal.normed_space from "leanprover-community/mathlib"@"0b7c740e25651db0ba63648fbae9f9d6f941e31b"
+
/-!
# Conformal Maps
mathlib commit https://github.com/leanprover-community/mathlib/commit/9fb8964792b4237dac6200193a0d533f1b3f7423
@@ -74,15 +74,20 @@ theorem conformalAt_id (x : X) : ConformalAt id x :=
#align conformal_at_id conformalAt_id
-/
+#print conformalAt_const_smul /-
theorem conformalAt_const_smul {c : ℝ} (h : c ≠ 0) (x : X) : ConformalAt (fun x' : X => c • x') x :=
⟨c • ContinuousLinearMap.id ℝ X, (hasFDerivAt_id x).const_smul c, isConformalMap_const_smul h⟩
#align conformal_at_const_smul conformalAt_const_smul
+-/
+#print Subsingleton.conformalAt /-
@[nontriviality]
theorem Subsingleton.conformalAt [Subsingleton X] (f : X → Y) (x : X) : ConformalAt f x :=
⟨0, hasFDerivAt_of_subsingleton _ _, isConformalMap_of_subsingleton _⟩
#align subsingleton.conformal_at Subsingleton.conformalAt
+-/
+#print conformalAt_iff_isConformalMap_fderiv /-
/-- A function is a conformal map if and only if its differential is a conformal linear map-/
theorem conformalAt_iff_isConformalMap_fderiv {f : X → Y} {x : X} :
ConformalAt f x ↔ IsConformalMap (fderiv ℝ f x) :=
@@ -96,31 +101,40 @@ theorem conformalAt_iff_isConformalMap_fderiv {f : X → Y} {x : X} :
· nontriviality X
exact absurd (fderiv_zero_of_not_differentiableAt h) H.ne_zero
#align conformal_at_iff_is_conformal_map_fderiv conformalAt_iff_isConformalMap_fderiv
+-/
namespace ConformalAt
+#print ConformalAt.differentiableAt /-
theorem differentiableAt {f : X → Y} {x : X} (h : ConformalAt f x) : DifferentiableAt ℝ f x :=
let ⟨_, h₁, _⟩ := h
h₁.DifferentiableAt
#align conformal_at.differentiable_at ConformalAt.differentiableAt
+-/
+#print ConformalAt.congr /-
theorem congr {f g : X → Y} {x : X} {u : Set X} (hx : x ∈ u) (hu : IsOpen u) (hf : ConformalAt f x)
(h : ∀ x : X, x ∈ u → g x = f x) : ConformalAt g x :=
let ⟨f', hfderiv, hf'⟩ := hf
⟨f', hfderiv.congr_of_eventuallyEq ((hu.eventually_mem hx).mono h), hf'⟩
#align conformal_at.congr ConformalAt.congr
+-/
+#print ConformalAt.comp /-
theorem comp {f : X → Y} {g : Y → Z} (x : X) (hg : ConformalAt g (f x)) (hf : ConformalAt f x) :
ConformalAt (g ∘ f) x := by
rcases hf with ⟨f', hf₁, cf⟩
rcases hg with ⟨g', hg₁, cg⟩
exact ⟨g'.comp f', hg₁.comp x hf₁, cg.comp cf⟩
#align conformal_at.comp ConformalAt.comp
+-/
+#print ConformalAt.const_smul /-
theorem const_smul {f : X → Y} {x : X} {c : ℝ} (hc : c ≠ 0) (hf : ConformalAt f x) :
ConformalAt (c • f) x :=
(conformalAt_const_smul hc <| f x).comp x hf
#align conformal_at.const_smul ConformalAt.const_smul
+-/
end ConformalAt
@@ -140,27 +154,37 @@ theorem conformal_id : Conformal (id : X → X) := fun x => conformalAt_id x
#align conformal_id conformal_id
-/
+#print conformal_const_smul /-
theorem conformal_const_smul {c : ℝ} (h : c ≠ 0) : Conformal fun x : X => c • x := fun x =>
conformalAt_const_smul h x
#align conformal_const_smul conformal_const_smul
+-/
namespace Conformal
+#print Conformal.conformalAt /-
theorem conformalAt {f : X → Y} (h : Conformal f) (x : X) : ConformalAt f x :=
h x
#align conformal.conformal_at Conformal.conformalAt
+-/
+#print Conformal.differentiable /-
theorem differentiable {f : X → Y} (h : Conformal f) : Differentiable ℝ f := fun x =>
(h x).DifferentiableAt
#align conformal.differentiable Conformal.differentiable
+-/
+#print Conformal.comp /-
theorem comp {f : X → Y} {g : Y → Z} (hf : Conformal f) (hg : Conformal g) : Conformal (g ∘ f) :=
fun x => (hg <| f x).comp x (hf x)
#align conformal.comp Conformal.comp
+-/
+#print Conformal.const_smul /-
theorem const_smul {f : X → Y} (hf : Conformal f) {c : ℝ} (hc : c ≠ 0) : Conformal (c • f) :=
fun x => (hf x).const_smul hc
#align conformal.const_smul Conformal.const_smul
+-/
end Conformal
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -74,33 +74,15 @@ theorem conformalAt_id (x : X) : ConformalAt id x :=
#align conformal_at_id conformalAt_id
-/
-/- warning: conformal_at_const_smul -> conformalAt_const_smul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (forall (x : X), ConformalAt.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x' : X) => SMul.smul.{0, u1} Real X (SMulZeroClass.toHasSmul.{0, u1} Real X (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSmulZeroClass.{0, u1} Real X (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1))) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4))))) c x') x)
-but is expected to have type
- forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (x : X), ConformalAt.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x' : X) => HSMul.hSMul.{0, u1, u1} Real X X (instHSMul.{0, u1} Real X (SMulZeroClass.toSMul.{0, u1} Real X (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real X Real.instZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X Real.semiring (AddCommGroup.toAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4)))))) c x') x)
-Case conversion may be inaccurate. Consider using '#align conformal_at_const_smul conformalAt_const_smulₓ'. -/
theorem conformalAt_const_smul {c : ℝ} (h : c ≠ 0) (x : X) : ConformalAt (fun x' : X => c • x') x :=
⟨c • ContinuousLinearMap.id ℝ X, (hasFDerivAt_id x).const_smul c, isConformalMap_const_smul h⟩
#align conformal_at_const_smul conformalAt_const_smul
-/- warning: subsingleton.conformal_at -> Subsingleton.conformalAt is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_7 : Subsingleton.{succ u1} X] (f : X -> Y) (x : X), ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] [_inst_7 : Subsingleton.{succ u2} X] (f : X -> Y) (x : X), ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x
-Case conversion may be inaccurate. Consider using '#align subsingleton.conformal_at Subsingleton.conformalAtₓ'. -/
@[nontriviality]
theorem Subsingleton.conformalAt [Subsingleton X] (f : X → Y) (x : X) : ConformalAt f x :=
⟨0, hasFDerivAt_of_subsingleton _ _, isConformalMap_of_subsingleton _⟩
#align subsingleton.conformal_at Subsingleton.conformalAt
-/- warning: conformal_at_iff_is_conformal_map_fderiv -> conformalAt_iff_isConformalMap_fderiv is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {x : X}, Iff (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) (IsConformalMap.{0, u1, u2} Real X Y (NontriviallyNormedField.toNormedField.{0} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField)) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2) _inst_4 _inst_5 (fderiv.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x))
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {x : X}, Iff (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) (IsConformalMap.{0, u2, u1} Real X Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2) _inst_4 _inst_5 (fderiv.{0, u2, u1} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x))
-Case conversion may be inaccurate. Consider using '#align conformal_at_iff_is_conformal_map_fderiv conformalAt_iff_isConformalMap_fderivₓ'. -/
/-- A function is a conformal map if and only if its differential is a conformal linear map-/
theorem conformalAt_iff_isConformalMap_fderiv {f : X → Y} {x : X} :
ConformalAt f x ↔ IsConformalMap (fderiv ℝ f x) :=
@@ -117,35 +99,17 @@ theorem conformalAt_iff_isConformalMap_fderiv {f : X → Y} {x : X} :
namespace ConformalAt
-/- warning: conformal_at.differentiable_at -> ConformalAt.differentiableAt is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {x : X}, (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (DifferentiableAt.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x)
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {x : X}, (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (DifferentiableAt.{0, u2, u1} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x)
-Case conversion may be inaccurate. Consider using '#align conformal_at.differentiable_at ConformalAt.differentiableAtₓ'. -/
theorem differentiableAt {f : X → Y} {x : X} (h : ConformalAt f x) : DifferentiableAt ℝ f x :=
let ⟨_, h₁, _⟩ := h
h₁.DifferentiableAt
#align conformal_at.differentiable_at ConformalAt.differentiableAt
-/- warning: conformal_at.congr -> ConformalAt.congr is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {g : X -> Y} {x : X} {u : Set.{u1} X}, (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x u) -> (IsOpen.{u1} X (UniformSpace.toTopologicalSpace.{u1} X (PseudoMetricSpace.toUniformSpace.{u1} X (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))) u) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (forall (x : X), (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x u) -> (Eq.{succ u2} Y (g x) (f x))) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 g x)
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {g : X -> Y} {x : X} {u : Set.{u2} X}, (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x u) -> (IsOpen.{u2} X (UniformSpace.toTopologicalSpace.{u2} X (PseudoMetricSpace.toUniformSpace.{u2} X (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)))) u) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (forall (x : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x u) -> (Eq.{succ u1} Y (g x) (f x))) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 g x)
-Case conversion may be inaccurate. Consider using '#align conformal_at.congr ConformalAt.congrₓ'. -/
theorem congr {f g : X → Y} {x : X} {u : Set X} (hx : x ∈ u) (hu : IsOpen u) (hf : ConformalAt f x)
(h : ∀ x : X, x ∈ u → g x = f x) : ConformalAt g x :=
let ⟨f', hfderiv, hf'⟩ := hf
⟨f', hfderiv.congr_of_eventuallyEq ((hu.eventually_mem hx).mono h), hf'⟩
#align conformal_at.congr ConformalAt.congr
-/- warning: conformal_at.comp -> ConformalAt.comp is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_3 : NormedAddCommGroup.{u3} Z] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_6 : NormedSpace.{0, u3} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} Z _inst_3)] {f : X -> Y} {g : Y -> Z} (x : X), (ConformalAt.{u2, u3} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g (f x)) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u1, u3} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u1, succ u2, succ u3} X Y Z g f) x)
-but is expected to have type
- forall {X : Type.{u1}} {Y : Type.{u3}} {Z : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u3} Y] [_inst_3 : NormedAddCommGroup.{u2} Z] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u3} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} Y _inst_2)] [_inst_6 : NormedSpace.{0, u2} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Z _inst_3)] {f : X -> Y} {g : Y -> Z} (x : X), (ConformalAt.{u3, u2} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g (f x)) -> (ConformalAt.{u1, u3} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u1, u2} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u1, succ u3, succ u2} X Y Z g f) x)
-Case conversion may be inaccurate. Consider using '#align conformal_at.comp ConformalAt.compₓ'. -/
theorem comp {f : X → Y} {g : Y → Z} (x : X) (hg : ConformalAt g (f x)) (hf : ConformalAt f x) :
ConformalAt (g ∘ f) x := by
rcases hf with ⟨f', hf₁, cf⟩
@@ -153,12 +117,6 @@ theorem comp {f : X → Y} {g : Y → Z} (x : X) (hg : ConformalAt g (f x)) (hf
exact ⟨g'.comp f', hg₁.comp x hf₁, cg.comp cf⟩
#align conformal_at.comp ConformalAt.comp
-/- warning: conformal_at.const_smul -> ConformalAt.const_smul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {x : X} {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 (SMul.smul.{0, max u1 u2} Real (X -> Y) (Function.hasSMul.{u1, 0, u2} X Real Y (SMulZeroClass.toHasSmul.{0, u2} Real Y (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real Y (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real Y (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u2} Real Y (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2))) (NormedSpace.toModule.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2) _inst_5)))))) c f) x)
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {x : X} {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 (HSMul.hSMul.{0, max u2 u1, max u2 u1} Real (X -> Y) (X -> Y) (instHSMul.{0, max u2 u1} Real (X -> Y) (Pi.instSMul.{u2, u1, 0} X Real (fun (a._@.Mathlib.Analysis.Calculus.Conformal.NormedSpace._hyg.767 : X) => Y) (fun (i : X) => SMulZeroClass.toSMul.{0, u1} Real Y (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real Y Real.instZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real Y Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u1} Real Y Real.semiring (AddCommGroup.toAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)) (NormedSpace.toModule.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2) _inst_5))))))) c f) x)
-Case conversion may be inaccurate. Consider using '#align conformal_at.const_smul ConformalAt.const_smulₓ'. -/
theorem const_smul {f : X → Y} {x : X} {c : ℝ} (hc : c ≠ 0) (hf : ConformalAt f x) :
ConformalAt (c • f) x :=
(conformalAt_const_smul hc <| f x).comp x hf
@@ -182,54 +140,24 @@ theorem conformal_id : Conformal (id : X → X) := fun x => conformalAt_id x
#align conformal_id conformal_id
-/
-/- warning: conformal_const_smul -> conformal_const_smul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (Conformal.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x : X) => SMul.smul.{0, u1} Real X (SMulZeroClass.toHasSmul.{0, u1} Real X (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSmulZeroClass.{0, u1} Real X (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1))) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4))))) c x))
-but is expected to have type
- forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (Conformal.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x : X) => HSMul.hSMul.{0, u1, u1} Real X X (instHSMul.{0, u1} Real X (SMulZeroClass.toSMul.{0, u1} Real X (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real X Real.instZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X Real.semiring (AddCommGroup.toAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4)))))) c x))
-Case conversion may be inaccurate. Consider using '#align conformal_const_smul conformal_const_smulₓ'. -/
theorem conformal_const_smul {c : ℝ} (h : c ≠ 0) : Conformal fun x : X => c • x := fun x =>
conformalAt_const_smul h x
#align conformal_const_smul conformal_const_smul
namespace Conformal
-/- warning: conformal.conformal_at -> Conformal.conformalAt is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall (x : X), ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x)
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y}, (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall (x : X), ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x)
-Case conversion may be inaccurate. Consider using '#align conformal.conformal_at Conformal.conformalAtₓ'. -/
theorem conformalAt {f : X → Y} (h : Conformal f) (x : X) : ConformalAt f x :=
h x
#align conformal.conformal_at Conformal.conformalAt
-/- warning: conformal.differentiable -> Conformal.differentiable is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Differentiable.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f)
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y}, (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Differentiable.{0, u2, u1} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f)
-Case conversion may be inaccurate. Consider using '#align conformal.differentiable Conformal.differentiableₓ'. -/
theorem differentiable {f : X → Y} (h : Conformal f) : Differentiable ℝ f := fun x =>
(h x).DifferentiableAt
#align conformal.differentiable Conformal.differentiable
-/- warning: conformal.comp -> Conformal.comp is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_3 : NormedAddCommGroup.{u3} Z] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_6 : NormedSpace.{0, u3} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} Z _inst_3)] {f : X -> Y} {g : Y -> Z}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Conformal.{u2, u3} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g) -> (Conformal.{u1, u3} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u1, succ u2, succ u3} X Y Z g f))
-but is expected to have type
- forall {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u3} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_3 : NormedAddCommGroup.{u1} Z] [_inst_4 : NormedSpace.{0, u3} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_6 : NormedSpace.{0, u1} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Z _inst_3)] {f : X -> Y} {g : Y -> Z}, (Conformal.{u3, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Conformal.{u2, u1} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g) -> (Conformal.{u3, u1} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u3, succ u2, succ u1} X Y Z g f))
-Case conversion may be inaccurate. Consider using '#align conformal.comp Conformal.compₓ'. -/
theorem comp {f : X → Y} {g : Y → Z} (hf : Conformal f) (hg : Conformal g) : Conformal (g ∘ f) :=
fun x => (hg <| f x).comp x (hf x)
#align conformal.comp Conformal.comp
-/- warning: conformal.const_smul -> Conformal.const_smul is a dubious translation:
-lean 3 declaration is
- forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 (SMul.smul.{0, max u1 u2} Real (X -> Y) (Function.hasSMul.{u1, 0, u2} X Real Y (SMulZeroClass.toHasSmul.{0, u2} Real Y (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real Y (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real Y (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u2} Real Y (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2))) (NormedSpace.toModule.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2) _inst_5)))))) c f)))
-but is expected to have type
- forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y}, (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 (HSMul.hSMul.{0, max u2 u1, max u2 u1} Real (X -> Y) (X -> Y) (instHSMul.{0, max u2 u1} Real (X -> Y) (Pi.instSMul.{u2, u1, 0} X Real (fun (a._@.Mathlib.Analysis.Calculus.Conformal.NormedSpace._hyg.1142 : X) => Y) (fun (i : X) => SMulZeroClass.toSMul.{0, u1} Real Y (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real Y Real.instZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real Y Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u1} Real Y Real.semiring (AddCommGroup.toAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)) (NormedSpace.toModule.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2) _inst_5))))))) c f)))
-Case conversion may be inaccurate. Consider using '#align conformal.const_smul Conformal.const_smulₓ'. -/
theorem const_smul {f : X → Y} (hf : Conformal f) {c : ℝ} (hc : c ≠ 0) : Conformal (c • f) :=
fun x => (hf x).const_smul hc
#align conformal.const_smul Conformal.const_smul
mathlib commit https://github.com/leanprover-community/mathlib/commit/917c3c072e487b3cccdbfeff17e75b40e45f66cb
@@ -4,7 +4,7 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yourong Zang
! This file was ported from Lean 3 source module analysis.calculus.conformal.normed_space
-! leanprover-community/mathlib commit e3fb84046afd187b710170887195d50bada934ee
+! leanprover-community/mathlib commit 0b7c740e25651db0ba63648fbae9f9d6f941e31b
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
@@ -17,6 +17,9 @@ import Mathbin.Analysis.Calculus.Fderiv.RestrictScalars
/-!
# Conformal Maps
+> THIS FILE IS SYNCHRONIZED WITH MATHLIB4.
+> Any changes to this file require a corresponding PR to mathlib4.
+
A continuous linear map between real normed spaces `X` and `Y` is `conformal_at` some point `x`
if it is real differentiable at that point and its differential `is_conformal_linear_map`.
mathlib commit https://github.com/leanprover-community/mathlib/commit/ef95945cd48c932c9e034872bd25c3c220d9c946
@@ -58,24 +58,46 @@ section LocConformality
open LinearIsometry ContinuousLinearMap
+#print ConformalAt /-
/-- A map `f` is said to be conformal if it has a conformal differential `f'`. -/
def ConformalAt (f : X → Y) (x : X) :=
∃ f' : X →L[ℝ] Y, HasFDerivAt f f' x ∧ IsConformalMap f'
#align conformal_at ConformalAt
+-/
+#print conformalAt_id /-
theorem conformalAt_id (x : X) : ConformalAt id x :=
⟨id ℝ X, hasFDerivAt_id _, isConformalMap_id⟩
#align conformal_at_id conformalAt_id
+-/
+/- warning: conformal_at_const_smul -> conformalAt_const_smul is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (forall (x : X), ConformalAt.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x' : X) => SMul.smul.{0, u1} Real X (SMulZeroClass.toHasSmul.{0, u1} Real X (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSmulZeroClass.{0, u1} Real X (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1))) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4))))) c x') x)
+but is expected to have type
+ forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (forall (x : X), ConformalAt.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x' : X) => HSMul.hSMul.{0, u1, u1} Real X X (instHSMul.{0, u1} Real X (SMulZeroClass.toSMul.{0, u1} Real X (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real X Real.instZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X Real.semiring (AddCommGroup.toAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4)))))) c x') x)
+Case conversion may be inaccurate. Consider using '#align conformal_at_const_smul conformalAt_const_smulₓ'. -/
theorem conformalAt_const_smul {c : ℝ} (h : c ≠ 0) (x : X) : ConformalAt (fun x' : X => c • x') x :=
⟨c • ContinuousLinearMap.id ℝ X, (hasFDerivAt_id x).const_smul c, isConformalMap_const_smul h⟩
#align conformal_at_const_smul conformalAt_const_smul
+/- warning: subsingleton.conformal_at -> Subsingleton.conformalAt is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_7 : Subsingleton.{succ u1} X] (f : X -> Y) (x : X), ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] [_inst_7 : Subsingleton.{succ u2} X] (f : X -> Y) (x : X), ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x
+Case conversion may be inaccurate. Consider using '#align subsingleton.conformal_at Subsingleton.conformalAtₓ'. -/
@[nontriviality]
theorem Subsingleton.conformalAt [Subsingleton X] (f : X → Y) (x : X) : ConformalAt f x :=
⟨0, hasFDerivAt_of_subsingleton _ _, isConformalMap_of_subsingleton _⟩
#align subsingleton.conformal_at Subsingleton.conformalAt
+/- warning: conformal_at_iff_is_conformal_map_fderiv -> conformalAt_iff_isConformalMap_fderiv is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {x : X}, Iff (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) (IsConformalMap.{0, u1, u2} Real X Y (NontriviallyNormedField.toNormedField.{0} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField)) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2) _inst_4 _inst_5 (fderiv.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x))
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {x : X}, Iff (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) (IsConformalMap.{0, u2, u1} Real X Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1) (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2) _inst_4 _inst_5 (fderiv.{0, u2, u1} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x))
+Case conversion may be inaccurate. Consider using '#align conformal_at_iff_is_conformal_map_fderiv conformalAt_iff_isConformalMap_fderivₓ'. -/
/-- A function is a conformal map if and only if its differential is a conformal linear map-/
theorem conformalAt_iff_isConformalMap_fderiv {f : X → Y} {x : X} :
ConformalAt f x ↔ IsConformalMap (fderiv ℝ f x) :=
@@ -92,17 +114,35 @@ theorem conformalAt_iff_isConformalMap_fderiv {f : X → Y} {x : X} :
namespace ConformalAt
+/- warning: conformal_at.differentiable_at -> ConformalAt.differentiableAt is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {x : X}, (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (DifferentiableAt.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x)
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {x : X}, (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (DifferentiableAt.{0, u2, u1} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f x)
+Case conversion may be inaccurate. Consider using '#align conformal_at.differentiable_at ConformalAt.differentiableAtₓ'. -/
theorem differentiableAt {f : X → Y} {x : X} (h : ConformalAt f x) : DifferentiableAt ℝ f x :=
let ⟨_, h₁, _⟩ := h
h₁.DifferentiableAt
#align conformal_at.differentiable_at ConformalAt.differentiableAt
+/- warning: conformal_at.congr -> ConformalAt.congr is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {g : X -> Y} {x : X} {u : Set.{u1} X}, (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x u) -> (IsOpen.{u1} X (UniformSpace.toTopologicalSpace.{u1} X (PseudoMetricSpace.toUniformSpace.{u1} X (SeminormedAddCommGroup.toPseudoMetricSpace.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))) u) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (forall (x : X), (Membership.Mem.{u1, u1} X (Set.{u1} X) (Set.hasMem.{u1} X) x u) -> (Eq.{succ u2} Y (g x) (f x))) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 g x)
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {g : X -> Y} {x : X} {u : Set.{u2} X}, (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x u) -> (IsOpen.{u2} X (UniformSpace.toTopologicalSpace.{u2} X (PseudoMetricSpace.toUniformSpace.{u2} X (SeminormedAddCommGroup.toPseudoMetricSpace.{u2} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)))) u) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (forall (x : X), (Membership.mem.{u2, u2} X (Set.{u2} X) (Set.instMembershipSet.{u2} X) x u) -> (Eq.{succ u1} Y (g x) (f x))) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 g x)
+Case conversion may be inaccurate. Consider using '#align conformal_at.congr ConformalAt.congrₓ'. -/
theorem congr {f g : X → Y} {x : X} {u : Set X} (hx : x ∈ u) (hu : IsOpen u) (hf : ConformalAt f x)
(h : ∀ x : X, x ∈ u → g x = f x) : ConformalAt g x :=
let ⟨f', hfderiv, hf'⟩ := hf
⟨f', hfderiv.congr_of_eventuallyEq ((hu.eventually_mem hx).mono h), hf'⟩
#align conformal_at.congr ConformalAt.congr
+/- warning: conformal_at.comp -> ConformalAt.comp is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_3 : NormedAddCommGroup.{u3} Z] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_6 : NormedSpace.{0, u3} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} Z _inst_3)] {f : X -> Y} {g : Y -> Z} (x : X), (ConformalAt.{u2, u3} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g (f x)) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u1, u3} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u1, succ u2, succ u3} X Y Z g f) x)
+but is expected to have type
+ forall {X : Type.{u1}} {Y : Type.{u3}} {Z : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u3} Y] [_inst_3 : NormedAddCommGroup.{u2} Z] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u3} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} Y _inst_2)] [_inst_6 : NormedSpace.{0, u2} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Z _inst_3)] {f : X -> Y} {g : Y -> Z} (x : X), (ConformalAt.{u3, u2} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g (f x)) -> (ConformalAt.{u1, u3} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u1, u2} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u1, succ u3, succ u2} X Y Z g f) x)
+Case conversion may be inaccurate. Consider using '#align conformal_at.comp ConformalAt.compₓ'. -/
theorem comp {f : X → Y} {g : Y → Z} (x : X) (hg : ConformalAt g (f x)) (hf : ConformalAt f x) :
ConformalAt (g ∘ f) x := by
rcases hf with ⟨f', hf₁, cf⟩
@@ -110,6 +150,12 @@ theorem comp {f : X → Y} {g : Y → Z} (x : X) (hg : ConformalAt g (f x)) (hf
exact ⟨g'.comp f', hg₁.comp x hf₁, cg.comp cf⟩
#align conformal_at.comp ConformalAt.comp
+/- warning: conformal_at.const_smul -> ConformalAt.const_smul is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y} {x : X} {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 (SMul.smul.{0, max u1 u2} Real (X -> Y) (Function.hasSMul.{u1, 0, u2} X Real Y (SMulZeroClass.toHasSmul.{0, u2} Real Y (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real Y (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real Y (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u2} Real Y (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2))) (NormedSpace.toModule.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2) _inst_5)))))) c f) x)
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y} {x : X} {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x) -> (ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 (HSMul.hSMul.{0, max u2 u1, max u2 u1} Real (X -> Y) (X -> Y) (instHSMul.{0, max u2 u1} Real (X -> Y) (Pi.instSMul.{u2, u1, 0} X Real (fun (a._@.Mathlib.Analysis.Calculus.Conformal.NormedSpace._hyg.767 : X) => Y) (fun (i : X) => SMulZeroClass.toSMul.{0, u1} Real Y (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real Y Real.instZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real Y Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u1} Real Y Real.semiring (AddCommGroup.toAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)) (NormedSpace.toModule.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2) _inst_5))))))) c f) x)
+Case conversion may be inaccurate. Consider using '#align conformal_at.const_smul ConformalAt.const_smulₓ'. -/
theorem const_smul {f : X → Y} {x : X} {c : ℝ} (hc : c ≠ 0) (hf : ConformalAt f x) :
ConformalAt (c • f) x :=
(conformalAt_const_smul hc <| f x).comp x hf
@@ -121,32 +167,66 @@ end LocConformality
section GlobalConformality
+#print Conformal /-
/-- A map `f` is conformal if it's conformal at every point. -/
def Conformal (f : X → Y) :=
∀ x : X, ConformalAt f x
#align conformal Conformal
+-/
+#print conformal_id /-
theorem conformal_id : Conformal (id : X → X) := fun x => conformalAt_id x
#align conformal_id conformal_id
+-/
+/- warning: conformal_const_smul -> conformal_const_smul is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (Conformal.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x : X) => SMul.smul.{0, u1} Real X (SMulZeroClass.toHasSmul.{0, u1} Real X (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSmulZeroClass.{0, u1} Real X (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u1} X (AddMonoid.toAddZeroClass.{u1} X (AddCommMonoid.toAddMonoid.{u1} X (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u1} X (SeminormedAddCommGroup.toAddCommGroup.{u1} X (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1))) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4))))) c x))
+but is expected to have type
+ forall {X : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (Conformal.{u1, u1} X X _inst_1 _inst_1 _inst_4 _inst_4 (fun (x : X) => HSMul.hSMul.{0, u1, u1} Real X X (instHSMul.{0, u1} Real X (SMulZeroClass.toSMul.{0, u1} Real X (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real X Real.instZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real X Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} X (SubNegZeroMonoid.toNegZeroClass.{u1} X (SubtractionMonoid.toSubNegZeroMonoid.{u1} X (SubtractionCommMonoid.toSubtractionMonoid.{u1} X (AddCommGroup.toDivisionAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)))))) (Module.toMulActionWithZero.{0, u1} Real X Real.semiring (AddCommGroup.toAddCommMonoid.{u1} X (NormedAddCommGroup.toAddCommGroup.{u1} X _inst_1)) (NormedSpace.toModule.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1) _inst_4)))))) c x))
+Case conversion may be inaccurate. Consider using '#align conformal_const_smul conformal_const_smulₓ'. -/
theorem conformal_const_smul {c : ℝ} (h : c ≠ 0) : Conformal fun x : X => c • x := fun x =>
conformalAt_const_smul h x
#align conformal_const_smul conformal_const_smul
namespace Conformal
+/- warning: conformal.conformal_at -> Conformal.conformalAt is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall (x : X), ConformalAt.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x)
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y}, (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall (x : X), ConformalAt.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f x)
+Case conversion may be inaccurate. Consider using '#align conformal.conformal_at Conformal.conformalAtₓ'. -/
theorem conformalAt {f : X → Y} (h : Conformal f) (x : X) : ConformalAt f x :=
h x
#align conformal.conformal_at Conformal.conformalAt
+/- warning: conformal.differentiable -> Conformal.differentiable is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Differentiable.{0, u1, u2} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f)
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y}, (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Differentiable.{0, u2, u1} Real (DenselyNormedField.toNontriviallyNormedField.{0} Real Real.denselyNormedField) X _inst_1 _inst_4 Y _inst_2 _inst_5 f)
+Case conversion may be inaccurate. Consider using '#align conformal.differentiable Conformal.differentiableₓ'. -/
theorem differentiable {f : X → Y} (h : Conformal f) : Differentiable ℝ f := fun x =>
(h x).DifferentiableAt
#align conformal.differentiable Conformal.differentiable
+/- warning: conformal.comp -> Conformal.comp is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} {Z : Type.{u3}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_3 : NormedAddCommGroup.{u3} Z] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_6 : NormedSpace.{0, u3} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} Z _inst_3)] {f : X -> Y} {g : Y -> Z}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Conformal.{u2, u3} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g) -> (Conformal.{u1, u3} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u1, succ u2, succ u3} X Y Z g f))
+but is expected to have type
+ forall {X : Type.{u3}} {Y : Type.{u2}} {Z : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u3} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_3 : NormedAddCommGroup.{u1} Z] [_inst_4 : NormedSpace.{0, u3} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u3} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] [_inst_6 : NormedSpace.{0, u1} Real Z Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Z _inst_3)] {f : X -> Y} {g : Y -> Z}, (Conformal.{u3, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (Conformal.{u2, u1} Y Z _inst_2 _inst_3 _inst_5 _inst_6 g) -> (Conformal.{u3, u1} X Z _inst_1 _inst_3 _inst_4 _inst_6 (Function.comp.{succ u3, succ u2, succ u1} X Y Z g f))
+Case conversion may be inaccurate. Consider using '#align conformal.comp Conformal.compₓ'. -/
theorem comp {f : X → Y} {g : Y → Z} (hf : Conformal f) (hg : Conformal g) : Conformal (g ∘ f) :=
fun x => (hg <| f x).comp x (hf x)
#align conformal.comp Conformal.comp
+/- warning: conformal.const_smul -> Conformal.const_smul is a dubious translation:
+lean 3 declaration is
+ forall {X : Type.{u1}} {Y : Type.{u2}} [_inst_1 : NormedAddCommGroup.{u1} X] [_inst_2 : NormedAddCommGroup.{u2} Y] [_inst_4 : NormedSpace.{0, u1} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} X _inst_1)] [_inst_5 : NormedSpace.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)] {f : X -> Y}, (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (OfNat.mk.{0} Real 0 (Zero.zero.{0} Real Real.hasZero)))) -> (Conformal.{u1, u2} X Y _inst_1 _inst_2 _inst_4 _inst_5 (SMul.smul.{0, max u1 u2} Real (X -> Y) (Function.hasSMul.{u1, 0, u2} X Real Y (SMulZeroClass.toHasSmul.{0, u2} Real Y (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (SMulWithZero.toSmulZeroClass.{0, u2} Real Y (MulZeroClass.toHasZero.{0} Real (MulZeroOneClass.toMulZeroClass.{0} Real (MonoidWithZero.toMulZeroOneClass.{0} Real (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u2} Real Y (Semiring.toMonoidWithZero.{0} Real (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField))))) (AddZeroClass.toHasZero.{u2} Y (AddMonoid.toAddZeroClass.{u2} Y (AddCommMonoid.toAddMonoid.{u2} Y (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u2} Real Y (Ring.toSemiring.{0} Real (NormedRing.toRing.{0} Real (NormedCommRing.toNormedRing.{0} Real (NormedField.toNormedCommRing.{0} Real Real.normedField)))) (AddCommGroup.toAddCommMonoid.{u2} Y (SeminormedAddCommGroup.toAddCommGroup.{u2} Y (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2))) (NormedSpace.toModule.{0, u2} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} Y _inst_2) _inst_5)))))) c f)))
+but is expected to have type
+ forall {X : Type.{u2}} {Y : Type.{u1}} [_inst_1 : NormedAddCommGroup.{u2} X] [_inst_2 : NormedAddCommGroup.{u1} Y] [_inst_4 : NormedSpace.{0, u2} Real X Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u2} X _inst_1)] [_inst_5 : NormedSpace.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2)] {f : X -> Y}, (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 f) -> (forall {c : Real}, (Ne.{1} Real c (OfNat.ofNat.{0} Real 0 (Zero.toOfNat0.{0} Real Real.instZeroReal))) -> (Conformal.{u2, u1} X Y _inst_1 _inst_2 _inst_4 _inst_5 (HSMul.hSMul.{0, max u2 u1, max u2 u1} Real (X -> Y) (X -> Y) (instHSMul.{0, max u2 u1} Real (X -> Y) (Pi.instSMul.{u2, u1, 0} X Real (fun (a._@.Mathlib.Analysis.Calculus.Conformal.NormedSpace._hyg.1142 : X) => Y) (fun (i : X) => SMulZeroClass.toSMul.{0, u1} Real Y (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (SMulWithZero.toSMulZeroClass.{0, u1} Real Y Real.instZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (MulActionWithZero.toSMulWithZero.{0, u1} Real Y Real.instMonoidWithZeroReal (NegZeroClass.toZero.{u1} Y (SubNegZeroMonoid.toNegZeroClass.{u1} Y (SubtractionMonoid.toSubNegZeroMonoid.{u1} Y (SubtractionCommMonoid.toSubtractionMonoid.{u1} Y (AddCommGroup.toDivisionAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)))))) (Module.toMulActionWithZero.{0, u1} Real Y Real.semiring (AddCommGroup.toAddCommMonoid.{u1} Y (NormedAddCommGroup.toAddCommGroup.{u1} Y _inst_2)) (NormedSpace.toModule.{0, u1} Real Y Real.normedField (NormedAddCommGroup.toSeminormedAddCommGroup.{u1} Y _inst_2) _inst_5))))))) c f)))
+Case conversion may be inaccurate. Consider using '#align conformal.const_smul Conformal.const_smulₓ'. -/
theorem const_smul {f : X → Y} (hf : Conformal f) {c : ℝ} (hc : c ≠ 0) : Conformal (c • f) :=
fun x => (hf x).const_smul hc
#align conformal.const_smul Conformal.const_smul
mathlib commit https://github.com/leanprover-community/mathlib/commit/33c67ae661dd8988516ff7f247b0be3018cdd952
@@ -60,20 +60,20 @@ open LinearIsometry ContinuousLinearMap
/-- A map `f` is said to be conformal if it has a conformal differential `f'`. -/
def ConformalAt (f : X → Y) (x : X) :=
- ∃ f' : X →L[ℝ] Y, HasFderivAt f f' x ∧ IsConformalMap f'
+ ∃ f' : X →L[ℝ] Y, HasFDerivAt f f' x ∧ IsConformalMap f'
#align conformal_at ConformalAt
theorem conformalAt_id (x : X) : ConformalAt id x :=
- ⟨id ℝ X, hasFderivAt_id _, isConformalMap_id⟩
+ ⟨id ℝ X, hasFDerivAt_id _, isConformalMap_id⟩
#align conformal_at_id conformalAt_id
theorem conformalAt_const_smul {c : ℝ} (h : c ≠ 0) (x : X) : ConformalAt (fun x' : X => c • x') x :=
- ⟨c • ContinuousLinearMap.id ℝ X, (hasFderivAt_id x).const_smul c, isConformalMap_const_smul h⟩
+ ⟨c • ContinuousLinearMap.id ℝ X, (hasFDerivAt_id x).const_smul c, isConformalMap_const_smul h⟩
#align conformal_at_const_smul conformalAt_const_smul
@[nontriviality]
theorem Subsingleton.conformalAt [Subsingleton X] (f : X → Y) (x : X) : ConformalAt f x :=
- ⟨0, hasFderivAt_of_subsingleton _ _, isConformalMap_of_subsingleton _⟩
+ ⟨0, hasFDerivAt_of_subsingleton _ _, isConformalMap_of_subsingleton _⟩
#align subsingleton.conformal_at Subsingleton.conformalAt
/-- A function is a conformal map if and only if its differential is a conformal linear map-/
mathlib commit https://github.com/leanprover-community/mathlib/commit/e3fb84046afd187b710170887195d50bada934ee
@@ -4,12 +4,15 @@ Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yourong Zang
! This file was ported from Lean 3 source module analysis.calculus.conformal.normed_space
-! leanprover-community/mathlib commit df78eae582aad2f545024bf6c7249191d2723074
+! leanprover-community/mathlib commit e3fb84046afd187b710170887195d50bada934ee
! Please do not edit these lines, except to modify the commit id
! if you have ported upstream changes.
-/
import Mathbin.Analysis.NormedSpace.ConformalLinearMap
-import Mathbin.Analysis.Calculus.Fderiv
+import Mathbin.Analysis.Calculus.Fderiv.Add
+import Mathbin.Analysis.Calculus.Fderiv.Mul
+import Mathbin.Analysis.Calculus.Fderiv.Equiv
+import Mathbin.Analysis.Calculus.Fderiv.RestrictScalars
/-!
# Conformal Maps
mathlib commit https://github.com/leanprover-community/mathlib/commit/bd9851ca476957ea4549eb19b40e7b5ade9428cc
@@ -5,9 +5,6 @@ Authors: Yourong Zang
-/
import Mathlib.Analysis.NormedSpace.ConformalLinearMap
import Mathlib.Analysis.Calculus.FDeriv.Add
-import Mathlib.Analysis.Calculus.FDeriv.Mul
-import Mathlib.Analysis.Calculus.FDeriv.Equiv
-import Mathlib.Analysis.Calculus.FDeriv.RestrictScalars
#align_import analysis.calculus.conformal.normed_space from "leanprover-community/mathlib"@"e3fb84046afd187b710170887195d50bada934ee"
Type _
and Sort _
(#6499)
We remove all possible occurences of Type _
and Sort _
in favor of Type*
and Sort*
.
This has nice performance benefits.
@@ -47,7 +47,7 @@ Maps such as the complex conjugate are considered to be conformal.
noncomputable section
-variable {X Y Z : Type _} [NormedAddCommGroup X] [NormedAddCommGroup Y] [NormedAddCommGroup Z]
+variable {X Y Z : Type*} [NormedAddCommGroup X] [NormedAddCommGroup Y] [NormedAddCommGroup Z]
[NormedSpace ℝ X] [NormedSpace ℝ Y] [NormedSpace ℝ Z]
section LocConformality
@@ -2,11 +2,6 @@
Copyright (c) 2021 Yourong Zang. All rights reserved.
Released under Apache 2.0 license as described in the file LICENSE.
Authors: Yourong Zang
-
-! This file was ported from Lean 3 source module analysis.calculus.conformal.normed_space
-! leanprover-community/mathlib commit e3fb84046afd187b710170887195d50bada934ee
-! Please do not edit these lines, except to modify the commit id
-! if you have ported upstream changes.
-/
import Mathlib.Analysis.NormedSpace.ConformalLinearMap
import Mathlib.Analysis.Calculus.FDeriv.Add
@@ -14,6 +9,8 @@ import Mathlib.Analysis.Calculus.FDeriv.Mul
import Mathlib.Analysis.Calculus.FDeriv.Equiv
import Mathlib.Analysis.Calculus.FDeriv.RestrictScalars
+#align_import analysis.calculus.conformal.normed_space from "leanprover-community/mathlib"@"e3fb84046afd187b710170887195d50bada934ee"
+
/-!
# Conformal Maps
The unported dependencies are
algebra.order.module
init.core
algebra.order.monoid.cancel.defs
algebra.abs
algebra.group_power.lemmas
init.data.list.basic
algebra.order.monoid.cancel.basic
init.data.list.default
topology.subset_properties
init.logic
The following 1 dependencies have changed in mathlib3 since they were ported, which may complicate porting this file