Skip to content

GitLab

  • Projects
  • Groups
  • Snippets
  • Help
    • Loading...
  • Help
    • Help
    • Support
    • Community forum
    • Submit feedback
    • Contribute to GitLab
  • Sign in
M MTSA
  • Project overview
    • Project overview
    • Details
    • Activity
    • Releases
  • Repository
    • Repository
    • Files
    • Commits
    • Branches
    • Tags
    • Contributors
    • Graph
    • Compare
  • Issues 31
    • Issues 31
    • List
    • Boards
    • Labels
    • Service Desk
    • Milestones
  • Merge requests 3
    • Merge requests 3
  • CI/CD
    • CI/CD
    • Pipelines
    • Jobs
    • Schedules
  • Operations
    • Operations
    • Metrics
    • Incidents
    • Environments
  • Packages & Registries
    • Packages & Registries
    • Package Registry
  • Analytics
    • Analytics
    • CI/CD
    • Repository
    • Value Stream
  • Wiki
    • Wiki
  • Snippets
    • Snippets
  • Members
    • Members
  • Activity
  • Graph
  • Create a new issue
  • Jobs
  • Commits
  • Issue Boards
Collapse sidebar
  • lafhis
  • MTSA
  • Wiki
    • Enduser
  • Fluents and LTL properties

Last edited by Sebastian Uchitel Jun 19, 2026
Page history

Fluents and LTL properties

MTSA supports fluent linear temporal logic formulae FLTL to write properties that can be checked against models and also as a form of constructing models.

Fluents

Fluents are defined with an initiating and terminating set of actions that must be disjoint. Also an initial value can be set. The default value is false.

const True = 1
fluent DoorOpen = <open, close> 
fluent off = <{off, reset}, on > initially True

Fluents can be indexed:

range N = 1..3
fluent Ready[i:N] = <ready[i], reset[i]> initially False

Assertions in FLTL

FLTL properties are constructed with the assert keyword using fluent names or action names as atoms, non-temporal operators (|| (or), && (and), <-> (iff), -> (implication), ! (negation)), quantifiers (forall, exists), and temporal operators (U (Until), W (weak until), X (next), <> (eventually), [] (always)).

assert ALL_READY = forall[i:N] ([]<>Ready[i])

To check a behaviour model against a property, select a composite process from the pulldown menu at the top of the application window, then use Check > LTL from the menu.

Observers defined in FLTL

It is possible to create a process that observes system behaviour and flags violations of safety properties defined by an FLTL formula.

ltl_property ONOFF = ([](on -> X off) && [](off -> X on) && on)
||MONITORED_SYS = (ONOFF || SYS).

The ltl_property keyword works similarly to the property keyword, except that the former takes a safety property expressed in FLTL and the latter a sequential process defined in FSP.

Constraints defined in FLTL

The constraint keyword builds a process that constrains all behaviour that violates a given FLTL safety property. Where ltl_property flags an error, constraint impedes the event that would flag that error.

constraint ONOFF2 = ([](on -> X off) && [](off -> X on) && on)
||CONSTRAINED_SYS = (ONOFF2 || SYS).

The alphabet of the resulting LTS contains exactly all events that appear in the formula or in fluent definitions used by the formula. This implies that the interpretation of the next operator (X) is of an alphabetised next.

constraint P = [] (p -> X q)

fluent A = <a, c>
fluent B = <b, c>

constraint Q = [](A -> X B)

← End User

Clone repository
  • Developer
  • End User
  • FSP Keywords
  • devs
    • outputmessages
  • enduser
    • DCS
    • Discrete Event Controller Synthesis
    • FSP
    • Fluents and LTL properties
    • Hello World
    • Modal Transition Systems
  • Home