00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
#ifndef SPOT_LTLVISIT_REDUCFORM_HH
00023
# define SPOT_LTLVISIT_REDUCFORM_HH
00024
00025
#include "ltlast/formula.hh"
00026
#include "ltlast/visitor.hh"
00027
00028
namespace spot
00029 {
00030
namespace ltl
00031 {
00032
00034 enum reduce_options
00035 {
00037
Reduce_None = 0,
00039
Reduce_Basics = 1,
00041
Reduce_Syntactic_Implications = 2,
00043
Reduce_Eventuality_And_Universality = 4,
00045
Reduce_All = -1U
00046 };
00047
00054 formula*
reduce(
const formula* f,
int opt = Reduce_All);
00055
00057 formula*
basic_reduce_form(
const formula* f);
00058
00061
bool inf_form(
const formula* f1,
const formula* f2);
00065
bool infneg_form(
const formula* f1,
const formula* f2,
int n);
00066
00070
bool is_eventual(
const formula* f);
00071
00075
bool is_universal(
const formula* f);
00076
00078
int form_length(
const formula* f);
00079
00081 class node_type_form_visitor :
public const_visitor
00082 {
00083
public:
00084 enum type {
Atom,
Const,
Unop,
Binop,
Multop };
00085
node_type_form_visitor();
00086 virtual ~node_type_form_visitor(){};
00087 type
result() const;
00088
void visit(const
atomic_prop* ap);
00089
void visit(const
constant* c);
00090
void visit(const
unop* uo);
00091
void visit(const
binop* bo);
00092
void visit(const
multop* mo);
00093 protected:
00094 type result_;
00095 };
00096
node_type_form_visitor::type node_type(const
formula* f);
00097
00099
bool is_GF(const
formula* f);
00101
bool is_FG(const
formula* f);
00102 }
00103 }
00104
00105 #endif