Generalized intervals with open/closed boundaries #
@cite{rouillard-2026}
GInterval extends the basic Interval with explicit open/closed
annotations on each endpoint, plus the closed/open_ constructors,
the toOpen/toClosed operations (eq. 99a–b), and generalized
containment/subinterval relations.
Used by Rouillard 2026's account of G-TIA polarity sensitivity, where event runtimes are closed and PTSs are open.
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.
Equations
- gi.toInterval = { start := gi.left, finish := gi.right, valid := ⋯ }
Instances For
A closed interval contained in an open generalized interval forces strict
inequalities at both endpoints. The right hypothesis the prior MaxInfo
no_smallest_open_including_closed had to assume (pts.left < runtime.start)
is derivable once openness is enforced structurally — instantiate
gsubinterval at the closed endpoints and unfold gcontains.