NO ### Pre-processing the ITS problem ### Initial linear ITS problem Start location: l7 0: l0 -> l1 : DName^0'=DName^post_1, IoCreateDevice^0'=IoCreateDevice^post_1, PPBlockInits^0'=PPBlockInits^post_1, PPBunlockInits^0'=PPBunlockInits^post_1, Pdo^0'=Pdo^post_1, Pdolen^0'=Pdolen^post_1, conditional^0'=conditional^post_1, i^0'=i^post_1, num^0'=num^post_1, status^0'=status^post_1, [ conditional^0<=1 && DName^0==DName^post_1 && IoCreateDevice^0==IoCreateDevice^post_1 && PPBlockInits^0==PPBlockInits^post_1 && PPBunlockInits^0==PPBunlockInits^post_1 && Pdo^0==Pdo^post_1 && Pdolen^0==Pdolen^post_1 && conditional^0==conditional^post_1 && i^0==i^post_1 && num^0==num^post_1 && status^0==status^post_1 ], cost: 1 1: l0 -> l2 : DName^0'=DName^post_2, IoCreateDevice^0'=IoCreateDevice^post_2, PPBlockInits^0'=PPBlockInits^post_2, PPBunlockInits^0'=PPBunlockInits^post_2, Pdo^0'=Pdo^post_2, Pdolen^0'=Pdolen^post_2, conditional^0'=conditional^post_2, i^0'=i^post_2, num^0'=num^post_2, status^0'=status^post_2, [ 2<=conditional^0 && num^post_2==1+num^0 && DName^0==DName^post_2 && IoCreateDevice^0==IoCreateDevice^post_2 && PPBlockInits^0==PPBlockInits^post_2 && PPBunlockInits^0==PPBunlockInits^post_2 && Pdo^0==Pdo^post_2 && Pdolen^0==Pdolen^post_2 && conditional^0==conditional^post_2 && i^0==i^post_2 && status^0==status^post_2 ], cost: 1 4: l1 -> l4 : DName^0'=DName^post_5, IoCreateDevice^0'=IoCreateDevice^post_5, PPBlockInits^0'=PPBlockInits^post_5, PPBunlockInits^0'=PPBunlockInits^post_5, Pdo^0'=Pdo^post_5, Pdolen^0'=Pdolen^post_5, conditional^0'=conditional^post_5, i^0'=i^post_5, num^0'=num^post_5, status^0'=status^post_5, [ num^post_5==0 && PPBunlockInits^post_5==1 && DName^0==DName^post_5 && IoCreateDevice^0==IoCreateDevice^post_5 && PPBlockInits^0==PPBlockInits^post_5 && Pdo^0==Pdo^post_5 && Pdolen^0==Pdolen^post_5 && conditional^0==conditional^post_5 && i^0==i^post_5 && status^0==status^post_5 ], cost: 1 7: l2 -> l1 : DName^0'=DName^post_8, IoCreateDevice^0'=IoCreateDevice^post_8, PPBlockInits^0'=PPBlockInits^post_8, PPBunlockInits^0'=PPBunlockInits^post_8, Pdo^0'=Pdo^post_8, Pdolen^0'=Pdolen^post_8, conditional^0'=conditional^post_8, i^0'=i^post_8, num^0'=num^post_8, status^0'=status^post_8, [ Pdolen^0<=i^0 && status^post_8==0 && DName^0==DName^post_8 && IoCreateDevice^0==IoCreateDevice^post_8 && PPBlockInits^0==PPBlockInits^post_8 && PPBunlockInits^0==PPBunlockInits^post_8 && Pdo^0==Pdo^post_8 && Pdolen^0==Pdolen^post_8 && conditional^0==conditional^post_8 && i^0==i^post_8 && num^0==num^post_8 ], cost: 1 8: l2 -> l5 : DName^0'=DName^post_9, IoCreateDevice^0'=IoCreateDevice^post_9, PPBlockInits^0'=PPBlockInits^post_9, PPBunlockInits^0'=PPBunlockInits^post_9, Pdo^0'=Pdo^post_9, Pdolen^0'=Pdolen^post_9, conditional^0'=conditional^post_9, i^0'=i^post_9, num^0'=num^post_9, status^0'=status^post_9, [ PPBlockInits^post_9==1 && 1+i^0<=Pdolen^0 && DName^post_9==DName^post_9 && status^post_9==0 && IoCreateDevice^0==IoCreateDevice^post_9 && PPBunlockInits^0==PPBunlockInits^post_9 && Pdo^0==Pdo^post_9 && Pdolen^0==Pdolen^post_9 && conditional^0==conditional^post_9 && i^0==i^post_9 && num^0==num^post_9 ], cost: 1 2: l3 -> l2 : DName^0'=DName^post_3, IoCreateDevice^0'=IoCreateDevice^post_3, PPBlockInits^0'=PPBlockInits^post_3, PPBunlockInits^0'=PPBunlockInits^post_3, Pdo^0'=Pdo^post_3, Pdolen^0'=Pdolen^post_3, conditional^0'=conditional^post_3, i^0'=i^post_3, num^0'=num^post_3, status^0'=status^post_3, [ conditional^0<=1 && IoCreateDevice^post_3==0 && status^post_3==1 && i^post_3==1+i^0 && DName^0==DName^post_3 && PPBlockInits^0==PPBlockInits^post_3 && PPBunlockInits^0==PPBunlockInits^post_3 && Pdo^0==Pdo^post_3 && Pdolen^0==Pdolen^post_3 && conditional^0==conditional^post_3 && num^0==num^post_3 ], cost: 1 3: l3 -> l0 : DName^0'=DName^post_4, IoCreateDevice^0'=IoCreateDevice^post_4, PPBlockInits^0'=PPBlockInits^post_4, PPBunlockInits^0'=PPBunlockInits^post_4, Pdo^0'=Pdo^post_4, Pdolen^0'=Pdolen^post_4, conditional^0'=conditional^post_4, i^0'=i^post_4, num^0'=num^post_4, status^0'=status^post_4, [ 2<=conditional^0 && IoCreateDevice^post_4==0 && Pdo^post_4==0 && conditional^post_4==conditional^post_4 && DName^0==DName^post_4 && PPBlockInits^0==PPBlockInits^post_4 && PPBunlockInits^0==PPBunlockInits^post_4 && Pdolen^0==Pdolen^post_4 && i^0==i^post_4 && num^0==num^post_4 && status^0==status^post_4 ], cost: 1 5: l5 -> l1 : DName^0'=DName^post_6, IoCreateDevice^0'=IoCreateDevice^post_6, PPBlockInits^0'=PPBlockInits^post_6, PPBunlockInits^0'=PPBunlockInits^post_6, Pdo^0'=Pdo^post_6, Pdolen^0'=Pdolen^post_6, conditional^0'=conditional^post_6, i^0'=i^post_6, num^0'=num^post_6, status^0'=status^post_6, [ DName^0<=0 && DName^0==DName^post_6 && IoCreateDevice^0==IoCreateDevice^post_6 && PPBlockInits^0==PPBlockInits^post_6 && PPBunlockInits^0==PPBunlockInits^post_6 && Pdo^0==Pdo^post_6 && Pdolen^0==Pdolen^post_6 && conditional^0==conditional^post_6 && i^0==i^post_6 && num^0==num^post_6 && status^0==status^post_6 ], cost: 1 6: l5 -> l3 : DName^0'=DName^post_7, IoCreateDevice^0'=IoCreateDevice^post_7, PPBlockInits^0'=PPBlockInits^post_7, PPBunlockInits^0'=PPBunlockInits^post_7, Pdo^0'=Pdo^post_7, Pdolen^0'=Pdolen^post_7, conditional^0'=conditional^post_7, i^0'=i^post_7, num^0'=num^post_7, status^0'=status^post_7, [ 1<=DName^0 && IoCreateDevice^post_7==1 && conditional^post_7==conditional^post_7 && DName^0==DName^post_7 && PPBlockInits^0==PPBlockInits^post_7 && PPBunlockInits^0==PPBunlockInits^post_7 && Pdo^0==Pdo^post_7 && Pdolen^0==Pdolen^post_7 && i^0==i^post_7 && num^0==num^post_7 && status^0==status^post_7 ], cost: 1 9: l6 -> l2 : DName^0'=DName^post_10, IoCreateDevice^0'=IoCreateDevice^post_10, PPBlockInits^0'=PPBlockInits^post_10, PPBunlockInits^0'=PPBunlockInits^post_10, Pdo^0'=Pdo^post_10, Pdolen^0'=Pdolen^post_10, conditional^0'=conditional^post_10, i^0'=i^post_10, num^0'=num^post_10, status^0'=status^post_10, [ i^post_10==i^post_10 && Pdolen^post_10==Pdolen^post_10 && PPBunlockInits^post_10==0 && PPBlockInits^post_10==1 && status^post_10==0 && IoCreateDevice^post_10==0 && DName^0==DName^post_10 && Pdo^0==Pdo^post_10 && conditional^0==conditional^post_10 && num^0==num^post_10 ], cost: 1 10: l7 -> l6 : DName^0'=DName^post_11, IoCreateDevice^0'=IoCreateDevice^post_11, PPBlockInits^0'=PPBlockInits^post_11, PPBunlockInits^0'=PPBunlockInits^post_11, Pdo^0'=Pdo^post_11, Pdolen^0'=Pdolen^post_11, conditional^0'=conditional^post_11, i^0'=i^post_11, num^0'=num^post_11, status^0'=status^post_11, [ DName^0==DName^post_11 && IoCreateDevice^0==IoCreateDevice^post_11 && PPBlockInits^0==PPBlockInits^post_11 && PPBunlockInits^0==PPBunlockInits^post_11 && Pdo^0==Pdo^post_11 && Pdolen^0==Pdolen^post_11 && conditional^0==conditional^post_11 && i^0==i^post_11 && num^0==num^post_11 && status^0==status^post_11 ], cost: 1 Checking for constant complexity: The following rule is satisfiable with cost >= 1, yielding constant complexity: 10: l7 -> l6 : DName^0'=DName^post_11, IoCreateDevice^0'=IoCreateDevice^post_11, PPBlockInits^0'=PPBlockInits^post_11, PPBunlockInits^0'=PPBunlockInits^post_11, Pdo^0'=Pdo^post_11, Pdolen^0'=Pdolen^post_11, conditional^0'=conditional^post_11, i^0'=i^post_11, num^0'=num^post_11, status^0'=status^post_11, [ DName^0==DName^post_11 && IoCreateDevice^0==IoCreateDevice^post_11 && PPBlockInits^0==PPBlockInits^post_11 && PPBunlockInits^0==PPBunlockInits^post_11 && Pdo^0==Pdo^post_11 && Pdolen^0==Pdolen^post_11 && conditional^0==conditional^post_11 && i^0==i^post_11 && num^0==num^post_11 && status^0==status^post_11 ], cost: 1 Removed unreachable and leaf rules: Start location: l7 1: l0 -> l2 : DName^0'=DName^post_2, IoCreateDevice^0'=IoCreateDevice^post_2, PPBlockInits^0'=PPBlockInits^post_2, PPBunlockInits^0'=PPBunlockInits^post_2, Pdo^0'=Pdo^post_2, Pdolen^0'=Pdolen^post_2, conditional^0'=conditional^post_2, i^0'=i^post_2, num^0'=num^post_2, status^0'=status^post_2, [ 2<=conditional^0 && num^post_2==1+num^0 && DName^0==DName^post_2 && IoCreateDevice^0==IoCreateDevice^post_2 && PPBlockInits^0==PPBlockInits^post_2 && PPBunlockInits^0==PPBunlockInits^post_2 && Pdo^0==Pdo^post_2 && Pdolen^0==Pdolen^post_2 && conditional^0==conditional^post_2 && i^0==i^post_2 && status^0==status^post_2 ], cost: 1 8: l2 -> l5 : DName^0'=DName^post_9, IoCreateDevice^0'=IoCreateDevice^post_9, PPBlockInits^0'=PPBlockInits^post_9, PPBunlockInits^0'=PPBunlockInits^post_9, Pdo^0'=Pdo^post_9, Pdolen^0'=Pdolen^post_9, conditional^0'=conditional^post_9, i^0'=i^post_9, num^0'=num^post_9, status^0'=status^post_9, [ PPBlockInits^post_9==1 && 1+i^0<=Pdolen^0 && DName^post_9==DName^post_9 && status^post_9==0 && IoCreateDevice^0==IoCreateDevice^post_9 && PPBunlockInits^0==PPBunlockInits^post_9 && Pdo^0==Pdo^post_9 && Pdolen^0==Pdolen^post_9 && conditional^0==conditional^post_9 && i^0==i^post_9 && num^0==num^post_9 ], cost: 1 2: l3 -> l2 : DName^0'=DName^post_3, IoCreateDevice^0'=IoCreateDevice^post_3, PPBlockInits^0'=PPBlockInits^post_3, PPBunlockInits^0'=PPBunlockInits^post_3, Pdo^0'=Pdo^post_3, Pdolen^0'=Pdolen^post_3, conditional^0'=conditional^post_3, i^0'=i^post_3, num^0'=num^post_3, status^0'=status^post_3, [ conditional^0<=1 && IoCreateDevice^post_3==0 && status^post_3==1 && i^post_3==1+i^0 && DName^0==DName^post_3 && PPBlockInits^0==PPBlockInits^post_3 && PPBunlockInits^0==PPBunlockInits^post_3 && Pdo^0==Pdo^post_3 && Pdolen^0==Pdolen^post_3 && conditional^0==conditional^post_3 && num^0==num^post_3 ], cost: 1 3: l3 -> l0 : DName^0'=DName^post_4, IoCreateDevice^0'=IoCreateDevice^post_4, PPBlockInits^0'=PPBlockInits^post_4, PPBunlockInits^0'=PPBunlockInits^post_4, Pdo^0'=Pdo^post_4, Pdolen^0'=Pdolen^post_4, conditional^0'=conditional^post_4, i^0'=i^post_4, num^0'=num^post_4, status^0'=status^post_4, [ 2<=conditional^0 && IoCreateDevice^post_4==0 && Pdo^post_4==0 && conditional^post_4==conditional^post_4 && DName^0==DName^post_4 && PPBlockInits^0==PPBlockInits^post_4 && PPBunlockInits^0==PPBunlockInits^post_4 && Pdolen^0==Pdolen^post_4 && i^0==i^post_4 && num^0==num^post_4 && status^0==status^post_4 ], cost: 1 6: l5 -> l3 : DName^0'=DName^post_7, IoCreateDevice^0'=IoCreateDevice^post_7, PPBlockInits^0'=PPBlockInits^post_7, PPBunlockInits^0'=PPBunlockInits^post_7, Pdo^0'=Pdo^post_7, Pdolen^0'=Pdolen^post_7, conditional^0'=conditional^post_7, i^0'=i^post_7, num^0'=num^post_7, status^0'=status^post_7, [ 1<=DName^0 && IoCreateDevice^post_7==1 && conditional^post_7==conditional^post_7 && DName^0==DName^post_7 && PPBlockInits^0==PPBlockInits^post_7 && PPBunlockInits^0==PPBunlockInits^post_7 && Pdo^0==Pdo^post_7 && Pdolen^0==Pdolen^post_7 && i^0==i^post_7 && num^0==num^post_7 && status^0==status^post_7 ], cost: 1 9: l6 -> l2 : DName^0'=DName^post_10, IoCreateDevice^0'=IoCreateDevice^post_10, PPBlockInits^0'=PPBlockInits^post_10, PPBunlockInits^0'=PPBunlockInits^post_10, Pdo^0'=Pdo^post_10, Pdolen^0'=Pdolen^post_10, conditional^0'=conditional^post_10, i^0'=i^post_10, num^0'=num^post_10, status^0'=status^post_10, [ i^post_10==i^post_10 && Pdolen^post_10==Pdolen^post_10 && PPBunlockInits^post_10==0 && PPBlockInits^post_10==1 && status^post_10==0 && IoCreateDevice^post_10==0 && DName^0==DName^post_10 && Pdo^0==Pdo^post_10 && conditional^0==conditional^post_10 && num^0==num^post_10 ], cost: 1 10: l7 -> l6 : DName^0'=DName^post_11, IoCreateDevice^0'=IoCreateDevice^post_11, PPBlockInits^0'=PPBlockInits^post_11, PPBunlockInits^0'=PPBunlockInits^post_11, Pdo^0'=Pdo^post_11, Pdolen^0'=Pdolen^post_11, conditional^0'=conditional^post_11, i^0'=i^post_11, num^0'=num^post_11, status^0'=status^post_11, [ DName^0==DName^post_11 && IoCreateDevice^0==IoCreateDevice^post_11 && PPBlockInits^0==PPBlockInits^post_11 && PPBunlockInits^0==PPBunlockInits^post_11 && Pdo^0==Pdo^post_11 && Pdolen^0==Pdolen^post_11 && conditional^0==conditional^post_11 && i^0==i^post_11 && num^0==num^post_11 && status^0==status^post_11 ], cost: 1 Simplified all rules, resulting in: Start location: l7 1: l0 -> l2 : num^0'=1+num^0, [ 2<=conditional^0 ], cost: 1 8: l2 -> l5 : DName^0'=DName^post_9, PPBlockInits^0'=1, status^0'=0, [ 1+i^0<=Pdolen^0 ], cost: 1 2: l3 -> l2 : IoCreateDevice^0'=0, i^0'=1+i^0, status^0'=1, [ conditional^0<=1 ], cost: 1 3: l3 -> l0 : IoCreateDevice^0'=0, Pdo^0'=0, conditional^0'=conditional^post_4, [ 2<=conditional^0 ], cost: 1 6: l5 -> l3 : IoCreateDevice^0'=1, conditional^0'=conditional^post_7, [ 1<=DName^0 ], cost: 1 9: l6 -> l2 : IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, i^0'=i^post_10, status^0'=0, [], cost: 1 10: l7 -> l6 : [], cost: 1 ### Simplification by acceleration and chaining ### Eliminated locations (on linear paths): Start location: l7 12: l2 -> l3 : DName^0'=DName^post_9, IoCreateDevice^0'=1, PPBlockInits^0'=1, conditional^0'=conditional^post_7, status^0'=0, [ 1+i^0<=Pdolen^0 && 1<=DName^post_9 ], cost: 2 2: l3 -> l2 : IoCreateDevice^0'=0, i^0'=1+i^0, status^0'=1, [ conditional^0<=1 ], cost: 1 13: l3 -> l2 : IoCreateDevice^0'=0, Pdo^0'=0, conditional^0'=conditional^post_4, num^0'=1+num^0, [ 2<=conditional^0 && 2<=conditional^post_4 ], cost: 2 11: l7 -> l2 : IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, i^0'=i^post_10, status^0'=0, [], cost: 2 Eliminated locations (on tree-shaped paths): Start location: l7 14: l2 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, conditional^0'=conditional^post_7, i^0'=1+i^0, status^0'=1, [ 1+i^0<=Pdolen^0 && 1<=DName^post_9 && conditional^post_7<=1 ], cost: 3 15: l2 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, Pdo^0'=0, conditional^0'=conditional^post_4, num^0'=1+num^0, status^0'=0, [ 1+i^0<=Pdolen^0 && 1<=DName^post_9 && 2<=conditional^post_7 && 2<=conditional^post_4 ], cost: 4 11: l7 -> l2 : IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, i^0'=i^post_10, status^0'=0, [], cost: 2 Accelerating simple loops of location 2. Simplified some of the simple loops (and removed duplicate rules). Accelerating the following rules: 14: l2 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, conditional^0'=conditional^post_7, i^0'=1+i^0, status^0'=1, [ 1+i^0<=Pdolen^0 && 1<=DName^post_9 && conditional^post_7<=1 ], cost: 3 15: l2 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, Pdo^0'=0, conditional^0'=conditional^post_4, num^0'=1+num^0, status^0'=0, [ 1+i^0<=Pdolen^0 && 1<=DName^post_9 && 2<=conditional^post_4 ], cost: 4 Accelerated rule 14 with backward acceleration, yielding the new rule 16. Accelerated rule 15 with non-termination, yielding the new rule 17. [accelerate] Nesting with 1 inner and 1 outer candidates Removing the simple loops: 14 15. Accelerated all simple loops using metering functions (where possible): Start location: l7 16: l2 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, conditional^0'=conditional^post_7, i^0'=Pdolen^0, status^0'=1, [ 1<=DName^post_9 && conditional^post_7<=1 && -i^0+Pdolen^0>=1 ], cost: -3*i^0+3*Pdolen^0 17: l2 -> [8] : [ 1+i^0<=Pdolen^0 && 1<=DName^post_9 && 2<=conditional^post_4 ], cost: NONTERM 11: l7 -> l2 : IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, i^0'=i^post_10, status^0'=0, [], cost: 2 Chained accelerated rules (with incoming rules): Start location: l7 11: l7 -> l2 : IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, i^0'=i^post_10, status^0'=0, [], cost: 2 18: l7 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, conditional^0'=conditional^post_7, i^0'=Pdolen^post_10, status^0'=1, [ 1<=DName^post_9 && conditional^post_7<=1 && -i^post_10+Pdolen^post_10>=1 ], cost: 2-3*i^post_10+3*Pdolen^post_10 19: l7 -> [8] : [], cost: NONTERM Removed unreachable locations (and leaf rules with constant cost): Start location: l7 18: l7 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, conditional^0'=conditional^post_7, i^0'=Pdolen^post_10, status^0'=1, [ 1<=DName^post_9 && conditional^post_7<=1 && -i^post_10+Pdolen^post_10>=1 ], cost: 2-3*i^post_10+3*Pdolen^post_10 19: l7 -> [8] : [], cost: NONTERM ### Computing asymptotic complexity ### Fully simplified ITS problem Start location: l7 18: l7 -> l2 : DName^0'=DName^post_9, IoCreateDevice^0'=0, PPBlockInits^0'=1, PPBunlockInits^0'=0, Pdolen^0'=Pdolen^post_10, conditional^0'=conditional^post_7, i^0'=Pdolen^post_10, status^0'=1, [ 1<=DName^post_9 && conditional^post_7<=1 && -i^post_10+Pdolen^post_10>=1 ], cost: 2-3*i^post_10+3*Pdolen^post_10 19: l7 -> [8] : [], cost: NONTERM Computing asymptotic complexity for rule 19 Guard is satisfiable, yielding nontermination Resulting cost NONTERM has complexity: Nonterm Found new complexity Nonterm. Obtained the following overall complexity (w.r.t. the length of the input n): Complexity: Nonterm Cpx degree: Nonterm Solved cost: NONTERM Rule cost: NONTERM Rule guard: [] NO