frac properties

As of version 1.7.0, frac supports declarations of properties and assert directives. Properties are defined from observables (or probes); the language of properties include LTL properties, Dwyer et al. patterns, and timed extensions of the latter (work in progress).

Observables, or probes

An observable describes a state property or a set of transitions of a fiacre specification. They obey the following syntax:
   // observables

    o ::=   path item
          | "enter" o
          | "leave" o
          | "not" o
          | o "and" o
          | o "or" o
          | o "=>" o
          | "(" o ")"

    path ::= IDENT "/" (NAT "/")*

    item ::=   "state" IDENT
          |    "value" exp
          |    "tag" IDENT
          |    "event" IDENT
Observables play the role of atomic proposition in the properties. Their meanings is as follows:


A fiacre description may include declarations of properties and "assert" directives. The language of declarations is extended by:

	"property" IDENT "is" p

	"assert" IDENT {-true STRING} {-false STRING}

When compiling a fiacre description, frac generates, in addition to the usual .c and .net files, a .ltl file (also in directory .tts) containing a list of declarations of selt properties (each corresponding with some fiacre property in the fiacre description) and a list of verification requests (one for each "assert" directive in the fiacre description).

The set of properties includes "general" properties, "pattern" properties, and property combinators. Properties obey the following grammar.

   // time intervals (NAT are nonnegative integers)

   i ::= ("[" | "]") NAT "," (NAT ("]" | "[") | "...[")

   // durations

   d ::= NAT

   // ltl properties (ltl on observables)

    l ::=   o                // observable
          | "[]" l           // always
          | "<>" l           // eventually
          | "()" l           // next
          | "not" l
          | l "and" l
          | l "or" l
          | l "=>" l
          | l "until" l      // until
          | l "release" l    // release
          | "(" l ")"

   // properties

   p ::= 

       // ltl properties

         "ltl" l

       // general

       | "deadlockfree"
       | "infinitelyoften" o
       | "mortal" o

       // presence patterns

       | "present" o
       | "present" o "after" o
       | "present" o "before" o
       | "present" o "between" o "and" o
       | "present" o "after" o "until" o

       | "present" o "within" i
       | "present" o "lasting" d
       | "present" o "after" o "within" i
       | "present" o "before" o "within" i

       // absence patterns       

       | "absent" o
       | "absent" o "after" o
       | "absent" o "before" o
       | "absent" o "between" o "and" o
       | "absent" o "after" o "until" o

       | "absent" o "within" i
       | "absent" o "after" o "within" i
       | "absent" o "before" o "for" d

       // response patterns

       | o "leadsto" o
       | o "leadsto" o "before" o
       | o "leadsto" o "after" o
       | o "leadsto" o "between" o "and" o
       | o "leadsto" o "after" o "until" o

       | o "leadsto" o "within" i
       | o "leadsto" o "before" o "within" i
       | o "leadsto" o "after" o "within" i

       // universality patterns

       | "always" o
       | "always" o "after" o
       | "always" o "before"
       | "always" o "between" o "and" o
       | "always" o "after" o "until" o

       // precedence patterns

       | o "precedes" o
       | o "precedes" o "before" o
       | o "precedes" o "after" o
       | o "precedes" o "between" o "and" o
       | o "precedes" o "after" o "until" o

       // compositions

       | p "and" q
       | p "or" q
       | p "=>" q
       | "not" p

       // parentheses
       | "(" p ")"

The semantics of untimed patterns is exactly that of Dwyer et al. patterns patterns on (see also [DAC99]).



[DAC99] Matthew B. Dwyer, George S. Avrunin, James C. Corbett Patterns in property specifications for finite-state verification ICSE '99 Proceedings of the 21st international conference on Software engineering ACM New York, NY, USA, 1999 ISBN:1-58113-074-0