<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Declarative Debugging for Datalog with Aggregation</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>Raimund Dachselt</string-name>
          <email>raimund.dachselt@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Lukas Gerlach</string-name>
          <email>lukas.gerlach@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Philipp Hanisch</string-name>
          <email>philipp.hanisch1@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Alex Ivliev</string-name>
          <email>alex.ivliev@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Markus Krötzsch</string-name>
          <email>markus.kroetzsch@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Maximilian Marx</string-name>
          <email>maximilian.marx@tu-dresden.de</email>
          <xref ref-type="aff" rid="aff1">1</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Julián Méndez</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>Interactive Media Lab Dresden</institution>
          ,
          <addr-line>TU Dresden</addr-line>
          ,
          <country country="DE">Germany</country>
        </aff>
        <aff id="aff1">
          <label>1</label>
          <institution>Knowledge-Based Systems Group, TU Dresden</institution>
          ,
          <country country="DE">Germany</country>
        </aff>
      </contrib-group>
      <pub-date>
        <year>2026</year>
      </pub-date>
      <abstract>
        <p>We propose summary proof trees as a way for explaining derivations in Datalog programs with aggregation. These combine structurally similar parts of proof trees into a single, easier to understand structure. We show how to query for such summaries, discuss the implementation in our rule engine Nemo, and empirically establish the feasibility of the method. We also briefly introduce a graphical interface for editing these proof queries and visualising the results.</p>
      </abstract>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>1. Introduction</title>
      <p>
        As rule systems have matured to support large graphs (e.g., &gt;100M edges on a laptop, &gt;8B edges on a
server [5]), an important open challenge remains explainability of results. In spite of their declarative
(
        <xref ref-type="bibr" rid="ref1">1</xref>
        )
(
        <xref ref-type="bibr" rid="ref2">2</xref>
        )
(
        <xref ref-type="bibr" rid="ref3">3</xref>
        )
(
        <xref ref-type="bibr" rid="ref4">4</xref>
        )
nature, recursive rules can be dificult to understand and debug. A classical explanation approach for
Datalog are proof trees (a.k.a. derivation trees), where inferred facts have exactly the premises of the
applied rule as children [13, 14]. However, such trees can only explain one fact at a time, and even this
is only supported by few systems [4, 5]. Recent works that aim at obtaining all possible derivations for
a fact (i.e., its provenance) still focus on single facts [15, 16, 17, 18]. Even more problematic, modern
systems support aggregation (e.g., COUNT, SUM, MIN, MAX), such that even a single inference may
rely on thousands of premises. Existing approaches do not account for how to represent aggregation
within proof trees, and how to practically handle the relevant scale.
      </p>
      <p>In this paper, we therefore develop a new approach for explaining results of Datalog with (stratified)
aggregates, and a prototype implementation that illustrates its feasibility. After clarifying preliminaries
on Datalog with aggregates (Section 2), the starting point of our work is an extended notion of proof
tree, or rather proof graph, which includes witnesses for all elements in sets over which aggregates
have been computed (Section 3). This proof graph might be overwhelmingly huge, so we develop ways
to select and summarise relevant content (Section 4). The main idea is to combine many individual
proofs into a single tree structure that shows their common structure and has sets of inferences at each
node. We define two types of queries for summarising proof graphs: type 1 queries start from a set of
inferences and find their maximal common proof structures, and type 2 queries start from a given proof
structure and find inferences that were produced in this way.</p>
      <p>These queries form the basis of a prototype implementation for interactive proof graph exploration,
which we develop by extending the Nemo graph rule engine [5]. Our algorithmic approach is explained
in Section 5 and evaluated for (proof) query answering performance in Section 6. We finish with a brief
overview of how this backend functionality is then used in an interactive user interface (Section 7),
which can also be explored online at https://tools.iccl.inf.tu-dresden.de/nemo/tgd-2026.</p>
      <p>All of our tools are free and open source (see https://github.com/knowsys/nemo, https://github.com/
knowsys/nemo-web, and https://github.com/imldresden/nev).</p>
    </sec>
    <sec id="sec-2">
      <title>2. Preliminaries</title>
      <p>We start by introducing the syntax and semantics of the extension of Datalog that we consider in this
work. A more gentle introduction can be found in recent literature [1].</p>
      <p>Syntax We consider countably infinite, mutually disjoint sets of predicates P, constants C, and
variables V, where C contains all integer numbers (and possibly more).1 A term  is a constant or a
variable, i.e.,  ∈ C ∪ V. Every predicate symbol  ∈ P has an arity ar() ∈ N (possibly 0).</p>
      <p>An atom has the form (1, . . . , ℓ) for predicate  ∈ P and terms 1, . . . , ℓ with ℓ = ar(). List of
terms are denoted in bold, e.g.,  = 1, . . . , ||, so we may write the previous atom as (). Similarly, ,
, etc. denote lists of variables. We treat lists as sets when order is irrelevant. A logical expression is
ground if it does not contain variables.</p>
      <p>Our syntax for aggregation is inspired by ASP engines like Clingo [19]. We consider the set of
aggregation functions F = {COUNT, MAX, MIN, SUM} – further aggregates can easily be added
without afecting our results. An aggregation atom is an expression of the form
where  ∈ V is the result variable,  ⊆ C ∪ V a list of terms,  ∈ F an aggregation function, and
1, . . . , ℓ a list of atoms, known as side conditions. The part in {. . .} is the aggregation set expression.
A rule  is of the form</p>
      <p>=  { : 1, . . . , ℓ},
 ←</p>
      <p>
        1, . . . , , 1, . . . , ,
1We adopt a weak typing approach where constants of diferent datatypes are part of a joint domain, as is typical for schema-less
graph languages like RDF.
(
        <xref ref-type="bibr" rid="ref5">5</xref>
        )
(
        <xref ref-type="bibr" rid="ref6">6</xref>
        )
where ,  ≥ 0,  and 1, . . . ,  are atoms, and 1, . . . ,  are aggregation atoms. The outer
variables of  are all variables that occur in an atom  or as result variable in an aggregation atom  .
 is the head and 1, . . . , , 1, . . . ,  the body of . We further require: (a) every variable in  is
an outer variable; (b) result variables of aggregation atoms do not occur in aggregation set expressions;
(c) for aggregation atoms of the form (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ), every variable in  occurs in the side conditions or is an outer
variable. Negation will later be introduced as syntactic sugar.
      </p>
      <p>Example 2. We extend Example 1 with the following rule that finds parents with multiple children
(mC):
mC() ←
par(, ),
 = COUNT{ : par(, )},  ≥ 2
Here, the aggregation atom  = COUNT{ : par(, )} counts the number of children  for each parent
, and stores it in the result variable . The set of outer variables is {, , }.</p>
      <p>
        A program  is a finite set of rules that is stratified in the following sense. There is a mapping
 : P → N such that, for every rule  ∈  of the form (
        <xref ref-type="bibr" rid="ref6">6</xref>
        ) with  = ()
1. () ≥ () for every atom () ∈ {1, . . . , },
2. () &gt; () for every atom () ∈ {1, . . . , ℓ} occurring in the side condition of some
1, . . . , .
      </p>
      <p>
        Any such  partitions  into disjoint strata, where the stratum for  ∈ N is  = {() ← ℬ ∈
() = }.
 |
Semantics Variable-free (ground) atoms are also called facts, and a database is a finite set of facts.
Programs are evaluated over databases to obtain newly inferred facts as output.2 Aggregation functions
are applied to sets of tuples. Let  ⊆ C be a set of -tuples of constants. We associate the following
partial function ⋃︀≥ 1 C → C with each aggregation function:
(
        <xref ref-type="bibr" rid="ref7">7</xref>
        )
(
        <xref ref-type="bibr" rid="ref8">8</xref>
        )
(
        <xref ref-type="bibr" rid="ref9">9</xref>
        )
(
        <xref ref-type="bibr" rid="ref10">10</xref>
        )
(
        <xref ref-type="bibr" rid="ref11">11</xref>
        )
MIN() = min{ | ⟨, 2, . . . , ⟩ ∈ ,  ∈ N}
MAX() = max{ | ⟨, 2, . . . , ⟩ ∈ ,  ∈ N}
      </p>
      <p>SUM() = ∑︀⟨,2,...,⟩∈,∈N</p>
      <p>
        COUNT() = ||
Lines (
        <xref ref-type="bibr" rid="ref8">8</xref>
        )–(
        <xref ref-type="bibr" rid="ref10">10</xref>
        ) consider only those tuples in  that have a natural number as their first component. We
let min ∅ and max ∅ be undefined, so MIN() and MAX() might also be undefined: rules will not be
applicable in cases where this occurs. The ∑︀ in (
        <xref ref-type="bibr" rid="ref10">10</xref>
        ) iterates over all tuples, so distinct tuples with the
same number  in their first component will lead to  being added multiple times. This is important
since Datalog semantics is based on sets (not multisets): if we would project to a set that contains only
the numbers to add, duplicates would be eliminated, and each value could only be considered once. The
sum over the empty collection is 0, so SUM() is always defined.
      </p>
      <p>
        An assignment  for a rule  maps variables  in  to constants  () ∈ C. For a list of terms , let
 (⟨1, . . . , ⟩) = ⟨ (1), . . . ,  ()⟩ where  () =  if  does not contain  in its domain. We extend
this notation to (aggregation) atoms. Given an atom (), we set  (()) = ( ()). Let  be an
aggregation atom of form (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ). Then we define  () as  () =  { () :  (1), . . . ,  (ℓ)}. We will
also use  (ℰ ) for an aggregation set expression ℰ in a similar way.
      </p>
      <p>A rule  is applicable over a given database  if it has a match, defined next. Given an assignment
 for  and an aggregation atom  =  { : 1, . . . , ℓ} in , we write { : 1, . . . , ℓ} for the set of
all tuples of the form  ′() where the  ′ is an extension of  to all variables in 1, . . . , ℓ such that
2In some contexts, it is useful to designate input and output predicates that define the intended “interface” of a program [ 1],
but this is not relevant to our present work.
 ′() ∈  for all  ∈ {1, . . . , ℓ}. In other words, ℰ  is the set to which the aggregation set expression
ℰ evaluates under the given bindings for outer variables. Let  be an assignment for  whose domain is
exactly the set of outer variables of . Then  is a match for  over  if, for every:
1. body atom  of ,  () ∈ , and
2. aggregation atom  =  {ℰ } of ,  () =  (ℰ  ).</p>
      <p>Note that condition 2 requires  to be defined for ℰ  .</p>
      <p>A rule  with head  is applicable to  if it has a match  over  and  () ∈/ . The application of
 under  then results in  ∪ { ()}.</p>
      <p>A program  is evaluated based on some stratification . We assume without loss of generality that
the non-empty strata of  are exactly 1, . . . , ℓ. Let 0∞ = . For  = 0, . . . , ℓ − 1, let ∞+1 be the
database resulting in an arbitrary maximal sequence of applications of rules in +1 starting from ∞.
The result  () of  over  is  () = ℓ∞. It is a standard fact in logic programming (and easy to
verify) that (a) every ∞ is finite, (b) +1 does not depend on the order of rule applications, and (c)
∞
 () does not depend on the chosen stratification.</p>
      <p>Negation and Builtins It is not hard to extend our syntax and semantics to support builtin predicates
for which defining facts are assumed given without being specified in the database. For example, a
unary predicate · =0 can be defined by the single fact · =0(0) (we would usually prefer infix notation, as
in  = 0). There can also be infinite builtins, such as the binary &lt;; in Datalog extensions, variables that
occur with such infinite builtins are typically required to also occur in regular (finite) body atoms [1].</p>
      <p>Using just a single finite builtin · = 0, we can express (stratified) negation. Indeed, a negated atom
¬() can be rewritten into two atoms  = COUNT{ : ()} and  = 0, where  is a fresh variable.
We allow  to contain variables that are not used anywhere else: they are “inner” variables in the side
condition, interpreted existentially. This is also how rule engines like Nemo and Clingo interpret such
variables in negated atoms.</p>
    </sec>
    <sec id="sec-3">
      <title>3. Proof Graphs</title>
      <p>Every fact that is produced by a program  over a database  has at least one proof, which we will now
define more concretely. The structure of proofs contains valuable information for explaining results,
debugging programs, and certifying correctness [20]. While proof trees (or derivation trees) are common
in logic programming, we must extend them here to cover aggregation. Moreover, we now consider
directed acyclic graphs instead of mere trees, leading to a compact representation of proofs for all
inferred facts.</p>
      <p>
        To clarify the role of facts as preconditions of specific rule applications, we refer to specific body
atoms in rules: a body atom position is a pair ⟨, ⟩ where  is a rule as in (
        <xref ref-type="bibr" rid="ref6">6</xref>
        ) containing  atoms and 
aggregation atoms, and 1 ≤  ≤  + . Likewise, for an aggregation atom  of form (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ) with ℓ side
 ∈ { : par(, )}  ∈ { : par(, )}
⟨ = COUNT{ : par(, )}, 1⟩
      </p>
      <p>
        ⟨ = COUNT{ : par(, )}, 1⟩
conditions, a side condition atom position is a pair ⟨, ⟩ with 1 ≤  ≤ ℓ. The set of all atom positions
(of either kind) of a program  is denoted APos( ). To denote information about how aggregation
atoms were evaluated, we introduce evaluated aggregation atoms of the form  =  { : 1, . . . , ℓ}
where  ∈ C and all other pieces are as in (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ). The general shape of the proof structures we consider is
as follows:
Definition 1.
components:
      </p>
      <p>A derivation graph  = ⟨, ,  ⟩ for program  is a directed acyclic graph with the
• vertex set  , where each  ∈  is either a ground atom (), an evaluated aggregation atom
 =  {ℰ }, or an expression  ∈ {ℰ } with  a list of constants and ℰ an aggregation set expression,
• edge set  ⊆  ×  , and
• edge labelling function  :  → APos( ) ∪ {*} .</p>
      <p>
        Intuitively, each node of the derivation graph represents a derivation result, and its children represent
the data that it was derived from. For regular ground atoms, these will be the instantiated body atoms
of the relevant rule application (edges labelled by body atom position); for evaluated aggregation atoms,
they will be expressions  ∈ {ℰ } for all elements of the evaluated aggregation set expression (edges
labelled by * ); and for expressions  ∈ {ℰ }, they will be the instantiated atoms of the relevant side
conditions (edges labelled by side condition atom position). Figure 1 and Figure 2 show examples of
derivation graphs for Example 1 and Example 2, respectively. Note that kin(, ) has two diferent
proofs in Figure 1 (either by applying rule (
        <xref ref-type="bibr" rid="ref2">2</xref>
        ) or rule (
        <xref ref-type="bibr" rid="ref4">4</xref>
        )). Here, we are primarily interested in proofs
corresponding to the concrete rule applications that occurred during program evaluation, motivating
our next definition.
      </p>
      <p>Definition 2. Consider a rule  that was applied to a database  using a match  . The proof graph for
this rule application is the derivation graph  that contains exactly the following labelled edges (and
associated vertices):</p>
      <p>(A) if  is the th (aggregation or regular) body atom of , and  is the head of , then  contains
the edge</p>
      <p>() →−⟨,⟩  (),
where  () denotes the expression obtained from  by replacing each (necessarily outer) variable  by
 ().</p>
      <p>
        (B) if  is an aggregation atom of form (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ) where ℰ is its aggregation set expression, then, for every
 ∈ ℰ  ,  contains the edge
      </p>
      <p>∈ { (ℰ )} →−*  ().</p>
      <p>Moreover, if  ′ is the extension of  that was used to establish  ∈ ℰ  ,3 then  contains the edges
for each  ∈ {1, . . . , ℓ}.</p>
      <p>Definition 3. The proof graph for a sequence of rule applications of a program  starting from a
database  is the union of the proof graphs of all individual rule applications in the sequence.</p>
      <p>Since rule application sequences are restricted to use previously derived facts, and since stratification
ensures that any aggregation atom is only evaluated over side conditions of lower strata, we immediately
get the following.</p>
      <p>Proposition 1. The proof graph of any sequence of rule applications is a derivation graph, and in particular
it is acyclic.</p>
      <p>Example 3. Recall the rule for finding parents with multiple children from Example 2:</p>
      <p>
        On the database from Example 1, consider the assignment  with  ↦→ ,  ↦→ , and  ↦→ 2. We
ifnd extensions  ′ with  ′() =  and  ′′ with  ′′() =  of  that witness {, } ⊆ {  : par(, )} .
Indeed, these are the only two extensions, and thus  is a match for rule (
        <xref ref-type="bibr" rid="ref7">7</xref>
        ), resulting in mC(). Figure 2
shows the corresponding proof graph.
      </p>
    </sec>
    <sec id="sec-4">
      <title>4. Querying for Proof Summaries</title>
      <p>In this section, we introduce conceptual means for users to select and summarise parts of proof graphs,
which will form the basic backend operations in our implementation.</p>
      <p>A proof graph for a maximal chain of rule applications ofers a complete account of all derivations in
 (), but it is very hard to inspect for real-world graph databases with millions of edges. Indeed, even
a proof graph with a few hundred nodes can be hard to navigate or display. For structural simplification,
we can “unravel” the directed acyclic graph into a tree if we recursively replace vertices with several
outgoing edges by multiple nodes that each have one outgoing (parent) edge. After this operation,
the proof graph is a disjoint union of trees, one for each fact in  () that was not used in any rule
application, and we might well allow users to select one such tree or a subtree of it (starting at a fact of
interest). This is the classical “proof tree” view, extended with aggregates.</p>
      <p>This classical view, however, neglects the set-based nature of rule-based computation and hides any
regularities that emerge from this. Indeed, thousands of facts might be derived in exactly the same way,
merely starting from diferent inputs, but viewing a thousand trees individually to compare them is
not feasible. We therefore propose a summary proof tree that combines many (unravelled) proof trees
with a similar structure. Nodes in such trees then are labelled by sets of vertices that occur in similar
positions in the overall proof graph.</p>
      <p>Definition 4. Let  = ⟨, ,  ⟩ be a proof graph for a program  . A summary proof tree ⟨, , ,  ⟩
for  is given by a set  of nodes, a set  ⊆  ×  of edges that form a tree, a node labelling function
 :  → 2 , and an edge labelling function  :  → APos( ) ∪ {*} , where we require that all edges
that lead to the same parent node have mutually distinct edge labels.</p>
      <p>The requirement of distinct edge labels is diferent from proof graphs, where evaluated aggregate
atoms may have many children with the same label * . Merging these children into one set helps us to
combine proof trees, as defined next. Figure 3 depicts the corresponding summary proof tree for the
proof graph in Figure 2.
3Like for rule applications, we assume that every tuple considered in an aggregation was found in exactly one way, even if
other ways might exist. This assumption is needed to obtain a unique proof.
 ∈ { : par(, )},  ∈ { : par(, )}
⟨ = COUNT{ : par(, )}, 1⟩
par(, ), par(, )
kin(, ), kin(, )
Definition 5. Let  = ⟨, ,  ⟩ be a proof graph. For a vertex  ∈  , let in-labels() = { (⟨, ⟩) |
⟨, ⟩ ∈ } and children(, ) = { | ⟨, ⟩ ∈ ,  (⟨, ⟩) = } for a label .</p>
      <p>Given  ⊆  , the summary proof tree for  , denoted ( ), is defined recursively as follows:
• The root of ( ) is a node  with label  () =  .
• If in-labels() is the same set for all  ∈  , then, for every  ∈ in-labels(), there is an edge
 →−  such that  is the root of a summary proof tree for ⋃︀∈ children(, ).</p>
      <p>Intuitively, the summary proof tree determines the maximal common upper portion of the proof
trees for the elements of  , labelling each node by the set of all vertices that the individual proof trees
use in this position. For sets of ground facts  , the requirement of uniform in-labels() is satisfied
exactly if the same rule was applied to derive all facts in  (for sets of vertices from aggregation atoms
or aggregated tuples, the requirement always holds). If no aggregates are used, the summary proof
tree of a singleton set {()} corresponds to the classical proof tree for (). If present, however, the
* -children of aggregate atoms are combined into a single node with a set of labels, whose children
correspond to the aggregate’s side conditions, which in turn might have been derived in more than one
way.</p>
      <p>Definition 5 provides a powerful way to discover similarities in proof structures for many facts.
Conversely, it is also useful to start from a proof structure of interest and find all the facts that were
derived in a similar way.</p>
      <p>Definition 6. Let  = ⟨, ,  ⟩ be a proof graph. A summary tree query  = ⟨, , ,  ⟩ has the same
form as a summary proof tree (Definition 4), but with an additional possible value ⊤ (“no restriction”)
for node labels.</p>
      <p>Let  ∈  be a vertex and ({}) = ⟨, ,  ,  ⟩ its summary proof tree. Then  structurally
matches  if there is a mapping  :  →  such that (a) the root of  is mapped to the root of ({});
(b) if ⟨, ⟩ ∈  , then  (⟨, ⟩) =  (⟨ (),  ()⟩); and (c) for every  ∈  , either  () = ⊤ or
 ( ()) ⊆  ().</p>
      <p>Let  be the set of all vertices of  that structurally match . The result of  over proof graph ,
denoted ℛ(), is obtained from the summary proof tree ( ) by deleting all nodes for which there is
no corresponding node in .</p>
      <p>In other words, ℛ() always has the same tree structure and edge labels as , but possibly diferent
node labels, which are subsets of the upper bounds given in .</p>
      <p>
        Example 4. Consider the program from Example 1. The summary proof tree ( ) for  = {kin(, ), kin(, )}
is shown in Figure 4. Starting with  = {kin(, ), kin(, )} instead would result in a tree containing
only the root node with label  , since kin(, ) is derived from rule (
        <xref ref-type="bibr" rid="ref3">3</xref>
        ) and kin(, ) from rule (
        <xref ref-type="bibr" rid="ref1">1</xref>
        ).
      </p>
      <p>Now consider the summary tree query  that is shown in Figure 5 with the same structure. The
left child of the root is labelled by kin(, ), so only kin(, ) structurally matches the query, but not
kin(, ). Therefore, the answer ℛ() only contains facts relevant for the derivation of kin(, ).</p>
      <p>We refer to the queries of Definition 5 (based on vertex set  ) as type 1 queries (T1), whereas those of
Definition 6 (based on summary tree query ) are type 2 queries (T2). Together, they provide the two
main ways for users to interact with proofs in our approach. It is important to note that answers for
both query types are based on the concrete matches used during program evaluation, rather than all
possible derivations of a fact. As a result, a query might have no answer even though other sequences
of rule applications could have produced one.</p>
      <p>Type 1 queries can be answered in a straightforward way by considering the summary proof trees
for each fact in  and merging them until they diverge. In the following, we therefore focus on the
implementation of type 2 queries.</p>
    </sec>
    <sec id="sec-5">
      <title>5. Answering Summary Tree Queries</title>
      <p>In this section, we show how to answer summary tree queries using Datalog programs. We also
discuss how to extend this to language features provided by modern rule engines, and describe our
own implementation in Nemo [5].</p>
      <p>
        Modern engines usually implement a semi-naive evaluation strategy for Datalog that applies a given
rule to all matches without a corresponding head fact in a single step. We split a predicate  into
predicates , grouping all -facts by the step  in which they were derived. We also assume auxiliary
tables , for each aggregation atom  of the form (
        <xref ref-type="bibr" rid="ref5">5</xref>
        ) occurring in rule  that, for step , contain all
tuples ⟨x, ⟩, where x are the outer variables appearing in side conditions of  and  is the value of the
result variable.
5.1. Implementation in Datalog
Conceptually, we can divide our approach for answering summary tree queries into two phases. First,
we traverse the query bottom-up, computing at each node all facts satisfying the constraints imposed by
its subtree. This may introduce facts not relevant to the final answer. In the second phase, we traverse
the query top-down to eliminate such facts.
      </p>
      <p>For the summary tree query  = ⟨, , ,  ⟩, we use, for each node  ∈  and derivation step ,
predicates  (containing all facts satisfying the constraints imposed by the subtree rooted at ), 
(containing, for each fact in , an assignment of the outer variables witnessing the derivation for this
fact) and  (for the resulting node label of ). We write &lt; for ⋃︀&lt;  (and similarly abbreviate
,&lt; ). For node  ∈  , we set  to be all -facts in  () if  () ̸= ⊤, and to be the set of all derived
-facts otherwise.</p>
      <p>
        For the bottom-up phase, we first consider node  with in-labels() only containing atom positions
for rule  =  ← 1, . . . , , 1, . . . ,  and child vertices  for each body atom  (1 ≤  ≤ ).
Let ℓ be a leaf node with associated predicate ℓ. We use the following rules, where (x, y) specifies
some arbitrary, but fixed map from x (outer variables occurring in the rule head) to y (outer variables
not occurring in the rule head). We write 1, 2 ← ℬ as an abbreviation for the two rules 1 ← ℬ
and 2 ← ℬ .
(
        <xref ref-type="bibr" rid="ref12">12</xref>
        )
(
        <xref ref-type="bibr" rid="ref13">13</xref>
        )
(14)
(15)
(16)
(17)
(18)
5.2. Implementation in Nemo
Our implementation in Nemo uses the database library nemo-physical, a translation of the above rules
into relational algebra, and a built-in selection operator for (x, y).
      </p>
      <p>
        We extend the theoretical approach to all language features used in Nemo, including existential rules
and arithmetic operations. The latter are evaluated in the bottom-up phase as they would be during
rule applications. Existential rules extend Datalog with existentially quantified variables in rule heads.
Nemo uses the restricted chase [21] to evaluate such rules. The algorithm already supports such rules.
To avoid a Cartesian product in rule (
        <xref ref-type="bibr" rid="ref13">13</xref>
        ) if all variables in the head atom are existentially quantified,
we replace rule (
        <xref ref-type="bibr" rid="ref13">13</xref>
        ) by the following rule, where  is the predicate of the head atom:
(x), (x) ←
(x), (x)
In some cases, we can reuse tables computed during program execution. Node  in a summary tree
query  = (, , ,  ) is simple if  () = ⊤ and  is (a) a leaf node, or (b) an interior node such that
ℓ(x) ← ℓ (x), ℓ(x)
(x, y), (x) ←
(x), (x), (x, y),
&lt;1(x, y), . . . , &lt;(x, y)
,&lt; 1 (x, y, ), . . . , ,&lt;  (x, y, )
(x, ), (x, ) ←
(x, y), (x) ←
, (x, )
, (x, ), (x ∪ t, y)
&lt;1(x, y), . . . , &lt;(x, y)
(x) ← &lt;+1(x)
(x) ←
      </p>
      <p>(x), &lt;+1(x, y), &lt;+1(x, y)</p>
      <p>For aggregation, we consider vertices  with an outgoing edge labelled by ⟨,  ⟩ referring to
aggregation atom . Let  be the unique child with →− *  and 1, . . . ,  be the child nodes of . We add
the following rules:
The rules for the top-down phase are as follows, where  is the total number of derivation steps and 
is the root of  :</p>
    </sec>
    <sec id="sec-6">
      <title>Time (in ms) ≤ 1 s ≤ 5 s Baseline (in ms)</title>
      <p>mean
max mean
max</p>
      <p>Tracing Matching
in-labels() contains only body atom positions for rule  with head atom  that does not occur as the
head atom of another rule, and all children of  are also simple. If  is simple and in-labels() only
has body atom positions for rule  such that all outer variables of  occur in the head of  , we have
(x) = (x) = (x).</p>
    </sec>
    <sec id="sec-7">
      <title>6. Performance Evaluation</title>
      <p>This section presents an evaluation of our approach. We demonstrate that (a) the proposed
implementation outperforms a naive solution based on Nemo’s existing tracing functionality, and (b) the proposed
implementation achieves performance suficient for real-time applications.</p>
      <sec id="sec-7-1">
        <title>6.1. Experimental Setup</title>
        <p>We base our performance evaluation on the benchmarks used by Ivliev et al. [5] that are publicly
available.4 We replace LUBM-01k with LUBM-100 due to memory restrictions. The first section of Table
1 lists all the considered benchmarks together with the number of rules and the number of derived facts
for each rule set. Galen is a Datalog implementation of EL-reasoning run on a medical ontology [22],
while the rest are commonly used benchmarks for existential rules [21].</p>
        <p>To generate the queries, we compute summary proof trees for a randomly chosen subset of all derived
facts and construct the queries by omitting the fact restrictions. We limit the experiments to 1,000
queries per rule set. The second section of Table 1 shows the average node count of the generated
queries and the amount of queries per rule set. With 16 nodes on average, Galen has large queries,
while the other data sets average query sizes between 2 and 4.</p>
        <p>We further compare our approach with a naive baseline implementation that uses the existing tracing
implementation of Nemo. To answer proof queries, we first compute the proof trees for all derived facts.
Note that Nemo optimises the computation of multiple traces by reusing previously computed results.
We then match each proof tree to the provided query.</p>
        <p>The runtime measurements for each experiment are repeated three times. Between each run, the state
of the database was reset. All experiments were conducted on consumer hardware using a machine</p>
        <sec id="sec-7-1-1">
          <title>4https://github.com/knowsys/nemo-examples/tree/main/evaluations/kr2024</title>
          <p>with an AMD Ryzen 5900X CPU and 32 GB of RAM. The individual measurements are provided in the
supplementary material.5 For the baseline experiments, we set a timeout (t.o.) of 10 minutes.</p>
        </sec>
      </sec>
      <sec id="sec-7-2">
        <title>6.2. Results and Discussion</title>
        <p>The third section of Table 1 shows the performance of our implementation, including the average
number of answers per query, the average runtime in milliseconds, along with the percentage of queries
answered in less than 1s and less than 5s, which we classify as "fast" and "acceptable" from a user
perspective, respectively. The last section displays the average runtimes for the baseline implementation
in milliseconds, divided into the time for computing the proof trees for all facts (Tracing) and the
time for matching each proof tree against the query (Matching). Comparing our approach with the
baseline, we notice a significant improvement. For Doctors-1M and Deep-100, our implementation
achieves a speedup of approximately two orders of magnitude. For the remaining cases, the baseline
implementation reaches the 10-minute timeout, whereas our implementation completes in under 5
seconds for the majority of instances. The baseline’s performance scales with the number of derived
facts, making it infeasible for most of the rule sets evaluated here.</p>
        <p>We now discuss the diferences in the runtimes for our implementation. For the existential rules
benchmarks, all queries, except one in Doctors-1m and three in LUBM-100, can be evaluated in under 1s.
For Galen, 58% of requests can be answered in under 1s, and 91% of requests in under 5s. We attribute
the diferences in performance to two main factors. First, facts derived in the Galen benchmarks usually
have large proof trees, which naturally increases the time required to answer the corresponding proof
queries. Second, within the existential rules benchmarks, the derived facts are approximately evenly
distributed across the possible proof query shapes (see supplementary material). This makes the queries
more selective, so that fewer facts need to be considered during computation. Meanwhile, in Galen, we
observe an uneven distribution, such that most inferences may be recomputed during the bottom-up
phase.</p>
        <p>Overall, we conclude that our prototype implementation is capable of answering complex queries for
large-scale reasoning tasks eficiently in the majority of the cases, while improving significantly over
the baseline implementation.</p>
      </sec>
    </sec>
    <sec id="sec-8">
      <title>7. Query Visualisation and Editing</title>
      <p>The web version of Nemo [5] integrates a visualisation tool called nev (Nemo Explain Visualizer6,
inspired by pev2 [23]) that supports analysis and creation of T1 and T2 queries.</p>
      <p>T1 queries function as nev’s entry point for building a query. The resulting summary proof tree can
be manipulated by, e.g., adding or removing rules to issue T2 queries, which updates the facts in each
tree node accordingly.
5https://github.com/knowsys/nemo-examples/tree/main/evaluations/tgd2026
6https://tools.iccl.inf.tu-dresden.de/nemo/tgd-2026</p>
      <p>A T1 query initialising nev can be issued by clicking the magnifying glass next to a row in one of
Nemo’s result tables. Then, a T2 query with the same tree shape can be issued with the “unrestrict”
button. Also, one can manipulate the current tree shape by, e.g., adding or removing rules. Any such
operation will trigger a summary tree query and update the node’s contents accordingly. Thus, arbitrary
tree queries can be constructed.</p>
      <p>In Figure 6, we present Example 2 in Nemo. Since Nemo’s syntax for aggregates is diferent from
what we introduce in our theoretical considerations, we are forced to introduce an auxiliary rule for
the aggregate storing the number of children for each parent on a new relation parCount. We can then
trace the fact mC() in nev as can be seen in Figure 7. This shows a tree resembling Figure 3.</p>
    </sec>
    <sec id="sec-9">
      <title>8. Conclusions</title>
      <p>We present summary proof trees as a means to explain derivations (i.e., traces) of Datalog programs
with aggregates. To navigate these potentially large structures, we also introduce summary tree queries,
which overlay multiple partial derivations to allow the inspection of all derivations with a common
shape. We enhance the reasoning engine Nemo with the capability of answering such queries and
evaluate the feasibility of the approach using standard benchmarks. Furthermore, we show nev as a
visualization tool for summary proof trees and as an interactive builder for summary tree queries.</p>
      <p>An important direction for future work is the explanation of the absence of facts, which is a common
use case for debugging Datalog programs. There exist semi-automated methods that explain missing
facts by guiding users to select relevant rules and then to continue from the resulting partial instantiation
of the rule [18]. Adapting such techniques to our setting raises several challenges. For one, aggregation
introduces additional forms of failure (e.g., empty aggregation, or the aggreagation result fails to meet
a condition). Second, it would be interesting to investigate how summary proof trees can be used to
explain missing facts.</p>
      <p>Finally, we plan to conduct a user study to validate the utility of having such explanatory features
for the end user.</p>
    </sec>
    <sec id="sec-10">
      <title>Acknowledgments</title>
      <p>This work is funded by Deutsche Forschungsgemeinschaft (DFG) under Germany’s Excellence Strategy:
EXC 2050/2, 390696704 – “Centre for Tactile Internet” (CeTI); by DFG grant 389792660 as part of TRR 248
– CPEC; by Bundesministerium für Bildung und Forschung (BMBF) and Saxon State Ministry for Science,
Culture and Tourism (SMWK) in Center for Scalable Data Analytics and Artificial Intelligence (ScaDS.AI,
SCADS22B); and by BMBF and German Academic Exchange Service (DAAD) in project 57616814 (SECAI,
School of Embedded and Composite AI).</p>
    </sec>
    <sec id="sec-11">
      <title>Declaration on Generative AI</title>
      <sec id="sec-11-1">
        <title>The authors have not employed any Generative AI tools.</title>
        <p>in: H. Kangassalo (Ed.), Proc. 9th Int. Conf. Entity-Relationship Approach (ER’09), ER Institute,
1990, pp. 189–203.
[14] T. Arora, R. Ramakrishnan, W. G. Roth, P. Seshadri, D. Srivastava, Explaining program execution
in deductive systems, in: S. Ceri, K. Tanaka, S. Tsur (Eds.), Proc. 3rd Int. Conf. Deductive and
Object-Oriented Databases (DOOD’93), volume 760 of LNCS, Springer, 1993, pp. 101–119. doi:10.
1007/3-540-57530-8_7.
[15] R. Caballero, Y. García-Ruiz, F. Sáenz-Pérez, A theoretical framework for the declarative debugging
of Datalog programs, in: K. Schewe, B. Thalheim (Eds.), Proc. 3rd Int. Workshop on Semantics
in Data and Knowledge Bases (SDKB’08), volume 4925 of LNCS, Springer, 2008, pp. 143–159.
doi:10.1007/978-3-540-88594-8_8.
[16] S. Köhler, B. Ludäscher, Y. Smaragdakis, Declarative datalog debugging for mere mortals, in:
P. Barceló, R. Pichler (Eds.), Proc. 2nd Int. Workshop on Datalog in Academia and Industry (Datalog
2.0’12), volume 7494 of LNCS, Springer, 2012, pp. 111–122. doi:10.1007/978-3-642-32925-8_
12.
[17] A. Elhalawati, M. Krötzsch, S. Mennicke, An existential rule framework for computing
whyprovenance on-demand for datalog, in: G. Governatori, A. Turhan (Eds.), Proc. 2nd Int. Joint Conf.
on Rules and Reasoning (RuleML+RR’22), volume 13752 of LNCS, Springer, 2022, pp. 146–163.
doi:10.1007/978-3-031-21541-4_10.
[18] D. Zhao, P. Subotić, B. Scholz, Debugging large-scale Datalog: A scalable provenance evaluation
strategy, ACM Trans. Program. Lang. Syst. 42 (2020). doi:10.1145/3379446.
[19] M. Gebser, R. Kaminski, B. Kaufmann, T. Schaub, Multi-shot ASP solving with clingo, Theory</p>
        <p>Pract. Log. Program. 19 (2019) 27–82. doi:10.1017/S1471068418000054.
[20] J. Tantow, L. Gerlach, S. Mennicke, M. Krötzsch, Verifying datalog reasoning with Lean, in:
Y. Forster, C. Keller (Eds.), Proc. 16th Int. Conf. Interactive Theorem Proving (ITP’25), volume 352
of LIPIcs, Dagstuhl Publishing, 2025. doi:10.4230/LIPICS.ITP.2025.36.
[21] M. Benedikt, G. Konstantinidis, G. Mecca, B. Motik, P. Papotti, D. Santoro, E. Tsamoura,
Benchmarking the chase, in: Proc. 36th Symp. on Principles of Database Systems (PODS’17), ACM, 2017,
pp. 37–52. doi:10.1145/3034786.3034796.
[22] Y. Kazakov, M. Krötzsch, F. Simančík, The incredible ELK: From polynomial procedures to
eficient reasoning with ℰℒ ontologies, J. of Automated Reasoning 53 (2013) 1–61. doi:10.1007/
S10817-013-9296-3.
[23] Dalibo, Pev2, https://github.com/dalibo/pev2, 2025. Accessed: 2025-07-01.</p>
      </sec>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>M.</given-names>
            <surname>Krötzsch</surname>
          </string-name>
          , Modern Datalog:
          <article-title>Concepts, methods, applications</article-title>
          , in: A.
          <string-name>
            <surname>Artale</surname>
            ,
            <given-names>M.</given-names>
          </string-name>
          <string-name>
            <surname>Bienvenu</surname>
            ,
            <given-names>Y. I.</given-names>
          </string-name>
          <string-name>
            <surname>García</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Murlak</surname>
          </string-name>
          (Eds.),
          <source>Joint Proc. of the 20th and 21st Reasoning Web Summer Schools (RW'24 &amp; RW'25)</source>
          , volume
          <volume>138</volume>
          of OASIcs, Dagstuhl Publishing,
          <year>2025</year>
          . doi:
          <volume>10</volume>
          .4230/OASIcs.RW.
          <year>2024</year>
          /
          <year>2025</year>
          .7.
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>Y.</given-names>
            <surname>Nenov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Piro</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Motik</surname>
          </string-name>
          ,
          <string-name>
            <given-names>I.</given-names>
            <surname>Horrocks</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Z.</given-names>
            <surname>Wu</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. Banerjee,</surname>
          </string-name>
          <article-title>RDFox: A highly-scalable RDF store</article-title>
          , in: M.
          <article-title>A</article-title>
          . et al. (Ed.),
          <source>Proc. 14th Int. Semantic Web Conf. (ISWC'15)</source>
          ,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          , volume
          <volume>9367</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2015</year>
          , pp.
          <fpage>3</fpage>
          -
          <lpage>20</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -25010-
          <issue>6</issue>
          _
          <fpage>1</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>J.</given-names>
            <surname>Urbani</surname>
          </string-name>
          ,
          <string-name>
            <given-names>C.</given-names>
            <surname>Jacobs</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Krötzsch</surname>
          </string-name>
          ,
          <article-title>Column-oriented Datalog materialization for large knowledge graphs</article-title>
          , in: D.
          <string-name>
            <surname>Schuurmans</surname>
            ,
            <given-names>M. P.</given-names>
          </string-name>
          Wellman (Eds.),
          <source>Proc. 30th AAAI Conf. on Artificial Intelligence (AAAI'16)</source>
          , AAAI Press,
          <year>2016</year>
          , pp.
          <fpage>258</fpage>
          -
          <lpage>264</lpage>
          . doi:
          <volume>10</volume>
          .1609/aaai.v30i1.
          <fpage>9993</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>H.</given-names>
            <surname>Jordan</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Scholz</surname>
          </string-name>
          ,
          <string-name>
            <given-names>P.</given-names>
            <surname>Subotic</surname>
          </string-name>
          , Souflé:
          <article-title>On synthesis of program analyzers</article-title>
          , in: S. Chaudhuri,
          <string-name>
            <surname>A</surname>
          </string-name>
          . Farzan (Eds.),
          <source>Proc. 28th Int. Conf. on Computer Aided Verification (CAV'16)</source>
          ,
          <string-name>
            <surname>Part</surname>
            <given-names>II</given-names>
          </string-name>
          , volume
          <volume>9780</volume>
          <source>of LNCS</source>
          , Springer,
          <year>2016</year>
          , pp.
          <fpage>422</fpage>
          -
          <lpage>430</lpage>
          . doi:
          <volume>10</volume>
          .1007/978-3-
          <fpage>319</fpage>
          -41540-6_
          <fpage>23</fpage>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ivliev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>L.</given-names>
            <surname>Gerlach</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Meusel</surname>
          </string-name>
          ,
          <string-name>
            <given-names>J.</given-names>
            <surname>Steinberg</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Krötzsch</surname>
          </string-name>
          , Nemo:
          <article-title>Your friendly and versatile rule reasoning toolkit</article-title>
          , in: P. Marquis,
          <string-name>
            <given-names>M.</given-names>
            <surname>Ortiz</surname>
          </string-name>
          , M. Pagnucco (Eds.),
          <source>Proc. 21st Int. Conf. on Principles of Knowledge Representation and Reasoning (KR'24)</source>
          , IJCAI Organization,
          <year>2024</year>
          , pp.
          <fpage>743</fpage>
          -
          <lpage>754</lpage>
          . doi:
          <volume>10</volume>
          .24963/kr.2024/70.
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [6]
          <issue>Log25</issue>
          ,
          <article-title>Logica project webpage</article-title>
          , Logica Devs, Accessed:
          <fpage>2025</fpage>
          -09-04. https://logica-web.github.io/.
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>S.</given-names>
            <surname>Abiteboul</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Hull</surname>
          </string-name>
          ,
          <string-name>
            <given-names>V.</given-names>
            <surname>Vianu</surname>
          </string-name>
          , Foundations of Databases, Addison Wesley,
          <year>1994</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [8]
          <string-name>
            <given-names>J. F.</given-names>
            <surname>Sequeda</surname>
          </string-name>
          ,
          <article-title>On the semantics of R2RML and its relationship with the direct mapping</article-title>
          , in: E. Blomqvist, T. Groza (Eds.),
          <source>Proc. ISWC 2013 Posters &amp; Demonstrations Track (ISWC'13)</source>
          , volume
          <volume>1035</volume>
          <source>of CEUR WS Proceedings, CEUR-WS</source>
          ,
          <year>2013</year>
          , pp.
          <fpage>193</fpage>
          -
          <lpage>196</lpage>
          . URL: https://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>1035</volume>
          / iswc2013_poster_4.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>E. S.</given-names>
            <surname>Skvortsov</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Xia</surname>
          </string-name>
          ,
          <string-name>
            <given-names>S.</given-names>
            <surname>Bowers</surname>
          </string-name>
          ,
          <string-name>
            <given-names>B.</given-names>
            <surname>Ludäscher</surname>
          </string-name>
          , Logica-TGD:
          <article-title>Transforming graph databases logically</article-title>
          , in: M.
          <string-name>
            <surname>Boehm</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          Daudjee (Eds.),
          <source>Proc. Workshops of the EDBT/ICDT 2025 Joint Conf.</source>
          , volume
          <volume>3946</volume>
          <source>of CEUR WS Proceedings, CEUR-WS</source>
          ,
          <year>2025</year>
          . URL: https://ceur-ws.
          <source>org/</source>
          Vol-3946/TGD-4. pdf.
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>A.</given-names>
            <surname>Elhalawati</surname>
          </string-name>
          ,
          <string-name>
            <surname>J. V.</surname>
          </string-name>
          <article-title>den Bussche, A. Dimou, A declarative formalization of R2RML using Datalog and its eficient execution</article-title>
          , in: A.
          <string-name>
            <surname>Margara</surname>
            ,
            <given-names>T.</given-names>
          </string-name>
          <string-name>
            <surname>Kliegr</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          <string-name>
            <surname>Savkovic</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Ahmetaj</surname>
            ,
            <given-names>R.</given-names>
          </string-name>
          <string-name>
            <surname>Tommasini</surname>
            ,
            <given-names>L.</given-names>
          </string-name>
          <string-name>
            <surname>Bellomarini</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Kharlamov</surname>
            ,
            <given-names>I. G.</given-names>
          </string-name>
          <string-name>
            <surname>Ciuciu</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Roman</surname>
            ,
            <given-names>G.</given-names>
          </string-name>
          <string-name>
            <surname>Konstantinidis</surname>
            ,
            <given-names>E.</given-names>
          </string-name>
          <string-name>
            <surname>Sallinger</surname>
            ,
            <given-names>A</given-names>
          </string-name>
          . Soylu (Eds.),
          <source>Companion Proc. 9th Int. Joint Conf. on Rules and Reasoning (RuleML+RR'25)</source>
          , volume
          <volume>4083</volume>
          <source>of CEUR WS Proceedings, CEUR-WS</source>
          ,
          <year>2025</year>
          . URL: https://ceur-ws.
          <source>org/</source>
          Vol-
          <volume>4083</volume>
          /paper63.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [11]
          <string-name>
            <given-names>A.</given-names>
            <surname>Elhalawati</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Dimou</surname>
          </string-name>
          ,
          <string-name>
            <given-names>O.</given-names>
            <surname>Hartig</surname>
          </string-name>
          ,
          <string-name>
            <given-names>D.</given-names>
            <surname>Hernández</surname>
          </string-name>
          ,
          <article-title>Flexible RML-based mapping of property graphs to RDF</article-title>
          , in: M.
          <string-name>
            <surname>Boehm</surname>
            ,
            <given-names>K.</given-names>
          </string-name>
          Daudjee (Eds.),
          <source>Proc. Workshops of the EDBT/ICDT 2025 Joint Conf.</source>
          , volume
          <volume>3946</volume>
          <source>of CEUR WS Proceedings, CEUR-WS</source>
          ,
          <year>2025</year>
          . URL: https://ceur-ws.
          <source>org/</source>
          Vol-3946/ TGD-2.pdf.
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>A.</given-names>
            <surname>Ivliev</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Krötzsch</surname>
          </string-name>
          , M. Marx,
          <article-title>SPARQLing datalog for rule-based reasoning over large knowledge graphs</article-title>
          , in: M.
          <string-name>
            <surname>Acosta</surname>
          </string-name>
          , M. van
          <string-name>
            <surname>Erp</surname>
            ,
            <given-names>S.</given-names>
          </string-name>
          <string-name>
            <surname>Rudolph</surname>
            ,
            <given-names>O.</given-names>
          </string-name>
          <string-name>
            <surname>Hartig</surname>
            ,
            <given-names>B.</given-names>
          </string-name>
          <string-name>
            <surname>Spahiu</surname>
            ,
            <given-names>A.</given-names>
          </string-name>
          <string-name>
            <surname>Rula</surname>
            ,
            <given-names>D.</given-names>
          </string-name>
          <string-name>
            <surname>Garijo</surname>
            ,
            <given-names>F.</given-names>
          </string-name>
          <string-name>
            <surname>Osborne</surname>
          </string-name>
          (Eds.),
          <source>Proc. 23rd European Semantic Web Conf. (ESWC'26)</source>
          , LNCS, Springer,
          <year>2026</year>
          . To appear.
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>C. A.</given-names>
            <surname>Wieland</surname>
          </string-name>
          ,
          <article-title>Two explanation facilities for the deductive database management system DeDEx,</article-title>
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>