标签: datalog

从Datalog到SQL的转换

我仍在思考如何将Datalog程序的递归转换为SQL,例如

P(x,y) <- Q(x,y).
Q(x,y) <- P(x,z), A(y).
Run Code Online (Sandbox Code Playgroud)

A/1EDB谓词在哪里。这与P和之间存在相互依赖关系Q。对于较长的查询,该如何解决?

而且,有没有什么系统可以完全实现翻译?如果有,我可以知道我要使用的系统或论文吗?

sql translation datalog

5
推荐指数
1
解决办法
2831
查看次数

如何在数据记录规则的主体中表达全称量词?

我想在谓词规则的主体中使用全称量词,例如

A(x,y) <- ?B(x,a), C(y,a)。

这意味着只有对于来自 C(y, a ) 的每个a,B(x, a ) 总是有 x 匹配 (x, a ),那么 A(x,y) 为真。

由于在 Datalog 中,规则体中的每个变量默认都是存在量词,因此a也将是存在量词。我应该怎么做才能在谓词规则的主体中表达全称量词?

谢谢你。

PS 我使用的 Datalog 引擎是 logicblox。

datalog

5
推荐指数
1
解决办法
715
查看次数

Datalog和LogiQL有什么区别?

LogicBlox数据库是使用LogiQL语言编写的,这是根据他们的网站某种Datalog变种:

应用程序使用LogiQL语言编写,这是Datalog的扩展版本

Datalog和LogiQL之间究竟有什么区别?

datalog logiql logicblox

5
推荐指数
1
解决办法
1513
查看次数

原子聚合的使用

我想在下一个查询中找到年龄最小的人

(d/q '[:find ?name (min ?age)
         :in [[?name ?age]]]
       [["John" 20]
        ["Bill" 25]
        ["Jack" 20]
        ["Steve" 28]
        ["Andrew" 30]])
Run Code Online (Sandbox Code Playgroud)

但结果是

[["Andrew" 30] ["Bill" 25] ["Jack" 20] ["John" 20] ["Steve" 28]]
Run Code Online (Sandbox Code Playgroud)

怎么做?

datalog datomic

5
推荐指数
3
解决办法
2489
查看次数

对于面向列的数据库,数据记录比SQL更有效吗?

无论CascalogDatomic已经选择使用数据记录(通过SQL)作为他们的查询引擎.

戴夫托马斯声称:

对于少量空间的大型查询,Datalog比SQL更好.

我的问题是:对于面向列的数据库,数据记录是否比SQL更有效?

sql clojure datalog datomic cascalog

5
推荐指数
0
解决办法
320
查看次数

图灵完备图查询语言

是否准确地说,在现有的图查询语言(Cypher、Datalog、Sparql 等)中,Gremlin 是唯一一种图灵完备的语言?

如果重要的话,我并不是在寻找像《万智牌》的图灵完备性证明这样的边缘情况;我的问题的目的是 Gremlin 是否是唯一适合在实践中对图执行任意计算的图查询语言。

sql turing-complete graph-traversal datalog gremlin

5
推荐指数
1
解决办法
1293
查看次数

数据记录计算类?

Datalog不是图灵完备的。

但它的计算类是什么?

它相当于有限状态机下推机(即上下文无关)……还是介于两者之间?

turing-machines turing-complete computation-theory automaton datalog

5
推荐指数
1
解决办法
106
查看次数

如何防止 Datalog 规则修剪空值?

我有以下事实和规则:

% frequents(D,P) % D=drinker, P=pub
% serves(P,B) % B=beer
% likes(D,B)

frequents(janus, godthaab).
frequents(janus, goldenekrone).
frequents(yanai, goldenekrone).
frequents(dimi,  schlosskeller).

serves(godthaab, tuborg).
serves(godthaab, carlsberg).
serves(goldenekrone, pfungstaedter).
serves(schlosskeller, fix).

likes(janus, tuborg).
likes(janus, carlsberg).

count_good_beers_for_at(D,P,F) :- group_by((frequents(D,P), serves(P,B), likes(D,B)),[D,P],(F = count)).
possible_beers_served_for_at(D,P,B) :- lj(serves(P,B), frequents(D,R), P=R).
Run Code Online (Sandbox Code Playgroud)

现在我想构建一个规则,当每个酒吧的“饮酒者”“频率”大于 0 的可用“喜欢”啤酒的数量时,该规则应该像一个返回“真”的谓词一样工作。

当规则不返回元组时,我会认为谓词为真。如果谓词为假,我打算让它返回没有单一“喜欢”啤酒的酒吧。

如您所见,我已经制定了一个规则,可以计算特定酒吧中特定饮酒者的优质啤酒。我也有一个规则,给我提供啤酒的数量。

DES> count_good_beers_for_at(A,B,C)

{                                           
  count_good_beers_for_at(janus,godthaab,2)
}
Info: 1 tuple computed.          
Run Code Online (Sandbox Code Playgroud)

如您所见,柜台没有返回经常光顾的酒吧,但有 0 个喜欢的啤酒。我计划通过使用左外连接来解决这个问题。

DES> is_happy_at(D,P,Z) :- lj(serves(P,B), count_good_beers_for_at(D,Y,Z), (Y=P))

Info: Processing:
  is_happy_at(D,P,Z) :-
    lj(serves(P,B),count_good_beers_for_at(D,Y,Z),Y = P).
{                                           
  is_happy_at(janus,godthaab,2),
  is_happy_at(null,goldenekrone,null),
  is_happy_at(null,schlosskeller,null)
}
Info: …
Run Code Online (Sandbox Code Playgroud)

database logic prolog datalog

4
推荐指数
1
解决办法
703
查看次数

Datomic 的递归数据日志查询真的很慢

我目前正在评估 Datomic 用于存储和查询构成本体的已解析符号的用例。数据库中总共有 225122 个符号(实体)(所以它是一个相当大的本体,但对于 DB 来说应该不是什么大问题)。

结构非常标准,符号有

  1. 包含它们的符号(如子符号等)
  2. 超级符号(它们继承的符号)

为了更好地访问符号,我们name为每个符号设置了唯一的。这加起来就是以下 Datomic 模式:

[{:db/ident :ml/name,
  :db/valueType :db.type/string,
  :db/cardinality :db.cardinality/one,
  :db/unique :db.unique/identity}
 {:db/ident :ml/parent,
  :db/valueType :db.type/ref,
  :db/index true,
  :db/cardinality :db.cardinality/one}
 {:db/ident :ml/superclass,
  :db/valueType :db.type/ref,
  :db/index true,
  :db/cardinality :db.cardinality/one}]
Run Code Online (Sandbox Code Playgroud)

现在我有了最基本的递归查询“给我所有(传递)包含在符号中的符号p”。在数据方面:

(def rules
  '[
    [(ubersymbol ?c ?p) (?c :ml/parent ?p)]
    [(ubersymbol ?c ?p) (?c :ml/parent ?c1) (ubersymbol ?c1 ?p) ]
    ])
(q '[:find ?c ?n :in $ % :where
     (ubersymbol ?c ?d) [?d :ml/name "name of …
Run Code Online (Sandbox Code Playgroud)

recursion graph clojure datalog datomic

4
推荐指数
1
解决办法
1373
查看次数

datomic 中的子查询支持

datomic 支持子查询还是可以在查询中模拟?那本质上是一个:find内在另一个:find

我正在尝试在查询/数据库本身而不是在应用程序中执行数据的分析转换。

datalog datomic

3
推荐指数
1
解决办法
607
查看次数

如何实现一个基本的数据记录解释器?

我正在寻找一个关于如何实现基本数据记录解释器以用于学习目的的好教程。我发现了很多论文讨论如何使它们更快或添加一些功能,但没有一篇描述如何实现基本功能。

datalog

3
推荐指数
1
解决办法
812
查看次数

Prolog优于Datalog

我一直试图了解在特定的上下文中使用Prolog而不是Datalog是否有很大的优势.Prolog是图灵完整而Datalog不是.但使用Prolog还有其他实质性优势吗?

具体的上下文可以是例如关系数据库......最好使用Prolog或Datalog?

prolog datalog

0
推荐指数
1
解决办法
813
查看次数