<?xml version="1.0"?>


<!-- Computation Tree Logic is widely used to specify systems.

CTL formulas are defined with classical boolean operators, with
constants (atomic formulas) and with existential temporal operators.
CTL formulas on atomic formulas \{a,b,c,d\} are defined by the
following grammar.

F -> false | a | b | c | d | F or F | neg F | EG F | F EUntil F | Enext F

However, we require that there is neither no consecutive Enext symbol
nor consecutive EG symbol.
This leads to the following grammar:

F -> Fg | Fn | Fo
Fn -> neg Fo | neg Fg
Fg -> EG Fn | EG Fo
Fo -> false | a | b | c | d | F or F | F EUntil F 


-->


<!DOCTYPE specification SYSTEM "seed.dtd">



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




  <union id="All"> <!-- defintion of a CTL formula-->
    <child idref="Fg"/> <!-- either formula begining by EG-->
    <child idref="Fn"/> <!-- or a formula begining by neg  -->
    <child idref="Fo"/> <!-- or  a formula begining by another symbol-->
  </union> 


  <union id="Fo"> <!-- defintion of a CTL formula-->
    <child idref="Atomic"/> <!-- either an atomic formula-->
    <child idref="Or"/> <!-- or the disjunction of two formulas-->
    <child idref="ENext"/> <!-- or the next of a formula-->
    <child idref="EUntil"/> <!-- or the Until of two formulas-->
  </union> 

  <union id="Fg"> <!-- defintion of a CTL formula begining by EG-->
    <child idref="gFn"/> <!-- either the second symbol is neg-->
    <child idref="gFo"/> <!-- or the second symbol is not neg-->
  </union> 

  <union id="Fn"> <!-- defintion of a CTL formula begining by neg-->
    <child idref="nFg"/> <!-- either the second symbol is neg-->
    <child idref="nFo"/> <!-- or the second symbol is not neg-->
  </union> 

  
  <unary id="nFg"> <!-- negation -->
    <symbol value="neg"/>
    <child idref="Fg"/>
  </unary>

  <unary id="nFo"> <!-- negation -->
    <symbol value="neg"/>
    <child idref="Fo"/>
  </unary>
  
  <unary id="gFo"> <!-- negation -->
    <symbol value="EG"/>
    <child idref="Fo"/>
  </unary>

  <unary id="gFn"> <!-- negation -->
    <symbol value="EG"/>
    <child idref="Fn"/>
  </unary>


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

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

  <unary id="EG"> <!-- globally -->
    <symbol value="EG"/>
    <child idref="All"/>
  </unary>


  <binary_neq id="EUntil"> <!-- until -->
    <symbol value="Euntil"/>
    <child idref="All"/>
  </binary_neq>
  
  <binary_sym_neq id="Or"> <!-- disjunction -->
    <symbol value="or"/>
    <child idref="All"/>
  </binary_sym_neq>

</specification>
