spot  0.9.1
Public Types | Public Member Functions | Static Public Member Functions | Protected Types | Protected Member Functions | Protected Attributes | Static Protected Attributes | Private Attributes
spot::ltl::binop Class Reference

Binary operator. More...

#include <ltlast/binop.hh>

Inheritance diagram for spot::ltl::binop:
Inheritance graph
[legend]
Collaboration diagram for spot::ltl::binop:
Collaboration graph
[legend]

List of all members.

Public Types

enum  type {
  Xor, Implies, Equiv, U,
  R, W, M, EConcat,
  EConcatMarked, UConcat
}
enum  opkind {
  Constant, AtomicProp, UnOp, BinOp,
  MultOp, BUnOp, AutomatOp
}
 Kind of a sub-formula. More...

Public Member Functions

virtual void accept (visitor &v) const
 Entry point for spot::ltl::visitor instances.
const formulafirst () const
 Get the first operand.
const formulasecond () const
 Get the second operand.
type op () const
 Get the type of this operator.
const char * op_name () const
 Get the type of this operator, as a string.
virtual std::string dump () const
 Return a canonic representation of the atomic proposition.
const formulaclone () const
 clone this node
void destroy () const
 release this node
opkind kind () const
 Return the kind of the top-level operator.
bool is_boolean () const
 Whether the formula use only boolean operators.
bool is_sugar_free_boolean () const
 Whether the formula use only AND, OR, and NOT operators.
bool is_in_nenoform () const
 Whether the formula is in negative normal form.
bool is_X_free () const
 Whether the formula avoids the X operator.
bool is_sugar_free_ltl () const
 Whether the formula avoids the F and G operators.
bool is_ltl_formula () const
 Whether the formula uses only LTL operators.
bool is_eltl_formula () const
 Whether the formula uses only ELTL operators.
bool is_psl_formula () const
 Whether the formula uses only PSL operators.
bool is_sere_formula () const
 Whether the formula uses only SERE operators.
bool is_finite () const
bool is_eventual () const
 Whether the formula is purely eventual.
bool is_universal () const
 Whether a formula is purely universal.
bool is_syntactic_safety () const
 Whether a PSL/LTL formula is syntactic safety property.
bool is_syntactic_guarantee () const
 Whether a PSL/LTL formula is syntactic guarantee property.
bool is_syntactic_obligation () const
 Whether a PSL/LTL formula is syntactic obligation property.
bool is_syntactic_recurrence () const
 Whether a PSL/LTL formula is syntactic recurrence property.
bool is_syntactic_persistence () const
 Whether a PSL/LTL formula is syntactic persistence property.
bool is_marked () const
 Whether the formula has an occurrence of EConcatMarked.
bool accepts_eword () const
 Whether the formula accepts [*0].
unsigned get_props () const
 The properties as a field of bits. For internal use.
size_t hash () const
 Return a hash key for the formula.

Static Public Member Functions

static const formulainstance (type op, const formula *first, const formula *second)
 Build a unary operator with operation op and children first and second.
static unsigned instance_count ()
 Number of instantiated binary operators. For debugging.
static std::ostream & dump_instances (std::ostream &os)
 Dump all instances. For debugging.

Protected Types

typedef std::pair< const
formula *, const formula * > 
pairf
typedef std::pair< type, pairfpair
typedef std::map< pair, const
binop * > 
map

Protected Member Functions

 binop (type op, const formula *first, const formula *second)
virtual ~binop ()
void ref_ () const
 increment reference counter if any
bool unref_ () const
 decrement reference counter if any, return true when the instance must be deleted (usually when the counter hits 0).
unsigned ref_count_ () const
 Number of references to this formula.

Protected Attributes

size_t count_
 The hash key of this formula.
union {
   unsigned   props
   ltl_prop   is
}; 

Static Protected Attributes

static map instances

Private Attributes

type op_
const formulafirst_
const formulasecond_

Detailed Description

Binary operator.


Member Typedef Documentation

typedef std::map<pair, const binop*> spot::ltl::binop::map [protected]
typedef std::pair<type, pairf> spot::ltl::binop::pair [protected]
typedef std::pair<const formula*, const formula*> spot::ltl::binop::pairf [protected]

Member Enumeration Documentation

enum spot::ltl::formula::opkind [inherited]

Kind of a sub-formula.

Enumerator:
Constant 
AtomicProp 
UnOp 
BinOp 
MultOp 
BUnOp 
AutomatOp 

Different kinds of binary opertaors

And and Or are not here. Because they are often nested we represent them as multops.

Enumerator:
Xor 
Implies 
Equiv 
U 
R 
W 
M 
EConcat 
EConcatMarked 
UConcat 

Constructor & Destructor Documentation

spot::ltl::binop::binop ( type  op,
const formula first,
const formula second 
) [protected]
virtual spot::ltl::binop::~binop ( ) [protected, virtual]

Member Function Documentation

virtual void spot::ltl::binop::accept ( visitor v) const [virtual]

Entry point for spot::ltl::visitor instances.

Implements spot::ltl::formula.

bool spot::ltl::formula::accepts_eword ( ) const [inline, inherited]

Whether the formula accepts [*0].

References spot::ltl::formula::ltl_prop::accepting_eword, and spot::ltl::formula::is.

const formula* spot::ltl::formula::clone ( ) const [inherited]

clone this node

This increments the reference counter of this node (if one is used).

void spot::ltl::formula::destroy ( ) const [inherited]
virtual std::string spot::ltl::binop::dump ( ) const [virtual]

Return a canonic representation of the atomic proposition.

Implements spot::ltl::formula.

static std::ostream& spot::ltl::binop::dump_instances ( std::ostream &  os) [static]

Dump all instances. For debugging.

const formula* spot::ltl::binop::first ( ) const

Get the first operand.

unsigned spot::ltl::formula::get_props ( ) const [inline, inherited]

The properties as a field of bits. For internal use.

References spot::ltl::formula::props.

size_t spot::ltl::formula::hash ( ) const [inline, inherited]
static const formula* spot::ltl::binop::instance ( type  op,
const formula first,
const formula second 
) [static]

Build a unary operator with operation op and children first and second.

Some reordering will be performed on arguments of commutative operators (Xor and Equiv) to ensure that for instance (a <=> b) is the same formula as (b <=> a).

Furthermore, the following trivial simplifications are performed (the left formula is rewritten as the right formula):

  • (1 => Exp) = Exp
  • (0 => Exp) = 1
  • (Exp => 1) = 1
  • (Exp => 0) = !Exp
  • (Exp => Exp) = 1
  • (1 ^ Exp) = !Exp
  • (0 ^ Exp) = Exp
  • (Exp ^ Exp) = 0
  • (0 <=> Exp) = !Exp
  • (1 <=> Exp) = Exp
  • (Exp <=> Exp) = Exp
  • (Exp U 1) = 1
  • (Exp U 0) = 0
  • (0 U Exp) = Exp
  • (Exp U Exp) = Exp
  • (Exp W 1) = 1
  • (0 W Exp) = Exp
  • (1 W Exp) = 1
  • (Exp W Exp) = Exp
  • (Exp R 1) = 1
  • (Exp R 0) = 0
  • (1 R Exp) = Exp
  • (Exp R Exp) = Exp
  • (Exp M 0) = 0
  • (1 M Exp) = Exp
  • (0 M Exp) = 0
  • (Exp M Exp) = Exp
  • 0 <>-> Exp = 0
  • 1 <>-> Exp = Exp
  • [*0] <>-> Exp = 0
  • Exp <>-> 0 = 0
  • boolExp <>-> Exp = boolExp & Exp
  • 0 []-> Exp = 1
  • 1 []-> Exp = Exp
  • [*0] []-> Exp = 1
  • Exp []-> 1 = 1
  • boolExp <>-> Exp = !boolExp | Exp
static unsigned spot::ltl::binop::instance_count ( ) [static]

Number of instantiated binary operators. For debugging.

bool spot::ltl::formula::is_boolean ( ) const [inline, inherited]

Whether the formula use only boolean operators.

References spot::ltl::formula::ltl_prop::boolean, and spot::ltl::formula::is.

bool spot::ltl::formula::is_eltl_formula ( ) const [inline, inherited]

Whether the formula uses only ELTL operators.

References spot::ltl::formula::ltl_prop::eltl_formula, and spot::ltl::formula::is.

bool spot::ltl::formula::is_eventual ( ) const [inline, inherited]

Whether the formula is purely eventual.

Pure eventuality formulae are defined in

      /// @InProceedings{	  etessami.00.concur,
      /// author  	= {Kousha Etessami and Gerard J. Holzmann},
      /// title		= {Optimizing {B\"u}chi Automata},
      /// booktitle	= {Proceedings of the 11th International Conference on
      /// 		  Concurrency Theory (Concur'2000)},
      /// pages		= {153--167},
      /// year		= {2000},
      /// editor  	= {C. Palamidessi},
      /// volume  	= {1877},
      /// series  	= {Lecture Notes in Computer Science},
      /// publisher	= {Springer-Verlag}
      /// }
      /// 

A word that satisfies a pure eventuality can be prefixed by anything and still satisfies the formula.

References spot::ltl::formula::ltl_prop::eventual, and spot::ltl::formula::is.

bool spot::ltl::formula::is_finite ( ) const [inline, inherited]

Whether a SERE describes a finite language, or an LTL formula uses no temporal operator but X.

References spot::ltl::formula::ltl_prop::finite, and spot::ltl::formula::is.

bool spot::ltl::formula::is_in_nenoform ( ) const [inline, inherited]

Whether the formula is in negative normal form.

A formula is in negative normal form if the not operators occur only in front of atomic propositions.

References spot::ltl::formula::ltl_prop::in_nenoform, and spot::ltl::formula::is.

bool spot::ltl::formula::is_ltl_formula ( ) const [inline, inherited]

Whether the formula uses only LTL operators.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::ltl_formula.

bool spot::ltl::formula::is_marked ( ) const [inline, inherited]

Whether the formula has an occurrence of EConcatMarked.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::not_marked.

bool spot::ltl::formula::is_psl_formula ( ) const [inline, inherited]

Whether the formula uses only PSL operators.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::psl_formula.

bool spot::ltl::formula::is_sere_formula ( ) const [inline, inherited]

Whether the formula uses only SERE operators.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::sere_formula.

bool spot::ltl::formula::is_sugar_free_boolean ( ) const [inline, inherited]

Whether the formula use only AND, OR, and NOT operators.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::sugar_free_boolean.

bool spot::ltl::formula::is_sugar_free_ltl ( ) const [inline, inherited]

Whether the formula avoids the F and G operators.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::sugar_free_ltl.

bool spot::ltl::formula::is_syntactic_guarantee ( ) const [inline, inherited]

Whether a PSL/LTL formula is syntactic guarantee property.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::syntactic_guarantee.

bool spot::ltl::formula::is_syntactic_obligation ( ) const [inline, inherited]

Whether a PSL/LTL formula is syntactic obligation property.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::syntactic_obligation.

bool spot::ltl::formula::is_syntactic_persistence ( ) const [inline, inherited]

Whether a PSL/LTL formula is syntactic persistence property.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::syntactic_persistence.

bool spot::ltl::formula::is_syntactic_recurrence ( ) const [inline, inherited]

Whether a PSL/LTL formula is syntactic recurrence property.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::syntactic_recurrence.

bool spot::ltl::formula::is_syntactic_safety ( ) const [inline, inherited]

Whether a PSL/LTL formula is syntactic safety property.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::syntactic_safety.

bool spot::ltl::formula::is_universal ( ) const [inline, inherited]

Whether a formula is purely universal.

Purely universal formulae are defined in

      /// @InProceedings{	  etessami.00.concur,
      /// author  	= {Kousha Etessami and Gerard J. Holzmann},
      /// title		= {Optimizing {B\"u}chi Automata},
      /// booktitle	= {Proceedings of the 11th International Conference on
      /// 		  Concurrency Theory (Concur'2000)},
      /// pages		= {153--167},
      /// year		= {2000},
      /// editor  	= {C. Palamidessi},
      /// volume  	= {1877},
      /// series  	= {Lecture Notes in Computer Science},
      /// publisher	= {Springer-Verlag}
      /// }
      /// 

Any (non-empty) suffix of a word that satisfies a purely universal formula also satisfies the formula.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::universal.

bool spot::ltl::formula::is_X_free ( ) const [inline, inherited]

Whether the formula avoids the X operator.

References spot::ltl::formula::is, and spot::ltl::formula::ltl_prop::X_free.

opkind spot::ltl::formula::kind ( ) const [inline, inherited]

Get the type of this operator.

const char* spot::ltl::binop::op_name ( ) const

Get the type of this operator, as a string.

void spot::ltl::ref_formula::ref_ ( ) const [protected, virtual, inherited]

increment reference counter if any

Reimplemented from spot::ltl::formula.

unsigned spot::ltl::ref_formula::ref_count_ ( ) const [protected, inherited]

Number of references to this formula.

Get the second operand.

bool spot::ltl::ref_formula::unref_ ( ) const [protected, virtual, inherited]

decrement reference counter if any, return true when the instance must be deleted (usually when the counter hits 0).

Reimplemented from spot::ltl::formula.


Member Data Documentation

union { ... } [protected, inherited]
size_t spot::ltl::formula::count_ [protected, inherited]

The hash key of this formula.

Referenced by spot::ltl::formula::hash().

map spot::ltl::binop::instances [static, protected]
unsigned spot::ltl::formula::props [inherited]

The documentation for this class was generated from the following file:

Please comment this page and report errors about it on the RefDocComments page.
Generated on Wed May 23 2012 12:06:47 for spot by doxygen 1.7.6.1