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
(if#(le(x24,x26),x24,s(x25),x26,x27)→*if#(false,x28,x29,x30,x31)⟹if#(false,x28,x29,x30,x31)≥c)
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x24,x26)→*false⟹x24→*x28⟹s(x25)→*x29⟹x26→*x30⟹x27→*x31⟹if#(false,x28,x29,x30,x31)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x28 by x24 which results in
(le(x24,x26)→*false⟹s(x25)→*x29⟹x26→*x30⟹x27→*x31⟹if#(false,x24,x29,x30,x31)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x29 by s(x25) which results in
(le(x24,x26)→*false⟹x26→*x30⟹x27→*x31⟹if#(false,x24,s(x25),x30,x31)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x30 by x26 which results in
(le(x24,x26)→*false⟹x27→*x31⟹if#(false,x24,s(x25),x26,x31)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x31 by x27 which results in
(le(x24,x26)→*false⟹if#(false,x24,s(x25),x26,x27)≥c)
-
Applying Rule "Induction" on le(x24,x26)→*false results in the following 3 new constraints.
- (true→*false⟹if#(false,0,s(x25),x84,x27)≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x86,x85)→*false⟹∀x87
.
∀x88
.
(le(x86,x85)→*false⟹if#(false,x86,s(x87),x85,x88)≥c)⟹if#(false,s(x86),s(x25),s(x85),x27)≥c)
- (false→*false⟹if#(false,s(x89),s(x25),0,x27)≥c)
-
For the chain
we build the initial constraint
(modIter#(x8,x9,x10,x11)→*modIter#(x12,s(x13),x14,x15)⟹modIter#(x12,s(x13),x14,x15)≥if#(le(x12,x14),x12,s(x13),x14,x15))
which is simplified as follows.
-
For the chain
we build the initial constraint
(modIter#(x16,x17,x18,0)→*modIter#(x20,s(x21),x22,x23)⟹modIter#(x20,s(x21),x22,x23)≥if#(le(x20,x22),x20,s(x21),x22,x23))
which is simplified as follows.
-
For the chain
we build the initial constraint
(if#(le(x24,x26),x24,s(x25),x26,x27)→*if#(false,x28,x29,x30,x31)⟹if#(false,x28,x29,x30,x31) > if2#(le(x29,s(x31)),x28,x29,s(x30),s(x31)))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x24,x26)→*false⟹x24→*x28⟹s(x25)→*x29⟹x26→*x30⟹x27→*x31⟹if#(false,x28,x29,x30,x31) > if2#(le(x29,s(x31)),x28,x29,s(x30),s(x31)))
-
Applying Rule "Variable in Equation" allows to substitute
x28 by x24 which results in
(le(x24,x26)→*false⟹s(x25)→*x29⟹x26→*x30⟹x27→*x31⟹if#(false,x24,x29,x30,x31) > if2#(le(x29,s(x31)),x24,x29,s(x30),s(x31)))
-
Applying Rule "Variable in Equation" allows to substitute
x29 by s(x25) which results in
(le(x24,x26)→*false⟹x26→*x30⟹x27→*x31⟹if#(false,x24,s(x25),x30,x31) > if2#(le(s(x25),s(x31)),x24,s(x25),s(x30),s(x31)))
-
Applying Rule "Variable in Equation" allows to substitute
x30 by x26 which results in
(le(x24,x26)→*false⟹x27→*x31⟹if#(false,x24,s(x25),x26,x31) > if2#(le(s(x25),s(x31)),x24,s(x25),s(x26),s(x31)))
-
Applying Rule "Variable in Equation" allows to substitute
x31 by x27 which results in
(le(x24,x26)→*false⟹if#(false,x24,s(x25),x26,x27) > if2#(le(s(x25),s(x27)),x24,s(x25),s(x26),s(x27)))
-
Applying Rule "Induction" on le(x24,x26)→*false results in the following 3 new constraints.
- (true→*false⟹if#(false,0,s(x25),x84,x27) > if2#(le(s(x25),s(x27)),0,s(x25),s(x84),s(x27)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x86,x85)→*false⟹∀x87
.
∀x88
.
(le(x86,x85)→*false⟹if#(false,x86,s(x87),x85,x88) > if2#(le(s(x87),s(x88)),x86,s(x87),s(x85),s(x88)))⟹if#(false,s(x86),s(x25),s(x85),x27) > if2#(le(s(x25),s(x27)),s(x86),s(x25),s(s(x85)),s(x27)))
- (false→*false⟹if#(false,s(x89),s(x25),0,x27) > if2#(le(s(x25),s(x27)),s(x89),s(x25),s(0),s(x27)))
-
For the chain
we build the initial constraint
(if2#(le(x49,s(x51)),x48,x49,s(x50),s(x51))→*if2#(false,x52,x53,x54,x55)⟹if2#(false,x52,x53,x54,x55)≥modIter#(x52,x53,x54,x55))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x49,s(x51))→*false⟹x48→*x52⟹x49→*x53⟹s(x50)→*x54⟹s(x51)→*x55⟹if2#(false,x52,x53,x54,x55)≥modIter#(x52,x53,x54,x55))
-
Applying Rule "Variable in Equation" allows to substitute
x52 by x48 which results in
(le(x49,s(x51))→*false⟹x49→*x53⟹s(x50)→*x54⟹s(x51)→*x55⟹if2#(false,x48,x53,x54,x55)≥modIter#(x48,x53,x54,x55))
-
Applying Rule "Variable in Equation" allows to substitute
x53 by x49 which results in
(le(x49,s(x51))→*false⟹s(x50)→*x54⟹s(x51)→*x55⟹if2#(false,x48,x49,x54,x55)≥modIter#(x48,x49,x54,x55))
-
Applying Rule "Variable in Equation" allows to substitute
x54 by s(x50) which results in
(le(x49,s(x51))→*false⟹s(x51)→*x55⟹if2#(false,x48,x49,s(x50),x55)≥modIter#(x48,x49,s(x50),x55))
-
Applying Rule "Variable in Equation" allows to substitute
x55 by s(x51) which results in
(le(x49,s(x51))→*false⟹if2#(false,x48,x49,s(x50),s(x51))≥modIter#(x48,x49,s(x50),s(x51)))
-
Applying Rule "Introduce fresh variable" results in
(s(x51)→*x90⟹le(x49,x90)→*false⟹if2#(false,x48,x49,s(x50),s(x51))≥modIter#(x48,x49,s(x50),s(x51)))
-
Applying Rule "Induction" on le(x49,x90)→*false results in the following 3 new constraints.
- (true→*false⟹if2#(false,x48,0,s(x50),s(x51))≥modIter#(x48,0,s(x50),s(x51)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x93,x92)→*false⟹s(x51)→*s(x92)⟹∀x94
.
∀x95
.
∀x96
.
(le(x93,x92)→*false⟹s(x94)→*x92⟹if2#(false,x95,x93,s(x96),s(x94))≥modIter#(x95,x93,s(x96),s(x94)))⟹if2#(false,x48,s(x93),s(x50),s(x51))≥modIter#(x48,s(x93),s(x50),s(x51)))
-
Applying Rule "Same Constructor" results in
(le(x93,x92)→*false⟹x51→*x92⟹∀x94
.
∀x95
.
∀x96
.
(le(x93,x92)→*false⟹s(x94)→*x92⟹if2#(false,x95,x93,s(x96),s(x94))≥modIter#(x95,x93,s(x96),s(x94)))⟹if2#(false,x48,s(x93),s(x50),s(x51))≥modIter#(x48,s(x93),s(x50),s(x51)))
-
Applying Rule "Variable in Equation" allows to substitute
x51 by x92 which results in
(le(x93,x92)→*false⟹∀x94
.
∀x95
.
∀x96
.
(le(x93,x92)→*false⟹s(x94)→*x92⟹if2#(false,x95,x93,s(x96),s(x94))≥modIter#(x95,x93,s(x96),s(x94)))⟹if2#(false,x48,s(x93),s(x50),s(x92))≥modIter#(x48,s(x93),s(x50),s(x92)))
-
Applying Rule "Delete Conditions" results in
(le(x93,x92)→*false⟹if2#(false,x48,s(x93),s(x50),s(x92))≥modIter#(x48,s(x93),s(x50),s(x92)))
-
Applying Rule "Induction" on le(x93,x92)→*false results in the following 3 new constraints.
- (true→*false⟹if2#(false,x48,s(0),s(x50),s(x98))≥modIter#(x48,s(0),s(x50),s(x98)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x100,x99)→*false⟹∀x101
.
∀x102
.
(le(x100,x99)→*false⟹if2#(false,x101,s(x100),s(x102),s(x99))≥modIter#(x101,s(x100),s(x102),s(x99)))⟹if2#(false,x48,s(s(x100)),s(x50),s(s(x99)))≥modIter#(x48,s(s(x100)),s(x50),s(s(x99))))
- (false→*false⟹if2#(false,x48,s(s(x103)),s(x50),s(0))≥modIter#(x48,s(s(x103)),s(x50),s(0)))
- (false→*false⟹s(x51)→*0⟹if2#(false,x48,s(x97),s(x50),s(x51))≥modIter#(x48,s(x97),s(x50),s(x51)))
-
Applying Rule "Same Constructor" results in
(s(x51)→*0⟹if2#(false,x48,s(x97),s(x50),s(x51))≥modIter#(x48,s(x97),s(x50),s(x51)))
- Applying Rule "Different Constructors" allows to drop this constraint.
-
For the chain
we build the initial constraint
(if2#(le(x69,s(x71)),x68,x69,s(x70),s(x71))→*if2#(true,x72,x73,x74,x75)⟹if2#(true,x72,x73,x74,x75)≥modIter#(x72,x73,x74,0))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x69,s(x71))→*true⟹x68→*x72⟹x69→*x73⟹s(x70)→*x74⟹s(x71)→*x75⟹if2#(true,x72,x73,x74,x75)≥modIter#(x72,x73,x74,0))
-
Applying Rule "Variable in Equation" allows to substitute
x72 by x68 which results in
(le(x69,s(x71))→*true⟹x69→*x73⟹s(x70)→*x74⟹s(x71)→*x75⟹if2#(true,x68,x73,x74,x75)≥modIter#(x68,x73,x74,0))
-
Applying Rule "Variable in Equation" allows to substitute
x73 by x69 which results in
(le(x69,s(x71))→*true⟹s(x70)→*x74⟹s(x71)→*x75⟹if2#(true,x68,x69,x74,x75)≥modIter#(x68,x69,x74,0))
-
Applying Rule "Variable in Equation" allows to substitute
x74 by s(x70) which results in
(le(x69,s(x71))→*true⟹s(x71)→*x75⟹if2#(true,x68,x69,s(x70),x75)≥modIter#(x68,x69,s(x70),0))
-
Applying Rule "Variable in Equation" allows to substitute
x75 by s(x71) which results in
(le(x69,s(x71))→*true⟹if2#(true,x68,x69,s(x70),s(x71))≥modIter#(x68,x69,s(x70),0))
-
Applying Rule "Introduce fresh variable" results in
(s(x71)→*x104⟹le(x69,x104)→*true⟹if2#(true,x68,x69,s(x70),s(x71))≥modIter#(x68,x69,s(x70),0))
-
Applying Rule "Induction" on le(x69,x104)→*true results in the following 3 new constraints.
- (true→*true⟹s(x71)→*x105⟹if2#(true,x68,0,s(x70),s(x71))≥modIter#(x68,0,s(x70),0))
- (le(x107,x106)→*true⟹s(x71)→*s(x106)⟹∀x108
.
∀x109
.
∀x110
.
(le(x107,x106)→*true⟹s(x108)→*x106⟹if2#(true,x109,x107,s(x110),s(x108))≥modIter#(x109,x107,s(x110),0))⟹if2#(true,x68,s(x107),s(x70),s(x71))≥modIter#(x68,s(x107),s(x70),0))
-
Applying Rule "Same Constructor" results in
(le(x107,x106)→*true⟹x71→*x106⟹∀x108
.
∀x109
.
∀x110
.
(le(x107,x106)→*true⟹s(x108)→*x106⟹if2#(true,x109,x107,s(x110),s(x108))≥modIter#(x109,x107,s(x110),0))⟹if2#(true,x68,s(x107),s(x70),s(x71))≥modIter#(x68,s(x107),s(x70),0))
-
Applying Rule "Variable in Equation" allows to substitute
x71 by x106 which results in
(le(x107,x106)→*true⟹∀x108
.
∀x109
.
∀x110
.
(le(x107,x106)→*true⟹s(x108)→*x106⟹if2#(true,x109,x107,s(x110),s(x108))≥modIter#(x109,x107,s(x110),0))⟹if2#(true,x68,s(x107),s(x70),s(x106))≥modIter#(x68,s(x107),s(x70),0))
-
Applying Rule "Delete Conditions" results in
(le(x107,x106)→*true⟹if2#(true,x68,s(x107),s(x70),s(x106))≥modIter#(x68,s(x107),s(x70),0))
-
Applying Rule "Induction" on le(x107,x106)→*true results in the following 3 new constraints.
- (true→*true⟹if2#(true,x68,s(0),s(x70),s(x112))≥modIter#(x68,s(0),s(x70),0))
- (le(x114,x113)→*true⟹∀x115
.
∀x116
.
(le(x114,x113)→*true⟹if2#(true,x115,s(x114),s(x116),s(x113))≥modIter#(x115,s(x114),s(x116),0))⟹if2#(true,x68,s(s(x114)),s(x70),s(s(x113)))≥modIter#(x68,s(s(x114)),s(x70),0))
- (false→*true⟹if2#(true,x68,s(s(x117)),s(x70),s(0))≥modIter#(x68,s(s(x117)),s(x70),0))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (false→*true⟹if2#(true,x68,s(x111),s(x70),s(x71))≥modIter#(x68,s(x111),s(x70),0))
- Applying Rule "Different Constructors" allows to drop this constraint.
We remove those pairs which are strictly decreasing and bounded.
The dependency pairs are split into 0
components.