3#ifndef __PERCEMON_AST_AST_HPP__
4#define __PERCEMON_AST_AST_HPP__
6#include "percemon/ast/primitives.hpp"
8#include "percemon/ast/functions.hpp"
11#include <initializer_list>
18namespace percemon::ast {
20using namespace primitives;
21using namespace functions;
25using ExistsPtr = std::shared_ptr<Exists>;
27using ForallPtr = std::shared_ptr<Forall>;
29using PinPtr = std::shared_ptr<Pin>;
31using NotPtr = std::shared_ptr<Not>;
33using AndPtr = std::shared_ptr<And>;
35using OrPtr = std::shared_ptr<Or>;
37using PreviousPtr = std::shared_ptr<Previous>;
39using AlwaysPtr = std::shared_ptr<Always>;
41using SometimesPtr = std::shared_ptr<Sometimes>;
43using SincePtr = std::shared_ptr<Since>;
45using BackToPtr = std::shared_ptr<BackTo>;
49using ComplementPtr = std::shared_ptr<Complement>;
51using IntersectPtr = std::shared_ptr<Intersect>;
53using UnionPtr = std::shared_ptr<Union>;
55using InteriorPtr = std::shared_ptr<Interior>;
57using ClosurePtr = std::shared_ptr<Closure>;
60using SpExistsPtr = std::shared_ptr<SpExists>;
62using SpForallPtr = std::shared_ptr<SpForall>;
65using SpPreviousPtr = std::shared_ptr<SpPrevious>;
67using SpAlwaysPtr = std::shared_ptr<SpAlways>;
69using SpSometimesPtr = std::shared_ptr<SpSometimes>;
71using SpSincePtr = std::shared_ptr<SpSince>;
73using SpBackToPtr = std::shared_ptr<SpBackTo>;
76using CompareSpAreaPtr = std::shared_ptr<CompareSpArea>;
78using Expr = std::variant<
109using SpatialExpr = std::variant<
124Expr operator~(
const Expr& e);
125Expr operator&(
const Expr& lhs,
const Expr& rhs);
126Expr operator|(
const Expr& lhs,
const Expr& rhs);
127Expr operator>>(
const Expr& lhs,
const Expr& rhs);