Temporal Domains #
@cite{declerck-2006} @cite{reichenbach-1947}
A temporal domain: a central time of orientation (TO) — the
binding TO of the domain — together with related sub-TOs. The same
shape covers @cite{reichenbach-1947}'s S/P/R/E and Declerck's
binding-TO + sub-TOs; a Domain is what they share.
Concepts #
- TO (
Time of orientation): a temporal anchor. Realized asInterval Time; degenerate intervals (start = finish) model point times like Reichenbach's S/P/R/E, while non-degenerate intervals model extended times-of-situation (Declerck's T-sit). - NamedTO: a TO together with a typed
Rolelabel. TheRoleis abstract (anyDecidableEqtype), so role-based access stays type-safe across frameworks:Orientation(the canonical universal vocabulary) instantiatesRolefor both Reichenbach and Declerck, but a domain-specific framework could use its own enum. - Domain: a central NamedTO + list of sub-NamedTOs. Pairwise Allen
relations are computed from the underlying linear order on
TimeviaInterval.allenRel; the domain does not store a relation table.
What's not here #
This file is foundational: it does not add tense semantics, aspect,
or sector classification. Domain is the substrate; the
domain-shaped theories build on top.
A time of orientation (TO, @cite{declerck-2006}): a temporal
anchor used by tense/aspect frameworks. Realized as
Interval Time so the same type covers both point times
(degenerate intervals via Interval.point) and extended
times-of-situation (general intervals).
Allen relations between TOs are unique on non-degenerate pairs
(AllenRelation.holds_unique), so Domain APIs that depend on
uniqueness add a non-degeneracy hypothesis where needed. For
point-time TOs (Reichenbach), the Allen algebra collapses to
{precedes, equal, precededBy}.
Equations
- Core.Time.TO Time = Core.Time.Interval Time
Instances For
Construct a point TO from a single time (degenerate interval).
Equations
Instances For
A TO with an identifying typed role label. The Role parameter is
abstract: framework-specific role types (Orientation for
Reichenbach/Declerck; framework-private enums elsewhere) all
instantiate it. Using a typed role rather than a String makes
role mismatches a compile-time error.
- name : Role
The role label (e.g.
Orientation.perspective,.topic). - span : TO Time
The TO itself.
Instances For
Build a point NamedTO from a label and a single time.
Equations
- Core.Time.NamedTO.ofPoint name t = { name := name, span := Core.Time.TO.point t }
Instances For
A temporal domain (@cite{declerck-2006}): a central time of
orientation (the binding TO of the domain) together with a list
of related sub-TOs. The Allen relations between any pair of TOs
are computed on-demand from the underlying linear order on Time
via Interval.allenRel; no relation table is stored.
Two design choices worth noting:
No relation storage. TOs are intervals on a
LinearOrder, so their Allen relation is determined by the order. Storing relations would either be redundant (when consistent with the order) or contradictory (when inconsistent). We compute on demand.NamedTO list, not record. Different domain-shaped theories use different role-sets: Reichenbach has 4 roles (S/P/R/E), Declerck has a variable count (T₀ + sectors + sub-TOs). A label-keyed list lets
Domaincover both without tying the structure to one role-set; downstream wrappers (ReichenbachFrame,DeclercianSchema) commit to a fixed role-set on top.
ReichenbachFrame is recast as a Domain with central = S (point)
and sub-TOs = [P, R, E] (each a point); DeclercianSchema is recast
as a Domain plus a Zone-classifier function.
- central : NamedTO Time Role
The central TO — the binding TO of the domain. For matrix clauses this is typically speech time (S); under attitude embedding it shifts to the matrix event time.
- subTOs : List (NamedTO Time Role)
The other TOs in the domain (reference times, event times, sub-TOs, secondary anchors, …).
Instances For
Look up a TO by its role label. Returns none if no TO has that
role; some of the first matching TO otherwise. (Roles are not
required to be unique at the type level — a wrapper like
ReichenbachFrame can prove uniqueness as a separate invariant.)
Equations
- d.find? r = Option.map (fun (x : Core.Time.NamedTO Time Role) => x.span) (List.find? (fun (x : Core.Time.NamedTO Time Role) => x.name == r) d.all)
Instances For
The role label of every TO in the domain — useful for stating role-set invariants.
Equations
- d.labels = List.map (fun (x : Core.Time.NamedTO Time Role) => x.name) d.all
Instances For
Convenience constructors for the canonical Reichenbach role-set,
using Orientation as the universal Role type:
utterance = S, perspective = P, topic = R, situation = E.
The four canonical Reichenbach role labels (extended with
@cite{kiparsky-2002}'s perspective time P) as Orientation
values: utterance (S), perspective (P), topic (R), situation (E).
Equations
Instances For
Build a domain from four point times in the Reichenbach convention.
S/P/R/E map to .utterance/.perspective/.topic/.situation.
Equations
- One or more equations did not get rendered due to their size.