Datalog

Datalog
ParadigmLogic, Declarative
FamilyProlog
First appeared1977; 47 years ago (1977)
Typing disciplineWeak
Dialects
Datomic, .QL, Soufflé, XTDB, etc.
Influenced by
Prolog
Influenced
SQL

Datalog is a declarative logic programming language. While it is syntactically a subset of Prolog, Datalog generally uses a bottom-up rather than top-down evaluation model. This difference yields significantly different behavior and properties from Prolog. It is often used as a query language for deductive databases. Datalog has been applied to problems in data integration, networking, program analysis, and more.

Example

A Datalog program consists of facts, which are statements that are held to be true, and rules, which say how to deduce new facts from known facts. For example, here are two facts that mean xerces is a parent of brooke and brooke is a parent of damocles:

parent(xerces, brooke).
parent(brooke, damocles).

The names are written in lowercase because strings beginning with an uppercase letter stand for variables. Here are two rules:

ancestor(X, Y) :- parent(X, Y).
ancestor(X, Y) :- parent(X, Z), ancestor(Z, Y).

The :- symbol is read as "if", and the comma is read "and", so these rules mean:

  • X is an ancestor of Y if X is a parent of Y.
  • X is an ancestor of Y if X is a parent of some Z, and Z is an ancestor of Y.

The meaning of a program is defined to be the set of all of the facts that can be deduced using the initial facts and the rules. This program's meaning is given by the following facts:

parent(xerces, brooke).
parent(brooke, damocles).
ancestor(xerces, brooke).
ancestor(brooke, damocles).
ancestor(xerces, damocles).

Some Datalog implementations don't deduce all possible facts, but instead answer queries:

?- ancestor(xerces, X).

This query asks: Who are all the X that xerces is an ancestor of? For this example, it would return brooke and damocles.

Comparison to relational databases

The non-recursive subset of Datalog is closely related to query languages for relational databases, such as SQL. The following table maps between Datalog, relational algebra, and SQL concepts:

Datalog Relational algebra SQL
Relation Relation Table
Fact Tuple Row
Rule n/a Materialized view
Query Select Query

More formally, non-recursive Datalog corresponds precisely to unions of conjunctive queries, or equivalently, negation-free relational algebra.

Schematic translation from non-recursive Datalog into SQL
s(x, y).
t(y).
r(A, B) :- s(A, B), t(B).
CREATE TABLE s (
  z0 TEXT NONNULL,
  z1 TEXT NONNULL,
  PRIMARY KEY (z0, z1)
);
CREATE TABLE t (
  z0 TEXT NONNULL PRIMARY KEY
);
INSERT INTO s VALUES ('x', 'y');
INSERT INTO t VALUES ('y');
CREATE VIEW r AS
SELECT s.z0, s.z1
FROM s, t
WHERE s.z1 = t.z0;

Syntax

A Datalog program consists of a list of rules (Horn clauses).[1] If constant and variable are two countable sets of constants and variables respectively and relation is a countable set of predicate symbols, then the following BNF grammar expresses the structure of a Datalog program:

<program> ::= <rule> <program> | ""
<rule> ::= <atom> ":-" <atom-list> "."
<atom> ::= <relation> "(" <term-list> ")"
<atom-list> ::= <atom> | <atom> "," <atom-list> | ""
<term> ::= <constant> | <variable>
<term-list> ::= <term> | <term> "," <term-list> | ""

Atoms are also referred to as literals. The atom to the left of the :- symbol is called the head of the rule; the atoms to the right are the body. Every Datalog program must satisfy the condition that every variable that appears in the head of a rule also appears in the body (this condition is sometimes called the range restriction).[1][2]

There are two common conventions for variable names: capitalizing variables, or prefixing them with a question mark ?.[3]

Note that under this definition, Datalog does not include negation nor aggregates; see § Extensions for more information about those constructs.

Rules with empty bodies are called facts. For example, the following rule is a fact:

r(x) :- .

The set of facts is called the extensional database or EDB of the Datalog program. The set of tuples computed by evaluating the Datalog program is called the intensional database or IDB.

Syntactic sugar

Many implementations of logic programming extend the above grammar to allow writing facts without the :-, like so:

r(x).

Some also allow writing 0-ary relations without parentheses, like so:

p :- q.

These are merely abbreviations (syntactic sugar); they have no impact on the semantics of the program.

Semantics

There are three widely-used approaches to the semantics of Datalog programs: model-theoretic, fixed-point, and proof-theoretic. These three approaches can be proven equivalent.[4]

An atom is called ground if none of its subterms are variables. Intuitively, each of the semantics define the meaning of a program to be the set of all ground atoms that can be deduced from the rules of the program, starting from the facts.

Model theoretic

A rule is called ground if all of its atoms (head and body) are ground. A ground rule R1 is a ground instance of another rule R2 if R1 is the result of a substitution of constants for all the variables in R2. The Herbrand base of a Datalog program is the set of all ground atoms that can be made with the constants appearing in the program. The Herbrand model of a Datalog program is the smallest subset of the Herbrand base such that, for each ground instance of each rule in the program, if the atoms in the body of the rule are in the set, then so is the head.[5] The model-theoretic semantics define the minimal Herbrand model to be the meaning of the program.

Fixed-point

Let I be the power set of the Herbrand base of a program P. The immediate consequence operator for P is a map T from I to I that adds all of the new ground atoms that can be derived from the rules of the program in a single step. The least-fixed-point semantics define the least fixed point of T to be the meaning of the program; this coincides with the minimal Herbrand model.[6]

The fixpoint semantics suggest an algorithm for computing the minimal model: Start with the set of ground facts in the program, then repeatedly add consequences of the rules until a fixpoint is reached. This algorithm is called naïve evaluation.

Proof-theoretic

Proof tree showing the derivation of the ground atom path(x, z) from the program
edge(x, y).
edge(y, z).
path(A, B) :- 
  edge(A, B).
path(A, C) :- 
  path(A, B), 
  edge(B, C).

The proof-theoretic semantics defines the meaning of a Datalog program to be the set of facts with corresponding proof trees. Intuitively, a proof tree shows how to derive a fact from the facts and rules of a program.

One might be interested in knowing whether or not a particular ground atom appears in the minimal Herbrand model of a Datalog program, perhaps without caring much about the rest of the model. A top-down reading of the proof trees described above suggests an algorithm for computing the results of such queries. This reading informs the SLD resolution algorithm, which forms the basis for the evaluation of Prolog.

Evaluation

There are many different ways to evaluate a Datalog program, with different performance characteristics.

Bottom-up evaluation strategies

Bottom-up evaluation strategies start with the facts in the program and repeatedly apply the rules until either some goal or query is established, or until the complete minimal model of the program is produced.

Naïve evaluation

Naïve evaluation mirrors the fixpoint semantics for Datalog programs. Naïve evaluation uses a set of "known facts", which is initialized to the facts in the program. It proceeds by repeatedly enumerating all ground instances of each rule in the program. If each atom in the body of the ground instance is in the set of known facts, then the head atom is added to the set of known facts. This process is repeated until a fixed point is reached, and no more facts may be deduced. Naïve evaluation produces the entire minimal model of the program.[7]

Semi-naïve evaluation

Semi-naïve evaluation is a bottom-up evaluation strategy that can be asymptotically faster than naïve evaluation.[8]

Performance considerations

A parallel Datalog engine was evaluated on the Theta supercomputer at Argonne National Laboratory.[9]

Naïve and semi-naïve evaluation both evaluate recursive Datalog rules by repeatedly applying them to a set of known facts until a fixed point is reached. In each iteration, rules are only run for "one step", i.e., non-recursively. As mentioned above, each non-recursive Datalog rule corresponds precisely to a conjunctive query. Therefore, many of the techniques from database theory used to speed up conjunctive queries are applicable to bottom-up evaluation of Datalog, such as

Many such techniques are implemented in modern bottom-up Datalog engines such as Soufflé. Some Datalog engines integrate SQL databases directly.[17]

Bottom-up evaluation of Datalog is also amenable to parallelization. Parallel Datalog engines are generally divided into two paradigms:

Top-down evaluation strategies

SLD resolution is sound and complete for Datalog programs.

Magic sets

Top-down evaluation strategies begin with a query or goal. Bottom-up evaluation strategies can answer queries by computing the entire minimal model and matching the query against it, but this can be inefficient if the answer only depends on a small subset of the entire model. The magic sets algorithm takes a Datalog program and a query, and produces a more efficient program that computes the same answer to the query while still using bottom-up evaluation.[23] A variant of the magic sets algorithm has been shown to produce programs that, when evaluated using semi-naïve evaluation, are as efficient as top-down evaluation.[24]

Complexity

The decision problem formulation of Datalog evaluation is as follows: Given a Datalog program P split into a set of facts (EDB) E and a set of rules R, and a ground atom A, is A in the minimal model of P? In this formulation, there are three variations of the computational complexity of evaluating Datalog programs:[25]

  • The data complexity is the complexity of the decision problem when A and E are inputs and R is fixed.
  • The program complexity is the complexity of the decision problem when A and R are inputs and E is fixed.
  • The combined complexity is the complexity of the decision problem when A, E, and R are inputs.

With respect to data complexity, the decision problem for Datalog is P-complete. With respect to program complexity, the decision problem is EXPTIME-complete. In particular, evaluating Datalog programs always terminates; Datalog is not Turing-complete.

Some extensions to Datalog do not preserve these complexity bounds. Extensions implemented in some Datalog engines, such as algebraic data types, can even make the resulting language Turing-complete.

Extensions

Several extensions have been made to Datalog, e.g., to support negation, aggregate functions, inequalities, to allow object-oriented programming, or to allow disjunctions as heads of clauses. These extensions have significant impacts on the language's semantics and on the implementation of a corresponding interpreter.

Datalog is a syntactic subset of Prolog, disjunctive Datalog, answer set programming, DatalogZ, and constraint logic programming. When evaluated as an answer set program, a Datalog program yields a single answer set, which is exactly its minimal model.[26]

Many implementations of Datalog extend Datalog with additional features; see § Datalog engines for more information.

Aggregation

Datalog can be extended to support aggregate functions.[27]

Notable Datalog engines that implement aggregation include:

Negation

Adding negation to Datalog complicates its semantics, leading to whole new languages and strategies for evaluation. For example, the language that results from adding negation with the stable model semantics is exactly answer set programming.

Stratified negation can be added to Datalog while retaining its model-theoretic and fixed-point semantics. Notable Datalog engines that implement stratified negation include:

Comparison to Prolog

Unlike in Prolog, statements of a Datalog program can be stated in any order. Datalog does not have Prolog's cut operator. This makes Datalog a fully declarative language.

In contrast to Prolog, Datalog

  • disallows complex terms as arguments of predicates, e.g., p(x, y) is admissible but not p(f(x), y),
  • disallows negation,
  • requires that every variable that appears in the head of a clause also appear in a literal in the body of the clause.

This article deals primarily with Datalog without negation (see also Syntax and semantics of logic programming § Extending Datalog with negation). However, stratified negation is a common addition to Datalog; the following list contrasts Prolog with Datalog with stratified negation. Datalog with stratified negation

  • also disallows complex terms as arguments of predicates,
  • requires that every variable that appears in the head of a clause also appear in a positive (i.e., not negated) atom in the body of the clause,
  • requires that every variable appearing in a negative literal in the body of a clause also appear in some positive literal in the body of the clause.[30][unreliable source?]

Expressiveness

Datalog generalizes many other query languages. For instance, conjunctive queries and union of conjunctive queries can be expressed in Datalog. Datalog can also express regular path queries.

When we consider ordered databases, i.e., databases with an order relation on their active domain, then the Immerman–Vardi theorem implies that the expressive power of Datalog is precisely that of the class PTIME: a property can be expressed in Datalog if and only if it is computable in polynomial time.[31]

The boundedness problem for Datalog asks, given a Datalog program, whether it is bounded, i.e., the maximal recursion depth reached when evaluating the program on an input database can be bounded by some constant. In other words, this question asks whether the Datalog program could be rewritten as a nonrecursive Datalog program, or, equivalently, as a union of conjunctive queries. Solving the boundedness problem on arbitrary Datalog programs is undecidable,[32] but it can be made decidable by restricting to some fragments of Datalog.

Datalog engines

Systems that implement languages inspired by Datalog, whether compilers, interpreters, libraries, or embedded DSLs, are referred to as Datalog engines. Datalog engines often implement extensions of Datalog, extending it with additional data types, foreign function interfaces, or support for user-defined lattices. Such extensions may allow for writing non-terminating or otherwise ill-defined programs.[citation needed]

Here is a short list of systems that are either based on Datalog or provide a Datalog interpreter:

Free software/open source

Written in Name Try it online External Database Description Licence
C XSB A logic programming and deductive database system for Unix and Microsoft Windows with tabling giving Datalog-like termination and efficiency, including incremental evaluation[33] GNU LGPL
C++ Coral[34] A deductive database system written in C++ with semi-naïve datalog evaluation. Developed 1988-1997. custom licence, free for non-commercial use
DLV[35] A Datalog extension that supports disjunctive head clauses. custom licence, free for academic and non-commercial educational use, as well as for use by non-profit organisations[36]
Inter4QL[37] an open-source command-line interpreter of Datalog-like 4QL query language implemented in C++ for Windows, Mac OS X and Linux. Negation is allowed in heads and bodies of rules as well as in recursion GNU GPL v3
RDFox[38] in-memory A high-performance RDF triple store with OWL and Datalog reasoning. Implements the FBF algorithm for incremental evaluation, extending Datalog to include stratified negation and equality. Capable of running in a high availability setup. custom licence, free for non-commercial use[39]
Soufflé Yes file, in-memory, sqlite3 an open-source Datalog engine that has a compiler translating Datalog to high-performance, parallel C++ code and a high-performance interpreter; specifically designed for complex Datalog queries over large data sets as encountered in the context of static program analysis UPL v1.0
Clojure Cascalog Hadoop a Clojure library for querying data stored on Hadoop clusters Apache
Datomic Yes DynamoDB, Cassandra,

Postgres and others.

a distributed database designed to enable scalable, flexible and intelligent applications, running on new cloud architectures, uses Datalog as the query language. closed source, binaries released for free under the Apache 2.0.
Clojure Datalog a contributed library implementing aspects of Datalog Eclipse Public License 1.0
XTDB (formerly Crux) Yes Apache Kafka A general-purpose database with an "unbundled" architecture, using log-centric streaming of documents and transactions to achieve significant architectural flexibility and elegant horizontal scaling. Pluggable components include Kafka, RocksDB and LMDB. Indexes are bitemporal to support point-in-time Datalog queries by default. Java and HTTP APIs are provided. MIT License
Datascript in-memory Immutable database and Datalog query engine that runs in the browser Eclipse Public License 1.0
Datalevin LMDB A fork of Datascript that is optimized for the LMDB durable storage Eclipse Public License 1.0
Datahike file, in-memory A fork of Datascript with a durable backend using a hitchhiker tree. Eclipse Public License 1.0
Naga/Asami file, in-memory A combination of a graph database (Asami), and a rules processing system (Naga) that evaluates native Datalog syntax and executes using the database. Runs in browsers (memory), on the JVM (memory/files), or natively (memory/files). Eclipse Public License 1.0
Erlang Datalog The library is designed to query and formalise relation of n-ary streams using datalog. It implements an ad-hoc query engine using simplified version of general logic programming paradigm. The library facilitates development of data integration, information exchange and semantic web applications. Apache v2
Go Mangle Mangle is a programming language for deductive database programming. It is an extension of Datalog, with various extensions like aggregation, function calls and optional type-checking. Apache v2
Haskell Dyna[40] Dyna is a declarative programming language for statistical AI programming. The language is based on Datalog, supports both forward and backward chaining, and incremental evaluation. GNU AGPL v3
Java AbcDatalog[41] AbcDatalog is an open-source implementation of the logic programming language Datalog written in Java. It provides ready-to-use implementations of common Datalog evaluation algorithms, as well as some experimental multi-threaded evaluation engines. It supports language features beyond core Datalog such as explicit (dis-)unification of terms and stratified negation. Additionally, AbcDatalog is designed to be easily extensible with new evaluation engines and new language features. BSD
IRIS[42] IRIS extends Datalog with function symbols, built-in predicates, locally stratified or un-stratified logic programs (using the well-founded semantics), unsafe rules and XML schema data types GNU LGPL v2.1
Jena a Semantic Web framework which includes a Datalog implementation as part of its general purpose rule engine, which provides OWL and RDFS support.[43] Apache v2
SociaLite[44] SociaLite is a datalog variant for large-scale graph analysis developed in Stanford Apache v2
Graal[45] Graal is a Java toolkit dedicated to querying knowledge bases within the framework of existential rules, aka Datalog+/-. CeCILL v2.1
Flix Yes A functional and logic programming language inspired by Datalog extended with user-defined lattices and monotone filter/transfer functions. Apache v2
Lua Datalog[46] Yes[47] a lightweight deductive database system. GNU LGPL
OCaml datalog[48] An in-memory datalog implementation for OCaml featuring bottom-up and top-down algorithms. BSD 2-clause
Prolog DES[49] an open-source implementation to be used for teaching Datalog in courses GNU LGPL
Python pyDatalog 11 dialects of SQL adds logic programming to Python's toolbox. It can run logic queries on databases or Python objects, and use logic clauses to define the behavior of Python classes. GNU LGPL
Racket Datalog for Racket[50] GNU LGPL
Datafun[51] Generalized Datalog on Semilattices GNU LGPL
Ruby bloom / bud A Ruby DSL for programming with data-centric constructs, based on the Dedalus extension of Datalog which adds a temporal dimension to the logic. BSD 3-Clause
Rust Crepe Crepe is a library that allows you to write declarative logic programs in Rust, with a Datalog-like syntax. It provides a procedural macro that generates efficient, safe code and interoperates seamlessly with Rust programs. It also supports extensions like stratified negation, semi-naive evaluation, and calling external functions within Datalog rules. MIT License / Apache 2.0
Datafrog Datafrog is a lightweight Datalog engine intended to be embedded in other Rust programs. MIT License / Apache 2.0
TerminusDB In-memory TerminusDB is an open source graph database and document store. Designed for collaboratively building data-intensive applications and knowledge graphs. Apache v2
DDlog[52] DDlog is an incremental, in-memory, typed Datalog engine. It is well suited for writing programs that incrementally update their output in response to input changes. The DDlog programmer specifies the desired input-output mapping in a declarative manner, using a dialect of Datalog. The DDlog compiler then synthesizes an efficient incremental implementation in Rust. DDlog is based on the differential dataflow[53] library. It offers bindings for Java, C, and Go. MIT License
Tcl tclbdd[54] Implementation based on binary decision diagrams. Built to support development of an optimizing compiler for Tcl. BSD
Other or Unknown Languages bddbddb[55] an implementation of Datalog done at Stanford University. It is mainly used to query Java bytecode including points-to analysis on large Java programs. It uses BDDs internally. GNU LGPL
ConceptBase[56] a deductive and object-oriented database system based on a Datalog query evaluator : Prolog for triggered procedures and rewrites, axiomatized Datalog called « Telos » for (meta)modeling. It is mainly used for conceptual modeling and metamodeling BSD 2-Clause

Non-free software

  • FoundationDB provides a free-of-charge database binding for pyDatalog, with a tutorial on its use.[57]
  • Leapsight Semantic Dataspace (LSD) is a distributed deductive database that offers high availability, fault tolerance, operational simplicity, and scalability. LSD uses Leaplog (a Datalog implementation) for querying and reasoning and was create by Leapsight.[58]
  • LogicBlox, a commercial implementation of Datalog used for web-based retail planning and insurance applications.
  • Profium Sense is a native RDF compliant graph database written in Java. It provides Datalog evaluation support of user defined rules.
  • .QL, a commercial object-oriented variant of Datalog created by Semmle for analyzing source code to detect security vulnerabilities.[59]
  • SecPAL a security policy language developed by Microsoft Research.[60]
  • Stardog is a graph database, implemented in Java. It provides support for RDF and all OWL 2 profiles providing extensive reasoning capabilities, including datalog evaluation.
  • StrixDB: a commercial RDF graph store, SPARQL compliant with Lua API and Datalog inference capabilities. Could be used as httpd (Apache HTTP Server) module or standalone (although beta versions are under the Perl Artistic License 2.0).

Uses and influence

Datalog is quite limited in its expressivity. It is not Turing-complete, and doesn't include basic data types such as integers or strings. This parsimony is appealing from a theoretical standpoint, but it means Datalog per se is rarely used as a programming language or knowledge representation language.[61] Most Datalog engines implement substantial extensions of Datalog. However, Datalog has a strong influence on such implementations, and many authors don't bother to distinguish them from Datalog as presented in this article. Accordingly, the applications discussed in this section include applications of realistic implementations of Datalog-based languages.

Datalog has been applied to problems in data integration, information extraction, networking, security, cloud computing and machine learning.[62][63] Google has developed an extension to Datalog for big data processing.[64]

Datalog has seen application in static program analysis.[65] The Soufflé dialect has been used to write pointer analyses for Java and a control-flow analysis for Scheme.[66][67] Datalog has been integrated with SMT solvers to make it easier to write certain static analyses.[68] The Flix dialect is also suited to writing static program analyses.[69]

Some widely used database systems include ideas and algorithms developed for Datalog. For example, the SQL:1999 standard includes recursive queries, and the Magic Sets algorithm (initially developed for the faster evaluation of Datalog queries) is implemented in IBM's DB2.[70]

History

The origins of Datalog date back to the beginning of logic programming, but it became prominent as a separate area around 1977 when Hervé Gallaire and Jack Minker organized a workshop on logic and databases.[71] David Maier is credited with coining the term Datalog.[72]

See also

Notes

  1. ^ a b Ceri, Gottlob & Tanca 1989, p. 146.
  2. ^ Eisner, Jason; Filardo, Nathaniel W. (2011). "Dyna: Extending Datalog for Modern AI". In de Moor, Oege; Gottlob, Georg; Furche, Tim; Sellers, Andrew (eds.). Datalog Reloaded. Lecture Notes in Computer Science. Vol. 6702. Berlin, Heidelberg: Springer. pp. 181–220. doi:10.1007/978-3-642-24206-9_11. ISBN 978-3-642-24206-9.
  3. ^ Maier, David; Tekle, K. Tuncay; Kifer, Michael; Warren, David S. (2018-09-01), "Datalog: concepts, history, and outlook", Declarative Logic Programming: Theory, Systems, and Applications, vol. 20, Association for Computing Machinery and Morgan & Claypool, pp. 3–100, doi:10.1145/3191315.3191317, ISBN 978-1-970001-99-0, S2CID 69379310, retrieved 2023-03-02
  4. ^ Van Emden, M. H.; Kowalski, R. A. (1976-10-01). "The Semantics of Predicate Logic as a Programming Language". Journal of the ACM. 23 (4): 733–742. doi:10.1145/321978.321991. ISSN 0004-5411. S2CID 11048276.
  5. ^ Ceri, Gottlob & Tanca 1989, p. 149.
  6. ^ Ceri, Gottlob & Tanca 1989, p. 150.
  7. ^ Ceri, Gottlob & Tanca 1989, p. 154.
  8. ^ Alvarez-Picallo, Mario; Eyers-Taylor, Alex; Peyton Jones, Michael; Ong, C.-H. Luke (2019). "Fixing Incremental Computation: Derivatives of Fixpoints, and the Recursive Semantics of Datalog". In Caires, Luís (ed.). Programming Languages and Systems. Lecture Notes in Computer Science. Vol. 11423. Cham: Springer International Publishing. pp. 525–552. doi:10.1007/978-3-030-17184-1_19. ISBN 978-3-030-17184-1. S2CID 53430789.
  9. ^ a b Gilray, Thomas; Sahebolamri, Arash; Kumar, Sidharth; Micinski, Kristopher (2022-11-21). "Higher-Order, Data-Parallel Structured Deduction". arXiv:2211.11573 [cs.PL].
  10. ^ Subotić, Pavle; Jordan, Herbert; Chang, Lijun; Fekete, Alan; Scholz, Bernhard (2018-10-01). "Automatic index selection for large-scale datalog computation". Proceedings of the VLDB Endowment. 12 (2): 141–153. doi:10.14778/3282495.3282500. ISSN 2150-8097. S2CID 53569679.
  11. ^ Antoniadis, Tony; Triantafyllou, Konstantinos; Smaragdakis, Yannis (2017-06-18). "Porting doop to Soufflé". Proceedings of the 6th ACM SIGPLAN International Workshop on State of the Art in Program Analysis. SOAP 2017. New York, NY, USA: Association for Computing Machinery. pp. 25–30. doi:10.1145/3088515.3088522. ISBN 978-1-4503-5072-3. S2CID 3074689. "The LogicBlox engine performs full query optimization."
  12. ^ Arch, Samuel; Hu, Xiaowen; Zhao, David; Subotić, Pavle; Scholz, Bernhard (2022). "Building a Join Optimizer for Soufflé". In Villanueva, Alicia (ed.). Logic-Based Program Synthesis and Transformation. Lecture Notes in Computer Science. Vol. 13474. Cham: Springer International Publishing. pp. 83–102. doi:10.1007/978-3-031-16767-6_5. ISBN 978-3-031-16767-6.
  13. ^ Nappa, Patrick; Zhao, David; Subotic, Pavle; Scholz, Bernhard (2019). "Fast Parallel Equivalence Relations in a Datalog Compiler". 2019 28th International Conference on Parallel Architectures and Compilation Techniques (PACT). pp. 82–96. doi:10.1109/PACT.2019.00015. ISBN 978-1-7281-3613-4. S2CID 204827819. Retrieved 2023-11-28.
  14. ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2019-02-17). "Brie: A Specialized Trie for Concurrent Datalog". Proceedings of the 10th International Workshop on Programming Models and Applications for Multicores and Manycores. New York, NY, USA: Association for Computing Machinery. pp. 31–40. doi:10.1145/3303084.3309490. ISBN 978-1-4503-6290-0. S2CID 239258588.
  15. ^ Whaley, John; Avots, Dzintars; Carbin, Michael; Lam, Monica S. (2005). "Using Datalog with Binary Decision Diagrams for Program Analysis". In Yi, Kwangkeun (ed.). Programming Languages and Systems. Lecture Notes in Computer Science. Vol. 3780. Berlin, Heidelberg: Springer. pp. 97–118. doi:10.1007/11575467_8. ISBN 978-3-540-32247-4. S2CID 5223577.
  16. ^ Hoder, Kryštof; Bjørner, Nikolaj; de Moura, Leonardo (2011). "μZ– an Efficient Engine for Fixed Points with Constraints". In Gopalakrishnan, Ganesh; Qadeer, Shaz (eds.). Computer Aided Verification. Lecture Notes in Computer Science. Vol. 6806. Berlin, Heidelberg: Springer. pp. 457–462. doi:10.1007/978-3-642-22110-1_36. ISBN 978-3-642-22110-1.
  17. ^ Fan, Zhiwei; Zhu, Jianqiao; Zhang, Zuyu; Albarghouthi, Aws; Koutris, Paraschos; Patel, Jignesh (2018-12-10). "Scaling-Up In-Memory Datalog Processing: Observations and Techniques". arXiv:1812.03975 [cs.DB].
  18. ^ Shovon, Ahmedur Rahman; Dyken, Landon Richard; Green, Oded; Gilray, Thomas; Kumar, Sidharth (November 2022). "Accelerating Datalog applications with cuDF". 2022 IEEE/ACM Workshop on Irregular Applications: Architectures and Algorithms (IA3). IEEE. pp. 41–45. doi:10.1109/IA356718.2022.00012. ISBN 978-1-6654-7506-8. S2CID 256565728.
  19. ^ Jordan, Herbert; Subotić, Pavle; Zhao, David; Scholz, Bernhard (2019-02-16). "A specialized B-tree for concurrent datalog evaluation". Proceedings of the 24th Symposium on Principles and Practice of Parallel Programming. PPoPP '19. New York, NY, USA: Association for Computing Machinery. pp. 327–339. doi:10.1145/3293883.3295719. ISBN 978-1-4503-6225-2. S2CID 59617209.
  20. ^ Wu, Jiacheng; Wang, Jin; Zaniolo, Carlo (2022-06-11). "Optimizing Parallel Recursive Datalog Evaluation on Multicore Machines". Proceedings of the 2022 International Conference on Management of Data. SIGMOD '22. New York, NY, USA: Association for Computing Machinery. pp. 1433–1446. doi:10.1145/3514221.3517853. ISBN 978-1-4503-9249-5. S2CID 249578825. "These approaches implement the idea of parallel bottom-up evaluation by splitting the tables into disjoint partitions via discriminating functions, such as hashing, where each partition is then mapped to one of the parallel workers. After each iteration, workers coordinate with each other to exchange newly generated tuples where necessary.
  21. ^ Shaw, Marianne; Koutris, Paraschos; Howe, Bill; Suciu, Dan (2012). "Optimizing Large-Scale Semi-Naïve Datalog Evaluation in Hadoop". In Barceló, Pablo; Pichler, Reinhard (eds.). Datalog in Academia and Industry. Lecture Notes in Computer Science. Vol. 7494. Berlin, Heidelberg: Springer. pp. 165–176. doi:10.1007/978-3-642-32925-8_17. ISBN 978-3-642-32925-8.
  22. ^ Shkapsky, Alexander; Yang, Mohan; Interlandi, Matteo; Chiu, Hsuan; Condie, Tyson; Zaniolo, Carlo (2016-06-14). "Big Data Analytics with Datalog Queries on Spark". Proceedings of the 2016 International Conference on Management of Data. SIGMOD '16. Vol. 2016. New York, NY, USA: Association for Computing Machinery. pp. 1135–1149. doi:10.1145/2882903.2915229. ISBN 978-1-4503-3531-7. PMC 5470845. PMID 28626296.
  23. ^ Balbin, I.; Port, G. S.; Ramamohanarao, K.; Meenakshi, K. (1991-10-01). "Efficient bottom-up computation of queries on stratified databases". The Journal of Logic Programming. 11 (3): 295–344. doi:10.1016/0743-1066(91)90030-S. ISSN 0743-1066.
  24. ^ Ullman, J. D. (1989-03-29). "Bottom-up beats top-down for datalog". Proceedings of the eighth ACM SIGACT-SIGMOD-SIGART symposium on Principles of database systems - PODS '89. New York, NY, USA: Association for Computing Machinery. pp. 140–149. doi:10.1145/73721.73736. ISBN 978-0-89791-308-9. S2CID 13269547.
  25. ^ Dantsin, Evgeny; Eiter, Thomas; Gottlob, Georg; Voronkov, Andrei (2001-09-01). "Complexity and expressive power of logic programming". ACM Computing Surveys. 33 (3): 374–425. doi:10.1145/502807.502810. ISSN 0360-0300.
  26. ^ Bembenek, Aaron; Greenberg, Michael; Chong, Stephen (2023-01-11). "From SMT to ASP: Solver-Based Approaches to Solving Datalog Synthesis-as-Rule-Selection Problems". Proceedings of the ACM on Programming Languages. 7 (POPL): 7:185–7:217. doi:10.1145/3571200. S2CID 253525805.
  27. ^ Zaniolo, Carlo; Yang, Mohan; Das, Ariyam; Shkapsky, Alexander; Condie, Tyson; Interlandi, Matteo (September 2017). "Fixpoint semantics and optimization of recursive Datalog programs with aggregates*". Theory and Practice of Logic Programming. 17 (5–6): 1048–1065. arXiv:1707.05681. doi:10.1017/S1471068417000436. ISSN 1471-0684. S2CID 6272867.
  28. ^ "Chapter 7. Rules - LogicBlox 3.10 Reference Manual". developer.logicblox.com. Retrieved 2023-03-04.
  29. ^ "6.4. Negation - LogicBlox 3.10 Reference Manual". developer.logicblox.com. Retrieved 2023-03-04. "Additionally, negation is only allowed when the platform can determine a way to stratify all rules and constraints that use negation."
  30. ^ Michael Lam; Dr. Sin Min Lee. "Datalog". Course CS 157A. SAN JOSÉ STATE UNIVERSITY, department of Computer Science. Archived from the original on 2017-03-25.
  31. ^ Kolaitis, Phokion G.; Vardi, Moshe Y. (1990-04-02). "On the expressive power of datalog: Tools and a case study". Proceedings of the ninth ACM SIGACT-SIGMOD-SIGART symposium on Principles of database systems. ACM. pp. 61–71. doi:10.1145/298514.298542. ISBN 978-0-89791-352-2. {{cite book}}: |journal= ignored (help)
  32. ^ Hillebrand, Gerd G; Kanellakis, Paris C; Mairson, Harry G; Vardi, Moshe Y (1995-11-01). "Undecidable boundedness problems for datalog programs". The Journal of Logic Programming. 25 (2): 163–190. doi:10.1016/0743-1066(95)00051-K. ISSN 0743-1066.
  33. ^ The XSB System, Version 3.7.x, Volume 1: Programmer's Manual (PDF).
  34. ^ Coral Database Project web page.
  35. ^ "DLVSYSTEM S.r.l. | DLV". www.dlvsystem.com. Retrieved 2018-11-29..
  36. ^ "DLVSYSTEM S.r.l. | DLV". www.dlvsystem.com. Retrieved 2018-11-29.
  37. ^ 4QL.
  38. ^ RDFox web page.
  39. ^ RDFox licence, archived from the original on 2018-02-21, retrieved 2018-11-29.
  40. ^ "Dyna", Dyna web page, archived from the original on 2016-01-17, retrieved 2016-11-07.
  41. ^ AbcDatalog.
  42. ^ Iris reasoner.
  43. ^ "Jena". Source forge.
  44. ^ SociaLite homepage, archived from the original on 2017-09-11, retrieved 2015-10-12.
  45. ^ Graal library.
  46. ^ Ramsdell, "Datalog", Tools, NEU.
  47. ^ Sangkok, Y, "Wrapper", Mitre Datalog, Git hub, (compiled to JavaScript).
  48. ^ Cruanes, Simon (18 June 2022), "datalog", datalog, GitHub.
  49. ^ Saenz-Perez (2011), "DES: A Deductive Database System", Electronic Notes in Theoretical Computer Science, 271, ES: 63–78, doi:10.1016/j.entcs.2011.02.011.
  50. ^ "Datalog", Racket (technical documentation).
  51. ^ "Datafun", Datafun in Racket (Links to paper, talk and github site).
  52. ^ DDlog, 30 June 2022
  53. ^ Differential Dataflow, July 2022
  54. ^ Kenny, Kevin B (12–14 November 2014). Binary decision diagrams, relational algebra, and Datalog: deductive reasoning for Tcl (PDF). Twenty-first Annual Tcl/Tk Conference. Portland, Oregon. Retrieved 29 December 2015.
  55. ^ "bddbddb", Source forge.
  56. ^ ConceptBase.
  57. ^ FoundationDB Datalog Tutorial, archived from the original on 2013-08-09.
  58. ^ "Leapsight". Archived from the original on 2018-11-11.
  59. ^ Semmle QL, 18 September 2019.
  60. ^ "SecPAL". Microsoft Research. Archived from the original on 2007-02-23.
  61. ^ Lifschitz, Vladimir. "Foundations of logic programming." Principles of knowledge representation 3 (1996): 69-127. "The expressive possibilities of [Datalog] are much too limited for meaningful applications to knowledge representation."
  62. ^ Huang, Green, and Loo, "Datalog and Emerging applications", SIGMOD 2011 (PDF), UC Davis{{citation}}: CS1 maint: multiple names: authors list (link).
  63. ^ Mei, Hongyuan; Qin, Guanghui; Xu, Minjie; Eisner, Jason (2020). "Neural Datalog Through Time: Informed Temporal Modeling via Logical Specification". Proceedings of ICML 2020. arXiv:2006.16723.
  64. ^ Chin, Brian; Dincklage, Daniel von; Ercegovac, Vuk; Hawkins, Peter; Miller, Mark S.; Och, Franz; Olston, Christopher; Pereira, Fernando (2015). Ball, Thomas; Bodik, Rastislav; Krishnamurthi, Shriram; Lerner, Benjamin S.; Morrisett, Greg (eds.). Yedalog: Exploring Knowledge at Scale. 1st Summit on Advances in Programming Languages (SNAPL 2015). Leibniz International Proceedings in Informatics (LIPIcs). Vol. 32. Dagstuhl, Germany: Schloss Dagstuhl–Leibniz-Zentrum fuer Informatik. pp. 63–78. doi:10.4230/LIPIcs.SNAPL.2015.63. ISBN 978-3-939897-80-4.
  65. ^ Whaley, John; Avots, Dzintars; Carbin, Michael; Lam, Monica S. (2005). "Using Datalog with Binary Decision Diagrams for Program Analysis". In Yi, Kwangkeun (ed.). Programming Languages and Systems. Lecture Notes in Computer Science. Vol. 3780. Berlin, Heidelberg: Springer. pp. 97–118. doi:10.1007/11575467_8. ISBN 978-3-540-32247-4. S2CID 5223577.
  66. ^ Scholz, Bernhard; Jordan, Herbert; Subotić, Pavle; Westmann, Till (2016-03-17). "On fast large-scale program analysis in Datalog". Proceedings of the 25th International Conference on Compiler Construction. CC 2016. New York, NY, USA: Association for Computing Machinery. pp. 196–206. doi:10.1145/2892208.2892226. ISBN 978-1-4503-4241-4. S2CID 7531543.
  67. ^ Antoniadis, Tony; Triantafyllou, Konstantinos; Smaragdakis, Yannis (2017-06-18). "Porting doop to Soufflé". Proceedings of the 6th ACM SIGPLAN International Workshop on State of the Art in Program Analysis. SOAP 2017. New York, NY, USA: Association for Computing Machinery. pp. 25–30. doi:10.1145/3088515.3088522. ISBN 978-1-4503-5072-3. S2CID 3074689.
  68. ^ Bembenek, Aaron; Greenberg, Michael; Chong, Stephen (2020-11-13). "Formulog: Datalog for SMT-based static analysis". Proceedings of the ACM on Programming Languages. 4 (OOPSLA): 141:1–141:31. doi:10.1145/3428209. S2CID 226961727.
  69. ^ Madsen, Magnus; Yee, Ming-Ho; Lhoták, Ondřej (2016-06-02). "From Datalog to flix: a declarative language for fixed points on lattices". ACM SIGPLAN Notices. 51 (6): 194–208. doi:10.1145/2980983.2908096. ISSN 0362-1340.
  70. ^ Gryz; Guo; Liu; Zuzarte (2004). "Query sampling in DB2 Universal Database" (PDF). Proceedings of the 2004 ACM SIGMOD international conference on Management of data - SIGMOD '04. p. 839. doi:10.1145/1007568.1007664. ISBN 978-1581138597. S2CID 7775190.
  71. ^ Gallaire, Hervé; Minker, John 'Jack', eds. (1978), "Logic and Data Bases, Symposium on Logic and Data Bases, Centre d'études et de recherches de Toulouse, 1977", Advances in Data Base Theory, New York: Plenum Press, ISBN 978-0-306-40060-5.
  72. ^ Abiteboul, Serge; Hull, Richard; Vianu, Victor (1995), Foundations of databases, Addison-Wesley, p. 305, ISBN 9780201537710.

References

Read other articles:

Family of plants Lophiocarpaceae Corbichonia decumbens Scientific classification Kingdom: Plantae Clade: Tracheophytes Clade: Angiosperms Clade: Eudicots Order: Caryophyllales Family: LophiocarpaceaeDoweld & Reveal[1][2] Genera Corbichonia Lophiocarpus The Lophiocarpaceae are a family of flowering plants comprising mostly succulent subshrubs and herbaceous species native to tropical to southern sub-Saharan Africa to western India. It includes the genera Corbichonia and Lophio…

Damares AlvesAlves pada Februari 2019 Menteri Wanita, Keluarga dan Hak Asasi ManusiaPetahanaMulai menjabat 1 Januari 2019PresidenJair BolsonaroPendahuluGustavo RochaPenggantiPetahana Informasi pribadiLahirDamares Regina Alves11 September 1964 (umur 59)Paranaguá, Paraná, BrasilSunting kotak info • L • B Damares Regina Alves (lahir 11 September 1964) adalah seorang jaksa dan pastor injili asal Brasil. Ia menjadi Menteri Hak Asasi Manusia, Keluarga dan Wanita dalam Kepresid…

Passenger aircraft which was shot down in 1978 Air Rhodesia Flight 825A Viscount of Air Rhodesia, similar to the HunyaniShootdownDate3 September 1978SummaryCivilian airliner shootdownSiteJust west of Karoi, Rhodesia[n 1] 16°47′S 29°5′E / 16.783°S 29.083°E / -16.783; 29.083AircraftAircraft typeVickers Viscount 782DAircraft nameHunyaniOperatorAir RhodesiaRegistrationVP-WAS[3]Flight originVictoria Falls, RhodesiaLast stopoverKariba, Rhodesia…

2018 South Korean television series Room No. 9Promotional posterAlso known asRoom 9Room N9Hangul나인룸Literal meaningRoom NineRevised RomanizationNaillum GenreMysteryFantasyCreated byLee Han-hoWritten byJeong Sung-heeDirected byJi Young-sooStarringKim Hee-sunKim Hae-sookKim Young-kwangCountry of originSouth KoreaOriginal languageKoreanNo. of episodes16ProductionExecutive producersKim Nam-pyoLee Chan-hoSohn Ki-wonProducerKim Na-kyungRunning time60 minutes[1]Production companiesKim Jong…

55th season of top-tier football league in Argentina Football league seasonPrimera DivisiónSan Lorenzo, championsSeason1946ChampionsSan Lorenzo (6th title)PromotedTigreRelegatedFerro Carril OesteTop goalscorer Mario Boyé (24 goals)← 1945 1947 → The 1946 Argentine Primera División was the 55th season of top-flight football in Argentina. The season began on April 21 and ended on December 8. Tigre returned to Primera while Ferro Carril Oeste was relegated. San Lorenzo won its 6th league titl…

Election in Maine Main article: 1956 United States presidential election 1956 United States presidential election in Maine ← 1952 November 6, 1956 1960 →   Nominee Dwight D. Eisenhower Adlai Stevenson Party Republican Democratic Home state Pennsylvania[a][1] Illinois Running mate Richard Nixon Estes Kefauver Electoral vote 5 0 Popular vote 249,238 102,468 Percentage 70.87% 29.13% County Results Eisenhower  50-60%  …

Dance You Off Benjamin Ingrosso interprétant Dance You Off lors d'une répétition avant la deuxième demi-finale de l'Eurovision 2018. Chanson de Benjamin Ingrosso au Concours Eurovision de la chanson 2018 Sortie 24 février 2018 Durée 3:02 Langue Anglais Genre Pop, eurodance Auteur-compositeur MAG, Louis Schoorl, K Nita, Benjamin Ingrosso Classement Demi-finale : 2e (254 points)Finale : 7e (274 points) Chansons représentant la Suède au Concours Eurovision de la chanson I Can…

Australian professional wrestler Grayson WallerWaller in 2023Birth nameMatthew FarrellyBorn (1990-03-21) 21 March 1990 (age 34)Sydney, AustraliaProfessional wrestling careerRing name(s)Grayson WallerMatty WahlbergBilled height6 ft 3 in (191 cm)Billed weight205 lb (93 kg)Billed fromSydney, AustraliaTrained byRobbie EaglesMadison EaglesDebut15 April 2017 Matthew Farrelly (born 21 March 1990) is an Australian professional wrestler. He is signed to WWE, where he perform…

For the former baseball team, see Vaqueros de Bayamón (baseball). Basketball team in Bayamón, Puerto RicoVaqueros de BayamónLeaguesBaloncesto Superior NacionalFounded1930; 94 years ago (1930)HistoryVaqueros de Bayamón(1930–present)ArenaRuben Rodriguez ColiseumCapacity12,000LocationBayamón, Puerto RicoTeam colorsNavy blue, gold, white      Head coachNelson ColónOwnershipYadier MolinaChampionships16 (1933, 1935, 1967, 1969, 1971, 1972, 1973, 1974, 1975, 198…

A merchant woman in Haiti Social class in Haiti uses a class structure that groups people according to wealth, income, education, type of occupation, and membership in a specific subculture or social network. Since the colonial period as part of the colony of Saint-Domingue (1625–1804), race has played an important factor in determining social class. History Further information: Code noir Haitian girlsHaitian artist Edouard Duval-CarrieFactory worker In the colonial period, the French imposed …

此条目序言章节没有充分总结全文内容要点。 (2019年3月21日)请考虑扩充序言,清晰概述条目所有重點。请在条目的讨论页讨论此问题。 哈萨克斯坦總統哈薩克總統旗現任Қасым-Жомарт Кемелұлы Тоқаев卡瑟姆若马尔特·托卡耶夫自2019年3月20日在任任期7年首任努尔苏丹·纳扎尔巴耶夫设立1990年4月24日(哈薩克蘇維埃社會主義共和國總統) 哈萨克斯坦 哈萨克斯坦政府與…

Species of Australian bird in the family Recurvirostridae Banded stilt Banded stilts,Rottnest Island Conservation status Least Concern  (IUCN 3.1)[1] Scientific classification Domain: Eukaryota Kingdom: Animalia Phylum: Chordata Class: Aves Order: Charadriiformes Family: Recurvirostridae Genus: CladorhynchusG.R. Gray, 1840 Species: C. leucocephalus Binomial name Cladorhynchus leucocephalus(Vieillot, 1816) Banded stilt natural range Synonyms[2] Recurvirostra leucocephala…

City in Santa Fe, Argentina For other uses, see Rosario (disambiguation). City & Municipality in Santa Fe, ArgentinaRosarioCity & MunicipalityFrom top, left to right: aerial view of Rosario Center District, Rosario Board of Trade, National Flag Memorial, Clemente Álvarez Emergency Hospital, Cathedral Basilica of Our Lady of the Rosary, Oroño Boulevard, Rosario City Hall, Perpetuo Socorro Church, and Rosario-Victoria Bridge FlagCoat of armsBrandmarkNickname(s): Birthplace of the Ar…

Academic journalInternational Journal of the Sociology of LanguageDisciplineSociology of languageLanguageEnglishEdited byOfelia Garcia OtheguyPublication detailsHistory1974-presentPublisherWalter de GruyterFrequencyBimonthlyStandard abbreviationsISO 4 (alt) · Bluebook (alt1 · alt2)NLM (alt) · MathSciNet (alt )ISO 4Int. J. Sociol. Lang.IndexingCODEN (alt · alt2) · JSTOR (alt) · LCCN (alt)MIAR · …

Scouting council in Georgia, US Flint River Council (#095)OwnerBoy Scouts of AmericaHeadquartersGriffin, GeorgiaCountryUnited StatesCoordinates33°12′50″N 84°16′53″W / 33.214°N 84.28148°W / 33.214; -84.28148 Websitewww.flintrivercouncil.org Scouting portal Flint River Council is a Boy Scouts of America council based in Griffin, Georgia. The council is divided into four districts Coweta, Fayette, Ronotohatchi, and Tussahaw. History The council was founded i…

جورج إليس معلومات شخصية الميلاد 7 سبتمبر 1932   ساوث شيلدز  [لغات أخرى]‏  تاريخ الوفاة 17 يناير 2023 (90 سنة) [1]  الجنسية المملكة المتحدة  الحياة العملية المهنة منافس ألعاب قوى  الرياضة ألعاب القوى  تعديل مصدري - تعديل   جورج إليس (بالإنجليزية: George Ellis)‏ هو …

Series 40-based Nokia 6300 Seri 40 adalah platform perangkat lunak dan antarmuka pengguna untuk ponsel fitur kelas menengah Nokia, juga terdapat pada ponsel mewah Vertu yang merupakan anak perusahaan dari Nokia. Seri 40 merupakan platform ponsel yang paling banyak digunakan didunia sampai sekarang ini, dengan jumlah perkiraan sekitar ratusan juta ponsel yang menggunakannya.[1] Fitur Aplikasi Beberapa fitur komunikasi seperti telepon, telepon internet (VoIP), layanan surat pendek(sms), su…

Non-fiction novel by Jung ChangThis article is about the book by Jung Chang. For other uses, see Wild Swans (disambiguation). Wild Swans: Three Daughters of China AuthorJung ChangLanguageEnglishSubjectBiographySet inChinaPublisherHarper CollinsPublication date1991Publication placeUnited KingdomPages530AwardsNCR Book Award (1992); Waterstones Books of the Century (1997, No 11); British Book Award (Book of the Year, 1994)ISBN9780007463404Dewey Decimal920.051LC ClassDS774.C3718Websitehttp…

1895 in music By location Norway By genre By topic Overview of the events of 1895 in music List of years in music (table) … 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 … In film 1892 1893 1894 1895 1896 1897 1898 Art Archaeology Architecture Literature Music Philosophy Science +... Events in the year 1895 in music. Specific locations 1895 in Norwegian music Events March 4 – Gustav Mahler conducts the première of his Symphony No.…

مناة القرن الثاني الميلادي تصور الإلهة اللات محاطة بشخصيتين ربما تكون العزى ومَناة. تعديل مصدري - تعديل   الآلهة العربية قبل الإسلام الآلهة التدمرية بل يرحبول عجليبوول نبو بعل شمين بعل حمون مناة اللات أرصو عزيزو أترعتا شيع القوم الآلهة النبطية اللات ذو الشرى العزى مناة شي…