Documentation

TauCeti.RepresentationTheory.LSPath.Reparametrization

Parametrized piecewise-linear paths and reparametrization #

TauCeti.PLPath ๐•œ V models piecewise-linear paths up to reparametrization by reduced segment lists. This file compares that model with parametrized paths, that is with functions ๐•œ โ†’ V.

A timed presentation is a list of pairs (d, v) of a positive duration d and a segment v. Its parametrized path TauCeti.PLPath.evalTimed p starts at 0 at time 0 and runs along the segments in order, along v at constant velocity dโปยน โ€ข v during a time interval of length d; it is constant before time 0 and after the total duration TauCeti.PLPath.duration p. A timed presentation ฯ† in ๐•œ with nonnegative segments presents a nondecreasing piecewise-linear map from [0, duration ฯ†] onto [0, s], where s is the sum of its segments. So p is a reparametrization of q (TauCeti.PLPath.IsReparam p q) when evalTimed p = evalTimed q โˆ˜ evalTimed ฯ† for such a ฯ† running from [0, duration p] onto [0, duration q]; for presentations of duration 1 these are Littelmann's nondecreasing surjective piecewise-linear reparametrizations of [0, 1].

The main result is that the segment-list model is faithful: two timed presentations of positive duration present the same TauCeti.PLPath exactly when they are reparametrizations of a common timed presentation, which may be chosen of any prescribed positive duration. All constructions use only the field operations of ๐•œ, so over โ„š every subdivision time and every reparametrization stays rational.

Main definitions #

Main results #

References #

Timed presentations and their parametrized paths #

def TauCeti.PLPath.duration {๐•œ : Type u} {V : Type v} [AddMonoid ๐•œ] (p : List (๐•œ ร— V)) :
๐•œ

The total duration of a list of (duration, segment) pairs.

Instances For
    theorem TauCeti.PLPath.duration_def {๐•œ : Type u} {V : Type v} [AddMonoid ๐•œ] (p : List (๐•œ ร— V)) :
    @[simp]
    theorem TauCeti.PLPath.duration_nil {๐•œ : Type u} {V : Type v} [AddMonoid ๐•œ] :
    @[simp]
    theorem TauCeti.PLPath.duration_cons {๐•œ : Type u} {V : Type v} [AddMonoid ๐•œ] (x : ๐•œ ร— V) (p : List (๐•œ ร— V)) :
    duration (x :: p) = x.1 + duration p
    @[simp]
    theorem TauCeti.PLPath.duration_append {๐•œ : Type u} {V : Type v} [AddMonoid ๐•œ] (p q : List (๐•œ ร— V)) :
    theorem TauCeti.PLPath.duration_eq_fst_sum {๐•œ : Type u} {V : Type v} [AddMonoid ๐•œ] [AddMonoid V] (p : List (๐•œ ร— V)) :
    duration p = p.sum.1

    The total duration is the time coordinate of the sum of the (duration, segment) pairs.

    def TauCeti.PLPath.IsTimed {๐•œ : Type u} {V : Type v} [Zero ๐•œ] [LT ๐•œ] (p : List (๐•œ ร— V)) :

    A list of (duration, segment) pairs is a timed presentation when every duration is positive.

    Instances For
      theorem TauCeti.PLPath.isTimed_iff {๐•œ : Type u} {V : Type v} [Zero ๐•œ] [LT ๐•œ] {p : List (๐•œ ร— V)} :
      IsTimed p โ†” โˆ€ x โˆˆ p, 0 < x.1

      The characterization of timed presentations, for use outside this file.

      @[simp]
      theorem TauCeti.PLPath.isTimed_nil {๐•œ : Type u} {V : Type v} [Zero ๐•œ] [LT ๐•œ] :
      @[simp]
      theorem TauCeti.PLPath.isTimed_cons {๐•œ : Type u} {V : Type v} [Zero ๐•œ] [LT ๐•œ] {p : List (๐•œ ร— V)} {x : ๐•œ ร— V} :
      theorem TauCeti.PLPath.IsTimed.nonneg {๐•œ : Type u} {V : Type v} [Zero ๐•œ] [Preorder ๐•œ] {p : List (๐•œ ร— V)} (hp : IsTimed p) (x : ๐•œ ร— V) :
      x โˆˆ p โ†’ 0 โ‰ค x.1
      theorem TauCeti.PLPath.IsTimed.and_nonneg {๐•œ : Type u} {W : Type u_1} [Zero ๐•œ] [Preorder ๐•œ] [Zero W] [LE W] {p : List (๐•œ ร— W)} (hp : IsTimed p) (hp' : โˆ€ x โˆˆ p, 0 โ‰ค x.2) (x : ๐•œ ร— W) :
      x โˆˆ p โ†’ 0 โ‰ค x.1 โˆง 0 โ‰ค x.2

      A timed presentation with nonnegative segments has nonnegative durations and segments.

      def TauCeti.PLPath.reverseTimed {๐•œ : Type u} {V : Type v} [Neg V] (p : List (๐•œ ร— V)) :
      List (๐•œ ร— V)

      The reversal of a list of (duration, segment) pairs: the segments are negated and traversed in the opposite order, each in its own time. It presents the reversed path (TauCeti.PLPath.ofSegments_map_snd_reverseTimed).

      Instances For
        theorem TauCeti.PLPath.reverseTimed_def {๐•œ : Type u} {V : Type v} [Neg V] (p : List (๐•œ ร— V)) :
        reverseTimed p = (List.map (fun (z : ๐•œ ร— V) => (z.1, -z.2)) p).reverse
        @[simp]
        theorem TauCeti.PLPath.mem_reverseTimed {๐•œ : Type u} {V : Type v} [InvolutiveNeg V] {p : List (๐•œ ร— V)} {z : ๐•œ ร— V} :
        @[simp]
        theorem TauCeti.PLPath.reverseTimed_reverseTimed {๐•œ : Type u} {V : Type v} [InvolutiveNeg V] (p : List (๐•œ ร— V)) :
        @[simp]
        theorem TauCeti.PLPath.isTimed_reverseTimed {๐•œ : Type u} {V : Type v} [Zero ๐•œ] [LT ๐•œ] [Neg V] {p : List (๐•œ ร— V)} :
        @[simp]
        theorem TauCeti.PLPath.duration_reverseTimed {๐•œ : Type u} {V : Type v} [AddCommMonoid ๐•œ] [Neg V] (p : List (๐•œ ร— V)) :
        @[simp]
        theorem TauCeti.PLPath.ofSegments_map_snd_reverseTimed {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [AddCommGroup V] [Module ๐•œ V] (p : List (๐•œ ร— V)) :
        def TauCeti.PLPath.evalTimed {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] :
        List (๐•œ ร— V) โ†’ ๐•œ โ†’ V

        The parametrized path of a list of (duration, segment) pairs. At time t the first pair (d, v) contributes (max 0 (min t d) / d) โ€ข v, and the remaining pairs are run from time d on. For a timed presentation (TauCeti.PLPath.IsTimed p, every duration positive) this starts at 0 at time 0 and runs along each segment v in turn at constant velocity, during a time interval of length the duration d of v.

        Instances For
          @[simp]
          theorem TauCeti.PLPath.evalTimed_nil {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] (t : ๐•œ) :
          @[simp]
          theorem TauCeti.PLPath.evalTimed_cons {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] (d : ๐•œ) (v : V) (p : List (๐•œ ร— V)) (t : ๐•œ) :
          evalTimed ((d, v) :: p) t = (max 0 (min t d) / d) โ€ข v + evalTimed p (t - d)
          theorem TauCeti.PLPath.evalTimed_append {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] (p q : List (๐•œ ร— V)) (t : ๐•œ) :
          evalTimed (p ++ q) t = evalTimed p t + evalTimed q (t - duration p)

          The parametrized path of a concatenation runs through the first presentation and then, from its total duration on, through the second.

          theorem TauCeti.PLPath.evalTimed_eq_zero_of_forall {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] {p : List (๐•œ ร— V)} (h : โˆ€ x โˆˆ p, x.2 = 0) (t : ๐•œ) :
          evalTimed p t = 0

          Stationary segments do not move the parametrized path.

          theorem TauCeti.PLPath.duration_nonneg {๐•œ : Type u} {V : Type v} [AddCommMonoid ๐•œ] [PartialOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : List (๐•œ ร— V)} (hp : โˆ€ x โˆˆ p, 0 โ‰ค x.1) :
          theorem TauCeti.PLPath.IsTimed.duration_pos {๐•œ : Type u} {V : Type v} [AddCommMonoid ๐•œ] [PartialOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : List (๐•œ ร— V)} (hp : IsTimed p) (hne : p โ‰  []) :
          theorem TauCeti.PLPath.IsTimed.eq_nil_of_duration_nonpos {๐•œ : Type u} {V : Type v} [AddCommMonoid ๐•œ] [PartialOrder ๐•œ] [IsOrderedAddMonoid ๐•œ] {p : List (๐•œ ร— V)} (hp : IsTimed p) (h : duration p โ‰ค 0) :
          p = []

          A timed presentation of nonpositive duration is empty.

          theorem TauCeti.PLPath.evalTimed_cons_of_nonpos {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] {p : List (๐•œ ร— V)} {d t : ๐•œ} [AddCommGroup V] [Module ๐•œ V] {v : V} (ht : t โ‰ค 0) :
          evalTimed ((d, v) :: p) t = evalTimed p (t - d)

          Up to time 0, the first segment has not been started.

          theorem TauCeti.PLPath.evalTimed_cons_of_le {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] {p : List (๐•œ ร— V)} {d t : ๐•œ} [AddCommGroup V] [Module ๐•œ V] {v : V} (hd : 0 < d) (ht : d โ‰ค t) :
          evalTimed ((d, v) :: p) t = v + evalTimed p (t - d)

          From time d on, the first segment, of duration d, has been run entirely.

          theorem TauCeti.PLPath.evalTimed_of_nonpos {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} {t : ๐•œ} [AddCommGroup V] [Module ๐•œ V] (hp : โˆ€ x โˆˆ p, 0 โ‰ค x.1) (ht : t โ‰ค 0) :
          evalTimed p t = 0

          The parametrized path is 0 up to time 0.

          @[simp]
          theorem TauCeti.PLPath.evalTimed_zero {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : โˆ€ x โˆˆ p, 0 โ‰ค x.1) :
          evalTimed p 0 = 0
          theorem TauCeti.PLPath.evalTimed_of_duration_le {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} {t : ๐•œ} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) (ht : duration p โ‰ค t) :

          The parametrized path is constant at the sum of the segments after the total duration.

          theorem TauCeti.PLPath.evalTimed_duration {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) :

          The parametrized path of a timed presentation ends, at its total duration, at the endpoint of the path it presents.

          theorem TauCeti.PLPath.evalTimed_eq_evalTimed_cons_add_sub {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} {d : ๐•œ} [AddCommGroup V] [Module ๐•œ V] {v : V} (hd : 0 < d) {s : ๐•œ} (hs : 0 โ‰ค s) :
          evalTimed p s = evalTimed ((d, v) :: p) (s + d) - v

          After the first segment, the parametrized path of the remaining segments is that of the whole presentation, shifted back by the first duration and translated back by the first segment.

          Subdividing a segment #

          theorem TauCeti.PLPath.evalTimed_cons_eq_evalTimed_cons_cons {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [AddCommGroup V] [Module ๐•œ V] {v : V} {dโ‚ dโ‚‚ D : ๐•œ} {vโ‚ vโ‚‚ : V} (hโ‚ : 0 โ‰ค dโ‚) (hโ‚‚ : 0 โ‰ค dโ‚‚) (hD : dโ‚ + dโ‚‚ = D) (hvโ‚ : vโ‚ = (dโ‚ / D) โ€ข v) (hvโ‚‚ : vโ‚‚ = (dโ‚‚ / D) โ€ข v) (p : List (๐•œ ร— V)) (t : ๐•œ) :
          evalTimed ((D, v) :: p) t = evalTimed ((dโ‚, vโ‚) :: (dโ‚‚, vโ‚‚) :: p) t

          Subdividing a segment of duration D = dโ‚ + dโ‚‚ into its pieces of durations dโ‚ and dโ‚‚ does not change the parametrized path. The durations dโ‚ and dโ‚‚ may vanish.

          theorem TauCeti.PLPath.evalTimed_cons_eq_evalTimed_cons_cons_sub {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {d e : ๐•œ} [AddCommGroup V] [Module ๐•œ V] (hd : 0 โ‰ค d) (hde : d โ‰ค e) (w : V) (p : List (๐•œ ร— V)) (t : ๐•œ) :
          evalTimed ((e, w) :: p) t = evalTimed ((d, (d / e) โ€ข w) :: (e - d, ((e - d) / e) โ€ข w) :: p) t

          Subdividing a segment w of duration e at the time d, for 0 โ‰ค d โ‰ค e, into its pieces (d / e) โ€ข w of duration d and ((e - d) / e) โ€ข w of duration e - d does not change the parametrized path.

          Timed presentations in ๐•œ #

          theorem TauCeti.PLPath.evalTimed_nonneg {๐•œ : Type u} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {ฯ† : List (๐•œ ร— ๐•œ)} (hฯ† : โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.1 โˆง 0 โ‰ค x.2) (t : ๐•œ) :

          A timed presentation in ๐•œ with nonnegative segments has a nonnegative parametrized path.

          theorem TauCeti.PLPath.monotone_evalTimed {๐•œ : Type u} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {ฯ† : List (๐•œ ร— ๐•œ)} (hฯ† : โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.1 โˆง 0 โ‰ค x.2) :

          A timed presentation in ๐•œ with nonnegative segments has a nondecreasing parametrized path.

          theorem TauCeti.PLPath.exists_evalTimed_eq {๐•œ : Type u} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {ฯ† : List (๐•œ ร— ๐•œ)} (hฯ† : IsTimed ฯ†) {u : ๐•œ} (huโ‚€ : 0 โ‰ค u) (hu : u โ‰ค (List.map Prod.snd ฯ†).sum) :
          โˆƒ (t : ๐•œ), 0 โ‰ค t โˆง t โ‰ค duration ฯ† โˆง evalTimed ฯ† t = u

          Every u โˆˆ [0, s], where s is the sum of the segments of a timed presentation ฯ† in ๐•œ, is a value of evalTimed ฯ† on [0, duration ฯ†].

          Composing with a reparametrization #

          theorem TauCeti.PLPath.evalTimed_cons_comp {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q : List (๐•œ ร— V)} {d : ๐•œ} [AddCommGroup V] [Module ๐•œ V] {v : V} {d' : ๐•œ} {ฯ† : List (๐•œ ร— ๐•œ)} (hd : 0 < d) (hd' : 0 โ‰ค d') (hv : d' = 0 โ†’ v = 0) (hฯ† : โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.1 โˆง 0 โ‰ค x.2) (hq : โˆ€ x โˆˆ q, 0 โ‰ค x.1) (h : โˆ€ (t : ๐•œ), evalTimed p t = evalTimed q (evalTimed ฯ† t)) (t : ๐•œ) :
          evalTimed ((d, v) :: p) t = evalTimed ((d', v) :: q) (evalTimed ((d, d') :: ฯ†) t)

          Prepending a segment v, run during time d on the source side and during time d' on the target side, to a factorization evalTimed p = evalTimed q โˆ˜ evalTimed ฯ† gives a factorization through the timing (d, d') :: ฯ†. A zero target duration d' requires a stationary segment.

          Reparametrization #

          def TauCeti.PLPath.IsReparam {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] (p q : List (๐•œ ร— V)) :

          p is a reparametrization of q: there is a timed presentation ฯ† in ๐•œ with nonnegative segments, of duration duration p and with segments summing to duration q, such that evalTimed p = evalTimed q โˆ˜ evalTimed ฯ†. By TauCeti.PLPath.monotone_evalTimed and TauCeti.PLPath.exists_evalTimed_eq, evalTimed ฯ† is a nondecreasing piecewise-linear map from [0, duration p] onto [0, duration q]; outside [0, duration p] both sides of the factorization are constant.

          Instances For
            theorem TauCeti.PLPath.isReparam_iff {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] {p q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] :
            IsReparam p q โ†” โˆƒ (ฯ† : List (๐•œ ร— ๐•œ)), IsTimed ฯ† โˆง (โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.2) โˆง duration ฯ† = duration p โˆง (List.map Prod.snd ฯ†).sum = duration q โˆง โˆ€ (t : ๐•œ), evalTimed p t = evalTimed q (evalTimed ฯ† t)

            The characterization of reparametrizations by their timings, for use outside this file.

            theorem TauCeti.PLPath.isReparam_of_map_snd_eq {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) (hq : IsTimed q) (h : List.map Prod.snd p = List.map Prod.snd q) :

            Two timed presentations with the same segments are reparametrizations of each other.

            theorem TauCeti.PLPath.IsReparam.refl {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) :

            A timed presentation is a reparametrization of itself, through the identity timing.

            theorem TauCeti.PLPath.IsReparam.cons {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q : List (๐•œ ร— V)} {d : ๐•œ} [AddCommGroup V] [Module ๐•œ V] (h : IsReparam p q) (hd : 0 < d) (hq : โˆ€ x โˆˆ q, 0 โ‰ค x.1) (v : V) :
            IsReparam ((d, v) :: p) ((d, v) :: q)

            Prepending the same segment, run during the same time, preserves reparametrization.

            theorem TauCeti.PLPath.IsReparam.append {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] [AddCommGroup V] [Module ๐•œ V] {pโ‚ pโ‚‚ qโ‚ qโ‚‚ : List (๐•œ ร— V)} (hโ‚ : IsReparam pโ‚ qโ‚) (hโ‚‚ : IsReparam pโ‚‚ qโ‚‚) (hqโ‚ : IsTimed qโ‚) (hqโ‚‚ : โˆ€ x โˆˆ qโ‚‚, 0 โ‰ค x.1) :
            IsReparam (pโ‚ ++ pโ‚‚) (qโ‚ ++ qโ‚‚)

            Concatenating reparametrizations is a reparametrization: the timings concatenate.

            theorem TauCeti.PLPath.isReparam_cons_cons_add {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {r : List (๐•œ ร— V)} {d e : ๐•œ} [AddCommGroup V] [Module ๐•œ V] {v w : V} (hd : 0 < d) (he : 0 < e) (hvw : SameRay ๐•œ v w) (hr : IsTimed r) :
            IsReparam ((d, v) :: (e, w) :: r) ((d + e, v + w) :: r)

            Merging two adjacent segments pointing in the same direction, run during the sum of their durations, is a reparametrization.

            Composites of parametrized paths #

            @[irreducible]
            def TauCeti.PLPath.timedComp {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] :
            List (๐•œ ร— V) โ†’ List (๐•œ ร— ๐•œ) โ†’ List (๐•œ ร— V)

            A list of (duration, segment) pairs presenting the composite evalTimed q โˆ˜ evalTimed ฯ† of the parametrized path of q with a timing ฯ† in ๐•œ, when q and ฯ† are timed presentations and every segment of ฯ† is nonnegative (see TauCeti.PLPath.evalTimed_timedComp). It runs through the pieces of ฯ† in turn: a piece of ฯ† that ends before the current segment (e, w) of q does is run along the corresponding part of w, and a piece of ฯ† that ends after it is subdivided at the end of that segment.

            Instances For
              theorem TauCeti.PLPath.evalTimed_timedComp {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] {ฯ† : List (๐•œ ร— ๐•œ)} (hq : IsTimed q) (hฯ† : IsTimed ฯ†) (hฯ†' : โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.2) (t : ๐•œ) :
              evalTimed (timedComp q ฯ†) t = evalTimed q (evalTimed ฯ† t)

              TauCeti.PLPath.timedComp q ฯ† presents the composite evalTimed q โˆ˜ evalTimed ฯ†.

              theorem TauCeti.PLPath.isTimed_timedComp {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] {ฯ† : List (๐•œ ร— ๐•œ)} (hq : IsTimed q) (hฯ† : IsTimed ฯ†) :
              IsTimed (timedComp q ฯ†)
              @[simp]
              theorem TauCeti.PLPath.duration_timedComp {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [AddCommGroup V] [Module ๐•œ V] (q : List (๐•œ ร— V)) (ฯ† : List (๐•œ ร— ๐•œ)) :
              duration (timedComp q ฯ†) = duration ฯ†
              theorem TauCeti.PLPath.timedComp_snd_nonneg {๐•œ : Type u} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {q ฯ† : List (๐•œ ร— ๐•œ)} (hq' : โˆ€ x โˆˆ q, 0 โ‰ค x.2) (hฯ†' : โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.2) (x : ๐•œ ร— ๐•œ) :
              x โˆˆ timedComp q ฯ† โ†’ 0 โ‰ค x.2

              Composing a presentation in ๐•œ with nonnegative segments with a timing with nonnegative segments gives nonnegative segments again.

              theorem TauCeti.PLPath.ofSegments_map_snd_timedComp {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] {ฯ† : List (๐•œ ร— ๐•œ)} (hq : IsTimed q) (hฯ†' : โˆ€ x โˆˆ ฯ†, 0 โ‰ค x.2) (h : duration q โ‰ค (List.map Prod.snd ฯ†).sum) :
              ofSegments ๐•œ (List.map Prod.snd (timedComp q ฯ†)) = ofSegments ๐•œ (List.map Prod.snd q)

              When the timing ฯ† runs through all of q, the composite TauCeti.PLPath.timedComp q ฯ† presents the same TauCeti.PLPath as q.

              The parametrized path determines the presented path #

              theorem TauCeti.PLPath.ofSegments_map_snd_eq_of_evalTimed_eq {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) (hq : IsTimed q) (h : โˆ€ (t : ๐•œ), evalTimed p t = evalTimed q t) :

              Two timed presentations with the same parametrized path present the same TauCeti.PLPath: the presented TauCeti.PLPath depends only on the parametrized path.

              Reparametrizations present the same path #

              theorem TauCeti.PLPath.IsReparam.trans {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q r : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hpq : IsReparam p q) (hqr : IsReparam q r) :

              Reparametrization is transitive: the timings compose by TauCeti.PLPath.timedComp.

              theorem TauCeti.PLPath.IsReparam.ofSegments_map_snd_eq {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (h : IsReparam p q) (hp : IsTimed p) (hq : IsTimed q) :

              A reparametrization presents the same TauCeti.PLPath.

              theorem TauCeti.PLPath.exists_isReparam_map_snd_eq_normalize {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) :
              โˆƒ (r : List (๐•œ ร— V)), IsTimed r โˆง List.map Prod.snd r = normalize ๐•œ (List.map Prod.snd p) โˆง IsReparam p r

              Every timed presentation is a reparametrization of a timed presentation of its normal form.

              theorem TauCeti.PLPath.ofSegments_map_snd_eq_iff_exists_isReparam {๐•œ : Type u} {V : Type v} [Field ๐•œ] [LinearOrder ๐•œ] [IsStrictOrderedRing ๐•œ] {p q : List (๐•œ ร— V)} [AddCommGroup V] [Module ๐•œ V] (hp : IsTimed p) (hq : IsTimed q) (hpโ‚€ : 0 < duration p) (hqโ‚€ : 0 < duration q) {T : ๐•œ} (hT : 0 < T) :
              ofSegments ๐•œ (List.map Prod.snd p) = ofSegments ๐•œ (List.map Prod.snd q) โ†” โˆƒ (r : List (๐•œ ร— V)), IsTimed r โˆง duration r = T โˆง IsReparam p r โˆง IsReparam q r

              Faithfulness of the segment-list model. Two timed presentations of positive duration present the same TauCeti.PLPath exactly when they are both reparametrizations of a common timed presentation, which can be chosen of any prescribed positive duration T. For T = 1 and presentations of duration 1, these are nondecreasing surjective piecewise-linear reparametrizations of [0, 1].