Term Rewriting System R:
[x, y, z, t, a, b, c]
g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)

Termination of R to be shown.



   R
Dependency Pair Analysis



R contains the following Dependency Pairs:

FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F(t, x) -> F'(t, g(x))
F(t, x) -> G(x)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F'(triple(a, b, c), A) -> F''(foldf(triple(cons(A, a), nil, c), b))
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)

Furthermore, R contains one SCC.


   R
DPs
       →DP Problem 1
Narrowing Transformation


Dependency Pairs:

F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)
F'(triple(a, b, c), A) -> F''(foldf(triple(cons(A, a), nil, c), b))
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, x) -> F'(t, g(x))
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

F(t, x) -> F'(t, g(x))
six new Dependency Pairs are created:

F(t, A) -> F'(t, A)
F(t, B) -> F'(t, A)
F(t, B) -> F'(t, B)
F(t, C) -> F'(t, A)
F(t, C) -> F'(t, B)
F(t, C) -> F'(t, C)

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Narrowing Transformation


Dependency Pairs:

F(t, C) -> F'(t, B)
F(t, C) -> F'(t, A)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, B) -> F'(t, B)
F(t, B) -> F'(t, A)
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)
F'(triple(a, b, c), A) -> F''(foldf(triple(cons(A, a), nil, c), b))
F(t, A) -> F'(t, A)
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

F'(triple(a, b, c), A) -> F''(foldf(triple(cons(A, a), nil, c), b))
two new Dependency Pairs are created:

F'(triple(a', nil, c'), A) -> F''(triple(cons(A, a'), nil, c'))
F'(triple(a', cons(y', z'), c'), A) -> F''(f(foldf(triple(cons(A, a'), nil, c'), z'), y'))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 3
Narrowing Transformation


Dependency Pairs:

F(t, C) -> F'(t, A)
F(t, B) -> F'(t, B)
F'(triple(a', cons(y', z'), c'), A) -> F''(f(foldf(triple(cons(A, a'), nil, c'), z'), y'))
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)
F'(triple(a', nil, c'), A) -> F''(triple(cons(A, a'), nil, c'))
F(t, B) -> F'(t, A)
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
F(t, A) -> F'(t, A)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, C) -> F'(t, B)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





On this DP problem, a Narrowing SCC transformation can be performed.
As a result of transforming the rule

F'(triple(a', cons(y', z'), c'), A) -> F''(f(foldf(triple(cons(A, a'), nil, c'), z'), y'))
three new Dependency Pairs are created:

F'(triple(a'', cons(y'', z''), c''), A) -> F''(f'(foldf(triple(cons(A, a''), nil, c''), z''), g(y'')))
F'(triple(a'', cons(y', nil), c''), A) -> F''(f(triple(cons(A, a''), nil, c''), y'))
F'(triple(a'', cons(y', cons(y'', z'')), c''), A) -> F''(f(f(foldf(triple(cons(A, a''), nil, c''), z''), y''), y'))

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 4
Polynomial Ordering


Dependency Pairs:

F(t, C) -> F'(t, B)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, B) -> F'(t, B)
F(t, B) -> F'(t, A)
F'(triple(a'', cons(y', cons(y'', z'')), c''), A) -> F''(f(f(foldf(triple(cons(A, a''), nil, c''), z''), y''), y'))
F'(triple(a'', cons(y', nil), c''), A) -> F''(f(triple(cons(A, a''), nil, c''), y'))
F'(triple(a'', cons(y'', z''), c''), A) -> F''(f'(foldf(triple(cons(A, a''), nil, c''), z''), g(y'')))
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)
F'(triple(a', nil, c'), A) -> F''(triple(cons(A, a'), nil, c'))
F(t, A) -> F'(t, A)
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
F(t, C) -> F'(t, A)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





The following dependency pairs can be strictly oriented:

F'(triple(a'', cons(y', cons(y'', z'')), c''), A) -> F''(f(f(foldf(triple(cons(A, a''), nil, c''), z''), y''), y'))
F'(triple(a'', cons(y', nil), c''), A) -> F''(f(triple(cons(A, a''), nil, c''), y'))
F'(triple(a'', cons(y'', z''), c''), A) -> F''(f'(foldf(triple(cons(A, a''), nil, c''), z''), g(y'')))


Additionally, the following usable rules w.r.t. to the implicit AFS can be oriented:

f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)
f(t, x) -> f'(t, g(x))


Used ordering: Polynomial ordering with Polynomial interpretation:
  POL(triple(x1, x2, x3))=  x2  
  POL(f'(x1, x2))=  x1  
  POL(f(x1, x2))=  x1  
  POL(F(x1, x2))=  x1  
  POL(FOLDF(x1, x2))=  x1  
  POL(F''(x1))=  x1  
  POL(C)=  0  
  POL(B)=  0  
  POL(g(x1))=  0  
  POL(cons(x1, x2))=  1  
  POL(nil)=  0  
  POL(F'(x1, x2))=  x1  
  POL(foldf(x1, x2))=  x1  
  POL(f''(x1))=  x1  
  POL(A)=  0  

resulting in one new DP problem.



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 5
Instantiation Transformation


Dependency Pairs:

F(t, C) -> F'(t, B)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, B) -> F'(t, B)
F(t, B) -> F'(t, A)
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)
F'(triple(a', nil, c'), A) -> F''(triple(cons(A, a'), nil, c'))
F(t, A) -> F'(t, A)
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
F(t, C) -> F'(t, A)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





On this DP problem, an Instantiation SCC transformation can be performed.
As a result of transforming the rule

F''(triple(a, b, c)) -> FOLDF(triple(a, b, nil), c)
one new Dependency Pair is created:

F''(triple(cons(A, a'''), nil, c')) -> FOLDF(triple(cons(A, a'''), nil, nil), c')

The transformation is resulting in one new DP problem:



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 6
Polynomial Ordering


Dependency Pairs:

F(t, C) -> F'(t, A)
F(t, B) -> F'(t, B)
FOLDF(x, cons(y, z)) -> FOLDF(x, z)
F''(triple(cons(A, a'''), nil, c')) -> FOLDF(triple(cons(A, a'''), nil, nil), c')
F'(triple(a', nil, c'), A) -> F''(triple(cons(A, a'), nil, c'))
F(t, B) -> F'(t, A)
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
F(t, A) -> F'(t, A)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, C) -> F'(t, B)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





The following dependency pairs can be strictly oriented:

FOLDF(x, cons(y, z)) -> FOLDF(x, z)
FOLDF(x, cons(y, z)) -> F(foldf(x, z), y)


Additionally, the following usable rules w.r.t. to the implicit AFS can be oriented:

f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)
f(t, x) -> f'(t, g(x))
g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C


Used ordering: Polynomial ordering with Polynomial interpretation:
  POL(triple(x1, x2, x3))=  x2 + x3  
  POL(f'(x1, x2))=  x1 + x2  
  POL(f(x1, x2))=  1 + x1  
  POL(F(x1, x2))=  x1  
  POL(FOLDF(x1, x2))=  x1 + x2  
  POL(F''(x1))=  x1  
  POL(C)=  1  
  POL(B)=  1  
  POL(g(x1))=  1  
  POL(cons(x1, x2))=  1 + x2  
  POL(nil)=  0  
  POL(F'(x1, x2))=  x1  
  POL(foldf(x1, x2))=  x1 + x2  
  POL(f''(x1))=  x1  
  POL(A)=  0  

resulting in one new DP problem.



   R
DPs
       →DP Problem 1
Nar
           →DP Problem 2
Nar
             ...
               →DP Problem 7
Dependency Graph


Dependency Pairs:

F(t, C) -> F'(t, A)
F(t, B) -> F'(t, B)
F''(triple(cons(A, a'''), nil, c')) -> FOLDF(triple(cons(A, a'''), nil, nil), c')
F'(triple(a', nil, c'), A) -> F''(triple(cons(A, a'), nil, c'))
F(t, B) -> F'(t, A)
F'(triple(a, b, c), A) -> FOLDF(triple(cons(A, a), nil, c), b)
F(t, A) -> F'(t, A)
F'(triple(a, b, c), B) -> F(triple(a, b, c), A)
F(t, C) -> F'(t, B)


Rules:


g(A) -> A
g(B) -> A
g(B) -> B
g(C) -> A
g(C) -> B
g(C) -> C
foldf(x, nil) -> x
foldf(x, cons(y, z)) -> f(foldf(x, z), y)
f(t, x) -> f'(t, g(x))
f'(triple(a, b, c), C) -> triple(a, b, cons(C, c))
f'(triple(a, b, c), B) -> f(triple(a, b, c), A)
f'(triple(a, b, c), A) -> f''(foldf(triple(cons(A, a), nil, c), b))
f''(triple(a, b, c)) -> foldf(triple(a, b, nil), c)





Using the Dependency Graph resulted in no new DP problems.

Termination of R successfully shown.
Duration:
0:01 minutes