<?xml version="1.0"?>


<!-- Linear Temporal Logic[P77] is widely used to specify systems.

LTL formulas are defined with classical boolean operators, with
constants (atomic formulas) and with temporal operators. In this file
we use a definition of LTL formulas using the Until and the Release
operators, that are fruitfull for model-checking purposes.

The grammar is the following (on \{a,b\}):

F -> a | b | neg a | neg b | F or F | F Until F | F Release F | next F
| F and F 

Bibliography

[P77] The Temporal Logic of Programs FOCS 1977: 46-57
-->


<!DOCTYPE specification SYSTEM "seed.dtd">



<specification>
  <start idref="All"/> 

  <union id="All"> <!-- defintion of a LTL formula-->
    <child idref="Atomic"/> <!-- either an atomic formula-->
    <child idref="Or"/> <!-- or the disjunction of two formulas-->
    <child idref="And"/> <!-- or the conjunction of two formulas-->
    <child idref="Next"/> <!-- or the next of a formula-->
    <child idref="Until"/> <!-- or the Until of two formulas-->
  </union> 

  <constants id="Atomic"> <!-- defintion of Atomic Formulas-->
    <symbol value="a"/>
    <symbol value="b"/>
    <symbol value="neg a"/>
    <symbol value="neg b"/>
  </constants>


  <unary id="Next"> <!-- next -->
    <symbol value="next"/>
    <child idref="All"/>
  </unary>


  <binary_neq id="Until"> <!-- until -->
    <symbol value="until"/>
    <child idref="All"/>
  </binary_neq>
  
  <binary_neq id="Realease"> <!-- release -->
    <symbol value="release"/>
    <child idref="All"/>
  </binary_neq>
  
  <binary_sym_neq id="Or"> <!-- or -->
    <symbol value="or"/>
    <child idref="All"/>
  </binary_sym_neq>

  <binary_sym_neq id="And"> <!-- and -->
    <symbol value="and"/>
    <child idref="All"/>
  </binary_sym_neq>

</specification>
