Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

dl2uの修正 (2-3) #50

Closed
cedretaber opened this issue Oct 2, 2024 · 3 comments
Closed

dl2uの修正 (2-3) #50

cedretaber opened this issue Oct 2, 2024 · 3 comments
Assignees

Comments

@cedretaber
Copy link
Collaborator

#49 (comment)

dl2uの修正(2-2)のPR49についてですが、少し複雑な例で試してみたところ、正しくなさそうな変換をしているようです。
以下の例を実行してみました。
dune exec dl2u inlining_j.dl > inlining_j_new.sql
inlining_j.dlには+bをheadとするルールが二つあるにも関わらず
変換後のinlining_j.sqlにはINSERT bがありません。
また、inlining_j.dlには、+aをheadとするルールが二つありますが一つ目のルールしか対応していないようです。
それと、+vに関するルール
+v(GENV1, GENV2, GENV3) :- GENV1 = 4 , a(GENV1_2, GENV2) , b(GENV2, GENV3) , GENV3 = 3 , GENV1_2 <> 4.
は、まさに昨日の例
tmp(A, B, C) :- a(A, G) , b(G, C) , B = 60 , G = 30.
と同様のルールで、適切にSQLに変換されていることを確認しました。

#49 (comment)

こちらの1, 2番目の指摘事項なのですが、HEADでも起きていることなのでこのPRによるものではなさそうです。
HEADでdl2uを実行すると以下のようになりました。
別PRでの調査・修正対応とさせていただけるとありがたいです。
@hiroshi-cl
Copy link

確認したところ、確かに入力には +a, +b に関して以下の4つのDatalog式がありますが、

1. +a(A, B) :- a(A, B) , b(B, GENV5) , not -v(A, B, GENV5) , not a(A, B).
2. +a(A, B) :- A = 4 , a(GENV9, B) , b(B, GENV5) , GENV5 = 3 , GENV9 <> 4 , not a(A, B).
3. +b(B, C) :- a(GENV6, B) , b(B, C) , not -v(GENV6, B, C) , not b(B, C).
4. +b(B, C) :- GENV6 = 4 , a(GENV8, B) , b(B, C) , C = 3 , GENV8 <> 4 , not b(B, C).

出力には2に相当する以下のINSERTしかないようでした。(「一つ目のルールしか対応していないようです。」とのことでしたが実際には2つ目のようです)

CREATE TEMPORARY TABLE temp1 AS SELECT 4 AS A, a_0.B AS B FROM a AS a_0, b AS b_1 WHERE b_1.B = a_0.B AND b_1.C = 3 AND a_0.A <> 4 AND NOT EXISTS ( SELECT * FROM a AS t WHERE t.A = 4 AND t.B = a_0.B );
INSERT INTO a SELECT * FROM temp1;

ただよく見ると1には a(A, B) , not a(A, B), 2, 3 には b(B, C) , not b(B, C) が部分式として含まれていてこれは充足不能です。
よって、出力がないのは simplification が正しく機能した結果だと思われます。

@hiroyukikato
Copy link
Collaborator

私の方の確認不足でした。お時間をとらせてしまいました。
dl2uの時にsimplificationも実行するようになっていたのですね。ありがとうございます。

@hiroshi-cl
Copy link

了解です 🙆‍♂️

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants