<?xml version="1.0" encoding="UTF-8"?>
<TEI xml:space="preserve" xmlns="http://www.tei-c.org/ns/1.0" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.tei-c.org/ns/1.0 https://raw.githubusercontent.com/kermitt2/grobid/master/grobid-home/schemas/xsd/Grobid.xsd"
 xmlns:xlink="http://www.w3.org/1999/xlink">
	<teiHeader xml:lang="en">
		<fileDesc>
			<titleStmt>
				<title level="a" type="main">Nemo: A Scalable and Versatile Datalog Engine</title>
			</titleStmt>
			<publicationStmt>
				<publisher/>
				<availability status="unknown"><licence/></availability>
			</publicationStmt>
			<sourceDesc>
				<biblStruct>
					<analytic>
						<author>
							<persName><forename type="first">Alex</forename><surname>Ivliev</surname></persName>
							<email>alex.ivliev@tu-dresden.de</email>
							<affiliation key="aff0">
								<orgName type="department">Knowledge-Based Systems Group</orgName>
								<orgName type="institution">TU Dresden</orgName>
								<address>
									<settlement>Dresden</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Lukas</forename><surname>Gerlach</surname></persName>
							<email>lukas.gerlach@tu-dresden.de</email>
							<affiliation key="aff0">
								<orgName type="department">Knowledge-Based Systems Group</orgName>
								<orgName type="institution">TU Dresden</orgName>
								<address>
									<settlement>Dresden</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Simon</forename><surname>Meusel</surname></persName>
							<email>simon.meusel@mailbox.tu-dresden.de</email>
							<affiliation key="aff0">
								<orgName type="department">Knowledge-Based Systems Group</orgName>
								<orgName type="institution">TU Dresden</orgName>
								<address>
									<settlement>Dresden</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Jakob</forename><surname>Steinberg</surname></persName>
							<email>jakob_maximilian.steinberg@mailbox.tu-dresden.de</email>
							<affiliation key="aff0">
								<orgName type="department">Knowledge-Based Systems Group</orgName>
								<orgName type="institution">TU Dresden</orgName>
								<address>
									<settlement>Dresden</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<persName><forename type="first">Markus</forename><surname>Krötzsch</surname></persName>
							<email>markus.kroetzsch@tu-dresden.de</email>
							<affiliation key="aff0">
								<orgName type="department">Knowledge-Based Systems Group</orgName>
								<orgName type="institution">TU Dresden</orgName>
								<address>
									<settlement>Dresden</settlement>
									<country key="DE">Germany</country>
								</address>
							</affiliation>
						</author>
						<author>
							<affiliation key="aff1">
								<address>
									<settlement>Dallas</settlement>
									<region>Texas</region>
									<country key="US">USA</country>
								</address>
							</affiliation>
						</author>
						<title level="a" type="main">Nemo: A Scalable and Versatile Datalog Engine</title>
					</analytic>
					<monogr>
						<idno type="ISSN">1613-0073</idno>
					</monogr>
					<idno type="MD5">4F4F93F2A1247A30F7E07885504F81FC</idno>
				</biblStruct>
			</sourceDesc>
		</fileDesc>
		<encodingDesc>
			<appInfo>
				<application version="0.7.2" ident="GROBID" when="2025-04-23T19:11+0000">
					<desc>GROBID - A machine learning software for extracting information from scholarly documents</desc>
					<ref target="https://github.com/kermitt2/grobid"/>
				</application>
			</appInfo>
		</encodingDesc>
		<profileDesc>
			<textClass>
				<keywords>
					<term>Reasoning Engine</term>
					<term>Existential Rules</term>
					<term>Logic Programming child(?C</term>
					<term>?M)</term>
					<term>child(?C</term>
					<term>?F) :-parents(?C</term>
					<term>?M</term>
					<term>?F) . 5 sibling(?C</term>
					<term>?D) :-child(?C</term>
					<term>?P)</term>
					<term>child(?D</term>
					<term>?P)</term>
					<term>?C != ?D</term>
				</keywords>
			</textClass>
			<abstract>
<div xmlns="http://www.tei-c.org/ns/1.0"><p>Nemo is a toolkit for large-scale data analysis that emphasizes robustness and ease of use. Nemo's core is a scalable and efficient main-memory reasoner that supports an expressive extension of Datalog with support for data types, existential rules, aggregates, and (stratified) negation. Built around this core is a versatile system of libraries and applications for interfacing with several data formats and programming languages, use as a web application, and IDE integration. In this system description, we present this toolkit giving a high-level overview of the system architecture as well as its supported language features.</p></div>
			</abstract>
		</profileDesc>
	</teiHeader>
	<text xml:lang="en">
		<body>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="1.">Introduction</head><p>Datalog is an important rule language <ref type="bibr" target="#b0">[1]</ref> forming the basis for many more complex formalisms such as existential rules <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b2">3]</ref> that are of interest in both theory and practice. Accordingly, many rule reasoning systems have been presented, which we can roughly classify in the following types <ref type="bibr" target="#b3">[4]</ref>:</p><p>1. Answer set programming solvers <ref type="bibr" target="#b4">[5,</ref><ref type="bibr" target="#b5">6]</ref> and logic programming systems such as Prolog <ref type="bibr" target="#b6">[7]</ref> 2. Knowledge graph and database engines such as RDFox <ref type="bibr" target="#b7">[8]</ref>, VLog <ref type="bibr" target="#b8">[9]</ref>, Vadalog <ref type="bibr" target="#b9">[10]</ref>, and Graal <ref type="bibr" target="#b10">[11]</ref> 3. Data-analytics systems such as Soufflé <ref type="bibr" target="#b11">[12]</ref>, LogicBlox <ref type="bibr" target="#b12">[13]</ref>, SocialLite <ref type="bibr" target="#b13">[14]</ref>, or EmptyHeaded <ref type="bibr" target="#b14">[15]</ref> 4. Data management frameworks such as Datomic, Google Logica, and CozoDB Despite the wide variety of tools, many systems described in the literature may not be a viable choice in practice, due to discontinuation or access restrictions of closed-source commercial systems. In the field of logic programming, these problems have been overcome, and advanced open-source systems such as Clingo <ref type="bibr" target="#b15">[16]</ref> are available to researchers, whereas the situation in other rule system categories is more precarious. Among the mentioned systems of types (2) and <ref type="bibr" target="#b2">(3)</ref>, the only open-source tool with a release in the past twelve months is Soufflé.</p><p>In this extended abstract, we summarize our recent paper <ref type="bibr" target="#b16">[17]</ref> on our new rule reasoning toolkit Nemo built for applications of type ( <ref type="formula">2</ref>) and <ref type="bibr" target="#b2">(3)</ref>, where the computation of logical entailments (or query results) from a variety of inputs is the main reasoning task. Nemo's rule language extends Datalog with various datatypes, negation, aggregates (both stratified), and many datatype-specific functions and operators known from query languages like SPARQL while also supporting existential rules with a fast implementation of the restricted (or standard) chase algorithm.</p><p>Thanks to Nemo's modular architecture, we can provide command-line clients for all major platforms, a public web application with a built-in rule editor, an IDE plugin for rule editing in VSCode, and APIs for integration in several programming languages. All components of Nemo are free and open source, and their development repositories public. Most of Nemo is written in Rust, a language that emphasizes type and memory safety, and code quality is an explicit concern. The source code is available at https://github.com/knowsys/nemo. </p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="2.">System Overview</head><p>The Nemo toolkit consists of several programs and libraries. This includes a command-line application called nmo, and a web application <ref type="foot" target="#foot_0">1</ref> shown in Figure <ref type="figure" target="#fig_0">1</ref> (left). The web application utilizes Nemo's WebAssembly interface, enabling it to run entirely in the browser without any installation. It features a powerful rule editor with syntax highlighting and auto-complete, which is made possible by Nemo's implementation of the open language server protocol <ref type="bibr" target="#b17">[18]</ref>. This also enables advanced editor support for Nemo's rule language within compatible IDEs, such as VSCode. Nemo further provides a Python and Rust developer API, which expose import/export, the reasoner, and give access to the internal rule structure.</p><p>The core of Nemo is a fast and scalable reasoner that materializes logical consequences using semi-naive bottom-up evaluation <ref type="bibr" target="#b0">[1]</ref>. For any inference that is computed, Nemo can also provide a computation trace that encodes a proof tree. This trace is available in machine-readable JSON format or in more visual representations. Figure <ref type="figure" target="#fig_0">1</ref> (right) shows an example use of this feature on the console.</p><p>Nemo keeps data in-memory, representing tables as hierarchically-sorted, column-based tables, following the design in VLog <ref type="bibr" target="#b8">[9]</ref>. In contrast to VLog, our columns support domain elements of several types: fixed-size values (e.g., 32bit floats or 64bit signed integers) are stored directly, while variable-sized data (e.g., strings and IRIs) is first mapped to integer ids through a dictionary. Data in columns is further compressed using Run-Length-Encoding with increments. Tables in Nemo are accessible via trie iterators <ref type="bibr" target="#b18">[19]</ref>, which makes it possible to utilize the leapfrog trie-join <ref type="bibr" target="#b19">[20]</ref>, a multi-way, worst-case optimal join algorithm. In this setting, query plans are largely determined by the variable (column) order, which we heuristically determine by searching for orders that avoid inefficiencies like cross-products and excessive reordering of tables. The implementation for operations like union or difference also make use of this trie-based access. Projection and resorting of tables cannot be implemented efficiently in this way, however, and require row-based temporary tables.</p><p>Nemo's efficient storing mechanism combined with its use of state-of-the-art join algorithm and additional optimizations makes its performance competitive with other mature systems, often outperforming them on our benchmarks <ref type="bibr" target="#b16">[17]</ref>. We were surprised that our browser-based Nemo Web often competed for second place in these evaluations. Our experiments with a version of the Wikidata knowledge graph <ref type="bibr" target="#b20">[21]</ref> show that Nemo can reason with data sets of several billion triples. Further details on these evaluations can be found in Section 5 of <ref type="bibr" target="#b16">[17]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="3.">Language Features</head><p>Nemo's rule language is based on Datalog <ref type="bibr" target="#b0">[1]</ref>, which is extended with many features of modern query and rule languages. <ref type="foot" target="#foot_1">2</ref> The syntax largely follows common logic programming conventions, representing rules as implications consisting of conjunctions of first-order atoms where variables are universally quantified.</p><p>As usual in logic programming, anonymous body variables are denoted by _ and treated like different variables, i.e. variables _ in Line 6 are distinct. Moreover, Nemo considers variables that occur only in negated body atoms to be existentially quantified beneath the negation. Hence, ~sibling(?C,_) requires that all sibling facts do not match this pattern, whereas child(?C,_) requires some matching fact. A similar convention is used in the answer set programming, e.g., in current versions of Clingo <ref type="bibr" target="#b4">[5]</ref>.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Data Import and Export</head><p>External data can be imported into Nemo using the following syntax:</p><p>7 @import parents :-csv { resource = "parents.csv.gz", limit = 100 } . 8 @import nameAndYearOfBirth :-csv { resource = "https://www.data.com/name_year.csv" } .</p><p>When providing an online resource through a URL as shown in Line 8, data will be downloaded upon program evaluation. Currently, Nemo is able to process data encoded as CSV (with user-set delimiter) or RDF. For RDF, triples (NTriples, Turtle, RDF/XML) and quads (TRiG, NQuads) are supported. All formats are available for export using analogous syntax via the @export directive. On the command-line, results may also be printed on the console. Various details of the import and export can be controlled through optional parameters, and data can be processed with GZip compression.</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Datatypes and Functions</head><p>Nemo natively supports values of many different data types, including integer, string, language-tagged string, single and double precision float, and Boolean. To manipulate such values, Nemo offers a wide range of built-in functions, which largely correspond with SPARQL FILTER expressions. Such functions include standard arithmetic operators and mathematical functions on numbers such as SQRT, functions for string manipulation such as CONCAT, Boolean operators, as well as comparison operators such as &lt; or !=. Functions can be nested arbitrarily and may occur anywhere in the rule. Bindings for any variable used within a function must be sufficiently determined, similar to the standard safety condition used for Datalog rules.</p><p>Nemo is dynamically typed and therefore allows values of any type to be used in any position, without requiring a fixed schema. Most functions, such as STRLEN are not defined for all types of inputs, instead producing no result when given a value of unsupported type.</p><p>Aggregation Nemo supports common aggregates such as #count, #sum, or #max, as shown next:</p><p>9 childCount(?P, #count(?C)) :-child(?C, ?P) .</p><p>Rule 9 counts, for each value of ?P, the number of distinct values of ?C that satisfy the rule body. We distinguish three kinds of variables: aggregate variables occur in aggregate functions (in the head), group-by variables are the head variables that are not aggregate variables; and body-only variables that do not appear in the head. Aggregation is evaluated as follows: (1) find all rule matches, (2) project away bindings of body-only variables and remove duplicates that agree on all remaining variables, (3) group the set of projected matches by distinct values of group-by variables, and (4) apply the aggregation function on each group. Duplicate elimination in (2) means we always aggregate over sets, corresponding to the keyword DISTINCT in many query languages. Users control the semantics through variables in the head: 10 sum1(?A, ?B, #sum(?N)) :-p(?A, ?B, ?N) . Existential Rules Existential rules, also known as tuple-generating dependencies, are an important formalism used to describe integrity constraints <ref type="bibr" target="#b22">[23]</ref> or to formulate dependencies within a data exchange setting <ref type="bibr" target="#b23">[24]</ref>. Syntactically, they are represented by introducing existentially quantified variables in the rule head, denote by ! in Nemo, as shown in the next example:</p><p>13 child(?C, !P), child(!P, ?G) :-grandchild(?C, ?G) .</p><p>Nemo supports reasoning over existential rules by implementing the restricted (a.k.a. standard) chase <ref type="bibr" target="#b1">[2,</ref><ref type="bibr" target="#b2">3]</ref>. For each match of the body of rule 13, Nemo creates a fresh value for !P, provided that the head is not satisfied for any existing value yet. Fresh values are represented in Nemo by named nulls, which we treat as a separate type of domain element distinct from other elements. Named nulls are identified with RDF blank nodes in data import and export, and denoted accordingly (using notation like _:42).</p></div>
<div xmlns="http://www.tei-c.org/ns/1.0"><head n="4.">Conclusion and Future Work</head><p>Nemo is a comprehensive framework for rule reasoning that includes a scalable rule engine, a feature-rich rule language, and advanced user interfaces with strong developer support. Further development of Nemo will focus on enhancing its expressive power by introducing native support for complex types such function terms and sets, and adding user-defined functions to increase flexibility and unlocking additional use cases. To further improve performance, we will transition Nemo's implementation to being able to utilize multi-threading. Next steps to improve developer tools include better highlighting of static analysis results to the user and better tracing support in the Nemo web application, which will simplify debugging and create a more robust and explainable reasoning system.</p></div><figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_0"><head>Figure 1 :</head><label>1</label><figDesc>Figure 1: Rule reasoning in the browser with Nemo Web (left) and tracing on the console (right)</figDesc><graphic coords="2,297.64,65.70,225.63,122.11" type="bitmap" /></figure>
<figure xmlns="http://www.tei-c.org/ns/1.0" xml:id="fig_1"><head>11 sum2(</head><label>11</label><figDesc>?A, #sum(?N, ?B)) :-p(?A, ?B, ?N) . sum3(?A, #sum(?N)) :-p(?A, ?B, ?N) .Rule 10 sums up the numbers N for each pair of As and Bs; rule 11 sums up the Ns from all pairs of Ns and Bs for each A (possibly having the same N value); and rule 12 sums up the distinct Ns for each A.</figDesc></figure>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="1" xml:id="foot_0">The web application is available at: https://tools.iccl.inf.tu-dresden.de/nemo/</note>
			<note xmlns="http://www.tei-c.org/ns/1.0" place="foot" n="2" xml:id="foot_1">A full documentation can be found here: https://knowsys.github.io/nemo-doc/</note>
		</body>
		<back>

			<div type="acknowledgement">
<div xmlns="http://www.tei-c.org/ns/1.0"><head>Acknowledgments</head><p>This work is in part supported by Deutsche Forschungsgemeinschaft in project number 389792660 (TRR 248, CPEC), by the Bundesministerium für Bildung und Forschung under European ITEA project 01IS21084 (InnoSale), in the Center for Scalable Data Analytics and Artificial Intelligence (ScaDS.AI), and by BMBF and DAAD in project 57616814 (SECAI).</p></div>
			</div>

			<div type="references">

				<listBibl>

<biblStruct xml:id="b0">
	<monogr>
		<author>
			<persName><forename type="first">S</forename><surname>Abiteboul</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Hull</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Vianu</surname></persName>
		</author>
		<title level="m">Foundations of Databases</title>
				<imprint>
			<publisher>Addison Wesley</publisher>
			<date type="published" when="1994">1994</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b1">
	<analytic>
		<title level="a" type="main">Benchmarking the chase</title>
		<author>
			<persName><forename type="first">M</forename><surname>Benedikt</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Konstantinidis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Mecca</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Motik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Papotti</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Santoro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Tsamoura</surname></persName>
		</author>
		<idno type="DOI">10.1145/3034786.3034796</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 36th Symp. on Principles of Database Systems (PODS&apos;17)</title>
				<meeting>36th Symp. on Principles of Database Systems (PODS&apos;17)</meeting>
		<imprint>
			<publisher>ACM</publisher>
			<date type="published" when="2017">2017</date>
			<biblScope unit="page" from="37" to="52" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b2">
	<analytic>
		<title level="a" type="main">An introduction to ontology-based query answering with existential rules, in: Reasoning Web: Reasoning on</title>
		<author>
			<persName><forename type="first">M</forename><surname>Mugnier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Thomazo</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-319-10587-1_6</idno>
	</analytic>
	<monogr>
		<title level="m">the Web in the Big Data Era -10th Int. Summer School</title>
				<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2014">2014</date>
			<biblScope unit="volume">8714</biblScope>
			<biblScope unit="page" from="245" to="278" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b3">
	<analytic>
		<title level="a" type="main">Nemo: First glimpse of a new rule engine</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ivliev</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Ellmauthaler</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Gerlach</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Marx</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Meißner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Meusel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Krötzsch</surname></persName>
		</author>
		<idno type="DOI">10.4204/EPTCS.385.35</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 39th Int. Conf. on Logic Programming (ICLP&apos;23)</title>
				<meeting>39th Int. Conf. on Logic Programming (ICLP&apos;23)</meeting>
		<imprint>
			<publisher>EPTCS</publisher>
			<date type="published" when="2023">2023</date>
			<biblScope unit="volume">385</biblScope>
			<biblScope unit="page" from="333" to="335" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b4">
	<analytic>
		<title level="a" type="main">Conflict-driven answer set solving: From theory to practice</title>
		<author>
			<persName><forename type="first">M</forename><surname>Gebser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Kaufmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Schaub</surname></persName>
		</author>
		<idno type="DOI">10.1016/j.artint.2012.04.001</idno>
	</analytic>
	<monogr>
		<title level="j">Artif. Intell</title>
		<imprint>
			<biblScope unit="volume">187</biblScope>
			<biblScope unit="page" from="52" to="89" />
			<date type="published" when="2012">2012</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b5">
	<analytic>
		<title level="a" type="main">The ASP system DLV2</title>
		<author>
			<persName><forename type="first">M</forename><surname>Alviano</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Calimeri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Dodaro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Fuscà</surname></persName>
		</author>
		<author>
			<persName><forename type="first">N</forename><surname>Leone</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Perri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">F</forename><surname>Ricca</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Veltri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Zangari</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-319-61660-5_19</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 14th Int. Conf. on Logic Programming and Nonmonotonic Reasoning (LPNMR&apos;17)</title>
				<meeting>14th Int. Conf. on Logic Programming and Nonmonotonic Reasoning (LPNMR&apos;17)</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2017">2017</date>
			<biblScope unit="volume">10377</biblScope>
			<biblScope unit="page" from="215" to="221" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b6">
	<analytic>
		<title level="a" type="main">Fifty years of Prolog and beyond</title>
		<author>
			<persName><forename type="first">P</forename><surname>Körner</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Leuschel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Barbosa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><forename type="middle">S</forename><surname>Costa</surname></persName>
		</author>
		<author>
			<persName><forename type="first">V</forename><surname>Dahl</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">V</forename><surname>Hermenegildo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><forename type="middle">F</forename><surname>Morales</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Wielemaker</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Diaz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Abreu</surname></persName>
		</author>
		<idno type="DOI">10.1017/S1471068422000102</idno>
	</analytic>
	<monogr>
		<title level="j">Theory Pract. Log. Program</title>
		<imprint>
			<biblScope unit="volume">22</biblScope>
			<biblScope unit="page" from="776" to="858" />
			<date type="published" when="2022">2022</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b7">
	<analytic>
		<title level="a" type="main">RDFox: A highly-scalable RDF store</title>
		<author>
			<persName><forename type="first">Y</forename><surname>Nenov</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Piro</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Motik</surname></persName>
		</author>
		<author>
			<persName><forename type="first">I</forename><surname>Horrocks</surname></persName>
		</author>
		<author>
			<persName><forename type="first">Z</forename><surname>Wu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Banerjee</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-319-25010-6_1</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 14th Int. Semantic Web Conf. (ISWC&apos;15), Part II</title>
				<meeting>14th Int. Semantic Web Conf. (ISWC&apos;15), Part II</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2015">2015</date>
			<biblScope unit="volume">9367</biblScope>
			<biblScope unit="page" from="3" to="20" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b8">
	<analytic>
		<title level="a" type="main">Column-oriented Datalog materialization for large knowledge graphs</title>
		<author>
			<persName><forename type="first">J</forename><surname>Urbani</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Jacobs</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Krötzsch</surname></persName>
		</author>
		<idno type="DOI">10.1609/aaai.v30i1.9993</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 30th AAAI Conf. on Artificial Intelligence (AAAI&apos;16)</title>
				<meeting>30th AAAI Conf. on Artificial Intelligence (AAAI&apos;16)</meeting>
		<imprint>
			<publisher>AAAI Press</publisher>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="258" to="264" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b9">
	<analytic>
		<title level="a" type="main">The Vadalog system: Datalog-based reasoning for knowledge graphs</title>
		<author>
			<persName><forename type="first">L</forename><surname>Bellomarini</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Sallinger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Gottlob</surname></persName>
		</author>
		<idno type="DOI">10.14778/3213880.3213888</idno>
	</analytic>
	<monogr>
		<title level="j">Proc. VLDB Endowment</title>
		<imprint>
			<biblScope unit="volume">11</biblScope>
			<biblScope unit="page" from="975" to="987" />
			<date type="published" when="2018">2018</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b10">
	<analytic>
		<title level="a" type="main">Graal: A toolkit for query answering with existential rules</title>
		<author>
			<persName><forename type="first">J</forename><surname>Baget</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Leclère</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Mugnier</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Rocher</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Sipieter</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-319-21542-6_21</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 9th Int. Web Rule Symposium (RuleML&apos;15)</title>
				<meeting>9th Int. Web Rule Symposium (RuleML&apos;15)</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2015">9202. 2015</date>
			<biblScope unit="page" from="328" to="344" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b11">
	<analytic>
		<title level="a" type="main">Soufflé: On synthesis of program analyzers</title>
		<author>
			<persName><forename type="first">H</forename><surname>Jordan</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Scholz</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><surname>Subotic</surname></persName>
		</author>
		<idno type="DOI">10.1007/978-3-319-41540-6_23</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 28th Int. Conf. on Computer Aided Verification (CAV&apos;16), Part II</title>
				<meeting>28th Int. Conf. on Computer Aided Verification (CAV&apos;16), Part II</meeting>
		<imprint>
			<publisher>Springer</publisher>
			<date type="published" when="2016">9780. 2016</date>
			<biblScope unit="page" from="422" to="430" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b12">
	<analytic>
		<title level="a" type="main">Design and implementation of the LogicBlox system</title>
		<author>
			<persName><forename type="first">M</forename><surname>Aref</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Cate</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">J</forename><surname>Green</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Kimelfeld</surname></persName>
		</author>
		<author>
			<persName><forename type="first">D</forename><surname>Olteanu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">E</forename><surname>Pasalic</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">L</forename><surname>Veldhuizen</surname></persName>
		</author>
		<author>
			<persName><forename type="first">G</forename><surname>Washburn</surname></persName>
		</author>
		<idno type="DOI">10.1145/2723372.2742796</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 2015 ACM SIGMOD Int. Conf. on Mngmt of Data</title>
				<meeting>2015 ACM SIGMOD Int. Conf. on Mngmt of Data</meeting>
		<imprint>
			<date type="published" when="2015">2015</date>
			<biblScope unit="page" from="1371" to="1382" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b13">
	<analytic>
		<title level="a" type="main">SociaLite: An efficient graph query language based on datalog</title>
		<author>
			<persName><forename type="first">J</forename><surname>Seo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Guo</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">S</forename><surname>Lam</surname></persName>
		</author>
		<idno type="DOI">10.1109/TKDE.2015.2405562</idno>
	</analytic>
	<monogr>
		<title level="j">IEEE Trans. Knowl. Data Eng</title>
		<imprint>
			<biblScope unit="volume">27</biblScope>
			<biblScope unit="page" from="1824" to="1837" />
			<date type="published" when="2015">2015</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b14">
	<analytic>
		<title level="a" type="main">EmptyHeaded: A relational engine for graph processing</title>
		<author>
			<persName><forename type="first">C</forename><forename type="middle">R</forename><surname>Aberger</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Tu</surname></persName>
		</author>
		<author>
			<persName><forename type="first">K</forename><surname>Olukotun</surname></persName>
		</author>
		<author>
			<persName><forename type="first">C</forename><surname>Ré</surname></persName>
		</author>
		<idno type="DOI">10.1145/3129246</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 2016 ACM SIGMOD Int. Conf. on Management of Data, ACM</title>
				<meeting>2016 ACM SIGMOD Int. Conf. on Management of Data, ACM</meeting>
		<imprint>
			<date type="published" when="2016">2016</date>
			<biblScope unit="page" from="431" to="446" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b15">
	<analytic>
		<title level="a" type="main">Multi-shot ASP solving with clingo</title>
		<author>
			<persName><forename type="first">M</forename><surname>Gebser</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><surname>Kaminski</surname></persName>
		</author>
		<author>
			<persName><forename type="first">B</forename><surname>Kaufmann</surname></persName>
		</author>
		<author>
			<persName><forename type="first">T</forename><surname>Schaub</surname></persName>
		</author>
		<idno type="DOI">.org/10.1017/S1471068418000054</idno>
	</analytic>
	<monogr>
		<title level="j">Theory Pract. Log. Program</title>
		<imprint>
			<biblScope unit="volume">19</biblScope>
			<biblScope unit="page" from="27" to="82" />
			<date type="published" when="2019">2019</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b16">
	<analytic>
		<title level="a" type="main">Nemo: Your friendly and versatile rule reasoning toolkit</title>
		<author>
			<persName><forename type="first">A</forename><surname>Ivliev</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Gerlach</surname></persName>
		</author>
		<author>
			<persName><forename type="first">S</forename><surname>Meusel</surname></persName>
		</author>
		<author>
			<persName><forename type="first">J</forename><surname>Steinberg</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Krötzsch</surname></persName>
		</author>
	</analytic>
	<monogr>
		<title level="m">Proc. 21st Int. Conf. on Principles of Knowledge Representation and Reasoning (KR&apos;24)</title>
				<meeting>21st Int. Conf. on Principles of Knowledge Representation and Reasoning (KR&apos;24)</meeting>
		<imprint>
			<date type="published" when="2024">2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b17">
	<monogr>
		<author>
			<persName><surname>Lsp</surname></persName>
		</author>
		<ptr target="https://microsoft.github.io/language-server-protocol/" />
		<title level="m">Official page for Language Server Protocol</title>
				<imprint>
			<publisher>Microsoft</publisher>
			<date type="published" when="2024-05">2024. May 2024</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b18">
	<analytic>
		<title level="a" type="main">Trie memory</title>
		<author>
			<persName><forename type="first">E</forename><surname>Fredkin</surname></persName>
		</author>
		<idno type="DOI">10.1145/367390.367400</idno>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">3</biblScope>
			<biblScope unit="page" from="490" to="499" />
			<date type="published" when="1960">1960</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b19">
	<analytic>
		<title level="a" type="main">Triejoin: A simple, worst-case optimal join algorithm</title>
		<author>
			<persName><forename type="first">T</forename><forename type="middle">L</forename><surname>Veldhuizen</surname></persName>
		</author>
		<idno type="DOI">10.5441/002/icdt.2014.13</idno>
	</analytic>
	<monogr>
		<title level="m">Proc. 17th Int. Conf. on Database Theory (ICDT&apos;14)</title>
				<meeting>17th Int. Conf. on Database Theory (ICDT&apos;14)</meeting>
		<imprint>
			<date type="published" when="2014">2014</date>
			<biblScope unit="page" from="96" to="106" />
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b20">
	<analytic>
		<title level="a" type="main">Wikidata: a free collaborative knowledgebase</title>
		<author>
			<persName><forename type="first">D</forename><surname>Vrandečić</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><surname>Krötzsch</surname></persName>
		</author>
		<idno type="DOI">10.1145/2629489</idno>
	</analytic>
	<monogr>
		<title level="j">Commun. ACM</title>
		<imprint>
			<biblScope unit="volume">57</biblScope>
			<biblScope unit="page" from="78" to="85" />
			<date type="published" when="2014">2014</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b21">
	<monogr>
		<title level="m" type="main">SPARQL 1.1 Query Language, W3C Recommendation</title>
		<ptr target="http://www.w3.org/TR/sparql11-query/" />
		<editor>S. Harris, A. Seaborne</editor>
		<imprint>
			<date type="published" when="2013-03-21">21 March 2013</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b22">
	<analytic>
		<title level="a" type="main">A proof procedure for data dependencies</title>
		<author>
			<persName><forename type="first">C</forename><surname>Beeri</surname></persName>
		</author>
		<author>
			<persName><forename type="first">M</forename><forename type="middle">Y</forename><surname>Vardi</surname></persName>
		</author>
		<idno type="DOI">10.1145/1634.1636</idno>
	</analytic>
	<monogr>
		<title level="j">J. ACM</title>
		<imprint>
			<biblScope unit="volume">31</biblScope>
			<biblScope unit="page" from="718" to="741" />
			<date type="published" when="1984">1984</date>
		</imprint>
	</monogr>
</biblStruct>

<biblStruct xml:id="b23">
	<analytic>
		<title level="a" type="main">Data exchange: semantics and query answering</title>
		<author>
			<persName><forename type="first">R</forename><surname>Fagin</surname></persName>
		</author>
		<author>
			<persName><forename type="first">P</forename><forename type="middle">G</forename><surname>Kolaitis</surname></persName>
		</author>
		<author>
			<persName><forename type="first">R</forename><forename type="middle">J</forename><surname>Miller</surname></persName>
		</author>
		<author>
			<persName><forename type="first">L</forename><surname>Popa</surname></persName>
		</author>
		<idno type="DOI">10.1016/j.tcs.2004.10.033</idno>
	</analytic>
	<monogr>
		<title level="j">Theoretical Computer Science</title>
		<imprint>
			<biblScope unit="volume">336</biblScope>
			<biblScope unit="page" from="89" to="124" />
			<date type="published" when="2005">2005</date>
		</imprint>
	</monogr>
</biblStruct>

				</listBibl>
			</div>
		</back>
	</text>
</TEI>
