Documentation

Linglib.Core.Temporal.Tense

Unified Tense Pronoun Architecture #

@cite{abusch-1997} @cite{heim-kratzer-1998} @cite{kratzer-1998} @cite{partee-1973} @cite{von-stechow-2009} @cite{ogihara-1989}

@cite{abusch-1997}'s insight: a tense morpheme is a temporal pronoun — a variable with a presupposed temporal constraint (Prior, reinterpreted) and a binding mode (indexical/anaphoric/bound). This single concept projects onto five representations of temporal reference in the codebase:

  1. Priorean operators (PAST/PRES/FUT): constraint.constrains
  2. Reichenbach frames (S, P, R, E): TensePronoun.toFrame
  3. Referential variables: TensePronoun.resolve
  4. Kaplan indexicals (rigid to speech time): mode =.indexical
  5. Attitude binding (zero tense, @cite{ogihara-1989}): mode =.bound

The existing ad-hoc bridge theorems (referential_past_decomposition, temporallyBound_gives_simultaneous, indexical_tense_matches_opNow, ogihara_bound_tense_simultaneous) become trivial projections from this unified type.

Architecture #

This module lives in Core/ because both Theories/Semantics.Montague/Sentence/Tense/ and Theories/Semantics.Intensional/Attitude/ need the shared infrastructure (GramTense, SOTParameter, TemporalAssignment, etc.) without a cross-tree import.

Grammatical tense: a temporal relation imposed by tense morphology.

Following the Reichenbach/Klein tradition:

  • PAST: reference time before speech time
  • PRESENT: reference time overlaps speech time
  • FUTURE: reference time after speech time
Instances For
    Equations
    Instances For
      def Core.Tense.GramTense.constrains {Time : Type u_1} [LinearOrder Time] (t : GramTense) (refTime perspTime : Time) :

      The temporal constraint imposed by a grammatical tense. Past: ref < perspective. Present: ref = perspective. Future: ref > perspective. This is the core ordering that Priorean operators assert and Abusch's tense pronouns presuppose.

      Equations
      Instances For

        Sequence of Tenses (SOT) parameter.

        Languages differ in how embedded tense interacts with matrix tense:

        • SOT languages (English): Embedded tense is relative to matrix
        • Non-SOT languages (Japanese): Embedded tense is absolute
        Instances For
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            @[reducible, inline]

            Tense interpretation modes. Tenses parallel pronouns: indexical (deictic), anaphoric (discourse-bound), and bound variable (zero tense).

            This is an alias for Core.ReferentialMode.ReferentialMode, which captures Partee's insight that the same three-way classification applies to both pronouns and tenses.

            Equations
            Instances For

              Bound (zero) tense is the SOT mechanism: it must be locally bound, yielding the simultaneous reading without a deletion rule.

              Temporal assignment functions are the temporal instantiation of Core.VarAssignment (VarAssignment Time = ℕ → Time). All algebraic properties (update_lookup_same, update_lookup_other, update_update_same, update_self) are inherited from the generic infrastructure.

              @[reducible, inline]
              abbrev Core.Tense.TemporalAssignment (Time : Type u_1) :
              Type u_1

              Temporal assignment function: maps variable indices to times. The temporal analogue of H&K's Assignment (ℕ → Entity). Defined as VarAssignment Time from Core.VarAssignment.

              Equations
              Instances For
                @[reducible, inline]
                abbrev Core.Tense.updateTemporal {Time : Type u_1} (g : TemporalAssignment Time) (n : ) (t : Time) :

                Modified temporal assignment g[n ↦ t]. Specializes Core.VarAssignment.updateVar.

                Equations
                Instances For
                  @[reducible, inline]
                  abbrev Core.Tense.interpTense {Time : Type u_1} (n : ) (g : TemporalAssignment Time) :
                  Time

                  Temporal variable denotation: ⟦tₙ⟧^g = g(n). Specializes Core.VarAssignment.lookupVar.

                  Equations
                  Instances For
                    @[reducible, inline]
                    abbrev Core.Tense.temporalLambdaAbs {Time : Type u_1} {α : Type u_2} (n : ) (body : TemporalAssignment Timeα) :
                    TemporalAssignment TimeTimeα

                    Temporal lambda abstraction: bind a time variable. Specializes Core.VarAssignment.varLambdaAbs.

                    Partee's bound tense: "Whenever Mary phones, Sam is asleep" — present tense bound by "whenever", just as "Every farmer beats his donkey" has "his" bound by "every farmer".

                    Equations
                    Instances For
                      def Core.Tense.situationToTemporal {W : Type u_1} {Time : Type u_2} (g : Situation W Time) :

                      Project a situation assignment to a temporal assignment. This is the formal bridge between situation semantics and tense semantics: the temporal coordinate of each situation is extracted.

                      Equations
                      Instances For
                        theorem Core.Tense.situation_temporal_commutes {W : Type u_1} {Time : Type u_2} (g : Situation W Time) (n : ) :

                        Temporal interpretation via situation assignment commutes with time projection: interpTense n (π g) = (g n).time.

                        theorem Core.Tense.zeroTense_receives_binder_time {Time : Type u_1} (g : TemporalAssignment Time) (n : ) (binderTime : Time) :
                        interpTense n (updateTemporal g n binderTime) = binderTime

                        Zero tense: a bound tense variable contributes no independent temporal constraint. When an attitude verb binds it, the variable receives the matrix event time. This is the SOT mechanism: the "past" morphology on the embedded verb is agreement, not a semantic tense.

                        @[reducible, inline]
                        abbrev Core.Tense.SitProp (W : Type u_1) (Time : Type u_2) :
                        Type (max u_2 u_1)

                        Type of situation-level propositions (Prop-valued, for proof-level temporal reasoning).

                        A temporal predicate takes a situation and returns truth value. This is what tense operators modify.

                        Note: a Bool-valued counterpart exists at Semantics.Attitudes.SituationDependent.SitProp for computational RSA evaluation. The split follows the Prop'/BProp pattern in Core/Proposition.lean.

                        Equations
                        Instances For

                          @cite{abusch-1997}'s unified tense denotation.

                          A tense morpheme introduces a temporal variable with:

                          • A variable index in the temporal assignment
                          • A presupposed temporal constraint (past/present/future)
                          • A binding mode (indexical, anaphoric, or bound)

                          This unifies five views of tense:

                          • varIndex :
                          • constraint : GramTense
                          • evalTimeIndex :

                            Index of the evaluation time variable in the temporal assignment. Default 0 = speech time slot. Under embedding, attitude verbs update this index to point at the matrix event time. @cite{klecha-2016}: modals can also shift the eval time index.

                          Instances For
                            Equations
                            • One or more equations did not get rendered due to their size.
                            Instances For
                              Equations
                              • One or more equations did not get rendered due to their size.
                              Instances For
                                Equations
                                Instances For
                                  def Core.Tense.TensePronoun.resolve {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) :
                                  Time

                                  Resolve: look up the temporal variable.

                                  Equations
                                  Instances For
                                    def Core.Tense.TensePronoun.presupposition {Time : Type u_1} [LinearOrder Time] (tp : TensePronoun) (resolvedTime perspectiveTime : Time) :

                                    Presupposition: the constraint applied to the resolved time.

                                    Equations
                                    Instances For
                                      def Core.Tense.TensePronoun.toFrame {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) (speechTime perspectiveTime eventTime : Time) :

                                      Construct the Reichenbach frame. R = g(varIndex), P = perspectiveTime.

                                      Equations
                                      • tp.toFrame g speechTime perspectiveTime eventTime = { speechTime := speechTime, perspectiveTime := perspectiveTime, referenceTime := tp.resolve g, eventTime := eventTime }
                                      Instances For
                                        def Core.Tense.TensePronoun.evalTime {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) :
                                        Time

                                        Resolve the evaluation time from the assignment. In root clauses (evalTimeIndex = 0, g(0) = speech time), this is speech time. Under embedding, the attitude verb updates the assignment so that g(evalTimeIndex) = matrix event time.

                                        Equations
                                        Instances For

                                          Full presupposition: the tense constraint checked against the resolved evaluation time (not just a bare perspective time parameter). This makes the eval time compositionally determined rather than stipulated.

                                          Equations
                                          Instances For
                                            theorem Core.Tense.evalTime_root_is_speech {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) (speechTime : Time) (hEval : tp.evalTimeIndex = 0) (hRoot : g 0 = speechTime) :
                                            tp.evalTime g = speechTime

                                            When evalTimeIndex = 0 and g(0) = speechTime, the evaluation time is speech time. This is the root-clause default: tense is checked against speech time.

                                            theorem Core.Tense.evalTime_shifts_under_embedding {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) (matrixEventTime : Time) :
                                            tp.evalTime (updateTemporal g tp.evalTimeIndex matrixEventTime) = matrixEventTime

                                            Updating the eval time index gives Von Stechow's perspective shift: the embedded tense is now checked against a different time (the matrix event time). This is how attitude verbs "transmit" their event time.

                                            theorem Core.Tense.TensePronoun.bound_resolve_eq_binder {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) (binderTime : Time) :
                                            tp.resolve (updateTemporal g tp.varIndex binderTime) = binderTime

                                            Resolving a bound tense under binding yields the binder time.

                                            theorem Core.Tense.TensePronoun.bound_present_simultaneous {Time : Type u_1} (tp : TensePronoun) (g : TemporalAssignment Time) (speechTime perspTime eventTime : Time) (hBind : tp.resolve g = perspTime) (_hPres : tp.constraint = GramTense.present) :
                                            (tp.toFrame g speechTime perspTime eventTime).isPresent

                                            A present-constraint bound tense under binding gives R = P (simultaneous). The hPres hypothesis constrains the theorem to present tenses; the frame equality follows from hBind alone (R = resolve = perspTime).

                                            def Core.Tense.doubleAccess {Time : Type u_1} (p : TimeProp) (speechTime matrixEventTime : Time) :

                                            Double-access: present-under-past requires the complement to hold at BOTH speech time (indexical rigidity) AND matrix event time (attitude accessibility).

                                            Equations
                                            Instances For
                                              theorem Core.Tense.TensePronoun.indexical_present_at_speech {Time : Type u_1} [LinearOrder Time] (tp : TensePronoun) (resolvedTime speechTime : Time) (hPres : tp.constraint = GramTense.present) (hPresup : tp.presupposition resolvedTime speechTime) :
                                              resolvedTime = speechTime

                                              An indexical present tense presupposes resolution to speech time.

                                              Phonological overtness of a referential expression (@cite{heim-kratzer-1998} §3).

                                              Applies uniformly to pronouns and tenses: English has zero tense under SOT (bound present surfaces as ∅); Japanese has zero pronouns in subject position (locally bound by Agr). Persian has zero pronouns but NOT zero tense (tense is in C, outside the local agreement domain).

                                              The distribution of overt vs. zero is governed by locality of agreement: a referential expression that is locally bound by an agreeing head surfaces as zero.

                                              Instances For
                                                Equations
                                                Instances For

                                                  Kratzer's locality generalization (1998, formula 26):

                                                  A referential expression that is locally bound by an agreeing head surfaces as zero. Free (indexical or anaphoric) expressions surface as overt. This unifies:

                                                  • Reflexives = locally bound entity pronouns → zero/reduced
                                                  • Simultaneous tense = locally bound temporal pronoun → zero under SOT
                                                  • Japanese subject pro = locally bound by Agr → zero
                                                  • Persian pronouns = locally bound by Agr → zero, but tense is NOT local to Agr (tense is in C) → overt
                                                  Equations
                                                  Instances For

                                                    Free (indexical or anaphoric) expressions are always overt.

                                                    Bound expressions outside the local domain remain overt. This is the Persian case: tense is bound but not in a local agreement domain (tense is in C, Agr is in Infl).

                                                    The key bridge showing that @cite{abusch-1997}'s De Bruijn temporal indexing is already tower-style depth access. TensePronoun.evalTimeIndex is a depth-relative index into the tower: when the temporal assignment encodes tower time coordinates (g k = (tower.contextAt k).time), interpTense agrees with AccessPattern.resolve.

                                                    def Core.Tense.tensePronounAccessPattern {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (tp : TensePronoun) :

                                                    Convert a TensePronoun's eval-time index to an AccessPattern that reads the time coordinate at the corresponding tower depth.

                                                    evalTimeIndex = 0 → origin (speech-act context time) evalTimeIndex = k → depth k (the k-th embedding's time)

                                                    This makes explicit the observation that Abusch's variable indices ARE tower depth indices for the temporal coordinate.

                                                    Equations
                                                    Instances For
                                                      def Core.Tense.towerFaithful {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (g : TemporalAssignment T) (t : Context.ContextTower (Context.KContext W E P T)) :

                                                      A temporal assignment that faithfully represents a tower: g k returns the time coordinate at tower depth k. This is the bridge condition connecting the variable-assignment world to the tower world.

                                                      Equations
                                                      Instances For
                                                        theorem Core.Tense.tense_tower_bridge {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (tp : TensePronoun) (g : TemporalAssignment T) (t : Context.ContextTower (Context.KContext W E P T)) (hFaithful : towerFaithful g t) :

                                                        When the temporal assignment encodes tower time coordinates, interpTense at the eval-time index agrees with resolving the tensePronounAccessPattern against the tower.

                                                        This is the central result: Abusch's De Bruijn indexing IS tower-depth access for the temporal coordinate.

                                                        theorem Core.Tense.tense_root_bridge {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (tp : TensePronoun) (c : Context.KContext W E P T) (hEval : tp.evalTimeIndex = 0) (g : TemporalAssignment T) (hFaithful : towerFaithful g (Context.ContextTower.root c)) :
                                                        tp.evalTime g = c.time

                                                        In a root tower (no shifts), evalTimeIndex = 0 accesses the origin time. This is the root-clause default: tense is checked against speech time.

                                                        Combined with evalTime_root_is_speech, this shows that root-clause temporal evaluation is origin access — exactly Kaplan's thesis for time.

                                                        The access pattern for a root-clause tense pronoun (evalTimeIndex = 0) resolves to depth 0, which is the origin.

                                                        theorem Core.Tense.von_stechow_tower {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (g : TemporalAssignment T) (t : Context.ContextTower (Context.KContext W E P T)) (newTime : T) :
                                                        updateTemporal g t.depth newTime t.depth = newTime

                                                        @cite{von-stechow-2009}'s perspective shift — the attitude verb transmits its event time to the embedded clause — corresponds to pushing a temporalShift onto the tower.

                                                        Concretely: the updated assignment at the tower depth yields the new time.

                                                        theorem Core.Tense.von_stechow_tower_preserves {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (g : TemporalAssignment T) (t : Context.ContextTower (Context.KContext W E P T)) (newTime : T) (hFaithful : towerFaithful g t) (k : ) (hk : k < t.depth) :
                                                        updateTemporal g t.depth newTime k = (t.contextAt k).time

                                                        Under faithful encoding, layers below the push point are preserved.

                                                        theorem Core.Tense.von_stechow_tower_innermost {W : Type u_1} {E : Type u_2} {P : Type u_3} {T : Type u_4} (t : Context.ContextTower (Context.KContext W E P T)) (newTime : T) :
                                                        (t.push (Context.temporalShift newTime)).innermost.time = newTime

                                                        Pushing a temporal shift assigns newTime to the new depth in the extended tower, mirroring von_stechow_tower on the assignment side.