/*******************************************************************\

Module:

Author: Daniel Kroening, kroening@cs.cmu.edu

\*******************************************************************/

#include "expr.h"
#include "symbol.h"
#include "std_types.h"

exprt gen_true();
exprt gen_false();
exprt gen_zero(const typet &type);
exprt gen_one(const typet &type);
exprt gen_not(const exprt &op);
exprt gen_unary(const std::string &id, const typet &type, const exprt &op);
exprt gen_binary(const std::string &id, const typet &type, const exprt &op1, const exprt &op2);
exprt gen_and(const exprt &op1, const exprt &op2);
exprt gen_and(const exprt &op1, const exprt &op2, const exprt &op3);
exprt gen_or(const exprt &op1, const exprt &op2);
exprt gen_or(const exprt &op1, const exprt &op2, const exprt &op3);
exprt gen_implies(const exprt &op1, const exprt &op2);
exprt gen_equal(const exprt &op1, const exprt &op2);
exprt gen_address_of(const exprt &op);
exprt gen_index(const exprt &array, const exprt &index);

pointer_typet gen_pointer_type(const typet &subtype);

void gen_and(exprt &expr);
void gen_or(exprt &expr);

exprt symbol_expr(const symbolt &symbol);

void make_next_state(exprt &expr);
