/export/starexec/sandbox2/solver/bin/starexec_run_standard /export/starexec/sandbox2/benchmark/theBenchmark.pl /export/starexec/sandbox2/output/output_files -------------------------------------------------------------------------------- YES proof of /export/starexec/sandbox2/benchmark/theBenchmark.pl # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty Left Termination of the query pattern double(g,g) w.r.t. the given Prolog program could successfully be proven: (0) Prolog (1) PrologToIRSwTTransformerProof [SOUND, 26 ms] (2) TRUE ---------------------------------------- (0) Obligation: Clauses: double(X, Y) :- ','(=<(Y, 0), ','(!, =:=(X, 0))). double(X, Y) :- ','(>(Y, 0), ','(!, double(-(X, 1), -(Y, 2)))). Query: double(g,g) ---------------------------------------- (1) PrologToIRSwTTransformerProof (SOUND) Transformed Prolog program to IRSwT according to method in Master Thesis of A. Weinert { "root": 3, "program": { "directives": [], "clauses": [ [ "(double X Y)", "(',' (=< Y (0)) (',' (!) (=:= X (0))))" ], [ "(double X Y)", "(',' (> Y (0)) (',' (!) (double (- X (1)) (- Y (2)))))" ] ] }, "graph": { "nodes": { "11": { "goal": [ { "clause": -1, "scope": -1, "term": "(',' (=< T8 (0)) (',' (!_1) (=:= T7 (0))))" }, { "clause": 1, "scope": 1, "term": "(double T7 T8)" } ], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": [ "T7", "T8" ], "free": [], "exprvars": [] } }, "12": { "goal": [], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": [], "free": [], "exprvars": [] } }, "13": { "goal": [ { "clause": -1, "scope": -1, "term": "(',' (!_1) (=:= T7 (0)))" }, { "clause": 1, "scope": 1, "term": "(double T7 T8)" } ], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [{ "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "<=" }] }, "ground": [ "T7", "T8" ], "free": [], "exprvars": ["T8"] } }, "16": { "goal": [{ "clause": 1, "scope": 1, "term": "(double T7 T8)" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [{ "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": ">" }] }, "ground": [ "T7", "T8" ], "free": [], "exprvars": ["T8"] } }, "18": { "goal": [{ "clause": -1, "scope": -1, "term": "(=:= T7 (0))" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [{ "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "<=" }] }, "ground": ["T7"], "free": [], "exprvars": ["T8"] } }, "type": "Nodes", "3": { "goal": [{ "clause": -1, "scope": -1, "term": "(double T1 T2)" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": [ "T1", "T2" ], "free": [], "exprvars": [] } }, "4": { "goal": [ { "clause": 0, "scope": 1, "term": "(double T1 T2)" }, { "clause": 1, "scope": 1, "term": "(double T1 T2)" } ], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": [ "T1", "T2" ], "free": [], "exprvars": [] } }, "203": { "goal": [{ "clause": -1, "scope": -1, "term": "(true)" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [ { "lhs": { "name": "T7", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "=" }, { "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "<=" } ] }, "ground": ["T7"], "free": [], "exprvars": [ "T7", "T8" ] } }, "204": { "goal": [], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [ { "lhs": { "name": "T7", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "!=" }, { "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "<=" } ] }, "ground": ["T7"], "free": [], "exprvars": [ "T7", "T8" ] } }, "205": { "goal": [], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [ { "lhs": { "name": "T7", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "=" }, { "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": "<=" } ] }, "ground": [], "free": [], "exprvars": [ "T7", "T8" ] } }, "206": { "goal": [{ "clause": -1, "scope": -1, "term": "(',' (> T14 (0)) (',' (!_1) (double (- T13 (1)) (- T14 (2)))))" }], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [ { "lhs": { "name": "T8", "type": "PlainIntegerVariable" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": ">" }, { "lhs": { "type": "PlainIntegerConstant", "value": "0" }, "type": "PlainIntegerRelation", "rhs": { "type": "PlainIntegerConstant", "value": "0" }, "operation": ">" } ] }, "ground": [ "T13", "T14" ], "free": [], "exprvars": [ "T14", "T8" ] } }, "20": { "goal": [], "kb": { "nonunifying": [], "intvars": {}, "arithmetic": { "type": "PlainIntegerRelationState", "relations": [] }, "ground": [], "free": [], "exprvars": [] } } }, "edges": [ { "from": 3, "to": 4, "label": "CASE" }, { "from": 4, "to": 11, "label": "ONLY EVAL with clause\ndouble(X5, X6) :- ','(=<(X6, 0), ','(!_1, =:=(X5, 0))).\nand substitutionT1 -> T7,\nX5 -> T7,\nT2 -> T8,\nX6 -> T8" }, { "from": 11, "to": 12, "label": "IS ERROR" }, { "from": 11, "to": 13, "label": "ARITHCOMP SUCCESS" }, { "from": 11, "to": 16, "label": "ARITHCOMP FAIL" }, { "from": 13, "to": 18, "label": "CUT" }, { "from": 16, "to": 206, "label": "ONLY EVAL with clause\ndouble(X11, X12) :- ','(>(X12, 0), ','(!_1, double(-(X11, 1), -(X12, 2)))).\nand substitutionT7 -> T13,\nX11 -> T13,\nT8 -> T14,\nX12 -> T14" }, { "from": 18, "to": 20, "label": "IS ERROR" }, { "from": 18, "to": 203, "label": "ARITHCOMP SUCCESS" }, { "from": 18, "to": 204, "label": "ARITHCOMP FAIL" }, { "from": 203, "to": 205, "label": "SUCCESS" } ], "type": "Graph" } } ---------------------------------------- (2) TRUE