We restrict the rewrite rules to the following usable rules of the DP problem.
We restrict the innermost strategy to the following left hand sides.
are bounded w.r.t. the constant c.
The following constraints are generated for the pairs.
-
For the chain
we build the initial constraint
(cond1#(member(x2,x3),x2,x3)→*cond1#(true,x4,x5)⟹cond1#(true,x4,x5)≥c)
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(member(x2,x3)→*true⟹x2→*x4⟹x3→*x5⟹cond1#(true,x4,x5)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x4 by x2 which results in
(member(x2,x3)→*true⟹x3→*x5⟹cond1#(true,x2,x5)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x5 by x3 which results in
(member(x2,x3)→*true⟹cond1#(true,x2,x3)≥c)
-
Applying Rule "Induction" on member(x2,x3)→*true results in the following 2 new constraints.
- (false→*true⟹cond1#(true,x42,nil)≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (or(equal(x45,x44),member(x45,x43))→*true⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43)≥c)⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Introduce fresh variable" results in
((member(x45,x43)→*true⟹cond1#(true,x45,x43)≥c)⟹member(x45,x43)→*x47⟹or(equal(x45,x44),x47)→*true⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Introduce fresh variable" results in
(equal(x45,x44)→*x46⟹member(x45,x43)→*x47⟹or(x46,x47)→*true⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43)≥c)⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Induction" on or(x46,x47)→*true results in the following 2 new constraints.
- (true→*true⟹equal(x45,x44)→*x48⟹member(x45,x43)→*true⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43)≥c)⟹cond1#(true,x45,cons(x44,x43))≥c)
- (x49→*true⟹equal(x45,x44)→*x49⟹member(x45,x43)→*false⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43)≥c)⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x49 by true which results in
(equal(x45,x44)→*true⟹member(x45,x43)→*false⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43)≥c)⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Delete Conditions" results in
(equal(x45,x44)→*true⟹member(x45,x43)→*false⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Delete Conditions" results in
(equal(x45,x44)→*true⟹cond1#(true,x45,cons(x44,x43))≥c)
-
Applying Rule "Induction" on equal(x45,x44)→*true results in the following 4 new constraints.
- (true→*true⟹cond1#(true,0,cons(0,x43))≥c)
- (false→*true⟹cond1#(true,s(x50),cons(0,x43))≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (false→*true⟹cond1#(true,0,cons(s(x51),x43))≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (equal(x53,x52)→*true⟹∀x54
.
(equal(x53,x52)→*true⟹cond1#(true,x53,cons(x52,x54))≥c)⟹cond1#(true,s(x53),cons(s(x52),x43))≥c)
-
For the chain
we build the initial constraint
(cond2#(gt(x36,max(x37)),x36,x37)→*cond2#(false,x38,x39)⟹cond2#(false,x38,x39)≥c)
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(gt(x36,max(x37))→*false⟹x36→*x38⟹x37→*x39⟹cond2#(false,x38,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x38 by x36 which results in
(gt(x36,max(x37))→*false⟹x37→*x39⟹cond2#(false,x36,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x39 by x37 which results in
(gt(x36,max(x37))→*false⟹cond2#(false,x36,x37)≥c)
-
Applying Rule "Introduce fresh variable" results in
(max(x37)→*x68⟹gt(x36,x68)→*false⟹cond2#(false,x36,x37)≥c)
-
Applying Rule "Induction" on gt(x36,x68)→*false results in the following 3 new constraints.
- (false→*false⟹max(x37)→*x69⟹cond2#(false,0,x37)≥c)
- (true→*false⟹cond2#(false,s(x70),x37)≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (gt(x72,x71)→*false⟹max(x37)→*s(x71)⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹cond2#(false,s(x72),x37)≥c)
-
Applying Rule "Induction" on max(x37)→*s(x71) results in the following 2 new constraints.
- (0→*s(x71)⟹cond2#(false,s(x72),nil)≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (if(gt(x75,max(x74)),x75,max(x74))→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x75,x74))≥c)
-
Applying Rule "Introduce fresh variable" results in
(gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹max(x74)→*x80⟹if(gt(x75,max(x74)),x75,x80)→*s(x71)⟹cond2#(false,s(x72),cons(x75,x74))≥c)
-
Applying Rule "Introduce fresh variable" results in
(gt(x75,max(x74))→*x79⟹max(x74)→*x80⟹if(x79,x75,x80)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x75,x74))≥c)
-
Applying Rule "Introduce fresh variable" results in
(max(x74)→*x81⟹gt(x75,x81)→*x79⟹max(x74)→*x80⟹if(x79,x75,x80)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x75,x74))≥c)
-
Applying Rule "Delete Conditions" results in
(gt(x75,x81)→*x79⟹max(x74)→*x80⟹if(x79,x75,x80)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x75,x74))≥c)
-
Applying Rule "Induction" on if(x79,x75,x80)→*s(x71) results in the following 2 new constraints.
- (x83→*s(x71)⟹gt(x83,x81)→*true⟹max(x74)→*x82⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x83,x74))≥c)
-
Applying Rule "Delete Conditions" results in
(x83→*s(x71)⟹gt(x83,x81)→*true⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x83,x74))≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x83 by s(x71) which results in
(gt(s(x71),x81)→*true⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(s(x71),x74))≥c)
-
Applying Rule "Introduce fresh variable" results in
(s(x71)→*x86⟹gt(x86,x81)→*true⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(s(x71),x74))≥c)
-
Applying Rule "Delete Conditions" results in
(s(x71)→*x86⟹gt(x86,x81)→*true⟹gt(x72,x71)→*false⟹cond2#(false,s(x72),cons(s(x71),x74))≥c)
-
Applying Rule "Delete Conditions" results in
(s(x71)→*x86⟹gt(x72,x71)→*false⟹cond2#(false,s(x72),cons(s(x71),x74))≥c)
-
Applying Rule "Delete Conditions" results in
(gt(x72,x71)→*false⟹cond2#(false,s(x72),cons(s(x71),x74))≥c)
-
Applying Rule "Induction" on gt(x72,x71)→*false results in the following 3 new constraints.
- (false→*false⟹cond2#(false,s(0),cons(s(x87),x74))≥c)
- (true→*false⟹cond2#(false,s(s(x88)),cons(s(0),x74))≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (gt(x90,x89)→*false⟹∀x91
.
(gt(x90,x89)→*false⟹cond2#(false,s(x90),cons(s(x89),x91))≥c)⟹cond2#(false,s(s(x90)),cons(s(s(x89)),x74))≥c)
- (x84→*s(x71)⟹gt(x85,x81)→*false⟹max(x74)→*x84⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x85,x74))≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x84 by s(x71) which results in
(gt(x85,x81)→*false⟹max(x74)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73)≥c)⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78)≥c)⟹cond2#(false,s(x77),x74)≥c)⟹cond2#(false,s(x72),cons(x85,x74))≥c)
-
Applying Rule "Simplify Conditions" results in
(gt(x85,x81)→*false⟹cond2#(false,s(x72),x74)≥c⟹cond2#(false,s(x72),cons(x85,x74))≥c)
-
Applying Rule "Induction" on gt(x85,x81)→*false results in the following 3 new constraints.
- (false→*false⟹cond2#(false,s(x72),x74)≥c⟹cond2#(false,s(x72),cons(0,x74))≥c)
- (true→*false⟹cond2#(false,s(x72),cons(s(x93),x74))≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (gt(x95,x94)→*false⟹cond2#(false,s(x72),x74)≥c⟹∀x96
.
∀x97
.
(gt(x95,x94)→*false⟹cond2#(false,s(x96),x97)≥c⟹cond2#(false,s(x96),cons(x95,x97))≥c)⟹cond2#(false,s(x72),cons(s(x95),x74))≥c)
-
For the chain
we build the initial constraint
(cond1#(member(x2,x3),x2,x3)→*cond1#(true,x4,x5)⟹cond1#(true,x4,x5) > st#(s(x4),x5))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(member(x2,x3)→*true⟹x2→*x4⟹x3→*x5⟹cond1#(true,x4,x5) > st#(s(x4),x5))
-
Applying Rule "Variable in Equation" allows to substitute
x4 by x2 which results in
(member(x2,x3)→*true⟹x3→*x5⟹cond1#(true,x2,x5) > st#(s(x2),x5))
-
Applying Rule "Variable in Equation" allows to substitute
x5 by x3 which results in
(member(x2,x3)→*true⟹cond1#(true,x2,x3) > st#(s(x2),x3))
-
Applying Rule "Induction" on member(x2,x3)→*true results in the following 2 new constraints.
- (false→*true⟹cond1#(true,x42,nil) > st#(s(x42),nil))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (or(equal(x45,x44),member(x45,x43))→*true⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43) > st#(s(x45),x43))⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Introduce fresh variable" results in
((member(x45,x43)→*true⟹cond1#(true,x45,x43) > st#(s(x45),x43))⟹member(x45,x43)→*x47⟹or(equal(x45,x44),x47)→*true⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Introduce fresh variable" results in
(equal(x45,x44)→*x46⟹member(x45,x43)→*x47⟹or(x46,x47)→*true⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43) > st#(s(x45),x43))⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Induction" on or(x46,x47)→*true results in the following 2 new constraints.
- (true→*true⟹equal(x45,x44)→*x48⟹member(x45,x43)→*true⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43) > st#(s(x45),x43))⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
- (x49→*true⟹equal(x45,x44)→*x49⟹member(x45,x43)→*false⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43) > st#(s(x45),x43))⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Variable in Equation" allows to substitute
x49 by true which results in
(equal(x45,x44)→*true⟹member(x45,x43)→*false⟹(member(x45,x43)→*true⟹cond1#(true,x45,x43) > st#(s(x45),x43))⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Delete Conditions" results in
(equal(x45,x44)→*true⟹member(x45,x43)→*false⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Delete Conditions" results in
(equal(x45,x44)→*true⟹cond1#(true,x45,cons(x44,x43)) > st#(s(x45),cons(x44,x43)))
-
Applying Rule "Induction" on equal(x45,x44)→*true results in the following 4 new constraints.
- (true→*true⟹cond1#(true,0,cons(0,x43)) > st#(s(0),cons(0,x43)))
- (false→*true⟹cond1#(true,s(x50),cons(0,x43)) > st#(s(s(x50)),cons(0,x43)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (false→*true⟹cond1#(true,0,cons(s(x51),x43)) > st#(s(0),cons(s(x51),x43)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (equal(x53,x52)→*true⟹∀x54
.
(equal(x53,x52)→*true⟹cond1#(true,x53,cons(x52,x54)) > st#(s(x53),cons(x52,x54)))⟹cond1#(true,s(x53),cons(s(x52),x43)) > st#(s(s(x53)),cons(s(x52),x43)))
-
For the chain
we build the initial constraint
(st#(s(x10),x11)→*st#(x12,x13)⟹st#(x12,x13)≥cond1#(member(x12,x13),x12,x13))
which is simplified as follows.
-
For the chain
we build the initial constraint
(st#(s(x18),x19)→*st#(x20,x21)⟹st#(x20,x21)≥cond1#(member(x20,x21),x20,x21))
which is simplified as follows.
-
For the chain
we build the initial constraint
(cond1#(member(x24,x25),x24,x25)→*cond1#(false,x26,x27)⟹cond1#(false,x26,x27)≥cond2#(gt(x26,max(x27)),x26,x27))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(member(x24,x25)→*false⟹x24→*x26⟹x25→*x27⟹cond1#(false,x26,x27)≥cond2#(gt(x26,max(x27)),x26,x27))
-
Applying Rule "Variable in Equation" allows to substitute
x26 by x24 which results in
(member(x24,x25)→*false⟹x25→*x27⟹cond1#(false,x24,x27)≥cond2#(gt(x24,max(x27)),x24,x27))
-
Applying Rule "Variable in Equation" allows to substitute
x27 by x25 which results in
(member(x24,x25)→*false⟹cond1#(false,x24,x25)≥cond2#(gt(x24,max(x25)),x24,x25))
-
Applying Rule "Induction" on member(x24,x25)→*false results in the following 2 new constraints.
- (false→*false⟹cond1#(false,x55,nil)≥cond2#(gt(x55,max(nil)),x55,nil))
- (or(equal(x58,x57),member(x58,x56))→*false⟹(member(x58,x56)→*false⟹cond1#(false,x58,x56)≥cond2#(gt(x58,max(x56)),x58,x56))⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
-
Applying Rule "Introduce fresh variable" results in
((member(x58,x56)→*false⟹cond1#(false,x58,x56)≥cond2#(gt(x58,max(x56)),x58,x56))⟹member(x58,x56)→*x60⟹or(equal(x58,x57),x60)→*false⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
-
Applying Rule "Introduce fresh variable" results in
(equal(x58,x57)→*x59⟹member(x58,x56)→*x60⟹or(x59,x60)→*false⟹(member(x58,x56)→*false⟹cond1#(false,x58,x56)≥cond2#(gt(x58,max(x56)),x58,x56))⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
-
Applying Rule "Induction" on or(x59,x60)→*false results in the following 2 new constraints.
- (true→*false⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (x62→*false⟹equal(x58,x57)→*x62⟹member(x58,x56)→*false⟹(member(x58,x56)→*false⟹cond1#(false,x58,x56)≥cond2#(gt(x58,max(x56)),x58,x56))⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
-
Applying Rule "Simplify Conditions" results in
(x62→*false⟹equal(x58,x57)→*x62⟹cond1#(false,x58,x56)≥cond2#(gt(x58,max(x56)),x58,x56)⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
-
Applying Rule "Variable in Equation" allows to substitute
x62 by false which results in
(equal(x58,x57)→*false⟹cond1#(false,x58,x56)≥cond2#(gt(x58,max(x56)),x58,x56)⟹cond1#(false,x58,cons(x57,x56))≥cond2#(gt(x58,max(cons(x57,x56))),x58,cons(x57,x56)))
-
Applying Rule "Induction" on equal(x58,x57)→*false results in the following 4 new constraints.
- (true→*false⟹cond1#(false,0,cons(0,x56))≥cond2#(gt(0,max(cons(0,x56))),0,cons(0,x56)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (false→*false⟹cond1#(false,s(x63),x56)≥cond2#(gt(s(x63),max(x56)),s(x63),x56)⟹cond1#(false,s(x63),cons(0,x56))≥cond2#(gt(s(x63),max(cons(0,x56))),s(x63),cons(0,x56)))
- (false→*false⟹cond1#(false,0,x56)≥cond2#(gt(0,max(x56)),0,x56)⟹cond1#(false,0,cons(s(x64),x56))≥cond2#(gt(0,max(cons(s(x64),x56))),0,cons(s(x64),x56)))
- (equal(x66,x65)→*false⟹cond1#(false,s(x66),x56)≥cond2#(gt(s(x66),max(x56)),s(x66),x56)⟹∀x67
.
(equal(x66,x65)→*false⟹cond1#(false,x66,x67)≥cond2#(gt(x66,max(x67)),x66,x67)⟹cond1#(false,x66,cons(x65,x67))≥cond2#(gt(x66,max(cons(x65,x67))),x66,cons(x65,x67)))⟹cond1#(false,s(x66),cons(s(x65),x56))≥cond2#(gt(s(x66),max(cons(s(x65),x56))),s(x66),cons(s(x65),x56)))
-
For the chain
we build the initial constraint
(cond2#(gt(x36,max(x37)),x36,x37)→*cond2#(false,x38,x39)⟹cond2#(false,x38,x39) > st#(s(x38),x39))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(gt(x36,max(x37))→*false⟹x36→*x38⟹x37→*x39⟹cond2#(false,x38,x39) > st#(s(x38),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x38 by x36 which results in
(gt(x36,max(x37))→*false⟹x37→*x39⟹cond2#(false,x36,x39) > st#(s(x36),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x39 by x37 which results in
(gt(x36,max(x37))→*false⟹cond2#(false,x36,x37) > st#(s(x36),x37))
-
Applying Rule "Introduce fresh variable" results in
(max(x37)→*x68⟹gt(x36,x68)→*false⟹cond2#(false,x36,x37) > st#(s(x36),x37))
-
Applying Rule "Induction" on gt(x36,x68)→*false results in the following 3 new constraints.
- (false→*false⟹max(x37)→*x69⟹cond2#(false,0,x37) > st#(s(0),x37))
- (true→*false⟹cond2#(false,s(x70),x37) > st#(s(s(x70)),x37))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (gt(x72,x71)→*false⟹max(x37)→*s(x71)⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹cond2#(false,s(x72),x37) > st#(s(s(x72)),x37))
-
Applying Rule "Induction" on max(x37)→*s(x71) results in the following 2 new constraints.
- (0→*s(x71)⟹cond2#(false,s(x72),nil) > st#(s(s(x72)),nil))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (if(gt(x75,max(x74)),x75,max(x74))→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x75,x74)) > st#(s(s(x72)),cons(x75,x74)))
-
Applying Rule "Introduce fresh variable" results in
(gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹max(x74)→*x80⟹if(gt(x75,max(x74)),x75,x80)→*s(x71)⟹cond2#(false,s(x72),cons(x75,x74)) > st#(s(s(x72)),cons(x75,x74)))
-
Applying Rule "Introduce fresh variable" results in
(gt(x75,max(x74))→*x79⟹max(x74)→*x80⟹if(x79,x75,x80)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x75,x74)) > st#(s(s(x72)),cons(x75,x74)))
-
Applying Rule "Introduce fresh variable" results in
(max(x74)→*x81⟹gt(x75,x81)→*x79⟹max(x74)→*x80⟹if(x79,x75,x80)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x75,x74)) > st#(s(s(x72)),cons(x75,x74)))
-
Applying Rule "Delete Conditions" results in
(gt(x75,x81)→*x79⟹max(x74)→*x80⟹if(x79,x75,x80)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x75,x74)) > st#(s(s(x72)),cons(x75,x74)))
-
Applying Rule "Induction" on if(x79,x75,x80)→*s(x71) results in the following 2 new constraints.
- (x83→*s(x71)⟹gt(x83,x81)→*true⟹max(x74)→*x82⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x83,x74)) > st#(s(s(x72)),cons(x83,x74)))
-
Applying Rule "Delete Conditions" results in
(x83→*s(x71)⟹gt(x83,x81)→*true⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x83,x74)) > st#(s(s(x72)),cons(x83,x74)))
-
Applying Rule "Variable in Equation" allows to substitute
x83 by s(x71) which results in
(gt(s(x71),x81)→*true⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(s(x71),x74)) > st#(s(s(x72)),cons(s(x71),x74)))
-
Applying Rule "Introduce fresh variable" results in
(s(x71)→*x86⟹gt(x86,x81)→*true⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(s(x71),x74)) > st#(s(s(x72)),cons(s(x71),x74)))
-
Applying Rule "Delete Conditions" results in
(s(x71)→*x86⟹gt(x86,x81)→*true⟹gt(x72,x71)→*false⟹cond2#(false,s(x72),cons(s(x71),x74)) > st#(s(s(x72)),cons(s(x71),x74)))
-
Applying Rule "Delete Conditions" results in
(s(x71)→*x86⟹gt(x72,x71)→*false⟹cond2#(false,s(x72),cons(s(x71),x74)) > st#(s(s(x72)),cons(s(x71),x74)))
-
Applying Rule "Delete Conditions" results in
(gt(x72,x71)→*false⟹cond2#(false,s(x72),cons(s(x71),x74)) > st#(s(s(x72)),cons(s(x71),x74)))
-
Applying Rule "Induction" on gt(x72,x71)→*false results in the following 3 new constraints.
- (false→*false⟹cond2#(false,s(0),cons(s(x87),x74)) > st#(s(s(0)),cons(s(x87),x74)))
- (true→*false⟹cond2#(false,s(s(x88)),cons(s(0),x74)) > st#(s(s(s(x88))),cons(s(0),x74)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (gt(x90,x89)→*false⟹∀x91
.
(gt(x90,x89)→*false⟹cond2#(false,s(x90),cons(s(x89),x91)) > st#(s(s(x90)),cons(s(x89),x91)))⟹cond2#(false,s(s(x90)),cons(s(s(x89)),x74)) > st#(s(s(s(x90))),cons(s(s(x89)),x74)))
- (x84→*s(x71)⟹gt(x85,x81)→*false⟹max(x74)→*x84⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x85,x74)) > st#(s(s(x72)),cons(x85,x74)))
-
Applying Rule "Variable in Equation" allows to substitute
x84 by s(x71) which results in
(gt(x85,x81)→*false⟹max(x74)→*s(x71)⟹gt(x72,x71)→*false⟹∀x73
.
(gt(x72,x71)→*false⟹max(x73)→*x71⟹cond2#(false,x72,x73) > st#(s(x72),x73))⟹∀x76
.
∀x77
.
∀x78
.
(max(x74)→*s(x76)⟹gt(x77,x76)→*false⟹∀x78
.
(gt(x77,x76)→*false⟹max(x78)→*x76⟹cond2#(false,x77,x78) > st#(s(x77),x78))⟹cond2#(false,s(x77),x74) > st#(s(s(x77)),x74))⟹cond2#(false,s(x72),cons(x85,x74)) > st#(s(s(x72)),cons(x85,x74)))
-
Applying Rule "Simplify Conditions" results in
(gt(x85,x81)→*false⟹cond2#(false,s(x72),x74) > st#(s(s(x72)),x74)⟹cond2#(false,s(x72),cons(x85,x74)) > st#(s(s(x72)),cons(x85,x74)))
-
Applying Rule "Induction" on gt(x85,x81)→*false results in the following 3 new constraints.
- (false→*false⟹cond2#(false,s(x72),x74) > st#(s(s(x72)),x74)⟹cond2#(false,s(x72),cons(0,x74)) > st#(s(s(x72)),cons(0,x74)))
- (true→*false⟹cond2#(false,s(x72),cons(s(x93),x74)) > st#(s(s(x72)),cons(s(x93),x74)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (gt(x95,x94)→*false⟹cond2#(false,s(x72),x74) > st#(s(s(x72)),x74)⟹∀x96
.
∀x97
.
(gt(x95,x94)→*false⟹cond2#(false,s(x96),x97) > st#(s(s(x96)),x97)⟹cond2#(false,s(x96),cons(x95,x97)) > st#(s(s(x96)),cons(x95,x97)))⟹cond2#(false,s(x72),cons(s(x95),x74)) > st#(s(s(x72)),cons(s(x95),x74)))
We remove those pairs which are strictly decreasing and bounded.
The dependency pairs are split into 0
components.