/export/starexec/sandbox/solver/bin/starexec_run_FirstOrder /export/starexec/sandbox/benchmark/theBenchmark.xml /export/starexec/sandbox/output/output_files -------------------------------------------------------------------------------- MAYBE We consider the system theBenchmark. We are asked to determine termination of the following first-order TRS. 0 : [] --> o add : [o * o] --> o app : [o * o] --> o eq : [o * o] --> o false : [] --> o head : [o] --> o if : [o * o * o * o] --> o if!6220min : [o * o] --> o if!6220rm : [o * o * o] --> o if2 : [o * o * o * o] --> o le : [o * o] --> o min : [o] --> o mins : [o * o * o] --> o minsort : [o] --> o nil : [] --> o null : [o] --> o rm : [o * o] --> o s : [o] --> o tail : [o] --> o true : [] --> o eq(0, 0) => true eq(0, s(X)) => false eq(s(X), 0) => false eq(s(X), s(Y)) => eq(X, Y) le(0, X) => true le(s(X), 0) => false le(s(X), s(Y)) => le(X, Y) app(nil, X) => X app(add(X, Y), Z) => add(X, app(Y, Z)) min(add(X, nil)) => X min(add(X, add(Y, Z))) => if!6220min(le(X, Y), add(X, add(Y, Z))) if!6220min(true, add(X, add(Y, Z))) => min(add(X, Z)) if!6220min(false, add(X, add(Y, Z))) => min(add(Y, Z)) head(add(X, Y)) => X tail(add(X, Y)) => Y tail(nil) => nil null(nil) => true null(add(X, Y)) => false rm(X, nil) => nil rm(X, add(Y, Z)) => if!6220rm(eq(X, Y), X, add(Y, Z)) if!6220rm(true, X, add(Y, Z)) => rm(X, Z) if!6220rm(false, X, add(Y, Z)) => add(Y, rm(X, Z)) minsort(X) => mins(X, nil, nil) mins(X, Y, Z) => if(null(X), X, Y, Z) if(true, X, Y, Z) => Z if(false, X, Y, Z) => if2(eq(head(X), min(X)), X, Y, Z) if2(true, X, Y, Z) => mins(app(rm(head(X), tail(X)), Y), nil, app(Z, add(head(X), nil))) if2(false, X, Y, Z) => mins(tail(X), add(head(X), Y), Z) As the system is orthogonal, it is terminating if it is innermost terminating by [Gra95]. Then, by [FuhGieParSchSwi11], it suffices to prove (innermost) termination of the typed system, with sort annotations chosen to respect the rules, as follows: 0 : [] --> pk add : [pk * pk] --> pk app : [pk * pk] --> pk eq : [pk * pk] --> cj false : [] --> cj head : [pk] --> pk if : [cj * pk * pk * pk] --> pk if!6220min : [cj * pk] --> pk if!6220rm : [cj * pk * pk] --> pk if2 : [cj * pk * pk * pk] --> pk le : [pk * pk] --> cj min : [pk] --> pk mins : [pk * pk * pk] --> pk minsort : [pk] --> pk nil : [] --> pk null : [pk] --> cj rm : [pk * pk] --> pk s : [pk] --> pk tail : [pk] --> pk true : [] --> cj +++ Citations +++ [FuhGieParSchSwi11] C. Fuhs, J. Giesl, M. Parting, P. Schneider-Kamp, and S. Swiderski. Proving Termination by Dependency Pairs and Inductive Theorem Proving. In volume 47(2) of Journal of Automated Reasoning. 133--160, 2011. [Gra95] B. Gramlich. Abstract Relations Between Restricted Termination and Confluence Properties of Rewrite Systems. In volume 24(1-2) of Fundamentae Informaticae. 3--23, 1995.