Documentation

TauCeti.Geometry.Manifold.DifferentialForm.LocalPrimitive

Local primitives of closed 1-forms and their covering space #

A function g is a primitive of a 1-form φ on an open set U (TauCeti.IsPrimitiveOn) when it is differentiable there with d g = φ. By the Poincaré lemma (TauCeti.exists_mextDeriv_eq_nhds) a closed C^r 1-form (1 ≤ r) has a C^r primitive near every point (TauCeti.exists_contMDiff_isPrimitiveOn), and two primitives on a common open set differ by a locally constant function.

Pairs (x, a) of a point and a value, with the topology generated by the graphs {(y, g y) | y ∈ U} of the primitives g of φ on open sets U, make up the space TauCeti.PrimitiveSpace φ. For closed φ the projection to the point is a covering map (TauCeti.PrimitiveSpace.isCoveringMap_proj): over an open set carrying a primitive g, the sheets are the graphs of the translates g + c. Translating the value is a continuous map of this space over M (TauCeti.PrimitiveSpace.translate).

This covering space is the integration theory of closed 1-forms along continuous paths: a lift of a path is a primitive of the form along the path, and its monodromy is the integral. It gives the exactness of closed 1-forms on simply connected manifolds and the period homomorphism of a closed 1-form on the fundamental group.

Main declarations #

References #

Local primitives #

structure TauCeti.IsPrimitiveOn {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] (φ : RoughForm I M F 1) (g : M → F) (U : Set M) :

g is a primitive of the 1-form φ on the open set U: it is differentiable on U and its differential agrees with φ there.

Instances For
    theorem TauCeti.isPrimitiveOn_univ_of_mextDeriv_eq {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} (hg : MDiff g) (h : mextDeriv (RoughForm.ofFunction I g) = φ) :

    A differentiable function whose differential is φ is a primitive of φ on the whole space.

    theorem TauCeti.IsPrimitiveOn.mono {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} {U V : Set M} (hg : IsPrimitiveOn φ g U) (hV : IsOpen V) (hVU : V ⊆ U) :
    theorem TauCeti.IsPrimitiveOn.add_const {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} {U : Set M} (hg : IsPrimitiveOn φ g U) (c : F) :
    IsPrimitiveOn φ (fun (y : M) => g y + c) U
    theorem TauCeti.IsPrimitiveOn.add {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ ψ : RoughForm I M F 1} {g h : M → F} {U V : Set M} (hg : IsPrimitiveOn φ g U) (hh : IsPrimitiveOn ψ h V) :
    IsPrimitiveOn (φ + ψ) (g + h) (U ∩ V)

    The sum of primitives of φ and ψ is a primitive of φ + ψ on the intersection.

    theorem TauCeti.IsPrimitiveOn.const_smul {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} {U : Set M} (hg : IsPrimitiveOn φ g U) (c : ℝ) :
    IsPrimitiveOn (c • φ) (c • g) U

    A scalar multiple of a primitive of φ is a primitive of the scalar multiple of φ.

    theorem TauCeti.IsPrimitiveOn.inChartAt_eventuallyEq_fderiv {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {U : Set M} [I.Boundaryless] [IsManifold I 1 M] {α : RoughForm I M F 1} {f : M → F} {x : M} (hf : IsPrimitiveOn α f U) (hx : x ∈ U) :
    α.inChartAt x =ᶠ[nhds (↑(extChartAt I x) x)] fun (z : E) => (ContinuousAlternatingMap.ofSubsingleton ℝ E F 0) (fderiv ℝ (f ∘ ↑(extChartAt I x).symm) z)

    Near a point of its domain, the chart expression of a locally exact one-form is the ordinary derivative of its local primitive, read as an alternating map of one vector.

    theorem TauCeti.IsPrimitiveOn.hasFDerivAt_inChartAt {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {U : Set M} [I.Boundaryless] [IsManifold I 1 M] {α : RoughForm I M F 1} {f : M → F} {x : M} (hf : IsPrimitiveOn α f U) (hx : x ∈ U) (hf₂ : ContMDiffAt I (modelWithCornersSelf ℝ F) 2 f x) :

    The derivative of a locally exact one-form in a preferred chart is the second derivative of its primitive, followed by the identification of linear maps with degree-one alternating maps. No critical-point assumption is needed for this coordinate formula.

    theorem TauCeti.IsPrimitiveOn.mpullback_of_mdifferentiableOn {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {E' : Type u_5} {H' : Type u_6} {M' : Type u_7} [NormedAddCommGroup E'] [NormedSpace ℝ E'] [TopologicalSpace H'] {I' : ModelWithCorners ℝ E' H'} [TopologicalSpace M'] [ChartedSpace H' M'] {θ : RoughForm I' M' F 1} {g : M' → F} {U : Set M'} (hg : IsPrimitiveOn θ g U) {f : M → M'} {W : Set M} (hW : IsOpen W) (hf : MDiff[W] f) :
    IsPrimitiveOn (TauCeti.mpullback I I' f θ) (g ∘ f) (W ∩ f ⁻¹' U)

    Composing a primitive g of θ on U with a map f that is differentiable on an open set W gives a primitive of the pullback of θ along f on W ∩ f ⁻¹' U.

    theorem TauCeti.IsPrimitiveOn.mpullback {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {E' : Type u_5} {H' : Type u_6} {M' : Type u_7} [NormedAddCommGroup E'] [NormedSpace ℝ E'] [TopologicalSpace H'] {I' : ModelWithCorners ℝ E' H'} [TopologicalSpace M'] [ChartedSpace H' M'] {θ : RoughForm I' M' F 1} {g : M' → F} {U : Set M'} (hg : IsPrimitiveOn θ g U) {f : M → M'} (hf : MDiff f) :
    IsPrimitiveOn (TauCeti.mpullback I I' f θ) (g ∘ f) (f ⁻¹' U)

    Composing a primitive g of θ on U with a differentiable map f gives a primitive of the pullback of θ along f on the preimage of U.

    theorem IsLocalDiffeomorphAt.isPrimitiveOn_comp_localInverse {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {E' : Type u_5} {H' : Type u_6} {M' : Type u_7} [NormedAddCommGroup E'] [NormedSpace ℝ E'] [TopologicalSpace H'] {I' : ModelWithCorners ℝ E' H'} [TopologicalSpace M'] [ChartedSpace H' M'] {n : WithTop ℕ∞} {θ : TauCeti.RoughForm I' M' F 1} {π : M → M'} {x : M} (hπ : IsLocalDiffeomorphAt I I' n π x) (hn : n ≠ 0) {g : M → F} {V : Set M} (hg : TauCeti.IsPrimitiveOn (TauCeti.mpullback I I' π θ) g V) :

    Primitives descend along a local inverse. If π is a C^n local diffeomorphism at x (n ≠ 0) and g is a primitive of the pullback π^* θ on V, then g ∘ s is a primitive of θ on s.source ∩ s ⁻¹' V, for the local inverse s of π near x.

    theorem TauCeti.IsPrimitiveOn.isOpen_setOf_eq {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g h : M → F} {U V : Set M} [IsManifold I 1 M] (hg : IsPrimitiveOn φ g U) (hh : IsPrimitiveOn φ h V) :
    IsOpen {y : M | y ∈ U ∧ y ∈ V ∧ g y = h y}

    The set where two primitives of the same 1-form agree is open: their difference has zero differential, so it is locally constant.

    theorem TauCeti.IsPrimitiveOn.eventuallyEq_add_const {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g h : M → F} {U V : Set M} [IsManifold I 1 M] (hg : IsPrimitiveOn φ g U) (hh : IsPrimitiveOn φ h V) {x : M} (hxU : x ∈ U) (hxV : x ∈ V) :
    g =ᶠ[nhds x] fun (y : M) => h y + (g x - h x)

    Two primitives of the same one-form differ near a common point by their difference at that point. No connectedness of their domains is required.

    The covering space of local primitives #

    def TauCeti.PrimitiveSpace {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] (_φ : RoughForm I M F 1) :
    Type (max u_4 u_3)

    Pairs of a point and a value, with the topology generated by the graphs of the primitives of φ on open sets.

    Instances For
      noncomputable def TauCeti.PrimitiveSpace.proj {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] (φ : RoughForm I M F 1) (e : PrimitiveSpace φ) :
      M

      The point underlying an element of PrimitiveSpace φ.

      Instances For
        noncomputable def TauCeti.PrimitiveSpace.value {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] (φ : RoughForm I M F 1) (e : PrimitiveSpace φ) :
        F

        The value underlying an element of PrimitiveSpace φ.

        Instances For
          noncomputable def TauCeti.PrimitiveSpace.graph {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] (φ : RoughForm I M F 1) (g : M → F) (y : M) :

          The graph of a function, as a map into PrimitiveSpace φ.

          Instances For
            @[instance_reducible]
            @[simp]
            theorem TauCeti.PrimitiveSpace.proj_graph {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} (y : M) :
            proj φ (graph φ g y) = y
            @[simp]
            theorem TauCeti.PrimitiveSpace.value_graph {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} (y : M) :
            value φ (graph φ g y) = g y
            theorem TauCeti.PrimitiveSpace.ext {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {e e' : PrimitiveSpace φ} (hp : proj φ e = proj φ e') (hv : value φ e = value φ e') :
            e = e'

            Elements of PrimitiveSpace φ are determined by their point and value.

            theorem TauCeti.PrimitiveSpace.ext_iff {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {e e' : PrimitiveSpace φ} :
            e = e' ↔ proj φ e = proj φ e' ∧ value φ e = value φ e'
            theorem TauCeti.PrimitiveSpace.eq_graph {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} (e : PrimitiveSpace φ) :
            e = graph φ (fun (x : M) => value φ e) (proj φ e)

            Every element of PrimitiveSpace φ lies on the graph of the constant function at its value.

            theorem TauCeti.PrimitiveSpace.isOpen_image_graph {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} {U : Set M} (hg : IsPrimitiveOn φ g U) :
            IsOpen (graph φ g '' U)
            theorem TauCeti.PrimitiveSpace.continuousOn_graph {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} {U : Set M} [IsManifold I 1 M] (hg : IsPrimitiveOn φ g U) :

            The graph of a primitive on an open set is continuous there.

            theorem TauCeti.PrimitiveSpace.continuousAt_of_eventually_value_eq {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} {g : M → F} {U : Set M} [IsManifold I 1 M] {X : Type u_5} [TopologicalSpace X] {Γ : X → PrimitiveSpace φ} {t : X} (hΓ : ContinuousAt (fun (s : X) => proj φ (Γ s)) t) (hg : IsPrimitiveOn φ g U) (ht : proj φ (Γ t) ∈ U) (hval : ∀ᶠ (s : X) in nhds t, value φ (Γ s) = g (proj φ (Γ s))) :

            A map into PrimitiveSpace φ which, near a parameter t, runs along the graph of a primitive g on an open set containing the point at t, is continuous at t.

            noncomputable def TauCeti.PrimitiveSpace.translate {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] (φ : RoughForm I M F 1) (c : F) (e : PrimitiveSpace φ) :

            Translation of the value by c, as a map of PrimitiveSpace φ over M.

            Instances For
              @[simp]
              theorem TauCeti.PrimitiveSpace.proj_translate {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} (c : F) (e : PrimitiveSpace φ) :
              proj φ (translate φ c e) = proj φ e
              @[simp]
              theorem TauCeti.PrimitiveSpace.value_translate {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} (c : F) (e : PrimitiveSpace φ) :
              value φ (translate φ c e) = value φ e + c

              Translation of the value is continuous: it carries the graph of a primitive g to the graph of the primitive g + c.

              theorem TauCeti.exists_contMDiff_isPrimitiveOn {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} [FiniteDimensional ℝ E] [T2Space M] [IsManifold I (↑⊤) M] [CompleteSpace F] {r : ℕ∞} (hr : 1 ≤ r) (hφ : IsSmoothForm I (↑r) φ) (hclosed : mextDeriv φ = 0) (x : M) :
              ∃ (g : M → F), ContMDiff I (modelWithCornersSelf ℝ F) (↑r) g ∧ ∃ (U : Set M), x ∈ U ∧ IsPrimitiveOn φ g U

              By the Poincaré lemma, a closed C^r 1-form has a C^r primitive near every point.

              theorem TauCeti.PrimitiveSpace.isCoveringMap_proj {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} [FiniteDimensional ℝ E] [T2Space M] [IsManifold I (↑⊤) M] [CompleteSpace F] {r : ℕ∞} (hr : 1 ≤ r) (hφ : IsSmoothForm I (↑r) φ) (hclosed : mextDeriv φ = 0) :

              Projecting PrimitiveSpace φ to the point is a covering map when φ is closed. Over an open set U carrying a primitive g, the sheets are the graphs of the translates g + c.

              theorem TauCeti.PrimitiveSpace.exists_isPrimitiveOn_eventually_value_eq {E : Type u_1} {H : Type u_2} {M : Type u_3} {F : Type u_4} [NormedAddCommGroup E] [NormedSpace ℝ E] [TopologicalSpace H] {I : ModelWithCorners ℝ E H} [TopologicalSpace M] [ChartedSpace H M] [NormedAddCommGroup F] [NormedSpace ℝ F] {φ : RoughForm I M F 1} [FiniteDimensional ℝ E] [T2Space M] [IsManifold I (↑⊤) M] [CompleteSpace F] {r : ℕ∞} (hr : 1 ≤ r) (hφ : IsSmoothForm I (↑r) φ) (hclosed : mextDeriv φ = 0) {X : Type u_5} [TopologicalSpace X] {Γ : X → PrimitiveSpace φ} {t : X} (hΓ : ContinuousAt Γ t) :
              ∃ (g : M → F), ContMDiff I (modelWithCornersSelf ℝ F) (↑r) g ∧ ∃ (U : Set M), proj φ (Γ t) ∈ U ∧ IsPrimitiveOn φ g U ∧ ∃ (c : F), ∀ᶠ (s : X) in nhds t, proj φ (Γ s) ∈ U ∧ value φ (Γ s) = g (proj φ (Γ s)) + c

              Lifts run along local primitives. Near each parameter t, a continuous map Γ into PrimitiveSpace φ, for a closed C^r form φ (1 ≤ r), runs along the graph of a translate g + c of a C^r primitive g of φ on an open set U containing the point at t.