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(x30,x32),x30,s(x31),x32,x33,x34)→*if#(false,x35,x36,x37,x38,x39)⟹if#(false,x35,x36,x37,x38,x39)≥c)
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x30,x32)→*false⟹x30→*x35⟹s(x31)→*x36⟹x32→*x37⟹x33→*x38⟹x34→*x39⟹if#(false,x35,x36,x37,x38,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x35 by x30 which results in
(le(x30,x32)→*false⟹s(x31)→*x36⟹x32→*x37⟹x33→*x38⟹x34→*x39⟹if#(false,x30,x36,x37,x38,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x36 by s(x31) which results in
(le(x30,x32)→*false⟹x32→*x37⟹x33→*x38⟹x34→*x39⟹if#(false,x30,s(x31),x37,x38,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x37 by x32 which results in
(le(x30,x32)→*false⟹x33→*x38⟹x34→*x39⟹if#(false,x30,s(x31),x32,x38,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x38 by x33 which results in
(le(x30,x32)→*false⟹x34→*x39⟹if#(false,x30,s(x31),x32,x33,x39)≥c)
-
Applying Rule "Variable in Equation" allows to substitute
x39 by x34 which results in
(le(x30,x32)→*false⟹if#(false,x30,s(x31),x32,x33,x34)≥c)
-
Applying Rule "Induction" on le(x30,x32)→*false results in the following 3 new constraints.
- (true→*false⟹if#(false,0,s(x31),x105,x33,x34)≥c)
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x107,x106)→*false⟹∀x108
.
∀x109
.
∀x110
.
(le(x107,x106)→*false⟹if#(false,x107,s(x108),x106,x109,x110)≥c)⟹if#(false,s(x107),s(x31),s(x106),x33,x34)≥c)
- (false→*false⟹if#(false,s(x111),s(x31),0,x33,x34)≥c)
-
For the chain
we build the initial constraint
(quotIter#(x10,x11,x12,x13,x14)→*quotIter#(x15,s(x16),x17,x18,x19)⟹quotIter#(x15,s(x16),x17,x18,x19)≥if#(le(x15,x17),x15,s(x16),x17,x18,x19))
which is simplified as follows.
-
For the chain
we build the initial constraint
(quotIter#(x20,x21,x22,0,s(x24))→*quotIter#(x25,s(x26),x27,x28,x29)⟹quotIter#(x25,s(x26),x27,x28,x29)≥if#(le(x25,x27),x25,s(x26),x27,x28,x29))
which is simplified as follows.
-
For the chain
we build the initial constraint
(if#(le(x30,x32),x30,s(x31),x32,x33,x34)→*if#(false,x35,x36,x37,x38,x39)⟹if#(false,x35,x36,x37,x38,x39) > if2#(le(x36,s(x38)),x35,x36,s(x37),s(x38),x39))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x30,x32)→*false⟹x30→*x35⟹s(x31)→*x36⟹x32→*x37⟹x33→*x38⟹x34→*x39⟹if#(false,x35,x36,x37,x38,x39) > if2#(le(x36,s(x38)),x35,x36,s(x37),s(x38),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x35 by x30 which results in
(le(x30,x32)→*false⟹s(x31)→*x36⟹x32→*x37⟹x33→*x38⟹x34→*x39⟹if#(false,x30,x36,x37,x38,x39) > if2#(le(x36,s(x38)),x30,x36,s(x37),s(x38),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x36 by s(x31) which results in
(le(x30,x32)→*false⟹x32→*x37⟹x33→*x38⟹x34→*x39⟹if#(false,x30,s(x31),x37,x38,x39) > if2#(le(s(x31),s(x38)),x30,s(x31),s(x37),s(x38),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x37 by x32 which results in
(le(x30,x32)→*false⟹x33→*x38⟹x34→*x39⟹if#(false,x30,s(x31),x32,x38,x39) > if2#(le(s(x31),s(x38)),x30,s(x31),s(x32),s(x38),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x38 by x33 which results in
(le(x30,x32)→*false⟹x34→*x39⟹if#(false,x30,s(x31),x32,x33,x39) > if2#(le(s(x31),s(x33)),x30,s(x31),s(x32),s(x33),x39))
-
Applying Rule "Variable in Equation" allows to substitute
x39 by x34 which results in
(le(x30,x32)→*false⟹if#(false,x30,s(x31),x32,x33,x34) > if2#(le(s(x31),s(x33)),x30,s(x31),s(x32),s(x33),x34))
-
Applying Rule "Induction" on le(x30,x32)→*false results in the following 3 new constraints.
- (true→*false⟹if#(false,0,s(x31),x105,x33,x34) > if2#(le(s(x31),s(x33)),0,s(x31),s(x105),s(x33),x34))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x107,x106)→*false⟹∀x108
.
∀x109
.
∀x110
.
(le(x107,x106)→*false⟹if#(false,x107,s(x108),x106,x109,x110) > if2#(le(s(x108),s(x109)),x107,s(x108),s(x106),s(x109),x110))⟹if#(false,s(x107),s(x31),s(x106),x33,x34) > if2#(le(s(x31),s(x33)),s(x107),s(x31),s(s(x106)),s(x33),x34))
- (false→*false⟹if#(false,s(x111),s(x31),0,x33,x34) > if2#(le(s(x31),s(x33)),s(x111),s(x31),s(0),s(x33),x34))
-
For the chain
we build the initial constraint
(if2#(le(x61,s(x63)),x60,x61,s(x62),s(x63),x64)→*if2#(false,x65,x66,x67,x68,x69)⟹if2#(false,x65,x66,x67,x68,x69)≥quotIter#(x65,x66,x67,x68,x69))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x61,s(x63))→*false⟹x60→*x65⟹x61→*x66⟹s(x62)→*x67⟹s(x63)→*x68⟹x64→*x69⟹if2#(false,x65,x66,x67,x68,x69)≥quotIter#(x65,x66,x67,x68,x69))
-
Applying Rule "Variable in Equation" allows to substitute
x65 by x60 which results in
(le(x61,s(x63))→*false⟹x61→*x66⟹s(x62)→*x67⟹s(x63)→*x68⟹x64→*x69⟹if2#(false,x60,x66,x67,x68,x69)≥quotIter#(x60,x66,x67,x68,x69))
-
Applying Rule "Variable in Equation" allows to substitute
x66 by x61 which results in
(le(x61,s(x63))→*false⟹s(x62)→*x67⟹s(x63)→*x68⟹x64→*x69⟹if2#(false,x60,x61,x67,x68,x69)≥quotIter#(x60,x61,x67,x68,x69))
-
Applying Rule "Variable in Equation" allows to substitute
x67 by s(x62) which results in
(le(x61,s(x63))→*false⟹s(x63)→*x68⟹x64→*x69⟹if2#(false,x60,x61,s(x62),x68,x69)≥quotIter#(x60,x61,s(x62),x68,x69))
-
Applying Rule "Variable in Equation" allows to substitute
x68 by s(x63) which results in
(le(x61,s(x63))→*false⟹x64→*x69⟹if2#(false,x60,x61,s(x62),s(x63),x69)≥quotIter#(x60,x61,s(x62),s(x63),x69))
-
Applying Rule "Variable in Equation" allows to substitute
x69 by x64 which results in
(le(x61,s(x63))→*false⟹if2#(false,x60,x61,s(x62),s(x63),x64)≥quotIter#(x60,x61,s(x62),s(x63),x64))
-
Applying Rule "Introduce fresh variable" results in
(s(x63)→*x112⟹le(x61,x112)→*false⟹if2#(false,x60,x61,s(x62),s(x63),x64)≥quotIter#(x60,x61,s(x62),s(x63),x64))
-
Applying Rule "Induction" on le(x61,x112)→*false results in the following 3 new constraints.
- (true→*false⟹if2#(false,x60,0,s(x62),s(x63),x64)≥quotIter#(x60,0,s(x62),s(x63),x64))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x115,x114)→*false⟹s(x63)→*s(x114)⟹∀x116
.
∀x117
.
∀x118
.
∀x119
.
(le(x115,x114)→*false⟹s(x116)→*x114⟹if2#(false,x117,x115,s(x118),s(x116),x119)≥quotIter#(x117,x115,s(x118),s(x116),x119))⟹if2#(false,x60,s(x115),s(x62),s(x63),x64)≥quotIter#(x60,s(x115),s(x62),s(x63),x64))
-
Applying Rule "Same Constructor" results in
(le(x115,x114)→*false⟹x63→*x114⟹∀x116
.
∀x117
.
∀x118
.
∀x119
.
(le(x115,x114)→*false⟹s(x116)→*x114⟹if2#(false,x117,x115,s(x118),s(x116),x119)≥quotIter#(x117,x115,s(x118),s(x116),x119))⟹if2#(false,x60,s(x115),s(x62),s(x63),x64)≥quotIter#(x60,s(x115),s(x62),s(x63),x64))
-
Applying Rule "Variable in Equation" allows to substitute
x63 by x114 which results in
(le(x115,x114)→*false⟹∀x116
.
∀x117
.
∀x118
.
∀x119
.
(le(x115,x114)→*false⟹s(x116)→*x114⟹if2#(false,x117,x115,s(x118),s(x116),x119)≥quotIter#(x117,x115,s(x118),s(x116),x119))⟹if2#(false,x60,s(x115),s(x62),s(x114),x64)≥quotIter#(x60,s(x115),s(x62),s(x114),x64))
-
Applying Rule "Delete Conditions" results in
(le(x115,x114)→*false⟹if2#(false,x60,s(x115),s(x62),s(x114),x64)≥quotIter#(x60,s(x115),s(x62),s(x114),x64))
-
Applying Rule "Induction" on le(x115,x114)→*false results in the following 3 new constraints.
- (true→*false⟹if2#(false,x60,s(0),s(x62),s(x121),x64)≥quotIter#(x60,s(0),s(x62),s(x121),x64))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (le(x123,x122)→*false⟹∀x124
.
∀x125
.
∀x126
.
(le(x123,x122)→*false⟹if2#(false,x124,s(x123),s(x125),s(x122),x126)≥quotIter#(x124,s(x123),s(x125),s(x122),x126))⟹if2#(false,x60,s(s(x123)),s(x62),s(s(x122)),x64)≥quotIter#(x60,s(s(x123)),s(x62),s(s(x122)),x64))
- (false→*false⟹if2#(false,x60,s(s(x127)),s(x62),s(0),x64)≥quotIter#(x60,s(s(x127)),s(x62),s(0),x64))
- (false→*false⟹s(x63)→*0⟹if2#(false,x60,s(x120),s(x62),s(x63),x64)≥quotIter#(x60,s(x120),s(x62),s(x63),x64))
-
Applying Rule "Same Constructor" results in
(s(x63)→*0⟹if2#(false,x60,s(x120),s(x62),s(x63),x64)≥quotIter#(x60,s(x120),s(x62),s(x63),x64))
- Applying Rule "Different Constructors" allows to drop this constraint.
-
For the chain
we build the initial constraint
(if2#(le(x86,s(x88)),x85,x86,s(x87),s(x88),x89)→*if2#(true,x90,x91,x92,x93,x94)⟹if2#(true,x90,x91,x92,x93,x94)≥quotIter#(x90,x91,x92,0,s(x94)))
which is simplified as follows.
-
Applying Rule "Same Constructor" results in
(le(x86,s(x88))→*true⟹x85→*x90⟹x86→*x91⟹s(x87)→*x92⟹s(x88)→*x93⟹x89→*x94⟹if2#(true,x90,x91,x92,x93,x94)≥quotIter#(x90,x91,x92,0,s(x94)))
-
Applying Rule "Variable in Equation" allows to substitute
x90 by x85 which results in
(le(x86,s(x88))→*true⟹x86→*x91⟹s(x87)→*x92⟹s(x88)→*x93⟹x89→*x94⟹if2#(true,x85,x91,x92,x93,x94)≥quotIter#(x85,x91,x92,0,s(x94)))
-
Applying Rule "Variable in Equation" allows to substitute
x91 by x86 which results in
(le(x86,s(x88))→*true⟹s(x87)→*x92⟹s(x88)→*x93⟹x89→*x94⟹if2#(true,x85,x86,x92,x93,x94)≥quotIter#(x85,x86,x92,0,s(x94)))
-
Applying Rule "Variable in Equation" allows to substitute
x92 by s(x87) which results in
(le(x86,s(x88))→*true⟹s(x88)→*x93⟹x89→*x94⟹if2#(true,x85,x86,s(x87),x93,x94)≥quotIter#(x85,x86,s(x87),0,s(x94)))
-
Applying Rule "Variable in Equation" allows to substitute
x93 by s(x88) which results in
(le(x86,s(x88))→*true⟹x89→*x94⟹if2#(true,x85,x86,s(x87),s(x88),x94)≥quotIter#(x85,x86,s(x87),0,s(x94)))
-
Applying Rule "Variable in Equation" allows to substitute
x94 by x89 which results in
(le(x86,s(x88))→*true⟹if2#(true,x85,x86,s(x87),s(x88),x89)≥quotIter#(x85,x86,s(x87),0,s(x89)))
-
Applying Rule "Introduce fresh variable" results in
(s(x88)→*x128⟹le(x86,x128)→*true⟹if2#(true,x85,x86,s(x87),s(x88),x89)≥quotIter#(x85,x86,s(x87),0,s(x89)))
-
Applying Rule "Induction" on le(x86,x128)→*true results in the following 3 new constraints.
- (true→*true⟹s(x88)→*x129⟹if2#(true,x85,0,s(x87),s(x88),x89)≥quotIter#(x85,0,s(x87),0,s(x89)))
- (le(x131,x130)→*true⟹s(x88)→*s(x130)⟹∀x132
.
∀x133
.
∀x134
.
∀x135
.
(le(x131,x130)→*true⟹s(x132)→*x130⟹if2#(true,x133,x131,s(x134),s(x132),x135)≥quotIter#(x133,x131,s(x134),0,s(x135)))⟹if2#(true,x85,s(x131),s(x87),s(x88),x89)≥quotIter#(x85,s(x131),s(x87),0,s(x89)))
-
Applying Rule "Same Constructor" results in
(le(x131,x130)→*true⟹x88→*x130⟹∀x132
.
∀x133
.
∀x134
.
∀x135
.
(le(x131,x130)→*true⟹s(x132)→*x130⟹if2#(true,x133,x131,s(x134),s(x132),x135)≥quotIter#(x133,x131,s(x134),0,s(x135)))⟹if2#(true,x85,s(x131),s(x87),s(x88),x89)≥quotIter#(x85,s(x131),s(x87),0,s(x89)))
-
Applying Rule "Variable in Equation" allows to substitute
x88 by x130 which results in
(le(x131,x130)→*true⟹∀x132
.
∀x133
.
∀x134
.
∀x135
.
(le(x131,x130)→*true⟹s(x132)→*x130⟹if2#(true,x133,x131,s(x134),s(x132),x135)≥quotIter#(x133,x131,s(x134),0,s(x135)))⟹if2#(true,x85,s(x131),s(x87),s(x130),x89)≥quotIter#(x85,s(x131),s(x87),0,s(x89)))
-
Applying Rule "Delete Conditions" results in
(le(x131,x130)→*true⟹if2#(true,x85,s(x131),s(x87),s(x130),x89)≥quotIter#(x85,s(x131),s(x87),0,s(x89)))
-
Applying Rule "Induction" on le(x131,x130)→*true results in the following 3 new constraints.
- (true→*true⟹if2#(true,x85,s(0),s(x87),s(x137),x89)≥quotIter#(x85,s(0),s(x87),0,s(x89)))
- (le(x139,x138)→*true⟹∀x140
.
∀x141
.
∀x142
.
(le(x139,x138)→*true⟹if2#(true,x140,s(x139),s(x141),s(x138),x142)≥quotIter#(x140,s(x139),s(x141),0,s(x142)))⟹if2#(true,x85,s(s(x139)),s(x87),s(s(x138)),x89)≥quotIter#(x85,s(s(x139)),s(x87),0,s(x89)))
- (false→*true⟹if2#(true,x85,s(s(x143)),s(x87),s(0),x89)≥quotIter#(x85,s(s(x143)),s(x87),0,s(x89)))
- Applying Rule "Different Constructors" allows to drop this constraint.
- (false→*true⟹if2#(true,x85,s(x136),s(x87),s(x88),x89)≥quotIter#(x85,s(x136),s(x87),0,s(x89)))
- 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.