11.13/4.59 YES 14.10/5.37 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 14.10/5.37 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 14.10/5.37 14.10/5.37 14.10/5.37 H-Termination with start terms of the given HASKELL could be proven: 14.10/5.37 14.10/5.37 (0) HASKELL 14.10/5.37 (1) LR [EQUIVALENT, 0 ms] 14.10/5.37 (2) HASKELL 14.10/5.37 (3) CR [EQUIVALENT, 0 ms] 14.10/5.37 (4) HASKELL 14.10/5.37 (5) IFR [EQUIVALENT, 0 ms] 14.10/5.37 (6) HASKELL 14.10/5.37 (7) BR [EQUIVALENT, 0 ms] 14.10/5.37 (8) HASKELL 14.10/5.37 (9) COR [EQUIVALENT, 0 ms] 14.10/5.37 (10) HASKELL 14.10/5.37 (11) LetRed [EQUIVALENT, 0 ms] 14.10/5.37 (12) HASKELL 14.10/5.37 (13) NumRed [SOUND, 0 ms] 14.10/5.37 (14) HASKELL 14.10/5.37 (15) Narrow [SOUND, 0 ms] 14.10/5.37 (16) QDP 14.10/5.37 (17) TransformationProof [EQUIVALENT, 0 ms] 14.10/5.37 (18) QDP 14.10/5.37 (19) DependencyGraphProof [EQUIVALENT, 0 ms] 14.10/5.37 (20) QDP 14.10/5.37 (21) TransformationProof [EQUIVALENT, 0 ms] 14.10/5.37 (22) QDP 14.10/5.37 (23) DependencyGraphProof [EQUIVALENT, 0 ms] 14.10/5.37 (24) QDP 14.10/5.37 (25) UsableRulesProof [EQUIVALENT, 0 ms] 14.10/5.37 (26) QDP 14.10/5.37 (27) QReductionProof [EQUIVALENT, 0 ms] 14.10/5.37 (28) QDP 14.10/5.37 (29) QDPSizeChangeProof [EQUIVALENT, 0 ms] 14.10/5.37 (30) YES 14.10/5.37 14.10/5.37 14.10/5.37 ---------------------------------------- 14.10/5.37 14.10/5.37 (0) 14.10/5.37 Obligation: 14.10/5.37 mainModule Main 14.10/5.37 module Maybe where { 14.10/5.37 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt 0 xs = ([],xs); 14.10/5.38 genericSplitAt _ [] = ([],[]); 14.10/5.38 genericSplitAt n (x : xs) | n > 0 = (x : xs',xs'') where { 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 xs' = (\(xs',_) ->xs') vv9; 14.10/5.38 xs'' = (\(_,xs'') ->xs'') vv9; 14.10/5.38 }; 14.10/5.38 genericSplitAt _ _ = error []; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (1) LR (EQUIVALENT) 14.10/5.38 Lambda Reductions: 14.10/5.38 The following Lambda expression 14.10/5.38 "\(_,xs'')->xs''" 14.10/5.38 is transformed to 14.10/5.38 "xs''0 (_,xs'') = xs''; 14.10/5.38 " 14.10/5.38 The following Lambda expression 14.10/5.38 "\(xs',_)->xs'" 14.10/5.38 is transformed to 14.10/5.38 "xs'0 (xs',_) = xs'; 14.10/5.38 " 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (2) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt 0 xs = ([],xs); 14.10/5.38 genericSplitAt _ [] = ([],[]); 14.10/5.38 genericSplitAt n (x : xs) | n > 0 = (x : xs',xs'') where { 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 xs''0 (_,xs'') = xs''; 14.10/5.38 xs'0 (xs',_) = xs'; 14.10/5.38 }; 14.10/5.38 genericSplitAt _ _ = error []; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (3) CR (EQUIVALENT) 14.10/5.38 Case Reductions: 14.10/5.38 The following Case expression 14.10/5.38 "case compare x y of { 14.10/5.38 EQ -> o; 14.10/5.38 LT -> LT; 14.10/5.38 GT -> GT} 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "primCompAux0 o EQ = o; 14.10/5.38 primCompAux0 o LT = LT; 14.10/5.38 primCompAux0 o GT = GT; 14.10/5.38 " 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (4) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt 0 xs = ([],xs); 14.10/5.38 genericSplitAt _ [] = ([],[]); 14.10/5.38 genericSplitAt n (x : xs) | n > 0 = (x : xs',xs'') where { 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 xs''0 (_,xs'') = xs''; 14.10/5.38 xs'0 (xs',_) = xs'; 14.10/5.38 }; 14.10/5.38 genericSplitAt _ _ = error []; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (5) IFR (EQUIVALENT) 14.10/5.38 If Reductions: 14.10/5.38 The following If expression 14.10/5.38 "if primGEqNatS x y then Succ (primDivNatS (primMinusNatS x y) (Succ y)) else Zero" 14.10/5.38 is transformed to 14.10/5.38 "primDivNatS0 x y True = Succ (primDivNatS (primMinusNatS x y) (Succ y)); 14.10/5.38 primDivNatS0 x y False = Zero; 14.10/5.38 " 14.10/5.38 The following If expression 14.10/5.38 "if primGEqNatS x y then primModNatS (primMinusNatS x y) (Succ y) else Succ x" 14.10/5.38 is transformed to 14.10/5.38 "primModNatS0 x y True = primModNatS (primMinusNatS x y) (Succ y); 14.10/5.38 primModNatS0 x y False = Succ x; 14.10/5.38 " 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (6) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral b => b -> [a] -> ([a],[a]); 14.10/5.38 genericSplitAt 0 xs = ([],xs); 14.10/5.38 genericSplitAt _ [] = ([],[]); 14.10/5.38 genericSplitAt n (x : xs) | n > 0 = (x : xs',xs'') where { 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 xs''0 (_,xs'') = xs''; 14.10/5.38 xs'0 (xs',_) = xs'; 14.10/5.38 }; 14.10/5.38 genericSplitAt _ _ = error []; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (7) BR (EQUIVALENT) 14.10/5.38 Replaced joker patterns by fresh variables and removed binding patterns. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (8) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt 0 xs = ([],xs); 14.10/5.38 genericSplitAt zy [] = ([],[]); 14.10/5.38 genericSplitAt n (x : xs) | n > 0 = (x : xs',xs'') where { 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 xs''0 (zz,xs'') = xs''; 14.10/5.38 xs'0 (xs',vuu) = xs'; 14.10/5.38 }; 14.10/5.38 genericSplitAt vuv vuw = error []; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (9) COR (EQUIVALENT) 14.10/5.38 Cond Reductions: 14.10/5.38 The following Function with conditions 14.10/5.38 "compare x y|x == yEQ|x <= yLT|otherwiseGT; 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "compare x y = compare3 x y; 14.10/5.38 " 14.10/5.38 "compare0 x y True = GT; 14.10/5.38 " 14.10/5.38 "compare1 x y True = LT; 14.10/5.38 compare1 x y False = compare0 x y otherwise; 14.10/5.38 " 14.10/5.38 "compare2 x y True = EQ; 14.10/5.38 compare2 x y False = compare1 x y (x <= y); 14.10/5.38 " 14.10/5.38 "compare3 x y = compare2 x y (x == y); 14.10/5.38 " 14.10/5.38 The following Function with conditions 14.10/5.38 "gcd' x 0 = x; 14.10/5.38 gcd' x y = gcd' y (x `rem` y); 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "gcd' x vux = gcd'2 x vux; 14.10/5.38 gcd' x y = gcd'0 x y; 14.10/5.38 " 14.10/5.38 "gcd'0 x y = gcd' y (x `rem` y); 14.10/5.38 " 14.10/5.38 "gcd'1 True x vux = x; 14.10/5.38 gcd'1 vuy vuz vvu = gcd'0 vuz vvu; 14.10/5.38 " 14.10/5.38 "gcd'2 x vux = gcd'1 (vux == 0) x vux; 14.10/5.38 gcd'2 vvv vvw = gcd'0 vvv vvw; 14.10/5.38 " 14.10/5.38 The following Function with conditions 14.10/5.38 "gcd 0 0 = error []; 14.10/5.38 gcd x y = gcd' (abs x) (abs y) where { 14.10/5.38 gcd' x 0 = x; 14.10/5.38 gcd' x y = gcd' y (x `rem` y); 14.10/5.38 } 14.10/5.38 ; 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "gcd vvx vvy = gcd3 vvx vvy; 14.10/5.38 gcd x y = gcd0 x y; 14.10/5.38 " 14.10/5.38 "gcd0 x y = gcd' (abs x) (abs y) where { 14.10/5.38 gcd' x vux = gcd'2 x vux; 14.10/5.38 gcd' x y = gcd'0 x y; 14.10/5.38 ; 14.10/5.38 gcd'0 x y = gcd' y (x `rem` y); 14.10/5.38 ; 14.10/5.38 gcd'1 True x vux = x; 14.10/5.38 gcd'1 vuy vuz vvu = gcd'0 vuz vvu; 14.10/5.38 ; 14.10/5.38 gcd'2 x vux = gcd'1 (vux == 0) x vux; 14.10/5.38 gcd'2 vvv vvw = gcd'0 vvv vvw; 14.10/5.38 } 14.10/5.38 ; 14.10/5.38 " 14.10/5.38 "gcd1 True vvx vvy = error []; 14.10/5.38 gcd1 vvz vwu vwv = gcd0 vwu vwv; 14.10/5.38 " 14.10/5.38 "gcd2 True vvx vvy = gcd1 (vvy == 0) vvx vvy; 14.10/5.38 gcd2 vww vwx vwy = gcd0 vwx vwy; 14.10/5.38 " 14.10/5.38 "gcd3 vvx vvy = gcd2 (vvx == 0) vvx vvy; 14.10/5.38 gcd3 vwz vxu = gcd0 vwz vxu; 14.10/5.38 " 14.10/5.38 The following Function with conditions 14.10/5.38 "reduce x y|y == 0error []|otherwisex `quot` d :% (y `quot` d) where { 14.10/5.38 d = gcd x y; 14.10/5.38 } 14.10/5.38 ; 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "reduce x y = reduce2 x y; 14.10/5.38 " 14.10/5.38 "reduce2 x y = reduce1 x y (y == 0) where { 14.10/5.38 d = gcd x y; 14.10/5.38 ; 14.10/5.38 reduce0 x y True = x `quot` d :% (y `quot` d); 14.10/5.38 ; 14.10/5.38 reduce1 x y True = error []; 14.10/5.38 reduce1 x y False = reduce0 x y otherwise; 14.10/5.38 } 14.10/5.38 ; 14.10/5.38 " 14.10/5.38 The following Function with conditions 14.10/5.38 "absReal x|x >= 0x|otherwise`negate` x; 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "absReal x = absReal2 x; 14.10/5.38 " 14.10/5.38 "absReal0 x True = `negate` x; 14.10/5.38 " 14.10/5.38 "absReal1 x True = x; 14.10/5.38 absReal1 x False = absReal0 x otherwise; 14.10/5.38 " 14.10/5.38 "absReal2 x = absReal1 x (x >= 0); 14.10/5.38 " 14.10/5.38 The following Function with conditions 14.10/5.38 "undefined |Falseundefined; 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "undefined = undefined1; 14.10/5.38 " 14.10/5.38 "undefined0 True = undefined; 14.10/5.38 " 14.10/5.38 "undefined1 = undefined0 False; 14.10/5.38 " 14.10/5.38 The following Function with conditions 14.10/5.38 "genericSplitAt 0 xs = ([],xs); 14.10/5.38 genericSplitAt zy [] = ([],[]); 14.10/5.38 genericSplitAt n (x : xs)|n > 0(x : xs',xs'') where { 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 ; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 ; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 ; 14.10/5.38 xs''0 (zz,xs'') = xs''; 14.10/5.38 ; 14.10/5.38 xs'0 (xs',vuu) = xs'; 14.10/5.38 } 14.10/5.38 ; 14.10/5.38 genericSplitAt vuv vuw = error []; 14.10/5.38 " 14.10/5.38 is transformed to 14.10/5.38 "genericSplitAt vyv xs = genericSplitAt5 vyv xs; 14.10/5.38 genericSplitAt zy [] = genericSplitAt3 zy []; 14.10/5.38 genericSplitAt n (x : xs) = genericSplitAt2 n (x : xs); 14.10/5.38 genericSplitAt vuv vuw = genericSplitAt0 vuv vuw; 14.10/5.38 " 14.10/5.38 "genericSplitAt0 vuv vuw = error []; 14.10/5.38 " 14.10/5.38 "genericSplitAt2 n (x : xs) = genericSplitAt1 n x xs (n > 0) where { 14.10/5.38 genericSplitAt1 n x xs True = (x : xs',xs''); 14.10/5.38 genericSplitAt1 n x xs False = genericSplitAt0 n (x : xs); 14.10/5.38 ; 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 ; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 ; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 ; 14.10/5.38 xs''0 (zz,xs'') = xs''; 14.10/5.38 ; 14.10/5.38 xs'0 (xs',vuu) = xs'; 14.10/5.38 } 14.10/5.38 ; 14.10/5.38 genericSplitAt2 vxw vxx = genericSplitAt0 vxw vxx; 14.10/5.38 " 14.10/5.38 "genericSplitAt3 zy [] = ([],[]); 14.10/5.38 genericSplitAt3 vxz vyu = genericSplitAt2 vxz vyu; 14.10/5.38 " 14.10/5.38 "genericSplitAt4 True vyv xs = ([],xs); 14.10/5.38 genericSplitAt4 vyw vyx vyy = genericSplitAt3 vyx vyy; 14.10/5.38 " 14.10/5.38 "genericSplitAt5 vyv xs = genericSplitAt4 (vyv == 0) vyv xs; 14.10/5.38 genericSplitAt5 vyz vzu = genericSplitAt3 vyz vzu; 14.10/5.38 " 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (10) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt vyv xs = genericSplitAt5 vyv xs; 14.10/5.38 genericSplitAt zy [] = genericSplitAt3 zy []; 14.10/5.38 genericSplitAt n (x : xs) = genericSplitAt2 n (x : xs); 14.10/5.38 genericSplitAt vuv vuw = genericSplitAt0 vuv vuw; 14.10/5.38 14.10/5.38 genericSplitAt0 vuv vuw = error []; 14.10/5.38 14.10/5.38 genericSplitAt2 n (x : xs) = genericSplitAt1 n x xs (n > 0) where { 14.10/5.38 genericSplitAt1 n x xs True = (x : xs',xs''); 14.10/5.38 genericSplitAt1 n x xs False = genericSplitAt0 n (x : xs); 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 xs''0 (zz,xs'') = xs''; 14.10/5.38 xs'0 (xs',vuu) = xs'; 14.10/5.38 }; 14.10/5.38 genericSplitAt2 vxw vxx = genericSplitAt0 vxw vxx; 14.10/5.38 14.10/5.38 genericSplitAt3 zy [] = ([],[]); 14.10/5.38 genericSplitAt3 vxz vyu = genericSplitAt2 vxz vyu; 14.10/5.38 14.10/5.38 genericSplitAt4 True vyv xs = ([],xs); 14.10/5.38 genericSplitAt4 vyw vyx vyy = genericSplitAt3 vyx vyy; 14.10/5.38 14.10/5.38 genericSplitAt5 vyv xs = genericSplitAt4 (vyv == 0) vyv xs; 14.10/5.38 genericSplitAt5 vyz vzu = genericSplitAt3 vyz vzu; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (11) LetRed (EQUIVALENT) 14.10/5.38 Let/Where Reductions: 14.10/5.38 The bindings of the following Let/Where expression 14.10/5.38 "gcd' (abs x) (abs y) where { 14.10/5.38 gcd' x vux = gcd'2 x vux; 14.10/5.38 gcd' x y = gcd'0 x y; 14.10/5.38 ; 14.10/5.38 gcd'0 x y = gcd' y (x `rem` y); 14.10/5.38 ; 14.10/5.38 gcd'1 True x vux = x; 14.10/5.38 gcd'1 vuy vuz vvu = gcd'0 vuz vvu; 14.10/5.38 ; 14.10/5.38 gcd'2 x vux = gcd'1 (vux == 0) x vux; 14.10/5.38 gcd'2 vvv vvw = gcd'0 vvv vvw; 14.10/5.38 } 14.10/5.38 " 14.10/5.38 are unpacked to the following functions on top level 14.10/5.38 "gcd0Gcd'1 True x vux = x; 14.10/5.38 gcd0Gcd'1 vuy vuz vvu = gcd0Gcd'0 vuz vvu; 14.10/5.38 " 14.10/5.38 "gcd0Gcd'2 x vux = gcd0Gcd'1 (vux == 0) x vux; 14.10/5.38 gcd0Gcd'2 vvv vvw = gcd0Gcd'0 vvv vvw; 14.10/5.38 " 14.10/5.38 "gcd0Gcd' x vux = gcd0Gcd'2 x vux; 14.10/5.38 gcd0Gcd' x y = gcd0Gcd'0 x y; 14.10/5.38 " 14.10/5.38 "gcd0Gcd'0 x y = gcd0Gcd' y (x `rem` y); 14.10/5.38 " 14.10/5.38 The bindings of the following Let/Where expression 14.10/5.38 "reduce1 x y (y == 0) where { 14.10/5.38 d = gcd x y; 14.10/5.38 ; 14.10/5.38 reduce0 x y True = x `quot` d :% (y `quot` d); 14.10/5.38 ; 14.10/5.38 reduce1 x y True = error []; 14.10/5.38 reduce1 x y False = reduce0 x y otherwise; 14.10/5.38 } 14.10/5.38 " 14.10/5.38 are unpacked to the following functions on top level 14.10/5.38 "reduce2D vzv vzw = gcd vzv vzw; 14.10/5.38 " 14.10/5.38 "reduce2Reduce1 vzv vzw x y True = error []; 14.10/5.38 reduce2Reduce1 vzv vzw x y False = reduce2Reduce0 vzv vzw x y otherwise; 14.10/5.38 " 14.10/5.38 "reduce2Reduce0 vzv vzw x y True = x `quot` reduce2D vzv vzw :% (y `quot` reduce2D vzv vzw); 14.10/5.38 " 14.10/5.38 The bindings of the following Let/Where expression 14.10/5.38 "genericSplitAt1 n x xs (n > 0) where { 14.10/5.38 genericSplitAt1 n x xs True = (x : xs',xs''); 14.10/5.38 genericSplitAt1 n x xs False = genericSplitAt0 n (x : xs); 14.10/5.38 ; 14.10/5.38 vv9 = genericSplitAt (n - 1) xs; 14.10/5.38 ; 14.10/5.38 xs' = xs'0 vv9; 14.10/5.38 ; 14.10/5.38 xs'' = xs''0 vv9; 14.10/5.38 ; 14.10/5.38 xs''0 (zz,xs'') = xs''; 14.10/5.38 ; 14.10/5.38 xs'0 (xs',vuu) = xs'; 14.10/5.38 } 14.10/5.38 " 14.10/5.38 are unpacked to the following functions on top level 14.10/5.38 "genericSplitAt2Vv9 vzx vzy = genericSplitAt (vzx - 1) vzy; 14.10/5.38 " 14.10/5.38 "genericSplitAt2Xs' vzx vzy = genericSplitAt2Xs'0 vzx vzy (genericSplitAt2Vv9 vzx vzy); 14.10/5.38 " 14.10/5.38 "genericSplitAt2Xs'' vzx vzy = genericSplitAt2Xs''0 vzx vzy (genericSplitAt2Vv9 vzx vzy); 14.10/5.38 " 14.10/5.38 "genericSplitAt2GenericSplitAt1 vzx vzy n x xs True = (x : genericSplitAt2Xs' vzx vzy,genericSplitAt2Xs'' vzx vzy); 14.10/5.38 genericSplitAt2GenericSplitAt1 vzx vzy n x xs False = genericSplitAt0 n (x : xs); 14.10/5.38 " 14.10/5.38 "genericSplitAt2Xs''0 vzx vzy (zz,xs'') = xs''; 14.10/5.38 " 14.10/5.38 "genericSplitAt2Xs'0 vzx vzy (xs',vuu) = xs'; 14.10/5.38 " 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (12) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt vyv xs = genericSplitAt5 vyv xs; 14.10/5.38 genericSplitAt zy [] = genericSplitAt3 zy []; 14.10/5.38 genericSplitAt n (x : xs) = genericSplitAt2 n (x : xs); 14.10/5.38 genericSplitAt vuv vuw = genericSplitAt0 vuv vuw; 14.10/5.38 14.10/5.38 genericSplitAt0 vuv vuw = error []; 14.10/5.38 14.10/5.38 genericSplitAt2 n (x : xs) = genericSplitAt2GenericSplitAt1 n xs n x xs (n > 0); 14.10/5.38 genericSplitAt2 vxw vxx = genericSplitAt0 vxw vxx; 14.10/5.38 14.10/5.38 genericSplitAt2GenericSplitAt1 vzx vzy n x xs True = (x : genericSplitAt2Xs' vzx vzy,genericSplitAt2Xs'' vzx vzy); 14.10/5.38 genericSplitAt2GenericSplitAt1 vzx vzy n x xs False = genericSplitAt0 n (x : xs); 14.10/5.38 14.10/5.38 genericSplitAt2Vv9 vzx vzy = genericSplitAt (vzx - 1) vzy; 14.10/5.38 14.10/5.38 genericSplitAt2Xs' vzx vzy = genericSplitAt2Xs'0 vzx vzy (genericSplitAt2Vv9 vzx vzy); 14.10/5.38 14.10/5.38 genericSplitAt2Xs'' vzx vzy = genericSplitAt2Xs''0 vzx vzy (genericSplitAt2Vv9 vzx vzy); 14.10/5.38 14.10/5.38 genericSplitAt2Xs''0 vzx vzy (zz,xs'') = xs''; 14.10/5.38 14.10/5.38 genericSplitAt2Xs'0 vzx vzy (xs',vuu) = xs'; 14.10/5.38 14.10/5.38 genericSplitAt3 zy [] = ([],[]); 14.10/5.38 genericSplitAt3 vxz vyu = genericSplitAt2 vxz vyu; 14.10/5.38 14.10/5.38 genericSplitAt4 True vyv xs = ([],xs); 14.10/5.38 genericSplitAt4 vyw vyx vyy = genericSplitAt3 vyx vyy; 14.10/5.38 14.10/5.38 genericSplitAt5 vyv xs = genericSplitAt4 (vyv == 0) vyv xs; 14.10/5.38 genericSplitAt5 vyz vzu = genericSplitAt3 vyz vzu; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (13) NumRed (SOUND) 14.10/5.38 Num Reduction:All numbers are transformed to their corresponding representation with Succ, Pred and Zero. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (14) 14.10/5.38 Obligation: 14.10/5.38 mainModule Main 14.10/5.38 module Maybe where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 module List where { 14.10/5.38 import qualified Main; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 genericSplitAt :: Integral a => a -> [b] -> ([b],[b]); 14.10/5.38 genericSplitAt vyv xs = genericSplitAt5 vyv xs; 14.10/5.38 genericSplitAt zy [] = genericSplitAt3 zy []; 14.10/5.38 genericSplitAt n (x : xs) = genericSplitAt2 n (x : xs); 14.10/5.38 genericSplitAt vuv vuw = genericSplitAt0 vuv vuw; 14.10/5.38 14.10/5.38 genericSplitAt0 vuv vuw = error []; 14.10/5.38 14.10/5.38 genericSplitAt2 n (x : xs) = genericSplitAt2GenericSplitAt1 n xs n x xs (n > fromInt (Pos Zero)); 14.10/5.38 genericSplitAt2 vxw vxx = genericSplitAt0 vxw vxx; 14.10/5.38 14.10/5.38 genericSplitAt2GenericSplitAt1 vzx vzy n x xs True = (x : genericSplitAt2Xs' vzx vzy,genericSplitAt2Xs'' vzx vzy); 14.10/5.38 genericSplitAt2GenericSplitAt1 vzx vzy n x xs False = genericSplitAt0 n (x : xs); 14.10/5.38 14.10/5.38 genericSplitAt2Vv9 vzx vzy = genericSplitAt (vzx - fromInt (Pos (Succ Zero))) vzy; 14.10/5.38 14.10/5.38 genericSplitAt2Xs' vzx vzy = genericSplitAt2Xs'0 vzx vzy (genericSplitAt2Vv9 vzx vzy); 14.10/5.38 14.10/5.38 genericSplitAt2Xs'' vzx vzy = genericSplitAt2Xs''0 vzx vzy (genericSplitAt2Vv9 vzx vzy); 14.10/5.38 14.10/5.38 genericSplitAt2Xs''0 vzx vzy (zz,xs'') = xs''; 14.10/5.38 14.10/5.38 genericSplitAt2Xs'0 vzx vzy (xs',vuu) = xs'; 14.10/5.38 14.10/5.38 genericSplitAt3 zy [] = ([],[]); 14.10/5.38 genericSplitAt3 vxz vyu = genericSplitAt2 vxz vyu; 14.10/5.38 14.10/5.38 genericSplitAt4 True vyv xs = ([],xs); 14.10/5.38 genericSplitAt4 vyw vyx vyy = genericSplitAt3 vyx vyy; 14.10/5.38 14.10/5.38 genericSplitAt5 vyv xs = genericSplitAt4 (vyv == fromInt (Pos Zero)) vyv xs; 14.10/5.38 genericSplitAt5 vyz vzu = genericSplitAt3 vyz vzu; 14.10/5.38 14.10/5.38 } 14.10/5.38 module Main where { 14.10/5.38 import qualified List; 14.10/5.38 import qualified Maybe; 14.10/5.38 import qualified Prelude; 14.10/5.38 } 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (15) Narrow (SOUND) 14.10/5.38 Haskell To QDPs 14.10/5.38 14.10/5.38 digraph dp_graph { 14.10/5.38 node [outthreshold=100, inthreshold=100];1[label="List.genericSplitAt",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 14.10/5.38 3[label="List.genericSplitAt vzz3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 14.10/5.38 4[label="List.genericSplitAt vzz3 vzz4",fontsize=16,color="black",shape="triangle"];4 -> 5[label="",style="solid", color="black", weight=3]; 14.10/5.38 5[label="List.genericSplitAt5 vzz3 vzz4",fontsize=16,color="black",shape="box"];5 -> 6[label="",style="solid", color="black", weight=3]; 14.10/5.38 6[label="List.genericSplitAt4 (vzz3 == fromInt (Pos Zero)) vzz3 vzz4",fontsize=16,color="black",shape="box"];6 -> 7[label="",style="solid", color="black", weight=3]; 14.10/5.38 7[label="List.genericSplitAt4 (primEqInt vzz3 (fromInt (Pos Zero))) vzz3 vzz4",fontsize=16,color="burlywood",shape="box"];78[label="vzz3/Pos vzz30",fontsize=10,color="white",style="solid",shape="box"];7 -> 78[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 78 -> 8[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 79[label="vzz3/Neg vzz30",fontsize=10,color="white",style="solid",shape="box"];7 -> 79[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 79 -> 9[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 8[label="List.genericSplitAt4 (primEqInt (Pos vzz30) (fromInt (Pos Zero))) (Pos vzz30) vzz4",fontsize=16,color="burlywood",shape="box"];80[label="vzz30/Succ vzz300",fontsize=10,color="white",style="solid",shape="box"];8 -> 80[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 80 -> 10[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 81[label="vzz30/Zero",fontsize=10,color="white",style="solid",shape="box"];8 -> 81[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 81 -> 11[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 9[label="List.genericSplitAt4 (primEqInt (Neg vzz30) (fromInt (Pos Zero))) (Neg vzz30) vzz4",fontsize=16,color="burlywood",shape="box"];82[label="vzz30/Succ vzz300",fontsize=10,color="white",style="solid",shape="box"];9 -> 82[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 82 -> 12[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 83[label="vzz30/Zero",fontsize=10,color="white",style="solid",shape="box"];9 -> 83[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 83 -> 13[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 10[label="List.genericSplitAt4 (primEqInt (Pos (Succ vzz300)) (fromInt (Pos Zero))) (Pos (Succ vzz300)) vzz4",fontsize=16,color="black",shape="box"];10 -> 14[label="",style="solid", color="black", weight=3]; 14.10/5.38 11[label="List.genericSplitAt4 (primEqInt (Pos Zero) (fromInt (Pos Zero))) (Pos Zero) vzz4",fontsize=16,color="black",shape="box"];11 -> 15[label="",style="solid", color="black", weight=3]; 14.10/5.38 12[label="List.genericSplitAt4 (primEqInt (Neg (Succ vzz300)) (fromInt (Pos Zero))) (Neg (Succ vzz300)) vzz4",fontsize=16,color="black",shape="box"];12 -> 16[label="",style="solid", color="black", weight=3]; 14.10/5.38 13[label="List.genericSplitAt4 (primEqInt (Neg Zero) (fromInt (Pos Zero))) (Neg Zero) vzz4",fontsize=16,color="black",shape="box"];13 -> 17[label="",style="solid", color="black", weight=3]; 14.10/5.38 14[label="List.genericSplitAt4 (primEqInt (Pos (Succ vzz300)) (Pos Zero)) (Pos (Succ vzz300)) vzz4",fontsize=16,color="black",shape="box"];14 -> 18[label="",style="solid", color="black", weight=3]; 14.10/5.38 15[label="List.genericSplitAt4 (primEqInt (Pos Zero) (Pos Zero)) (Pos Zero) vzz4",fontsize=16,color="black",shape="box"];15 -> 19[label="",style="solid", color="black", weight=3]; 14.10/5.38 16[label="List.genericSplitAt4 (primEqInt (Neg (Succ vzz300)) (Pos Zero)) (Neg (Succ vzz300)) vzz4",fontsize=16,color="black",shape="box"];16 -> 20[label="",style="solid", color="black", weight=3]; 14.10/5.38 17[label="List.genericSplitAt4 (primEqInt (Neg Zero) (Pos Zero)) (Neg Zero) vzz4",fontsize=16,color="black",shape="box"];17 -> 21[label="",style="solid", color="black", weight=3]; 14.10/5.38 18[label="List.genericSplitAt4 False (Pos (Succ vzz300)) vzz4",fontsize=16,color="black",shape="box"];18 -> 22[label="",style="solid", color="black", weight=3]; 14.10/5.38 19[label="List.genericSplitAt4 True (Pos Zero) vzz4",fontsize=16,color="black",shape="box"];19 -> 23[label="",style="solid", color="black", weight=3]; 14.10/5.38 20[label="List.genericSplitAt4 False (Neg (Succ vzz300)) vzz4",fontsize=16,color="black",shape="box"];20 -> 24[label="",style="solid", color="black", weight=3]; 14.10/5.38 21[label="List.genericSplitAt4 True (Neg Zero) vzz4",fontsize=16,color="black",shape="box"];21 -> 25[label="",style="solid", color="black", weight=3]; 14.10/5.38 22[label="List.genericSplitAt3 (Pos (Succ vzz300)) vzz4",fontsize=16,color="burlywood",shape="box"];84[label="vzz4/vzz40 : vzz41",fontsize=10,color="white",style="solid",shape="box"];22 -> 84[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 84 -> 26[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 85[label="vzz4/[]",fontsize=10,color="white",style="solid",shape="box"];22 -> 85[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 85 -> 27[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 23[label="([],vzz4)",fontsize=16,color="green",shape="box"];24[label="List.genericSplitAt3 (Neg (Succ vzz300)) vzz4",fontsize=16,color="burlywood",shape="box"];86[label="vzz4/vzz40 : vzz41",fontsize=10,color="white",style="solid",shape="box"];24 -> 86[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 86 -> 28[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 87[label="vzz4/[]",fontsize=10,color="white",style="solid",shape="box"];24 -> 87[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 87 -> 29[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 25[label="([],vzz4)",fontsize=16,color="green",shape="box"];26[label="List.genericSplitAt3 (Pos (Succ vzz300)) (vzz40 : vzz41)",fontsize=16,color="black",shape="box"];26 -> 30[label="",style="solid", color="black", weight=3]; 14.10/5.38 27[label="List.genericSplitAt3 (Pos (Succ vzz300)) []",fontsize=16,color="black",shape="box"];27 -> 31[label="",style="solid", color="black", weight=3]; 14.10/5.38 28[label="List.genericSplitAt3 (Neg (Succ vzz300)) (vzz40 : vzz41)",fontsize=16,color="black",shape="box"];28 -> 32[label="",style="solid", color="black", weight=3]; 14.10/5.38 29[label="List.genericSplitAt3 (Neg (Succ vzz300)) []",fontsize=16,color="black",shape="box"];29 -> 33[label="",style="solid", color="black", weight=3]; 14.10/5.38 30[label="List.genericSplitAt2 (Pos (Succ vzz300)) (vzz40 : vzz41)",fontsize=16,color="black",shape="box"];30 -> 34[label="",style="solid", color="black", weight=3]; 14.10/5.38 31[label="([],[])",fontsize=16,color="green",shape="box"];32[label="List.genericSplitAt2 (Neg (Succ vzz300)) (vzz40 : vzz41)",fontsize=16,color="black",shape="box"];32 -> 35[label="",style="solid", color="black", weight=3]; 14.10/5.38 33[label="([],[])",fontsize=16,color="green",shape="box"];34[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 (Pos (Succ vzz300) > fromInt (Pos Zero))",fontsize=16,color="black",shape="box"];34 -> 36[label="",style="solid", color="black", weight=3]; 14.10/5.38 35[label="List.genericSplitAt2GenericSplitAt1 (Neg (Succ vzz300)) vzz41 (Neg (Succ vzz300)) vzz40 vzz41 (Neg (Succ vzz300) > fromInt (Pos Zero))",fontsize=16,color="black",shape="box"];35 -> 37[label="",style="solid", color="black", weight=3]; 14.10/5.38 36[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 (compare (Pos (Succ vzz300)) (fromInt (Pos Zero)) == GT)",fontsize=16,color="black",shape="box"];36 -> 38[label="",style="solid", color="black", weight=3]; 14.10/5.38 37[label="List.genericSplitAt2GenericSplitAt1 (Neg (Succ vzz300)) vzz41 (Neg (Succ vzz300)) vzz40 vzz41 (compare (Neg (Succ vzz300)) (fromInt (Pos Zero)) == GT)",fontsize=16,color="black",shape="box"];37 -> 39[label="",style="solid", color="black", weight=3]; 14.10/5.38 38[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 (primCmpInt (Pos (Succ vzz300)) (fromInt (Pos Zero)) == GT)",fontsize=16,color="black",shape="box"];38 -> 40[label="",style="solid", color="black", weight=3]; 14.10/5.38 39[label="List.genericSplitAt2GenericSplitAt1 (Neg (Succ vzz300)) vzz41 (Neg (Succ vzz300)) vzz40 vzz41 (primCmpInt (Neg (Succ vzz300)) (fromInt (Pos Zero)) == GT)",fontsize=16,color="black",shape="box"];39 -> 41[label="",style="solid", color="black", weight=3]; 14.10/5.38 40[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 (primCmpInt (Pos (Succ vzz300)) (Pos Zero) == GT)",fontsize=16,color="black",shape="box"];40 -> 42[label="",style="solid", color="black", weight=3]; 14.10/5.38 41[label="List.genericSplitAt2GenericSplitAt1 (Neg (Succ vzz300)) vzz41 (Neg (Succ vzz300)) vzz40 vzz41 (primCmpInt (Neg (Succ vzz300)) (Pos Zero) == GT)",fontsize=16,color="black",shape="box"];41 -> 43[label="",style="solid", color="black", weight=3]; 14.10/5.38 42[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 (primCmpNat (Succ vzz300) Zero == GT)",fontsize=16,color="black",shape="box"];42 -> 44[label="",style="solid", color="black", weight=3]; 14.10/5.38 43[label="List.genericSplitAt2GenericSplitAt1 (Neg (Succ vzz300)) vzz41 (Neg (Succ vzz300)) vzz40 vzz41 (LT == GT)",fontsize=16,color="black",shape="box"];43 -> 45[label="",style="solid", color="black", weight=3]; 14.10/5.38 44[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 (GT == GT)",fontsize=16,color="black",shape="box"];44 -> 46[label="",style="solid", color="black", weight=3]; 14.10/5.38 45[label="List.genericSplitAt2GenericSplitAt1 (Neg (Succ vzz300)) vzz41 (Neg (Succ vzz300)) vzz40 vzz41 False",fontsize=16,color="black",shape="box"];45 -> 47[label="",style="solid", color="black", weight=3]; 14.10/5.38 46[label="List.genericSplitAt2GenericSplitAt1 (Pos (Succ vzz300)) vzz41 (Pos (Succ vzz300)) vzz40 vzz41 True",fontsize=16,color="black",shape="box"];46 -> 48[label="",style="solid", color="black", weight=3]; 14.10/5.38 47[label="List.genericSplitAt0 (Neg (Succ vzz300)) (vzz40 : vzz41)",fontsize=16,color="black",shape="box"];47 -> 49[label="",style="solid", color="black", weight=3]; 14.10/5.38 48[label="(vzz40 : List.genericSplitAt2Xs' (Pos (Succ vzz300)) vzz41,List.genericSplitAt2Xs'' (Pos (Succ vzz300)) vzz41)",fontsize=16,color="green",shape="box"];48 -> 50[label="",style="dashed", color="green", weight=3]; 14.10/5.38 48 -> 51[label="",style="dashed", color="green", weight=3]; 14.10/5.38 49[label="error []",fontsize=16,color="black",shape="box"];49 -> 52[label="",style="solid", color="black", weight=3]; 14.10/5.38 50[label="List.genericSplitAt2Xs' (Pos (Succ vzz300)) vzz41",fontsize=16,color="black",shape="box"];50 -> 53[label="",style="solid", color="black", weight=3]; 14.10/5.38 51[label="List.genericSplitAt2Xs'' (Pos (Succ vzz300)) vzz41",fontsize=16,color="black",shape="box"];51 -> 54[label="",style="solid", color="black", weight=3]; 14.10/5.38 52[label="error []",fontsize=16,color="red",shape="box"];53 -> 57[label="",style="dashed", color="red", weight=0]; 14.10/5.38 53[label="List.genericSplitAt2Xs'0 (Pos (Succ vzz300)) vzz41 (List.genericSplitAt2Vv9 (Pos (Succ vzz300)) vzz41)",fontsize=16,color="magenta"];53 -> 58[label="",style="dashed", color="magenta", weight=3]; 14.10/5.38 54 -> 62[label="",style="dashed", color="red", weight=0]; 14.10/5.38 54[label="List.genericSplitAt2Xs''0 (Pos (Succ vzz300)) vzz41 (List.genericSplitAt2Vv9 (Pos (Succ vzz300)) vzz41)",fontsize=16,color="magenta"];54 -> 63[label="",style="dashed", color="magenta", weight=3]; 14.10/5.38 58[label="List.genericSplitAt2Vv9 (Pos (Succ vzz300)) vzz41",fontsize=16,color="black",shape="triangle"];58 -> 60[label="",style="solid", color="black", weight=3]; 14.10/5.38 57[label="List.genericSplitAt2Xs'0 (Pos (Succ vzz300)) vzz41 vzz5",fontsize=16,color="burlywood",shape="triangle"];88[label="vzz5/(vzz50,vzz51)",fontsize=10,color="white",style="solid",shape="box"];57 -> 88[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 88 -> 61[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 63 -> 58[label="",style="dashed", color="red", weight=0]; 14.10/5.38 63[label="List.genericSplitAt2Vv9 (Pos (Succ vzz300)) vzz41",fontsize=16,color="magenta"];62[label="List.genericSplitAt2Xs''0 (Pos (Succ vzz300)) vzz41 vzz6",fontsize=16,color="burlywood",shape="triangle"];89[label="vzz6/(vzz60,vzz61)",fontsize=10,color="white",style="solid",shape="box"];62 -> 89[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 89 -> 65[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 60 -> 4[label="",style="dashed", color="red", weight=0]; 14.10/5.38 60[label="List.genericSplitAt (Pos (Succ vzz300) - fromInt (Pos (Succ Zero))) vzz41",fontsize=16,color="magenta"];60 -> 66[label="",style="dashed", color="magenta", weight=3]; 14.10/5.38 60 -> 67[label="",style="dashed", color="magenta", weight=3]; 14.10/5.38 61[label="List.genericSplitAt2Xs'0 (Pos (Succ vzz300)) vzz41 (vzz50,vzz51)",fontsize=16,color="black",shape="box"];61 -> 68[label="",style="solid", color="black", weight=3]; 14.10/5.38 65[label="List.genericSplitAt2Xs''0 (Pos (Succ vzz300)) vzz41 (vzz60,vzz61)",fontsize=16,color="black",shape="box"];65 -> 69[label="",style="solid", color="black", weight=3]; 14.10/5.38 66[label="vzz41",fontsize=16,color="green",shape="box"];67[label="Pos (Succ vzz300) - fromInt (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];67 -> 70[label="",style="solid", color="black", weight=3]; 14.10/5.38 68[label="vzz50",fontsize=16,color="green",shape="box"];69[label="vzz61",fontsize=16,color="green",shape="box"];70[label="primMinusInt (Pos (Succ vzz300)) (fromInt (Pos (Succ Zero)))",fontsize=16,color="black",shape="box"];70 -> 71[label="",style="solid", color="black", weight=3]; 14.10/5.38 71[label="primMinusInt (Pos (Succ vzz300)) (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];71 -> 72[label="",style="solid", color="black", weight=3]; 14.10/5.38 72[label="primMinusNat (Succ vzz300) (Succ Zero)",fontsize=16,color="black",shape="box"];72 -> 73[label="",style="solid", color="black", weight=3]; 14.10/5.38 73[label="primMinusNat vzz300 Zero",fontsize=16,color="burlywood",shape="box"];90[label="vzz300/Succ vzz3000",fontsize=10,color="white",style="solid",shape="box"];73 -> 90[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 90 -> 74[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 91[label="vzz300/Zero",fontsize=10,color="white",style="solid",shape="box"];73 -> 91[label="",style="solid", color="burlywood", weight=9]; 14.10/5.38 91 -> 75[label="",style="solid", color="burlywood", weight=3]; 14.10/5.38 74[label="primMinusNat (Succ vzz3000) Zero",fontsize=16,color="black",shape="box"];74 -> 76[label="",style="solid", color="black", weight=3]; 14.10/5.38 75[label="primMinusNat Zero Zero",fontsize=16,color="black",shape="box"];75 -> 77[label="",style="solid", color="black", weight=3]; 14.10/5.38 76[label="Pos (Succ vzz3000)",fontsize=16,color="green",shape="box"];77[label="Pos Zero",fontsize=16,color="green",shape="box"];} 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (16) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt2Vv9(vzz300, vzz41, ba) -> new_genericSplitAt(new_primMinusNat(vzz300), vzz41, ba) 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt(new_primMinusNat(vzz300), vzz41, ba) 14.10/5.38 14.10/5.38 The TRS R consists of the following rules: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(vzz3000)) -> Pos(Succ(vzz3000)) 14.10/5.38 new_primMinusNat(Zero) -> Pos(Zero) 14.10/5.38 14.10/5.38 The set Q consists of the following terms: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (17) TransformationProof (EQUIVALENT) 14.10/5.38 By narrowing [LPAR04] the rule new_genericSplitAt2Vv9(vzz300, vzz41, ba) -> new_genericSplitAt(new_primMinusNat(vzz300), vzz41, ba) at position [0] we obtained the following new rules [LPAR04]: 14.10/5.38 14.10/5.38 (new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2),new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2)) 14.10/5.38 (new_genericSplitAt2Vv9(Zero, y1, y2) -> new_genericSplitAt(Pos(Zero), y1, y2),new_genericSplitAt2Vv9(Zero, y1, y2) -> new_genericSplitAt(Pos(Zero), y1, y2)) 14.10/5.38 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (18) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt(new_primMinusNat(vzz300), vzz41, ba) 14.10/5.38 new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 new_genericSplitAt2Vv9(Zero, y1, y2) -> new_genericSplitAt(Pos(Zero), y1, y2) 14.10/5.38 14.10/5.38 The TRS R consists of the following rules: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(vzz3000)) -> Pos(Succ(vzz3000)) 14.10/5.38 new_primMinusNat(Zero) -> Pos(Zero) 14.10/5.38 14.10/5.38 The set Q consists of the following terms: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (19) DependencyGraphProof (EQUIVALENT) 14.10/5.38 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (20) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt(new_primMinusNat(vzz300), vzz41, ba) 14.10/5.38 14.10/5.38 The TRS R consists of the following rules: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(vzz3000)) -> Pos(Succ(vzz3000)) 14.10/5.38 new_primMinusNat(Zero) -> Pos(Zero) 14.10/5.38 14.10/5.38 The set Q consists of the following terms: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (21) TransformationProof (EQUIVALENT) 14.10/5.38 By narrowing [LPAR04] the rule new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt(new_primMinusNat(vzz300), vzz41, ba) at position [0] we obtained the following new rules [LPAR04]: 14.10/5.38 14.10/5.38 (new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3),new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3)) 14.10/5.38 (new_genericSplitAt(Pos(Succ(Zero)), :(y1, y2), y3) -> new_genericSplitAt(Pos(Zero), y2, y3),new_genericSplitAt(Pos(Succ(Zero)), :(y1, y2), y3) -> new_genericSplitAt(Pos(Zero), y2, y3)) 14.10/5.38 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (22) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3) 14.10/5.38 new_genericSplitAt(Pos(Succ(Zero)), :(y1, y2), y3) -> new_genericSplitAt(Pos(Zero), y2, y3) 14.10/5.38 14.10/5.38 The TRS R consists of the following rules: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(vzz3000)) -> Pos(Succ(vzz3000)) 14.10/5.38 new_primMinusNat(Zero) -> Pos(Zero) 14.10/5.38 14.10/5.38 The set Q consists of the following terms: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (23) DependencyGraphProof (EQUIVALENT) 14.10/5.38 The approximation of the Dependency Graph [LPAR04,FROCOS05,EDGSTAR] contains 1 SCC with 1 less node. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (24) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3) 14.10/5.38 14.10/5.38 The TRS R consists of the following rules: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(vzz3000)) -> Pos(Succ(vzz3000)) 14.10/5.38 new_primMinusNat(Zero) -> Pos(Zero) 14.10/5.38 14.10/5.38 The set Q consists of the following terms: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (25) UsableRulesProof (EQUIVALENT) 14.10/5.38 As all Q-normal forms are R-normal forms we are in the innermost case. Hence, by the usable rules processor [LPAR04] we can delete all non-usable rules [FROCOS05] from R. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (26) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3) 14.10/5.38 14.10/5.38 R is empty. 14.10/5.38 The set Q consists of the following terms: 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (27) QReductionProof (EQUIVALENT) 14.10/5.38 We deleted the following terms from Q as each root-symbol of these terms does neither occur in P nor in R.[THIEMANN]. 14.10/5.38 14.10/5.38 new_primMinusNat(Succ(x0)) 14.10/5.38 new_primMinusNat(Zero) 14.10/5.38 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (28) 14.10/5.38 Obligation: 14.10/5.38 Q DP problem: 14.10/5.38 The TRS P consists of the following rules: 14.10/5.38 14.10/5.38 new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3) 14.10/5.38 14.10/5.38 R is empty. 14.10/5.38 Q is empty. 14.10/5.38 We have to consider all minimal (P,Q,R)-chains. 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (29) QDPSizeChangeProof (EQUIVALENT) 14.10/5.38 By using the subterm criterion [SUBTERM_CRITERION] together with the size-change analysis [AAECC05] we have proven that there are no infinite chains for this DP problem. 14.10/5.38 14.10/5.38 From the DPs we obtained the following set of size-change graphs: 14.10/5.38 *new_genericSplitAt2Vv9(Succ(x0), y1, y2) -> new_genericSplitAt(Pos(Succ(x0)), y1, y2) 14.10/5.38 The graph contains the following edges 2 >= 2, 3 >= 3 14.10/5.38 14.10/5.38 14.10/5.38 *new_genericSplitAt(Pos(Succ(Succ(x0))), :(y1, y2), y3) -> new_genericSplitAt(Pos(Succ(x0)), y2, y3) 14.10/5.38 The graph contains the following edges 2 > 2, 3 >= 3 14.10/5.38 14.10/5.38 14.10/5.38 *new_genericSplitAt(Pos(Succ(vzz300)), :(vzz40, vzz41), ba) -> new_genericSplitAt2Vv9(vzz300, vzz41, ba) 14.10/5.38 The graph contains the following edges 1 > 1, 2 > 2, 3 >= 3 14.10/5.38 14.10/5.38 14.10/5.38 ---------------------------------------- 14.10/5.38 14.10/5.38 (30) 14.10/5.38 YES 14.22/5.42 EOF