Documentation

SphereEversion.Loops.Basic

Basic definitions and properties of loops #

Definition and periodicity lemmas #

structure Loop (X : Type u_2) :
Type u_2

A loop is a function with domain and is periodic with period 1.

  • toFun : X
  • per' (t : ) : self (t + 1) = self t
Instances For
    instance instCoeFunLoopForallReal (X : Type u_2) :
    CoeFun (Loop X) fun (x : Loop X) => X
    Equations
    instance hasUncurryLoop (X : Type u_2) {α : Type u_9} :
    Function.HasUncurry (αLoop X) (α × ) X

    Any function φ : α → loop X can be seen as a function α × ℝ → X.

    Equations
    @[simp]
    theorem Loop.coe_mk {X : Type u_2} {γ : X} (h : ∀ (t : ), γ (t + 1) = γ t) :
    { toFun := γ, per' := h } = γ
    theorem Loop.ext {X : Type u_2} {γ₁ γ₂ : Loop X} :
    γ₁ = γ₂γ₁ = γ₂
    def Loop.const {X : Type u_2} (f : X) :

    The constant loop.

    Equations
    Instances For
      @[simp]
      theorem Loop.const_apply {X : Type u_2} (f : X) (x✝ : ) :
      (const f) x✝ = f
      instance Loop.Zero {X : Type u_2} [_root_.Zero X] :
      Equations
      @[simp]
      theorem Loop.zero_fun {X : Type u_2} [_root_.Zero X] :
      0 = 0
      @[simp]
      theorem Loop.const_zero {X : Type u_2} [_root_.Zero X] :
      const 0 = 0
      instance Loop.instInhabited {X : Type u_2} [Inhabited X] :
      Equations
      theorem Loop.per {X : Type u_2} (γ : Loop X) (t : ) :
      γ (t + 1) = γ t

      Periodicity of loops restated in terms of the function coercion.

      theorem Loop.periodic {X : Type u_2} (γ : Loop X) :
      theorem Loop.one {X : Type u_2} (γ : Loop X) :
      γ 1 = γ 0
      theorem Loop.add_nat_eq {X : Type u_2} (γ : Loop X) (t : ) (n : ) :
      γ (t + n) = γ t
      theorem Loop.add_int_eq {X : Type u_2} (γ : Loop X) (t : ) (n : ) :
      γ (t + n) = γ t
      theorem Loop.fract_eq {X : Type u_2} (γ : Loop X) (t : ) :
      γ (Int.fract t) = γ t
      theorem Loop.range_eq_image {X : Type u_2} (γ : Loop X) :
      def Loop.transform {X : Type u_2} {X' : Type u_3} (γ : Loop X) (f : XX') :
      Loop X'

      Transforming a loop by applying function f.

      Equations
      • γ.transform f = { toFun := fun (t : ) => f (γ t), per' := }
      Instances For
        @[simp]
        theorem Loop.transform_apply {X : Type u_2} {X' : Type u_3} (γ : Loop X) (f : XX') (t : ) :
        (γ.transform f) t = f (γ t)
        instance Loop.Add {X : Type u_2} [_root_.Add X] :

        Adding two loops pointwise.

        Equations
        • Loop.Add = { add := fun (γ₁ γ₂ : Loop X) => { toFun := fun (t : ) => γ₁ t + γ₂ t, per' := } }
        @[simp]
        theorem Loop.Add_add_apply {X : Type u_2} [_root_.Add X] (γ₁ γ₂ : Loop X) (t : ) :
        ↑(γ₁ + γ₂) t = γ₁ t + γ₂ t
        instance Loop.Neg {X : Type u_2} [_root_.Neg X] :
        Equations
        • Loop.Neg = { neg := fun (γ : Loop X) => { toFun := fun (t : ) => -γ t, per' := } }
        @[simp]
        theorem Loop.Neg_neg_apply {X : Type u_2} [_root_.Neg X] (γ : Loop X) (t : ) :
        ↑(-γ) t = -γ t
        instance Loop.instVAddOfAdd {X : Type u_2} [_root_.Add X] :
        VAdd X (Loop X)

        Shifting a loop, or equivalently, adding a constant value to a loop.

        Equations
        @[simp]
        theorem Loop.vadd_apply {X : Type u_2} [_root_.Add X] {x : X} {γ : Loop X} {t : } :
        ↑(x +ᵥ γ) t = x + γ t
        instance Loop.instSMul {K : Type u_1} {X : Type u_2} [SMul K X] :
        SMul K (Loop X)

        Multiplying a loop by a scalar value.

        Equations
        instance Loop.instModule {K : Type u_1} {X : Type u_2} [Semiring K] [AddCommGroup X] [Module K X] :
        Module K (Loop X)
        Equations
        @[simp]
        theorem Loop.smul_apply {K : Type u_1} {X : Type u_2} [SMul K X] {k : K} {γ : Loop X} {t : } :
        ↑(k γ) t = k γ t
        def Loop.reparam {F : Type u_9} (γ : Loop F) (φ : EquivariantMap) :

        Reparametrizing loop γ using an equivariant map φ.

        Equations
        Instances For
          @[simp]
          theorem Loop.reparam_apply {F : Type u_9} (γ : Loop F) (φ : EquivariantMap) (a✝ : ) :
          (γ.reparam φ) a✝ = γ (φ.toFun a✝)

          Support of a loop family #

          def Loop.IsConst {X : Type u_2} (γ : Loop X) :

          A loop is constant if it takes the same value at every time. See also Loop.isConst_iff_forall_avg and Loop.isConst_iff_const_avg for characterizations in terms of average values.

          Equations
          Instances For
            theorem Loop.isConst_of_eq {X : Type u_2} {γ : Loop X} {f : X} (H : ∀ (t : ), γ t = f) :
            def Loop.support {X : Type u_2} {X' : Type u_3} [TopologicalSpace X] (γ : XLoop X') :
            Set X

            The support of a loop family is the closure of the set of parameters where the loop is not constant.

            Equations
            Instances For
              theorem Loop.not_mem_support {X : Type u_2} {X' : Type u_3} [TopologicalSpace X] {γ : XLoop X'} {x : X} (h : ∀ᶠ (y : X) in nhds x, (γ y).IsConst) :
              xsupport γ

              From paths to loops #

              noncomputable def Loop.ofPath {X : Type u_2} [TopologicalSpace X] {x : X} (γ : Path x x) :

              Turn a path into a loop.

              Equations
              Instances For
                @[simp]
                theorem Loop.ofPath_apply {X : Type u_2} [TopologicalSpace X] {x : X} (γ : Path x x) (t : ) :
                (ofPath γ) t = γ.extend (Int.fract t)
                @[simp]
                theorem Loop.range_ofPath {X : Type u_2} [TopologicalSpace X] {x : X} (γ : Path x x) :
                Set.range (ofPath γ) = Set.range γ
                theorem Continuous.ofPath {X : Type u_2} {Y : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] (x : XY) (t : X) (γ : (i : X) → Path (x i) (x i)) ( : Continuous γ) (ht : Continuous t) :
                Continuous fun (i : X) => (Loop.ofPath (γ i)) (t i)

                Loop.ofPath is continuous, general version.

                theorem Loop.ofPath_continuous_family {X : Type u_2} {Y : Type u_4} [TopologicalSpace X] [TopologicalSpace Y] {x : Y} (γ : XPath x x) (h : Continuous γ) :
                Continuous fun (s : X) => ofPath (γ s)

                Loop.ofPath is continuous, where the endpoints of γ are fixed. TODO: remove

                Round trips #

                def Loop.roundTrip {X : Type u_2} [TopologicalSpace X] {x y : X} (γ : Path x y) :

                The round-trip defined by γ is γ followed by γ⁻¹.

                Equations
                Instances For
                  theorem Loop.roundTrip_range {X : Type u_2} [TopologicalSpace X] {x y : X} {γ : Path x y} :
                  theorem Loop.roundTrip_based_at {X : Type u_2} [TopologicalSpace X] {x y : X} {γ : Path x y} :
                  (roundTrip γ) 0 = x
                  theorem Loop.roundTrip_eq {X : Type u_2} [TopologicalSpace X] {x y x' y' : X} {γ : Path x y} {γ' : Path x' y'} (h : ∀ (s : unitInterval), γ s = γ' s) :
                  noncomputable def Loop.roundTripFamily {X : Type u_2} [TopologicalSpace X] {x y : X} (γ : Path x y) :
                  Loop X

                  The round trip loop family associated to a path γ. For each parameter t, the loop roundTripFamily γ t backtracks at γ t.

                  Equations
                  Instances For
                    theorem Loop.roundTripFamily_based_at {X : Type u_2} [TopologicalSpace X] {x y : X} {γ : Path x y} (t : ) :
                    (roundTripFamily γ t) 0 = x
                    theorem Loop.roundTripFamily_zero {X : Type u_2} [TopologicalSpace X] {x y : X} {γ : Path x y} :
                    theorem Loop.roundTripFamily_one {X : Type u_2} [TopologicalSpace X] {x y : X} {γ : Path x y} :

                    Average value of a loop #

                    noncomputable def Loop.average {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] (γ : Loop F) :
                    F

                    The average value of a loop.

                    Equations
                    Instances For
                      @[simp]
                      theorem Loop.isConst_iff_forall_avg {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] [CompleteSpace F] {γ : Loop F} :
                      γ.IsConst ∀ (t : ), γ t = γ.average
                      @[simp]
                      @[simp]
                      theorem Loop.average_add {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {γ₁ γ₂ : Loop F} (hγ₁ : IntervalIntegrable (↑γ₁) MeasureTheory.volume 0 1) (hγ₂ : IntervalIntegrable (↑γ₂) MeasureTheory.volume 0 1) :
                      (γ₁ + γ₂).average = γ₁.average + γ₂.average
                      @[simp]
                      theorem Loop.average_smul {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {γ : Loop F} {c : } :
                      (c γ).average = c γ.average
                      theorem Loop.isConst_of_not_mem_support {X : Type u_2} {F : Type u_7} [TopologicalSpace X] {γ : XLoop F} {x : X} (hx : xsupport γ) :
                      (γ x).IsConst
                      theorem Loop.continuous_average {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {E : Type u_9} [TopologicalSpace E] [FirstCountableTopology E] [LocallyCompactSpace E] {γ : ELoop F} (hγ_cont : Continuous γ) :
                      Continuous fun (x : E) => (γ x).average
                      def Loop.normalize {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] (γ : Loop F) :

                      The normalization of a loop γ is the loop γ - γ.average.

                      Equations
                      Instances For
                        @[simp]
                        theorem Loop.normalize_apply {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] (γ : Loop F) (t : ) :
                        γ.normalize t = γ t - γ.average
                        @[simp]

                        Differentiation of loop families #

                        def Loop.diff {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] (γ : ELoop F) (e : E) :

                        Differential of a loop family with respect to the parameter.

                        Equations
                        Instances For
                          @[simp]
                          theorem Loop.diff_apply {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] (γ : ELoop F) (e : E) (t : ) :
                          (diff γ e) t = partialFDerivFst (fun (e : E) (t : ) => (γ e) t) e t
                          theorem Loop.continuous_diff {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {γ : ELoop F} (h : 𝒞 1 γ) :
                          theorem ContDiff.partial_loop {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {γ : ELoop F} {n : ℕ∞} (hγ_diff : 𝒞 n γ) (t : ) :
                          𝒞 n fun (e : E) => (γ e) t
                          theorem Loop.average_diff {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] [FiniteDimensional F] [FiniteDimensional E] {γ : ELoop F} (hγ_diff : 𝒞 1 γ) (e : E) :
                          (diff γ e).average = D (fun (e : E) => (γ e).average) e
                          theorem ContDiff.loop_average {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] [FiniteDimensional F] [FiniteDimensional E] {γ : ELoop F} {n : ℕ∞} (hγ_diff : 𝒞 n γ) :
                          𝒞 n fun (e : E) => (γ e).average
                          theorem Loop.diff_normalize {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] [FiniteDimensional F] [FiniteDimensional E] {γ : ELoop F} (hγ_diff : 𝒞 1 γ) (e : E) :
                          (diff γ e).normalize = diff (fun (e : E) => (γ e).normalize) e
                          theorem contDiff_average {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {γ : ELoop F} [FiniteDimensional F] [FiniteDimensional E] {n : ℕ∞} (hγ_diff : 𝒞 n γ) :
                          𝒞 n fun (x : E) => (γ x).average
                          theorem contDiff_sub_average {E : Type u_6} [NormedAddCommGroup E] [NormedSpace E] {F : Type u_7} [NormedAddCommGroup F] [NormedSpace F] {γ : ELoop F} [FiniteDimensional F] [FiniteDimensional E] {n : ℕ∞} (hγ_diff : 𝒞 n γ) :
                          𝒞 n fun (x : E) (t : ) => (γ x) t - (γ x).average