Theory-Neutral Temporal Infrastructure #
@cite{allen-1983} @cite{champollion-2015} @cite{fox-hackl-2006} @cite{kamp-reyle-1993} @cite{klein-1994} @cite{kratzer-1989} @cite{rouillard-2026} @cite{zhao-2025} @cite{smith-1991}
Framework-agnostic types for temporal reasoning: intervals, temporal relations, situations (world–time pairs), and concrete time instances.
These definitions are used across truth-conditional semantics, event semantics,
dynamic semantics, and intensional semantics. The theory-specific layer
(branching time, temporal propositions) remains in
Theories/Semantics.Montague/Core/Time.
Key Concepts #
- Times as primitives (intervals or instants)
- Situations as world-time pairs
- Temporal relations (precedence, overlap, containment)
- Atomic distributivity (subinterval property, @cite{zhao-2025})
A situation is a part of a world at a time.
Following Kratzer's situation semantics:
- Situations are "slices" of possible worlds
- They have both spatial and temporal extent
- They can be minimal witnesses for propositions
We model situations as world–time pairs, abstracting from spatial extent. This is the most basic composition of ontological primitives.
- world : W
The world this situation is part of
- time : Time
The temporal coordinate of the situation
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.instReprSituation = { reprPrec := Core.instReprSituation.repr }
Abstract time type.
We keep this polymorphic to allow:
- Discrete times (ℕ, ℤ)
- Dense times (ℚ, ℝ)
- Abstract/opaque times
The key requirement is a linear order for temporal relations.
- min : Time → Time → Time
- max : Time → Time → Time
- toDecidableLE : DecidableLE Time
- toDecidableEq : DecidableEq Time
- toDecidableLT : DecidableLT Time
Instances
Point interval: start = finish
Equations
- Core.Time.Interval.point t = { start := t, finish := t, valid := ⋯ }
Instances For
Interval i₁ is contained in i₂
Instances For
Proper subinterval: i₁ ⊆ i₂ with at least one strict boundary. Required for IMPF: reference time PROPERLY inside event runtime.
Equations
Instances For
No interval is properly contained in itself.
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
- i₁.finalSubinterval i₂ = (i₁.subinterval i₂ ∧ i₁.finish = i₂.finish)
Instances For
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. Used for NEUTRAL viewpoint aspect.
Instances For
Final subinterval implies subinterval.
Every interval is a final subinterval of itself.
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.
- closed : BoundaryType
- open_ : BoundaryType
Instances For
Equations
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.Time.Interval.instBEqBoundaryType.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
A generalized interval with specified boundary types.
Extends the basic Interval with open/closed annotations on each end.
@cite{rouillard-2026} eq. (14a–b), (99a–b).
- left : Time
Left endpoint
- right : Time
Right endpoint
- leftType : BoundaryType
Left boundary type: closed [m or open]m
- rightType : BoundaryType
Right boundary type: closed m] or open m[
The endpoints are ordered
Instances For
A closed interval [m₁, m₂]: both endpoints included. @cite{rouillard-2026} eq. (14a): C := {t | min(t) ⊑ᵢ t ∧ max(t) ⊑ᵢ t}.
Equations
- One or more equations did not get rendered due to their size.
Instances For
An open interval]m₁, m₂[: both endpoints excluded. @cite{rouillard-2026} eq. (14b): O := {t | min(t) ⊄ᵢ t ∨ max(t) ⊄ᵢ t}.
Equations
- Core.Time.Interval.GInterval.open_ i = { left := i.start, right := i.finish, leftType := Core.Time.Interval.BoundaryType.open_, rightType := Core.Time.Interval.BoundaryType.open_, valid := ⋯ }
Instances For
The o(t) operation: open counterpart of a time. @cite{rouillard-2026} eq. (99a): if t is open, o(t) = t; if t is closed, o(t) is the open interval with the same endpoints.
Equations
- gi.toOpen = { left := gi.left, right := gi.right, leftType := Core.Time.Interval.BoundaryType.open_, rightType := Core.Time.Interval.BoundaryType.open_, valid := ⋯ }
Instances For
The c(t) operation: closed counterpart of a time. @cite{rouillard-2026} eq. (99b): if t is closed, c(t) = t; if t is open, c(t) adds the endpoints.
Equations
- gi.toClosed = { left := gi.left, right := gi.right, leftType := Core.Time.Interval.BoundaryType.closed, rightType := Core.Time.Interval.BoundaryType.closed, valid := ⋯ }
Instances For
Is this interval closed (both boundaries included)?
Equations
Instances For
Is this interval open (both boundaries excluded)?
Equations
Instances For
Containment for generalized intervals: m is in gi. For closed endpoints, ≤ is used; for open endpoints, <.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Generalized subinterval: gi₁ ⊆ gi₂ (every moment in gi₁ is in gi₂).
Equations
- gi₁.gsubinterval gi₂ = ∀ (m : Time), gi₁.gcontains m → gi₂.gcontains m
Instances For
Convert a closed GInterval back to the basic Interval type.
Instances For
The closed counterpart of an open interval is always closed.
The open counterpart is always open.
toClosed is idempotent.
toOpen is idempotent.
Aspectual boundedness of a situation.
Whether a situation is conceptualized as having inherent boundaries:
- bounded: telic / perfective / closed (achievements, accomplishments)
- unbounded: atelic / imperfective / open (activities, states)
Cross-cuts Vendler classes and aspectual viewpoint. Used by event semantics (telicity), aspect theory (perfective/imperfective), and temporal discourse interpretation (sequential vs. simultaneous default readings).
- bounded : SituationBoundedness
- unbounded : SituationBoundedness
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- Core.Time.instBEqSituationBoundedness.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
SituationBoundedness → MereoTag: bounded = quantized, unbounded = cumulative. Bounded situations (telic/perfective) are mereologically quantized; unbounded situations (atelic/imperfective) are cumulative.
Equations
Instances For
Equations
- Core.Time.instLicensingPipelineSituationBoundedness = { toBoundedness := fun (s : Core.Time.SituationBoundedness) => s.toMereoTag.toBoundedness }
Temporal relation type for tense operators.
These relate two times (typically event time and reference/speech time).
- before : TemporalRelation
- after : TemporalRelation
- overlapping : TemporalRelation
- notAfter : TemporalRelation
- notBefore : TemporalRelation
Instances For
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
Equations
- Core.Time.instBEqTemporalRelation.beq x✝ y✝ = (x✝.ctorIdx == y✝.ctorIdx)
Instances For
Evaluate a temporal relation on two times
Equations
- Core.Time.TemporalRelation.before.eval x✝¹ x✝ = (x✝¹ < x✝)
- Core.Time.TemporalRelation.after.eval x✝¹ x✝ = (x✝¹ > x✝)
- Core.Time.TemporalRelation.overlapping.eval x✝¹ x✝ = (x✝¹ = x✝)
- Core.Time.TemporalRelation.notAfter.eval x✝¹ x✝ = (x✝¹ ≤ x✝)
- Core.Time.TemporalRelation.notBefore.eval x✝¹ x✝ = (x✝¹ ≥ x✝)
Instances For
Decidable evaluation
Equations
- Core.Time.TemporalRelation.before.evalB x✝¹ x✝ = decide (x✝¹ < x✝)
- Core.Time.TemporalRelation.after.evalB x✝¹ x✝ = decide (x✝¹ > x✝)
- Core.Time.TemporalRelation.overlapping.evalB x✝¹ x✝ = (x✝¹ == x✝)
- Core.Time.TemporalRelation.notAfter.evalB x✝¹ x✝ = decide (x✝¹ ≤ x✝)
- Core.Time.TemporalRelation.notBefore.evalB x✝¹ x✝ = decide (x✝¹ ≥ x✝)
Instances For
Integer times for concrete examples.
Using ℤ allows both past (negative) and future (positive) times relative to a speech time of 0.
Equations
- Core.Time.instTimeStructureInt = { toLinearOrder := Int.instLinearOrder }
Speech time at 0 by convention
Equations
Instances For
Example: yesterday (t = -1)
Equations
Instances For
Example: tomorrow (t = 1)
Equations
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": BoundaryType.closed/.open_
in Core/Time is isomorphic to Boundedness.closed/.open_ in
Core/MeasurementScale.
Equations
Instances For
An event quantifier: a predicate on event predicates. V(P) holds iff "there is an event satisfying P" according to V's quantificational force.
Equations
- Core.Time.EvQuant Event = ((Event → Prop) → Prop)
Instances For
ATOM-DIST_α (@cite{zhao-2025}, Def. 5.3): an event quantifier V satisfies ATOM-DIST with respect to trace function τ iff for every event predicate P and subinterval i' of τ(e), V also holds for the restriction of P to events whose trace is i'.
Formally: V(P) → ∀ e, P(e) → ∀ i', subinterval(i', τ(e)) → V(λ e'. P(e') ∧ τ(e') = i')
This captures the subinterval property parameterized over any linearly ordered dimension α.
Equations
- Core.Time.AtomDist τ V = ∀ (P : Event → Prop), V P → ∀ (e : Event), P e → ∀ (i' : Core.Time.Interval α), i'.subinterval (τ e) → V fun (e' : Event) => P e' ∧ τ e' = i'
Instances For
ATOM-DIST_t: temporal atomic distributivity. Abbreviation for ATOM-DIST with respect to a temporal trace.
Equations
- Core.Time.AtomDist_t τ_t V = Core.Time.AtomDist τ_t V
Instances For
ATOM-DIST_d: degree atomic distributivity. Abbreviation for ATOM-DIST with respect to a degree trace.
Equations
- Core.Time.AtomDist_d τ_d V = Core.Time.AtomDist τ_d V
Instances For
NOT-ATOM-DIST_α licensing condition: A particle is licensed by an event quantifier V (w.r.t. trace τ) iff V does NOT satisfy ATOM-DIST_α. This is the presupposition of Mandarin le and mei-you.