Type of tense operators.
A tense operator takes:
- A temporal predicate P : (s, s') → Prop
- Two situations: the "now" situation s and evaluation situation s'
- Returns whether P holds with the tense constraint
Equations
- Semantics.Tense.TenseOp W Time = (Core.Time.Tense.SitProp W Time → Core.WorldTimeIndex W Time → Core.WorldTimeIndex W Time → Prop)
Instances For
The temporal constraint of each tense, factored out as a pure relation
on WorldTimeIndex pairs and shared with the dynamic-context-update
counterparts in Tense/Dynamic.lean via dynRelation. This is the
Heim-Kratzer "tense as relation between times" intuition isolated from
the propositional payload, so that a single relation kernel (precedes/
coincides/follows) is the source of truth for both static PAST/
PRES/FUT (Compositional, this file) and their dynamic eliminative-
update counterparts (Tense/Dynamic.lean). Trichotomy and pairwise
exclusion proved at this layer propagate to both static and dynamic
operators by definitional unfolding.
Event time precedes reference time. The temporal kernel of PAST
and dynPAST. Reducible so decide and rw see through to the
underlying < on .time.
Equations
- Semantics.Tense.precedes s₁ s₂ = (s₁.time < s₂.time)
Instances For
Event time coincides with reference time. The temporal kernel of
PRES and dynPRES.
Equations
- Semantics.Tense.coincides s₁ s₂ = (s₁.time = s₂.time)
Instances For
Event time follows reference time. The temporal kernel of FUT
and dynFUT.
Equations
- Semantics.Tense.follows s₁ s₂ = (s₁.time > s₂.time)
Instances For
The three temporal relations partition any pair of situations on a
linear order. Used downstream by temporal_partition (in
Tense/Dynamic.lean) and by static analyses that need exhaustive case
analysis on tense.
precedes and follows are mutually exclusive on any preorder.
precedes and coincides are mutually exclusive on any preorder.
coincides and follows are mutually exclusive on any preorder.
PAST operator (@cite{mendes-2025} style)
⟦PAST⟧ = λP.λs.λs'. τ(s) < τ(s') ∧ P(s)
The PAST operator:
- Requires the event situation s to precede reference situation s'
- Evaluates P at the past situation s
Defined via the precedes kernel (above) so the temporal constraint is
shared with dynPAST in Tense/Dynamic.lean.
Equations
- Semantics.Tense.PAST P s s' = (Semantics.Tense.precedes s s' ∧ P s)
Instances For
PRES operator (@cite{mendes-2025} style)
⟦PRES⟧ = λP.λs.λs'. τ(s) = τ(s') ∧ P(s)
The PRESENT operator:
- Requires the event situation s to be contemporaneous with s'
- Evaluates P at situation s
Defined via the coincides kernel.
Equations
- Semantics.Tense.PRES P s s' = (Semantics.Tense.coincides s s' ∧ P s)
Instances For
FUT operator (@cite{mendes-2025} style)
⟦FUT⟧ = λP.λs.λs'. τ(s) > τ(s') ∧ P(s)
The FUTURE operator:
- Requires the event situation s to follow reference situation s'
- Evaluates P at the future situation s
Defined via the follows kernel.
Equations
- Semantics.Tense.FUT P s s' = (Semantics.Tense.follows s s' ∧ P s)
Instances For
Simple PAST: Event time precedes speech time.
⟦PAST⟧ₛᵢₘₚₗₑ = λP.λt.λt_s. t < t_s ∧ P(t)
Equations
- Semantics.Tense.pastSimple P eventTime speechTime = (eventTime < speechTime ∧ P eventTime)
Instances For
Simple PRESENT: Event time equals speech time.
Equations
- Semantics.Tense.presSimple P eventTime speechTime = (eventTime = speechTime ∧ P eventTime)
Instances For
Simple FUTURE: Event time follows speech time.
Equations
- Semantics.Tense.futSimple P eventTime speechTime = (eventTime > speechTime ∧ P eventTime)
Instances For
Apply a tense to a Reichenbach frame, constraining R relative to P. Tense locates reference time relative to perspective time, not speech time. In root clauses P = S, so this reduces to the standard Reichenbach analysis. In SOT languages, embedded P shifts to the matrix event time, making the embedded tense relative.
Equations
- Semantics.Tense.applyTense Core.Time.Tense.GramTense.past f = (f.referenceTime < f.perspectiveTime)
- Semantics.Tense.applyTense Core.Time.Tense.GramTense.present f = (f.referenceTime = f.perspectiveTime)
- Semantics.Tense.applyTense Core.Time.Tense.GramTense.future f = (f.referenceTime > f.perspectiveTime)
- Semantics.Tense.applyTense Core.Time.Tense.GramTense.nonpast f = (f.referenceTime ≥ f.perspectiveTime)
Instances For
Check if a Reichenbach frame satisfies a given tense. Tense locates R relative to P (perspective time).
Equations
- Semantics.Tense.satisfiesTense Core.Time.Tense.GramTense.past f = decide (f.referenceTime < f.perspectiveTime)
- Semantics.Tense.satisfiesTense Core.Time.Tense.GramTense.present f = (f.referenceTime == f.perspectiveTime)
- Semantics.Tense.satisfiesTense Core.Time.Tense.GramTense.future f = decide (f.referenceTime > f.perspectiveTime)
- Semantics.Tense.satisfiesTense Core.Time.Tense.GramTense.nonpast f = decide (f.referenceTime ≥ f.perspectiveTime)
Instances For
Sequence of tenses (for embedded tense in reported speech, etc.)
"John said that Mary left" - past under past
Equations
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.past Core.Time.Tense.GramTense.past = Core.Time.Tense.GramTense.past
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.past Core.Time.Tense.GramTense.present = Core.Time.Tense.GramTense.past
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.past Core.Time.Tense.GramTense.future = Core.Time.Tense.GramTense.past
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.past Core.Time.Tense.GramTense.nonpast = Core.Time.Tense.GramTense.past
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.present x✝ = x✝
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.nonpast Core.Time.Tense.GramTense.past = Core.Time.Tense.GramTense.past
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.nonpast Core.Time.Tense.GramTense.present = Core.Time.Tense.GramTense.nonpast
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.nonpast Core.Time.Tense.GramTense.future = Core.Time.Tense.GramTense.future
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.nonpast Core.Time.Tense.GramTense.nonpast = Core.Time.Tense.GramTense.nonpast
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.future Core.Time.Tense.GramTense.past = Core.Time.Tense.GramTense.future
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.future Core.Time.Tense.GramTense.present = Core.Time.Tense.GramTense.future
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.future Core.Time.Tense.GramTense.future = Core.Time.Tense.GramTense.future
- Semantics.Tense.composeTense Core.Time.Tense.GramTense.future Core.Time.Tense.GramTense.nonpast = Core.Time.Tense.GramTense.future
Instances For
applyTense is the Reichenbach-frame projection of GramTense.constrains:
applying a tense to a frame is equivalent to the tense's temporal constraint
on the frame's R and P.
PAST requires temporal precedence.
FUT requires temporal succession.
PRES requires contemporaneity.
Tense preserves the predicate.
If TENSE(P)(s, s'), then P(s).
composeTense Properties #
@cite{kiparsky-2002}
composeTense is a stipulative function defining how surface tenses compose
under embedding. The following theorems establish its algebraic properties.
For the DERIVED version — showing that composeTense matches the Reichenbach
analysis with perspective shifting — see
Semantics.Tense (in IS/Tense/Basic.lean) and the TC↔IS bridge
in Semantics.Tense.SequenceOfTense.
Present is transparent under composition (left): composing with matrix present always yields the embedded tense. This reflects present's semantics: R = P, so tense relative to a present perspective is unchanged.
Present is transparent under composition (right): embedding present under any tense yields the matrix tense. Embedded present = "at the matrix event time" = same tense relative to speech time.
Tense composition is idempotent for past: embedding past arbitrarily deep under past still yields past.
Tense composition is idempotent for future.