/export/starexec/sandbox/solver/bin/starexec_run_standard /export/starexec/sandbox/benchmark/theBenchmark.pl /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox/benchmark/theBenchmark.pl # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Left Termination of the query pattern dyck(g) w.r.t. the given Prolog program could successfully be proven: (0) Prolog (1) PrologToIRSwTTransformerProof [SOUND, 0 ms] (2) TRUE ---------------------------------------- (0) Obligation: Clauses: dyck(X) :- ','(grammar(G), ','(-(terminal, string(X)), produces(G, X))). grammar(S) :- =(S, or(e, or(and(S, S), and(o, and(S, c))))). equal(X, X). -(terminal, string(nil)). -(terminal, string(and(A, X))) :- ','(terminal(A), -(terminal, string(X))). terminal(o). terminal(c). terminal(e). produces(G, X) :- gives(G, X, nil). gives(or(P, Q), X, Y) :- gives(P, X, Y). gives(or(P, Q), X, Y) :- gives(Q, X, Y). gives(and(P, Q), X, Z) :- ','(gives(P, X, Y), gives(Q, Y, Z)). gives(A, and(A, X), X) :- terminal(A). Query: dyck(g) ---------------------------------------- (1) PrologToIRSwTTransformerProof (SOUND) Transformed Prolog program to IRSwT according to method in Master Thesis of A. Weinert { "root": 1, "program": { "directives": [], "clauses": [ [ "(dyck X)", "(',' (grammar G) (',' (- (terminal) (string X)) (produces G X)))" ], [ "(grammar S)", "(= S (or (e) (or (and S S) (and (o) (and S (c))))))" ], [ "(equal X X)", null ], [ "(- (terminal) (string (nil)))", null ], [ "(- (terminal) (string (and A X)))", "(',' (terminal A) (- (terminal) (string X)))" ], [ "(terminal (o))", null ], [ "(terminal (c))", null ], [ "(terminal (e))", null ], [ "(produces G X)", "(gives G X (nil))" ], [ "(gives (or P Q) X Y)", "(gives P X Y)" ], [ "(gives (or P Q) X Y)", "(gives Q X Y)" ], [ "(gives (and P Q) X Z)", "(',' (gives P X Y) (gives Q Y Z))" ], [ "(gives A (and A X) X)", "(terminal A)" ] ] }, "graph": { "nodes": { "1": { "goal": [{ "clause": -1, "scope": -1, "term": "(dyck T1)" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": ["T1"], "free": [], "exprvars": [] } }, "2": { "goal": [{ "clause": 0, "scope": 1, "term": "(dyck T1)" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": ["T1"], "free": [], "exprvars": [] } }, "37": { "goal": [{ "clause": -1, "scope": -1, "term": "(',' (grammar X5) (',' (- (terminal) (string T4)) (produces X5 T4)))" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": ["T4"], "free": ["X5"], "exprvars": [] } }, "38": { "goal": [{ "clause": 1, "scope": 2, "term": "(',' (grammar X5) (',' (- (terminal) (string T4)) (produces X5 T4)))" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": ["T4"], "free": ["X5"], "exprvars": [] } }, "39": { "goal": [{ "clause": -1, "scope": -1, "term": "(',' (= X11 (or (e) (or (and X11 X11) (and (o) (and X11 (c)))))) (',' (- (terminal) (string T4)) (produces X11 T4)))" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": ["T4"], "free": ["X11"], "exprvars": [] } }, "type": "Nodes", "40": { "goal": [], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": [], "free": [], "exprvars": [] } } }, "edges": [ { "from": 1, "to": 2, "label": "CASE" }, { "from": 2, "to": 37, "label": "ONLY EVAL with clause\ndyck(X4) :- ','(grammar(X5), ','(-(terminal, string(X4)), produces(X5, X4))).\nand substitutionT1 -> T4,\nX4 -> T4" }, { "from": 37, "to": 38, "label": "CASE" }, { "from": 38, "to": 39, "label": "ONLY EVAL with clause\ngrammar(X10) :- =(X10, or(e, or(and(X10, X10), and(o, and(X10, c))))).\nand substitutionX5 -> X11,\nX10 -> X11" }, { "from": 39, "to": 40, "label": "UNIFY-FAIL\nbecause of non-unification" } ], "type": "Graph" } } ---------------------------------------- (2) TRUE