Documentation

Mathlib.Analysis.Calculus.Implicit

Implicit function theorem #

We prove three versions of the implicit function theorem. First we define a structure ImplicitFunctionData that holds arguments for the most general version of the implicit function theorem, see ImplicitFunctionData.implicitFunction and ImplicitFunctionData.implicitFunction_hasStrictFDerivAt. This version allows a user to choose a specific implicit function but provides only a little convenience over the inverse function theorem.

Then we define HasStrictFDerivAt.implicitFunctionDataOfComplemented: implicit function defined by f (g z y) = z, where f : E โ†’ F is a function strictly differentiable at a such that its derivative f' is surjective and has a complemented kernel.

Finally, if the codomain of f is a finite dimensional space, then we can automatically prove that the kernel of f' is complemented, hence the only assumptions are HasStrictFDerivAt and f'.range = โŠค. This version is named HasStrictFDerivAt.implicitFunction.

TODO #

Tags #

implicit function, inverse function

General version #

Consider two functions f : E โ†’ F and g : E โ†’ G and a point a such that

Note that the map x โ†ฆ (f x, g x) has a bijective derivative, hence it is a partial homeomorphism between E and F ร— G. We use this fact to define a function ฯ† : F โ†’ G โ†’ E (see ImplicitFunctionData.implicitFunction) such that for (y, z) close enough to (f a, g a) we have f (ฯ† y z) = y and g (ฯ† y z) = z.

We also prove a formula for $$\frac{\partial\varphi}{\partial z}.$$

Though this statement is almost symmetric with respect to F, G, we interpret it in the following way. Consider a family of surfaces {x | f x = y}, y โˆˆ ๐“ (f a). Each of these surfaces is parametrized by ฯ† y.

There are many ways to choose a (differentiable) function ฯ† such that f (ฯ† y z) = y but the extra condition g (ฯ† y z) = z allows a user to select one of these functions. If we imagine that the level surfaces f = const form a local horizontal foliation, then the choice of g fixes a transverse foliation g = const, and ฯ† is the inverse function of the projection of {x | f x = y} along this transverse foliation.

This version of the theorem is used to prove the other versions and can be used if a user needs to have a complete control over the choice of the implicit function.

structure ImplicitFunctionData (๐•œ : Type u_1) [NontriviallyNormedField ๐•œ] (E : Type u_2) [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] (F : Type u_3) [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] (G : Type u_4) [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] :
Type (max (max u_2 u_3) u_4)

Data for the general version of the implicit function theorem. It holds two functions f : E โ†’ F and g : E โ†’ G (named leftFun and rightFun) and a point a (named pt) such that

  • both functions are strictly differentiable at a;
  • the derivatives are surjective;
  • the kernels of the derivatives are complementary subspaces of E.
Instances For
    def ImplicitFunctionData.prodFun {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) (x : E) :
    F ร— G

    The function given by x โ†ฆ (leftFun x, rightFun x).

    Equations
    • ฯ†.prodFun x = (ฯ†.leftFun x, ฯ†.rightFun x)
    Instances For
      @[simp]
      theorem ImplicitFunctionData.prodFun_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) (x : E) :
      ฯ†.prodFun x = (ฯ†.leftFun x, ฯ†.rightFun x)
      theorem ImplicitFunctionData.hasStrictFDerivAt {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
      HasStrictFDerivAt ฯ†.prodFun (โ†‘(ฯ†.leftDeriv.equivProdOfSurjectiveOfIsCompl ฯ†.rightDeriv โ‹ฏ โ‹ฏ โ‹ฏ)) ฯ†.pt
      def ImplicitFunctionData.toPartialHomeomorph {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :

      Implicit function theorem. If f : E โ†’ F and g : E โ†’ G are two maps strictly differentiable at a, their derivatives f', g' are surjective, and the kernels of these derivatives are complementary subspaces of E, then x โ†ฆ (f x, g x) defines a partial homeomorphism between E and F ร— G. In particular, {x | f x = f a} is locally homeomorphic to G.

      Equations
      Instances For
        def ImplicitFunctionData.implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
        F โ†’ G โ†’ E

        Implicit function theorem. If f : E โ†’ F and g : E โ†’ G are two maps strictly differentiable at a, their derivatives f', g' are surjective, and the kernels of these derivatives are complementary subspaces of E, then implicitFunction is the unique (germ of a) map ฯ† : F โ†’ G โ†’ E such that f (ฯ† y z) = y and g (ฯ† y z) = z.

        Equations
        • ฯ†.implicitFunction = Function.curry โ†‘ฯ†.toPartialHomeomorph.symm
        Instances For
          @[simp]
          theorem ImplicitFunctionData.toPartialHomeomorph_coe {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          โ†‘ฯ†.toPartialHomeomorph = ฯ†.prodFun
          theorem ImplicitFunctionData.toPartialHomeomorph_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) (x : E) :
          โ†‘ฯ†.toPartialHomeomorph x = (ฯ†.leftFun x, ฯ†.rightFun x)
          theorem ImplicitFunctionData.pt_mem_toPartialHomeomorph_source {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          ฯ†.pt โˆˆ ฯ†.toPartialHomeomorph.source
          theorem ImplicitFunctionData.map_pt_mem_toPartialHomeomorph_target {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          (ฯ†.leftFun ฯ†.pt, ฯ†.rightFun ฯ†.pt) โˆˆ ฯ†.toPartialHomeomorph.target
          theorem ImplicitFunctionData.prod_map_implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          โˆ€แถ  (p : F ร— G) in nhds (ฯ†.prodFun ฯ†.pt), ฯ†.prodFun (ฯ†.implicitFunction p.1 p.2) = p
          theorem ImplicitFunctionData.left_map_implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          โˆ€แถ  (p : F ร— G) in nhds (ฯ†.prodFun ฯ†.pt), ฯ†.leftFun (ฯ†.implicitFunction p.1 p.2) = p.1
          theorem ImplicitFunctionData.right_map_implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          โˆ€แถ  (p : F ร— G) in nhds (ฯ†.prodFun ฯ†.pt), ฯ†.rightFun (ฯ†.implicitFunction p.1 p.2) = p.2
          theorem ImplicitFunctionData.implicitFunction_apply_image {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          โˆ€แถ  (x : E) in nhds ฯ†.pt, ฯ†.implicitFunction (ฯ†.leftFun x) (ฯ†.rightFun x) = x
          theorem ImplicitFunctionData.map_nhds_eq {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) :
          Filter.map ฯ†.leftFun (nhds ฯ†.pt) = nhds (ฯ†.leftFun ฯ†.pt)
          theorem ImplicitFunctionData.implicitFunction_hasStrictFDerivAt {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {G : Type u_4} [NormedAddCommGroup G] [NormedSpace ๐•œ G] [CompleteSpace G] (ฯ† : ImplicitFunctionData ๐•œ E F G) (g'inv : G โ†’L[๐•œ] E) (hg'inv : ฯ†.rightDeriv.comp g'inv = ContinuousLinearMap.id ๐•œ G) (hg'invf : ฯ†.leftDeriv.comp g'inv = 0) :
          HasStrictFDerivAt (ฯ†.implicitFunction (ฯ†.leftFun ฯ†.pt)) g'inv (ฯ†.rightFun ฯ†.pt)

          Case of a complemented kernel #

          In this section we prove the following version of the implicit function theorem. Consider a map f : E โ†’ F and a point a : E such that f is strictly differentiable at a, its derivative f' is surjective and the kernel of f' is a complemented subspace of E (i.e., it has a closed complementary subspace). Then there exists a function ฯ† : F โ†’ ker f' โ†’ E such that for (y, z) close to (f a, 0) we have f (ฯ† y z) = y and the derivative of ฯ† (f a) at zero is the embedding ker f' โ†’ E.

          Note that a map with these properties is not unique. E.g., different choices of a subspace complementary to ker f' lead to different maps ฯ†.

          def HasStrictFDerivAt.implicitFunctionDataOfComplemented {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] (f : E โ†’ F) (f' : E โ†’L[๐•œ] F) {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
          ImplicitFunctionData ๐•œ E F โ†ฅ(LinearMap.ker f')

          Data used to apply the generic implicit function theorem to the case of a strictly differentiable map such that its derivative is surjective and has a complemented kernel.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            def HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] (f : E โ†’ F) (f' : E โ†’L[๐•œ] F) {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :

            A partial homeomorphism between E and F ร— f'.ker sending level surfaces of f to vertical subspaces.

            Equations
            Instances For
              def HasStrictFDerivAt.implicitFunctionOfComplemented {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] (f : E โ†’ F) (f' : E โ†’L[๐•œ] F) {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
              F โ†’ โ†ฅ(LinearMap.ker f') โ†’ E

              Implicit function g defined by f (g z y) = z.

              Equations
              Instances For
                @[simp]
                theorem HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented_fst {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) (x : E) :
                theorem HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented_apply {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) (y : E) :
                @[simp]
                theorem HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented_apply_ker {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) (y : โ†ฅ(LinearMap.ker f')) :
                โ†‘(HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented f f' hf hf' hker) (โ†‘y + a) = (f (โ†‘y + a), y)
                @[simp]
                theorem HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented_self {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
                theorem HasStrictFDerivAt.mem_implicitToPartialHomeomorphOfComplemented_source {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
                theorem HasStrictFDerivAt.mem_implicitToPartialHomeomorphOfComplemented_target {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
                theorem HasStrictFDerivAt.map_implicitFunctionOfComplemented_eq {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
                โˆ€แถ  (p : F ร— โ†ฅ(LinearMap.ker f')) in nhds (f a, 0), f (HasStrictFDerivAt.implicitFunctionOfComplemented f f' hf hf' hker p.1 p.2) = p.1

                HasStrictFDerivAt.implicitFunctionOfComplemented sends (z, y) to a point in f โปยน' z.

                theorem HasStrictFDerivAt.eq_implicitFunctionOfComplemented {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
                โˆ€แถ  (x : E) in nhds a, HasStrictFDerivAt.implicitFunctionOfComplemented f f' hf hf' hker (f x) (โ†‘(HasStrictFDerivAt.implicitToPartialHomeomorphOfComplemented f f' hf hf' hker) x).2 = x

                Any point in some neighborhood of a can be represented as HasStrictFDerivAt.implicitFunctionOfComplemented of some point.

                @[simp]
                theorem HasStrictFDerivAt.implicitFunctionOfComplemented_apply_image {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :
                theorem HasStrictFDerivAt.to_implicitFunctionOfComplemented {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [CompleteSpace F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (hker : (LinearMap.ker f').ClosedComplemented) :

                Finite dimensional case #

                In this section we prove the following version of the implicit function theorem. Consider a map f : E โ†’ F from a Banach normed space to a finite dimensional space. Take a point a : E such that f is strictly differentiable at a and its derivative f' is surjective. Then there exists a function ฯ† : F โ†’ ker f' โ†’ E such that for (y, z) close to (f a, 0) we have f (ฯ† y z) = y and the derivative of ฯ† (f a) at zero is the embedding ker f' โ†’ E.

                This version deduces that ker f' is a complemented subspace from the fact that F is a finite dimensional space, then applies the previous version.

                Note that a map with these properties is not unique. E.g., different choices of a subspace complementary to ker f' lead to different maps ฯ†.

                def HasStrictFDerivAt.implicitToPartialHomeomorph {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] (f : E โ†’ F) (f' : E โ†’L[๐•œ] F) {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :

                Given a map f : E โ†’ F to a finite dimensional space with a surjective derivative f', returns a partial homeomorphism between E and F ร— ker f'.

                Equations
                Instances For
                  def HasStrictFDerivAt.implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] (f : E โ†’ F) (f' : E โ†’L[๐•œ] F) {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                  F โ†’ โ†ฅ(LinearMap.ker f') โ†’ E

                  Implicit function g defined by f (g z y) = z.

                  Equations
                  Instances For
                    @[simp]
                    theorem HasStrictFDerivAt.implicitToPartialHomeomorph_fst {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (x : E) :
                    (โ†‘(HasStrictFDerivAt.implicitToPartialHomeomorph f f' hf hf') x).1 = f x
                    @[simp]
                    theorem HasStrictFDerivAt.implicitToPartialHomeomorph_apply_ker {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) (y : โ†ฅ(LinearMap.ker f')) :
                    โ†‘(HasStrictFDerivAt.implicitToPartialHomeomorph f f' hf hf') (โ†‘y + a) = (f (โ†‘y + a), y)
                    @[simp]
                    theorem HasStrictFDerivAt.implicitToPartialHomeomorph_self {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                    โ†‘(HasStrictFDerivAt.implicitToPartialHomeomorph f f' hf hf') a = (f a, 0)
                    theorem HasStrictFDerivAt.mem_implicitToPartialHomeomorph_source {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                    theorem HasStrictFDerivAt.mem_implicitToPartialHomeomorph_target {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                    theorem HasStrictFDerivAt.tendsto_implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) {ฮฑ : Type u_4} {l : Filter ฮฑ} {gโ‚ : ฮฑ โ†’ F} {gโ‚‚ : ฮฑ โ†’ โ†ฅ(LinearMap.ker f')} (hโ‚ : Filter.Tendsto gโ‚ l (nhds (f a))) (hโ‚‚ : Filter.Tendsto gโ‚‚ l (nhds 0)) :
                    Filter.Tendsto (fun (t : ฮฑ) => HasStrictFDerivAt.implicitFunction f f' hf hf' (gโ‚ t) (gโ‚‚ t)) l (nhds a)
                    theorem Filter.Tendsto.implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) {ฮฑ : Type u_4} {l : Filter ฮฑ} {gโ‚ : ฮฑ โ†’ F} {gโ‚‚ : ฮฑ โ†’ โ†ฅ(LinearMap.ker f')} (hโ‚ : Filter.Tendsto gโ‚ l (nhds (f a))) (hโ‚‚ : Filter.Tendsto gโ‚‚ l (nhds 0)) :
                    Filter.Tendsto (fun (t : ฮฑ) => HasStrictFDerivAt.implicitFunction f f' hf hf' (gโ‚ t) (gโ‚‚ t)) l (nhds a)

                    Alias of HasStrictFDerivAt.tendsto_implicitFunction.

                    theorem HasStrictFDerivAt.map_implicitFunction_eq {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                    โˆ€แถ  (p : F ร— โ†ฅ(LinearMap.ker f')) in nhds (f a, 0), f (HasStrictFDerivAt.implicitFunction f f' hf hf' p.1 p.2) = p.1

                    HasStrictFDerivAt.implicitFunction sends (z, y) to a point in f โปยน' z.

                    @[simp]
                    theorem HasStrictFDerivAt.implicitFunction_apply_image {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                    theorem HasStrictFDerivAt.eq_implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :
                    โˆ€แถ  (x : E) in nhds a, HasStrictFDerivAt.implicitFunction f f' hf hf' (f x) (โ†‘(HasStrictFDerivAt.implicitToPartialHomeomorph f f' hf hf') x).2 = x

                    Any point in some neighborhood of a can be represented as HasStrictFDerivAt.implicitFunction of some point.

                    theorem HasStrictFDerivAt.to_implicitFunction {๐•œ : Type u_1} [NontriviallyNormedField ๐•œ] [CompleteSpace ๐•œ] {E : Type u_2} [NormedAddCommGroup E] [NormedSpace ๐•œ E] [CompleteSpace E] {F : Type u_3} [NormedAddCommGroup F] [NormedSpace ๐•œ F] [FiniteDimensional ๐•œ F] {f : E โ†’ F} {f' : E โ†’L[๐•œ] F} {a : E} (hf : HasStrictFDerivAt f f' a) (hf' : LinearMap.range f' = โŠค) :