YES
proof of /hpcwork/ff862203/termcomp26/benchmarks/gu0ro.pl
# AProVE Commit ID: 23a904c96b029b0a549cde0d0d17dbccf967db59 jckassing 20260626 unpublished dirty


Left Termination of the query pattern

fl(g,g,a)

w.r.t. the given Prolog program could successfully be proven:

(0) Prolog
(1) PrologToDTProblemTransformerProof [SOUND, 0 ms]
(2) TRIPLES
(3) TriplesToPiDPProof [SOUND, 0 ms]
(4) PiDP
(5) DependencyGraphProof [EQUIVALENT, 0 ms]
(6) PiDP
(7) PiDPToQDPProof [SOUND, 3 ms]
(8) QDP
(9) QDPSizeChangeProof [EQUIVALENT, 0 ms]
(10) YES


----------------------------------------

(0)
Obligation:
Clauses:

fl([], [], 0).
fl(.(E, X), R, s(Z)) :- ','(append(E, Y, R), fl(X, Y, Z)).
append([], X, X).
append(.(X, Xs), Ys, .(X, Zs)) :- append(Xs, Ys, Zs).


Query: fl(g,g,a)
----------------------------------------

(1) PrologToDTProblemTransformerProof (SOUND)
Built DT problem from termination graph DT10.

{
    "root": 5,
    "program": {
        "directives": [],
        "clauses": [
            [
                "(fl ([]) ([]) (0))",
                null
            ],
            [
                "(fl (. E X) R (s Z))",
                "(',' (append E Y R) (fl X Y Z))"
            ],
            [
                "(append ([]) X X)",
                null
            ],
            [
                "(append (. X Xs) Ys (. X Zs))",
                "(append Xs Ys Zs)"
            ]
        ]
    },
    "graph": {
        "nodes": {
            "33": {
                "goal": [],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [],
                    "free": [],
                    "exprvars": []
                }
            },
            "12": {
                "goal": [
                    {
                        "clause": -1,
                        "scope": -1,
                        "term": "(true)"
                    },
                    {
                        "clause": 1,
                        "scope": 1,
                        "term": "(fl ([]) ([]) T3)"
                    }
                ],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [],
                    "free": [],
                    "exprvars": []
                }
            },
            "25": {
                "goal": [{
                    "clause": -1,
                    "scope": -1,
                    "term": "(',' (append T8 X13 T10) (fl T9 X13 T12))"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T8",
                        "T9",
                        "T10"
                    ],
                    "free": ["X13"],
                    "exprvars": []
                }
            },
            "15": {
                "goal": [{
                    "clause": 1,
                    "scope": 1,
                    "term": "(fl T1 T2 T3)"
                }],
                "kb": {
                    "nonunifying": [[
                        "(fl T1 T2 T3)",
                        "(fl ([]) ([]) (0))"
                    ]],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T1",
                        "T2"
                    ],
                    "free": [],
                    "exprvars": []
                }
            },
            "26": {
                "goal": [],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [],
                    "free": [],
                    "exprvars": []
                }
            },
            "16": {
                "goal": [{
                    "clause": 1,
                    "scope": 1,
                    "term": "(fl ([]) ([]) T3)"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [],
                    "free": [],
                    "exprvars": []
                }
            },
            "27": {
                "goal": [
                    {
                        "clause": 2,
                        "scope": 2,
                        "term": "(',' (append T8 X13 T10) (fl T9 X13 T12))"
                    },
                    {
                        "clause": 3,
                        "scope": 2,
                        "term": "(',' (append T8 X13 T10) (fl T9 X13 T12))"
                    }
                ],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T8",
                        "T9",
                        "T10"
                    ],
                    "free": ["X13"],
                    "exprvars": []
                }
            },
            "28": {
                "goal": [{
                    "clause": 2,
                    "scope": 2,
                    "term": "(',' (append T8 X13 T10) (fl T9 X13 T12))"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T8",
                        "T9",
                        "T10"
                    ],
                    "free": ["X13"],
                    "exprvars": []
                }
            },
            "18": {
                "goal": [],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [],
                    "free": [],
                    "exprvars": []
                }
            },
            "29": {
                "goal": [{
                    "clause": 3,
                    "scope": 2,
                    "term": "(',' (append T8 X13 T10) (fl T9 X13 T12))"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T8",
                        "T9",
                        "T10"
                    ],
                    "free": ["X13"],
                    "exprvars": []
                }
            },
            "type": "Nodes",
            "5": {
                "goal": [{
                    "clause": -1,
                    "scope": -1,
                    "term": "(fl T1 T2 T3)"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T1",
                        "T2"
                    ],
                    "free": [],
                    "exprvars": []
                }
            },
            "6": {
                "goal": [
                    {
                        "clause": 0,
                        "scope": 1,
                        "term": "(fl T1 T2 T3)"
                    },
                    {
                        "clause": 1,
                        "scope": 1,
                        "term": "(fl T1 T2 T3)"
                    }
                ],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T1",
                        "T2"
                    ],
                    "free": [],
                    "exprvars": []
                }
            },
            "42": {
                "goal": [{
                    "clause": -1,
                    "scope": -1,
                    "term": "(',' (append T25 X38 T26) (fl T9 X38 T12))"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T9",
                        "T25",
                        "T26"
                    ],
                    "free": ["X38"],
                    "exprvars": []
                }
            },
            "32": {
                "goal": [{
                    "clause": -1,
                    "scope": -1,
                    "term": "(fl T9 T17 T12)"
                }],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [
                        "T9",
                        "T17"
                    ],
                    "free": [],
                    "exprvars": []
                }
            },
            "43": {
                "goal": [],
                "kb": {
                    "nonunifying": [],
                    "intvars": {},
                    "arithmetic": {
                        "type": "PlainIntegerRelationState",
                        "relations": []
                    },
                    "ground": [],
                    "free": [],
                    "exprvars": []
                }
            }
        },
        "edges": [
            {
                "from": 5,
                "to": 6,
                "label": "CASE"
            },
            {
                "from": 6,
                "to": 12,
                "label": "EVAL with clause\nfl([], [], 0).\nand substitutionT1 -> [],\nT2 -> [],\nT3 -> 0"
            },
            {
                "from": 6,
                "to": 15,
                "label": "EVAL-BACKTRACK"
            },
            {
                "from": 12,
                "to": 16,
                "label": "SUCCESS"
            },
            {
                "from": 15,
                "to": 25,
                "label": "EVAL with clause\nfl(.(X9, X10), X11, s(X12)) :- ','(append(X9, X13, X11), fl(X10, X13, X12)).\nand substitutionX9 -> T8,\nX10 -> T9,\nT1 -> .(T8, T9),\nT2 -> T10,\nX11 -> T10,\nX12 -> T12,\nT3 -> s(T12),\nT11 -> T12"
            },
            {
                "from": 15,
                "to": 26,
                "label": "EVAL-BACKTRACK"
            },
            {
                "from": 16,
                "to": 18,
                "label": "BACKTRACK\nfor clause: fl(.(E, X), R, s(Z)) :- ','(append(E, Y, R), fl(X, Y, Z))because of non-unification"
            },
            {
                "from": 25,
                "to": 27,
                "label": "CASE"
            },
            {
                "from": 27,
                "to": 28,
                "label": "PARALLEL"
            },
            {
                "from": 27,
                "to": 29,
                "label": "PARALLEL"
            },
            {
                "from": 28,
                "to": 32,
                "label": "EVAL with clause\nappend([], X22, X22).\nand substitutionT8 -> [],\nX13 -> T17,\nX22 -> T17,\nT10 -> T17,\nX23 -> T17"
            },
            {
                "from": 28,
                "to": 33,
                "label": "EVAL-BACKTRACK"
            },
            {
                "from": 29,
                "to": 42,
                "label": "EVAL with clause\nappend(.(X34, X35), X36, .(X34, X37)) :- append(X35, X36, X37).\nand substitutionX34 -> T24,\nX35 -> T25,\nT8 -> .(T24, T25),\nX13 -> X38,\nX36 -> X38,\nX37 -> T26,\nT10 -> .(T24, T26)"
            },
            {
                "from": 29,
                "to": 43,
                "label": "EVAL-BACKTRACK"
            },
            {
                "from": 32,
                "to": 5,
                "label": "INSTANCE with matching:\nT1 -> T9\nT2 -> T17\nT3 -> T12"
            },
            {
                "from": 42,
                "to": 25,
                "label": "INSTANCE with matching:\nT8 -> T25\nX13 -> X38\nT10 -> T26"
            }
        ],
        "type": "Graph"
    }
}

----------------------------------------

(2)
Obligation:
Triples:

pB([], X1, X1, X2, X3) :- flA(X2, X1, X3).
pB(.(X1, X2), X3, .(X1, X4), X5, X6) :- pB(X2, X3, X4, X5, X6).
flA(.(X1, X2), X3, s(X4)) :- pB(X1, X5, X3, X2, X4).

Clauses:

flcA([], [], 0).
flcA(.(X1, X2), X3, s(X4)) :- qcB(X1, X5, X3, X2, X4).
qcB([], X1, X1, X2, X3) :- flcA(X2, X1, X3).
qcB(.(X1, X2), X3, .(X1, X4), X5, X6) :- qcB(X2, X3, X4, X5, X6).

Afs:

flA(x1, x2, x3)  =  flA(x1, x2)


----------------------------------------

(3) TriplesToPiDPProof (SOUND)
We use the technique of [DT09]. With regard to the inferred argument filtering the predicates were used in the following modes:

flA_in_3: (b,b,f)

pB_in_5: (b,f,b,b,f)

Transforming TRIPLES into the following Term Rewriting System:

Pi DP problem:
The TRS P consists of the following rules:

   FLA_IN_GGA(.(X1, X2), X3, s(X4)) -> U3_GGA(X1, X2, X3, X4, pB_in_gagga(X1, X5, X3, X2, X4))
   FLA_IN_GGA(.(X1, X2), X3, s(X4)) -> PB_IN_GAGGA(X1, X5, X3, X2, X4)
   PB_IN_GAGGA([], X1, X1, X2, X3) -> U1_GAGGA(X1, X2, X3, flA_in_gga(X2, X1, X3))
   PB_IN_GAGGA([], X1, X1, X2, X3) -> FLA_IN_GGA(X2, X1, X3)
   PB_IN_GAGGA(.(X1, X2), X3, .(X1, X4), X5, X6) -> U2_GAGGA(X1, X2, X3, X4, X5, X6, pB_in_gagga(X2, X3, X4, X5, X6))
   PB_IN_GAGGA(.(X1, X2), X3, .(X1, X4), X5, X6) -> PB_IN_GAGGA(X2, X3, X4, X5, X6)

R is empty.
The argument filtering Pi contains the following mapping:
flA_in_gga(x1, x2, x3)  =  flA_in_gga(x1, x2)

.(x1, x2)  =  .(x1, x2)

pB_in_gagga(x1, x2, x3, x4, x5)  =  pB_in_gagga(x1, x3, x4)

[]  =  []

s(x1)  =  s(x1)

FLA_IN_GGA(x1, x2, x3)  =  FLA_IN_GGA(x1, x2)

U3_GGA(x1, x2, x3, x4, x5)  =  U3_GGA(x1, x2, x3, x5)

PB_IN_GAGGA(x1, x2, x3, x4, x5)  =  PB_IN_GAGGA(x1, x3, x4)

U1_GAGGA(x1, x2, x3, x4)  =  U1_GAGGA(x1, x2, x4)

U2_GAGGA(x1, x2, x3, x4, x5, x6, x7)  =  U2_GAGGA(x1, x2, x4, x5, x7)


We have to consider all (P,R,Pi)-chains


Infinitary Constructor Rewriting Termination of PiDP implies Termination of TRIPLES



----------------------------------------

(4)
Obligation:
Pi DP problem:
The TRS P consists of the following rules:

   FLA_IN_GGA(.(X1, X2), X3, s(X4)) -> U3_GGA(X1, X2, X3, X4, pB_in_gagga(X1, X5, X3, X2, X4))
   FLA_IN_GGA(.(X1, X2), X3, s(X4)) -> PB_IN_GAGGA(X1, X5, X3, X2, X4)
   PB_IN_GAGGA([], X1, X1, X2, X3) -> U1_GAGGA(X1, X2, X3, flA_in_gga(X2, X1, X3))
   PB_IN_GAGGA([], X1, X1, X2, X3) -> FLA_IN_GGA(X2, X1, X3)
   PB_IN_GAGGA(.(X1, X2), X3, .(X1, X4), X5, X6) -> U2_GAGGA(X1, X2, X3, X4, X5, X6, pB_in_gagga(X2, X3, X4, X5, X6))
   PB_IN_GAGGA(.(X1, X2), X3, .(X1, X4), X5, X6) -> PB_IN_GAGGA(X2, X3, X4, X5, X6)

R is empty.
The argument filtering Pi contains the following mapping:
flA_in_gga(x1, x2, x3)  =  flA_in_gga(x1, x2)

.(x1, x2)  =  .(x1, x2)

pB_in_gagga(x1, x2, x3, x4, x5)  =  pB_in_gagga(x1, x3, x4)

[]  =  []

s(x1)  =  s(x1)

FLA_IN_GGA(x1, x2, x3)  =  FLA_IN_GGA(x1, x2)

U3_GGA(x1, x2, x3, x4, x5)  =  U3_GGA(x1, x2, x3, x5)

PB_IN_GAGGA(x1, x2, x3, x4, x5)  =  PB_IN_GAGGA(x1, x3, x4)

U1_GAGGA(x1, x2, x3, x4)  =  U1_GAGGA(x1, x2, x4)

U2_GAGGA(x1, x2, x3, x4, x5, x6, x7)  =  U2_GAGGA(x1, x2, x4, x5, x7)


We have to consider all (P,R,Pi)-chains
----------------------------------------

(5) DependencyGraphProof (EQUIVALENT)
The approximation of the Dependency Graph [LOPSTR] contains 1 SCC with 3 less nodes.
----------------------------------------

(6)
Obligation:
Pi DP problem:
The TRS P consists of the following rules:

   FLA_IN_GGA(.(X1, X2), X3, s(X4)) -> PB_IN_GAGGA(X1, X5, X3, X2, X4)
   PB_IN_GAGGA([], X1, X1, X2, X3) -> FLA_IN_GGA(X2, X1, X3)
   PB_IN_GAGGA(.(X1, X2), X3, .(X1, X4), X5, X6) -> PB_IN_GAGGA(X2, X3, X4, X5, X6)

R is empty.
The argument filtering Pi contains the following mapping:
.(x1, x2)  =  .(x1, x2)

[]  =  []

s(x1)  =  s(x1)

FLA_IN_GGA(x1, x2, x3)  =  FLA_IN_GGA(x1, x2)

PB_IN_GAGGA(x1, x2, x3, x4, x5)  =  PB_IN_GAGGA(x1, x3, x4)


We have to consider all (P,R,Pi)-chains
----------------------------------------

(7) PiDPToQDPProof (SOUND)
Transforming (infinitary) constructor rewriting Pi-DP problem [LOPSTR] into ordinary QDP problem [LPAR04] by application of Pi.
----------------------------------------

(8)
Obligation:
Q DP problem:
The TRS P consists of the following rules:

   FLA_IN_GGA(.(X1, X2), X3) -> PB_IN_GAGGA(X1, X3, X2)
   PB_IN_GAGGA([], X1, X2) -> FLA_IN_GGA(X2, X1)
   PB_IN_GAGGA(.(X1, X2), .(X1, X4), X5) -> PB_IN_GAGGA(X2, X4, X5)

R is empty.
Q is empty.
We have to consider all (P,Q,R)-chains.
----------------------------------------

(9) QDPSizeChangeProof (EQUIVALENT)
By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 

From the DPs we obtained the following set of size-change graphs:
*PB_IN_GAGGA([], X1, X2) -> FLA_IN_GGA(X2, X1)
The graph contains the following edges 3 >= 1, 2 >= 2


*PB_IN_GAGGA(.(X1, X2), .(X1, X4), X5) -> PB_IN_GAGGA(X2, X4, X5)
The graph contains the following edges 1 > 1, 2 > 2, 3 >= 3


*FLA_IN_GGA(.(X1, X2), X3) -> PB_IN_GAGGA(X1, X3, X2)
The graph contains the following edges 1 > 1, 2 >= 2, 1 > 3


----------------------------------------

(10)
YES
