Documentation

Linglib.Core.Time.Interval.Basic

Temporal intervals #

@cite{allen-1983} @cite{kamp-reyle-1993} @cite{klein-1994} @cite{pancheva-2003} @cite{rouillard-2026} @cite{sagey-1986} @cite{smith-1997}

The basic interval type and its relational algebra: containment, subinterval, overlap, precedence, meets, plus the nuclear cluster needed by aspectual semantics (proper subinterval, final subinterval, initial overlap, isAfter/isBefore).

Open/closed boundary distinctions and generalized intervals (@cite{rouillard-2026}) live in Generalized.lean.

structure Core.Time.Interval (Time : Type u_1) [LinearOrder Time] :
Type u_1

Temporal interval: a pair of times [start, finish] with start ≤ finish. Following standard interval semantics.

Instances For
    def Core.Time.Interval.point {Time : Type u_1} [LinearOrder Time] (t : Time) :

    Point interval: start = finish

    Equations
    Instances For
      def Core.Time.Interval.contains {Time : Type u_1} [LinearOrder Time] (i : Interval Time) (t : Time) :

      Does time t fall within interval i?

      Equations
      Instances For
        def Core.Time.Interval.subinterval {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

        Interval i₁ is contained in i₂

        Equations
        Instances For
          def Core.Time.Interval.overlaps {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

          Intervals overlap

          Equations
          Instances For
            def Core.Time.Interval.precedes {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

            i₁ precedes i₂ (no overlap, i₁ entirely before i₂)

            Equations
            Instances For
              def Core.Time.Interval.meets {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

              i₁ meets i₂ (i₁ ends exactly when i₂ starts)

              Equations
              Instances For
                def Core.Time.Interval.properSubinterval {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

                Proper subinterval: i₁ ⊆ i₂ with at least one strict boundary. Required for IMPF: reference time PROPERLY inside event runtime.

                Equations
                Instances For
                  def Core.Time.Interval.IsPoint {Time : Type u_1} [LinearOrder Time] (i : Interval Time) :

                  An interval is a point iff its endpoints coincide (start = finish). The atomic case in the time dimension — used by Bennett-Partee 1972 strict subinterval property and Zhao 2025 ATOM-DIST_t at the atomic granularity.

                  Equations
                  Instances For
                    def Core.Time.Interval.isAfter {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

                    i₁ is entirely after i₂ (i₁ starts at or after i₂ finishes).

                    Equations
                    Instances For
                      def Core.Time.Interval.isBefore {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

                      i₁ is entirely before i₂.

                      Equations
                      Instances For
                        theorem Core.Time.Interval.properSubinterval_implies_subinterval {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) (h : i₁.properSubinterval i₂) :
                        i₁.subinterval i₂
                        @[simp]
                        theorem Core.Time.Interval.subinterval_refl {Time : Type u_1} [LinearOrder Time] (i : Interval Time) :
                        theorem Core.Time.Interval.properSubinterval_irrefl {Time : Type u_1} [LinearOrder Time] (i : Interval Time) :

                        No interval is properly contained in itself.

                        theorem Core.Time.Interval.isAfter_iff_isBefore {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :
                        i₁.isAfter i₂ i₂.isBefore i₁
                        def Core.Time.Interval.finalSubinterval {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

                        Final subinterval: i₁ ⊆ i₂ and they share the same right endpoint. @cite{pancheva-2003}: PTS(i', i) iff i is a final subinterval of i'.

                        Equations
                        Instances For
                          def Core.Time.Interval.initialOverlap {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :

                          Initial overlap (∂): i₁ and i₂ overlap, and the start of i₂ is in i₁. @cite{pancheva-2003}: i ∂τ(e) — the beginning of the eventuality is included in the reference interval but the end may not be. @cite{smith-1997}: the neutral viewpoint uses the same interval relation.

                          Equations
                          Instances For
                            theorem Core.Time.Interval.finalSubinterval_implies_subinterval {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) (h : i₁.finalSubinterval i₂) :
                            i₁.subinterval i₂

                            Final subinterval implies subinterval.

                            theorem Core.Time.Interval.finalSubinterval_refl {Time : Type u_1} [LinearOrder Time] (i : Interval Time) :

                            Every interval is a final subinterval of itself.

                            @[simp]
                            theorem Core.Time.Interval.overlaps_refl {Time : Type u_1} [LinearOrder Time] (i : Interval Time) :

                            Overlap is reflexive: every interval overlaps itself.

                            theorem Core.Time.Interval.overlaps_symm {Time : Type u_1} [LinearOrder Time] {i₁ i₂ : Interval Time} (h : i₁.overlaps i₂) :
                            i₂.overlaps i₁

                            Overlap is symmetric.

                            theorem Core.Time.Interval.overlaps_comm {Time : Type u_1} [LinearOrder Time] (i₁ i₂ : Interval Time) :
                            i₁.overlaps i₂ i₂.overlaps i₁

                            Overlap is symmetric (iff version).

                            theorem Core.Time.Interval.overlaps_not_transitive :
                            ¬∀ (i₁ i₂ i₃ : Interval ), i₁.overlaps i₂i₂.overlaps i₃i₁.overlaps i₃

                            Overlap is NOT transitive: [0,1] overlaps [1,2] and [1,2] overlaps [2,3], but [0,1] does not overlap [2,3].

                            This is the cornerstone property that distinguishes overlap from simultaneity (identity) and makes the No-Crossing Constraint derivable from temporal precedence alone (@cite{sagey-1986} §5.2.3, fn. 6).

                            theorem Core.Time.Interval.subinterval_overlaps {Time : Type u_1} [LinearOrder Time] {i₁ i₂ : Interval Time} (h : i₁.subinterval i₂) :
                            i₁.overlaps i₂

                            Subintervals overlap their containing intervals.

                            theorem Core.Time.Interval.precedes_irrefl {Time : Type u_1} [LinearOrder Time] (i : Interval Time) :
                            ¬i.precedes i

                            Precedence is irreflexive: no interval precedes itself.

                            theorem Core.Time.Interval.precedes_asymm {Time : Type u_1} [LinearOrder Time] {i₁ i₂ : Interval Time} (h : i₁.precedes i₂) :
                            ¬i₂.precedes i₁

                            Precedence is asymmetric.

                            theorem Core.Time.Interval.precedes_trans {Time : Type u_1} [LinearOrder Time] {i₁ i₂ i₃ : Interval Time} (h₁₂ : i₁.precedes i₂) (h₂₃ : i₂.precedes i₃) :
                            i₁.precedes i₃

                            Precedence is transitive.

                            theorem Core.Time.Interval.precedes_not_overlaps {Time : Type u_1} [LinearOrder Time] {i₁ i₂ : Interval Time} (h : i₁.precedes i₂) :
                            ¬i₁.overlaps i₂

                            Precedence and overlap are mutually exclusive.

                            Whether an interval's boundary is included (closed) or excluded (open). @cite{rouillard-2026} §2.2.4: the distinction between closed and open times is central to deriving the polarity sensitivity of G-TIAs. Event runtimes are closed; PTSs are open intervals.

                            Consumed by GInterval (in Generalized.lean).

                            Instances For
                              @[implicit_reducible]
                              Equations
                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For

                                Interval boundary type maps to scale boundedness. @cite{rouillard-2026}: closed runtimes correspond to closed scales (licensed); open PTSs correspond to open scales (blocked/information collapse). This is the "interval generalization": Interval.BoundaryType.closed/.open_ is isomorphic to Core.Scale.Boundedness.closed/.open_.

                                Equations
                                Instances For