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

リストを直接引数に持ち、その他に膜外へのリンクをもつアトムのバグ #334

Open
tuesdayjz opened this issue Feb 28, 2024 · 1 comment

Comments

@tuesdayjz
Copy link

tuesdayjz commented Feb 28, 2024

問題

rule@@ // グラフ構造を変更しないルール
{a([AA,AE],Out)} :- {a([AA,AE],Out)}.

b(Out). c(AA). {a([AA,AE],Out)}. e(AE).

//// desired output ////
// b(Out), d(EE), c(AA), 
// {a([EE,AE],Out)}, e(AE,AA).

//// real output ////
// b(Out), d(EE), c(AA),
// {a([EE|L4],Out), [L0]=L3}, e(L0,AA).
  • SLIMで実行したとき、rule が適用されると、等価なグラフ表現であっても、部分グラフの並べ方によっては、つながったままになるはずのリスト構造が切断されa[AE, AA]{a([EE|L4],Out), [L0]=L3} の形になる場合がある。
  • リストの切断された部分のリンクは2つの自由リンクになっている(下記画像参照)
  • Out(膜外へのリンク)を削除した場合、この現象は起こらない。
// リンクが切断される場合(バグ)
b(Out). {a([AA,AE],Out)}. c(AA). e(AE).
b(Out). c(AA). e(AE). {a([AA,AE],Out)}.
b(Out). c(AA). {a([AA,AE],Out)}. e(AE).
{a([AA,AE],Out)}. b(Out). c(AA). e(AE).
{a([AA,AE],Out)}. c(AA). b(Out). e(AE).
c(AA). b(Out). e(AE). {a([AA,AE],Out)}.
c(AA). b(Out). {a([AA,AE],Out)}. e(AE).
c(AA). {a([AA,AE],Out)}. b(Out). e(AE).

// リストが切断されない場合(正常)
e(AE). b(Out). {a([AA,AE],Out)}. c(AA).
e(AE). b(Out). c(AA). {a([AA,AE],Out)}.
e(AE). {a([AA,AE],Out)}. b(Out). c(AA).
e(AE). {a([AA,AE],Out)}. c(AA). b(Out).
e(AE). c(AA). b(Out). {a([AA,AE],Out)}.
e(AE). c(AA). {a([AA,AE],Out)}. b(Out).
b(Out). e(AE). {a([AA,AE],Out)}. c(AA).
b(Out). e(AE). c(AA). {a([AA,AE],Out)}.
b(Out). {a([AA,AE],Out)}. e(AE). c(AA).
{a([AA,AE],Out)}. e(AE). b(Out). c(AA).
{a([AA,AE],Out)}. e(AE). c(AA). b(Out).
{a([AA,AE],Out)}. b(Out). e(AE). c(AA).
{a([AA,AE],Out)}. c(AA). e(AE). b(Out).
c(AA). e(AE). b(Out). {a([AA,AE],Out)}.
c(AA). e(AE). {a([AA,AE],Out)}. b(Out).
c(AA). {a([AA,AE],Out)}. e(AE). b(Out).
  • NG例では、全てc(AA)e(AE)がこの順に登場する
  • OK例でも下から4つの例はc(AA)e(AE)がこの順に登場する

実行例のグラフ

Unyo実行時(初期状態)

SLIM実行時

@tuesdayjz tuesdayjz changed the title 膜に関するバグ 膜内のリストを直接引数に持つ2価以上のアトムに関するバグ Nov 19, 2024
@tuesdayjz tuesdayjz changed the title 膜内のリストを直接引数に持つ2価以上のアトムに関するバグ リストを直接引数に持ち、2価以上の膜内のアトムに関するバグ Nov 19, 2024
@tuesdayjz tuesdayjz changed the title リストを直接引数に持ち、2価以上の膜内のアトムに関するバグ リストを直接引数に持ち、その他に膜外へのリンクをもつアトムのバグ Nov 19, 2024
@tuesdayjz
Copy link
Author

tuesdayjz commented Nov 19, 2024

中間命令列

修正前

Compiled Ruleset @602
Compiled Rule
    --atommatch:
    --memmatch:
        spec           [1, 15]
...
        newatom      [9, 0, 'b'_1]
        newatom      [10, 0, 'c'_1]
        newatom      [11, 0, 'e'_1]
...
        newlink        [9, 0, 14, 1, 0]
        newlink        [10, 0, 12, 1, 0]
        newlink        [11, 0, 13, 1, 0]
        newlink        [12, 0, 6, 0, 0] <-
        newlink        [13, 0, 7, 0, 0] <-
        newlink        [14, 0, 8, 0, 0] <-
        proceed        []

修正後

Compiled Ruleset @602
Compiled Rule
    --atommatch:
    --memmatch:
        spec           [1, 15]
...
        newatom      [9, 0, 'b'_1]
        newatom      [10, 0, 'c'_1]
        newatom      [11, 0, 'e'_1]
...
        newlink        [9, 0, 14, 1, 0]
        newlink        [10, 0, 12, 1, 0]
        newlink        [11, 0, 13, 1, 0]
        newlink        [13, 0, 6, 0, 0] <-
        newlink        [14, 0, 7, 0, 0] <-
        newlink        [12, 0, 8, 0, 0] <-
        proceed        []

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

1 participant