souffle
2.0.2-371-g6315b36
|
Apply a grounding so that the witness of a selection aggregate (min/max) can be transferred to the outer scope. More...
#include <GroundWitnesses.h>
Public Member Functions | |
GroundWitnessesTransformer * | clone () const override |
std::string | getName () const override |
Public Member Functions inherited from souffle::ast::transform::Transformer | |
bool | apply (TranslationUnit &translationUnit) |
virtual | ~Transformer ()=default |
Private Member Functions | |
bool | transform (TranslationUnit &translationUnit) override |
Apply a grounding so that the witness of a selection aggregate (min/max) can be transferred to the outer scope.
Here is an example:
Tallest(student) :- _ = max height : { Student(student, height) }.
student occurs ungrounded in the outer scope, but we can fix this by using the aggregate result to figure out which students satisfy this aggregate.
Tallest(student) :- n = max height : { Student(student0, height) }, Student(student, n).
This transformation is really just syntactic sugar.
Definition at line 49 of file GroundWitnesses.h.
|
inlineoverridevirtual |
Implements souffle::ast::transform::Transformer.
Definition at line 62 of file GroundWitnesses.h.
|
inlineoverridevirtual |
Implements souffle::ast::transform::Transformer.
Definition at line 58 of file GroundWitnesses.h.
|
overrideprivatevirtual |
Implements souffle::ast::transform::Transformer.
Definition at line 31 of file GroundWitnesses.cpp.