8.24/3.73 YES 10.13/4.32 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 10.13/4.32 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 10.13/4.32 10.13/4.32 10.13/4.32 H-Termination with start terms of the given HASKELL could be proven: 10.13/4.32 10.13/4.32 (0) HASKELL 10.13/4.32 (1) BR [EQUIVALENT, 0 ms] 10.13/4.32 (2) HASKELL 10.13/4.32 (3) COR [EQUIVALENT, 0 ms] 10.13/4.32 (4) HASKELL 10.13/4.32 (5) Narrow [EQUIVALENT, 6 ms] 10.13/4.32 (6) YES 10.13/4.32 10.13/4.32 10.13/4.32 ---------------------------------------- 10.13/4.32 10.13/4.32 (0) 10.13/4.32 Obligation: 10.13/4.32 mainModule Main 10.13/4.32 module Main where { 10.13/4.32 import qualified Prelude; 10.13/4.32 data List a = Cons a (List a) | Nil ; 10.13/4.32 10.13/4.32 data MyBool = MyTrue | MyFalse ; 10.13/4.32 10.13/4.32 data MyInt = Pos Main.Nat | Neg Main.Nat ; 10.13/4.32 10.13/4.32 data Main.Nat = Succ Main.Nat | Zero ; 10.13/4.32 10.13/4.32 data Ordering = LT | EQ | GT ; 10.13/4.32 10.13/4.32 data Tup0 = Tup0 ; 10.13/4.32 10.13/4.32 data Main.WHNF a = WHNF a ; 10.13/4.32 10.13/4.32 compareMyInt :: MyInt -> MyInt -> Ordering; 10.13/4.32 compareMyInt = primCmpInt; 10.13/4.32 10.13/4.32 dsEm :: (a -> b) -> a -> b; 10.13/4.32 dsEm f x = Main.seq x (f x); 10.13/4.32 10.13/4.32 enforceWHNF :: Main.WHNF a -> b -> b; 10.13/4.32 enforceWHNF (Main.WHNF x) y = y; 10.13/4.32 10.13/4.32 enumFromToMyInt :: MyInt -> MyInt -> List MyInt; 10.13/4.32 enumFromToMyInt = numericEnumFromTo; 10.13/4.32 10.13/4.32 enumFromToTup0 :: Tup0 -> Tup0 -> List Tup0; 10.13/4.32 enumFromToTup0 x y = map toEnumTup0 (enumFromToMyInt (fromEnumTup0 x) (fromEnumTup0 y)); 10.13/4.32 10.13/4.32 esEsMyInt :: MyInt -> MyInt -> MyBool; 10.13/4.32 esEsMyInt = primEqInt; 10.13/4.32 10.13/4.32 esEsOrdering :: Ordering -> Ordering -> MyBool; 10.13/4.32 esEsOrdering LT LT = MyTrue; 10.13/4.32 esEsOrdering LT EQ = MyFalse; 10.13/4.32 esEsOrdering LT GT = MyFalse; 10.13/4.32 esEsOrdering EQ LT = MyFalse; 10.13/4.32 esEsOrdering EQ EQ = MyTrue; 10.13/4.32 esEsOrdering EQ GT = MyFalse; 10.13/4.32 esEsOrdering GT LT = MyFalse; 10.13/4.32 esEsOrdering GT EQ = MyFalse; 10.13/4.32 esEsOrdering GT GT = MyTrue; 10.13/4.32 10.13/4.32 flip :: (c -> a -> b) -> a -> c -> b; 10.13/4.32 flip f x y = f y x; 10.13/4.32 10.13/4.32 fromEnumTup0 :: Tup0 -> MyInt; 10.13/4.32 fromEnumTup0 Tup0 = Main.Pos Main.Zero; 10.13/4.32 10.13/4.32 fromIntMyInt :: MyInt -> MyInt; 10.13/4.32 fromIntMyInt x = x; 10.13/4.32 10.13/4.32 fsEsOrdering :: Ordering -> Ordering -> MyBool; 10.13/4.32 fsEsOrdering x y = not (esEsOrdering x y); 10.13/4.32 10.13/4.32 ltEsMyInt :: MyInt -> MyInt -> MyBool; 10.13/4.32 ltEsMyInt x y = fsEsOrdering (compareMyInt x y) GT; 10.13/4.32 10.13/4.32 map :: (b -> a) -> List b -> List a; 10.13/4.32 map f Nil = Nil; 10.13/4.32 map f (Cons x xs) = Cons (f x) (map f xs); 10.13/4.32 10.13/4.32 not :: MyBool -> MyBool; 10.13/4.32 not MyTrue = MyFalse; 10.13/4.32 not MyFalse = MyTrue; 10.13/4.32 10.13/4.32 numericEnumFrom n = Cons n (dsEm numericEnumFrom (psMyInt n (fromIntMyInt (Main.Pos (Main.Succ Main.Zero))))); 10.13/4.32 10.13/4.32 numericEnumFromTo n m = takeWhile (flip ltEsMyInt m) (numericEnumFrom n); 10.13/4.32 10.13/4.32 otherwise :: MyBool; 10.13/4.32 otherwise = MyTrue; 10.13/4.32 10.13/4.32 primCmpInt :: MyInt -> MyInt -> Ordering; 10.13/4.32 primCmpInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = EQ; 10.13/4.32 primCmpInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = EQ; 10.13/4.32 primCmpInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = EQ; 10.13/4.32 primCmpInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = EQ; 10.13/4.32 primCmpInt (Main.Pos x) (Main.Pos y) = primCmpNat x y; 10.13/4.32 primCmpInt (Main.Pos x) (Main.Neg y) = GT; 10.13/4.32 primCmpInt (Main.Neg x) (Main.Pos y) = LT; 10.13/4.32 primCmpInt (Main.Neg x) (Main.Neg y) = primCmpNat y x; 10.13/4.32 10.13/4.32 primCmpNat :: Main.Nat -> Main.Nat -> Ordering; 10.13/4.32 primCmpNat Main.Zero Main.Zero = EQ; 10.13/4.32 primCmpNat Main.Zero (Main.Succ y) = LT; 10.13/4.32 primCmpNat (Main.Succ x) Main.Zero = GT; 10.13/4.32 primCmpNat (Main.Succ x) (Main.Succ y) = primCmpNat x y; 10.13/4.32 10.13/4.32 primEqInt :: MyInt -> MyInt -> MyBool; 10.13/4.32 primEqInt (Main.Pos (Main.Succ x)) (Main.Pos (Main.Succ y)) = primEqNat x y; 10.13/4.32 primEqInt (Main.Neg (Main.Succ x)) (Main.Neg (Main.Succ y)) = primEqNat x y; 10.13/4.32 primEqInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.13/4.32 primEqInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.13/4.32 primEqInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.13/4.32 primEqInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.13/4.32 primEqInt vv vw = MyFalse; 10.13/4.32 10.13/4.32 primEqNat :: Main.Nat -> Main.Nat -> MyBool; 10.13/4.32 primEqNat Main.Zero Main.Zero = MyTrue; 10.13/4.32 primEqNat Main.Zero (Main.Succ y) = MyFalse; 10.13/4.32 primEqNat (Main.Succ x) Main.Zero = MyFalse; 10.13/4.32 primEqNat (Main.Succ x) (Main.Succ y) = primEqNat x y; 10.13/4.32 10.13/4.32 primMinusNat :: Main.Nat -> Main.Nat -> MyInt; 10.13/4.32 primMinusNat Main.Zero Main.Zero = Main.Pos Main.Zero; 10.13/4.32 primMinusNat Main.Zero (Main.Succ y) = Main.Neg (Main.Succ y); 10.13/4.32 primMinusNat (Main.Succ x) Main.Zero = Main.Pos (Main.Succ x); 10.13/4.32 primMinusNat (Main.Succ x) (Main.Succ y) = primMinusNat x y; 10.13/4.32 10.13/4.32 primPlusInt :: MyInt -> MyInt -> MyInt; 10.13/4.32 primPlusInt (Main.Pos x) (Main.Neg y) = primMinusNat x y; 10.13/4.32 primPlusInt (Main.Neg x) (Main.Pos y) = primMinusNat y x; 10.13/4.32 primPlusInt (Main.Neg x) (Main.Neg y) = Main.Neg (primPlusNat x y); 10.13/4.32 primPlusInt (Main.Pos x) (Main.Pos y) = Main.Pos (primPlusNat x y); 10.13/4.32 10.13/4.32 primPlusNat :: Main.Nat -> Main.Nat -> Main.Nat; 10.13/4.32 primPlusNat Main.Zero Main.Zero = Main.Zero; 10.13/4.32 primPlusNat Main.Zero (Main.Succ y) = Main.Succ y; 10.13/4.32 primPlusNat (Main.Succ x) Main.Zero = Main.Succ x; 10.13/4.32 primPlusNat (Main.Succ x) (Main.Succ y) = Main.Succ (Main.Succ (primPlusNat x y)); 10.13/4.32 10.13/4.32 psMyInt :: MyInt -> MyInt -> MyInt; 10.13/4.32 psMyInt = primPlusInt; 10.13/4.32 10.13/4.32 seq :: a -> b -> b; 10.13/4.32 seq x y = Main.enforceWHNF (Main.WHNF x) y; 10.13/4.32 10.13/4.32 takeWhile :: (a -> MyBool) -> List a -> List a; 10.13/4.32 takeWhile p Nil = takeWhile3 p Nil; 10.13/4.32 takeWhile p (Cons x xs) = takeWhile2 p (Cons x xs); 10.13/4.32 10.13/4.32 takeWhile0 p x xs MyTrue = Nil; 10.13/4.32 10.13/4.32 takeWhile1 p x xs MyTrue = Cons x (takeWhile p xs); 10.13/4.32 takeWhile1 p x xs MyFalse = takeWhile0 p x xs otherwise; 10.13/4.32 10.13/4.32 takeWhile2 p (Cons x xs) = takeWhile1 p x xs (p x); 10.13/4.32 10.13/4.32 takeWhile3 p Nil = Nil; 10.13/4.32 takeWhile3 wu wv = takeWhile2 wu wv; 10.13/4.32 10.13/4.32 toEnum0 MyTrue vx = Tup0; 10.13/4.32 10.13/4.32 toEnum1 vx = toEnum0 (esEsMyInt vx (Main.Pos Main.Zero)) vx; 10.13/4.32 10.13/4.32 toEnumTup0 :: MyInt -> Tup0; 10.13/4.32 toEnumTup0 vx = toEnum1 vx; 10.13/4.32 10.13/4.32 } 10.13/4.32 10.13/4.32 ---------------------------------------- 10.13/4.32 10.13/4.32 (1) BR (EQUIVALENT) 10.13/4.32 Replaced joker patterns by fresh variables and removed binding patterns. 10.13/4.32 ---------------------------------------- 10.13/4.32 10.13/4.32 (2) 10.13/4.32 Obligation: 10.13/4.32 mainModule Main 10.13/4.32 module Main where { 10.13/4.32 import qualified Prelude; 10.13/4.32 data List a = Cons a (List a) | Nil ; 10.13/4.32 10.13/4.32 data MyBool = MyTrue | MyFalse ; 10.13/4.32 10.13/4.32 data MyInt = Pos Main.Nat | Neg Main.Nat ; 10.13/4.32 10.13/4.32 data Main.Nat = Succ Main.Nat | Zero ; 10.13/4.32 10.13/4.32 data Ordering = LT | EQ | GT ; 10.13/4.32 10.13/4.32 data Tup0 = Tup0 ; 10.13/4.32 10.13/4.32 data Main.WHNF a = WHNF a ; 10.13/4.32 10.13/4.32 compareMyInt :: MyInt -> MyInt -> Ordering; 10.13/4.32 compareMyInt = primCmpInt; 10.13/4.32 10.13/4.32 dsEm :: (b -> a) -> b -> a; 10.13/4.32 dsEm f x = Main.seq x (f x); 10.13/4.32 10.13/4.32 enforceWHNF :: Main.WHNF a -> b -> b; 10.13/4.32 enforceWHNF (Main.WHNF x) y = y; 10.13/4.32 10.13/4.32 enumFromToMyInt :: MyInt -> MyInt -> List MyInt; 10.13/4.32 enumFromToMyInt = numericEnumFromTo; 10.13/4.32 10.13/4.32 enumFromToTup0 :: Tup0 -> Tup0 -> List Tup0; 10.13/4.32 enumFromToTup0 x y = map toEnumTup0 (enumFromToMyInt (fromEnumTup0 x) (fromEnumTup0 y)); 10.13/4.32 10.13/4.32 esEsMyInt :: MyInt -> MyInt -> MyBool; 10.13/4.32 esEsMyInt = primEqInt; 10.13/4.32 10.13/4.32 esEsOrdering :: Ordering -> Ordering -> MyBool; 10.13/4.32 esEsOrdering LT LT = MyTrue; 10.13/4.32 esEsOrdering LT EQ = MyFalse; 10.13/4.32 esEsOrdering LT GT = MyFalse; 10.13/4.32 esEsOrdering EQ LT = MyFalse; 10.13/4.32 esEsOrdering EQ EQ = MyTrue; 10.13/4.32 esEsOrdering EQ GT = MyFalse; 10.13/4.32 esEsOrdering GT LT = MyFalse; 10.13/4.32 esEsOrdering GT EQ = MyFalse; 10.13/4.32 esEsOrdering GT GT = MyTrue; 10.13/4.32 10.13/4.32 flip :: (b -> a -> c) -> a -> b -> c; 10.13/4.32 flip f x y = f y x; 10.13/4.32 10.13/4.32 fromEnumTup0 :: Tup0 -> MyInt; 10.13/4.32 fromEnumTup0 Tup0 = Main.Pos Main.Zero; 10.13/4.32 10.13/4.32 fromIntMyInt :: MyInt -> MyInt; 10.13/4.32 fromIntMyInt x = x; 10.13/4.32 10.13/4.32 fsEsOrdering :: Ordering -> Ordering -> MyBool; 10.13/4.32 fsEsOrdering x y = not (esEsOrdering x y); 10.13/4.32 10.13/4.32 ltEsMyInt :: MyInt -> MyInt -> MyBool; 10.13/4.32 ltEsMyInt x y = fsEsOrdering (compareMyInt x y) GT; 10.13/4.32 10.13/4.32 map :: (a -> b) -> List a -> List b; 10.13/4.32 map f Nil = Nil; 10.13/4.32 map f (Cons x xs) = Cons (f x) (map f xs); 10.13/4.32 10.13/4.32 not :: MyBool -> MyBool; 10.39/4.32 not MyTrue = MyFalse; 10.39/4.32 not MyFalse = MyTrue; 10.39/4.32 10.39/4.32 numericEnumFrom n = Cons n (dsEm numericEnumFrom (psMyInt n (fromIntMyInt (Main.Pos (Main.Succ Main.Zero))))); 10.39/4.32 10.39/4.32 numericEnumFromTo n m = takeWhile (flip ltEsMyInt m) (numericEnumFrom n); 10.39/4.32 10.39/4.32 otherwise :: MyBool; 10.39/4.32 otherwise = MyTrue; 10.39/4.32 10.39/4.32 primCmpInt :: MyInt -> MyInt -> Ordering; 10.39/4.32 primCmpInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Pos x) (Main.Pos y) = primCmpNat x y; 10.39/4.32 primCmpInt (Main.Pos x) (Main.Neg y) = GT; 10.39/4.32 primCmpInt (Main.Neg x) (Main.Pos y) = LT; 10.39/4.32 primCmpInt (Main.Neg x) (Main.Neg y) = primCmpNat y x; 10.39/4.32 10.39/4.32 primCmpNat :: Main.Nat -> Main.Nat -> Ordering; 10.39/4.32 primCmpNat Main.Zero Main.Zero = EQ; 10.39/4.32 primCmpNat Main.Zero (Main.Succ y) = LT; 10.39/4.32 primCmpNat (Main.Succ x) Main.Zero = GT; 10.39/4.32 primCmpNat (Main.Succ x) (Main.Succ y) = primCmpNat x y; 10.39/4.32 10.39/4.32 primEqInt :: MyInt -> MyInt -> MyBool; 10.39/4.32 primEqInt (Main.Pos (Main.Succ x)) (Main.Pos (Main.Succ y)) = primEqNat x y; 10.39/4.32 primEqInt (Main.Neg (Main.Succ x)) (Main.Neg (Main.Succ y)) = primEqNat x y; 10.39/4.32 primEqInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.39/4.32 primEqInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.39/4.32 primEqInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.39/4.32 primEqInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.39/4.32 primEqInt vv vw = MyFalse; 10.39/4.32 10.39/4.32 primEqNat :: Main.Nat -> Main.Nat -> MyBool; 10.39/4.32 primEqNat Main.Zero Main.Zero = MyTrue; 10.39/4.32 primEqNat Main.Zero (Main.Succ y) = MyFalse; 10.39/4.32 primEqNat (Main.Succ x) Main.Zero = MyFalse; 10.39/4.32 primEqNat (Main.Succ x) (Main.Succ y) = primEqNat x y; 10.39/4.32 10.39/4.32 primMinusNat :: Main.Nat -> Main.Nat -> MyInt; 10.39/4.32 primMinusNat Main.Zero Main.Zero = Main.Pos Main.Zero; 10.39/4.32 primMinusNat Main.Zero (Main.Succ y) = Main.Neg (Main.Succ y); 10.39/4.32 primMinusNat (Main.Succ x) Main.Zero = Main.Pos (Main.Succ x); 10.39/4.32 primMinusNat (Main.Succ x) (Main.Succ y) = primMinusNat x y; 10.39/4.32 10.39/4.32 primPlusInt :: MyInt -> MyInt -> MyInt; 10.39/4.32 primPlusInt (Main.Pos x) (Main.Neg y) = primMinusNat x y; 10.39/4.32 primPlusInt (Main.Neg x) (Main.Pos y) = primMinusNat y x; 10.39/4.32 primPlusInt (Main.Neg x) (Main.Neg y) = Main.Neg (primPlusNat x y); 10.39/4.32 primPlusInt (Main.Pos x) (Main.Pos y) = Main.Pos (primPlusNat x y); 10.39/4.32 10.39/4.32 primPlusNat :: Main.Nat -> Main.Nat -> Main.Nat; 10.39/4.32 primPlusNat Main.Zero Main.Zero = Main.Zero; 10.39/4.32 primPlusNat Main.Zero (Main.Succ y) = Main.Succ y; 10.39/4.32 primPlusNat (Main.Succ x) Main.Zero = Main.Succ x; 10.39/4.32 primPlusNat (Main.Succ x) (Main.Succ y) = Main.Succ (Main.Succ (primPlusNat x y)); 10.39/4.32 10.39/4.32 psMyInt :: MyInt -> MyInt -> MyInt; 10.39/4.32 psMyInt = primPlusInt; 10.39/4.32 10.39/4.32 seq :: a -> b -> b; 10.39/4.32 seq x y = Main.enforceWHNF (Main.WHNF x) y; 10.39/4.32 10.39/4.32 takeWhile :: (a -> MyBool) -> List a -> List a; 10.39/4.32 takeWhile p Nil = takeWhile3 p Nil; 10.39/4.32 takeWhile p (Cons x xs) = takeWhile2 p (Cons x xs); 10.39/4.32 10.39/4.32 takeWhile0 p x xs MyTrue = Nil; 10.39/4.32 10.39/4.32 takeWhile1 p x xs MyTrue = Cons x (takeWhile p xs); 10.39/4.32 takeWhile1 p x xs MyFalse = takeWhile0 p x xs otherwise; 10.39/4.32 10.39/4.32 takeWhile2 p (Cons x xs) = takeWhile1 p x xs (p x); 10.39/4.32 10.39/4.32 takeWhile3 p Nil = Nil; 10.39/4.32 takeWhile3 wu wv = takeWhile2 wu wv; 10.39/4.32 10.39/4.32 toEnum0 MyTrue vx = Tup0; 10.39/4.32 10.39/4.32 toEnum1 vx = toEnum0 (esEsMyInt vx (Main.Pos Main.Zero)) vx; 10.39/4.32 10.39/4.32 toEnumTup0 :: MyInt -> Tup0; 10.39/4.32 toEnumTup0 vx = toEnum1 vx; 10.39/4.32 10.39/4.32 } 10.39/4.32 10.39/4.32 ---------------------------------------- 10.39/4.32 10.39/4.32 (3) COR (EQUIVALENT) 10.39/4.32 Cond Reductions: 10.39/4.32 The following Function with conditions 10.39/4.32 "undefined |Falseundefined; 10.39/4.32 " 10.39/4.32 is transformed to 10.39/4.32 "undefined = undefined1; 10.39/4.32 " 10.39/4.32 "undefined0 True = undefined; 10.39/4.32 " 10.39/4.32 "undefined1 = undefined0 False; 10.39/4.32 " 10.39/4.32 10.39/4.32 ---------------------------------------- 10.39/4.32 10.39/4.32 (4) 10.39/4.32 Obligation: 10.39/4.32 mainModule Main 10.39/4.32 module Main where { 10.39/4.32 import qualified Prelude; 10.39/4.32 data List a = Cons a (List a) | Nil ; 10.39/4.32 10.39/4.32 data MyBool = MyTrue | MyFalse ; 10.39/4.32 10.39/4.32 data MyInt = Pos Main.Nat | Neg Main.Nat ; 10.39/4.32 10.39/4.32 data Main.Nat = Succ Main.Nat | Zero ; 10.39/4.32 10.39/4.32 data Ordering = LT | EQ | GT ; 10.39/4.32 10.39/4.32 data Tup0 = Tup0 ; 10.39/4.32 10.39/4.32 data Main.WHNF a = WHNF a ; 10.39/4.32 10.39/4.32 compareMyInt :: MyInt -> MyInt -> Ordering; 10.39/4.32 compareMyInt = primCmpInt; 10.39/4.32 10.39/4.32 dsEm :: (a -> b) -> a -> b; 10.39/4.32 dsEm f x = Main.seq x (f x); 10.39/4.32 10.39/4.32 enforceWHNF :: Main.WHNF a -> b -> b; 10.39/4.32 enforceWHNF (Main.WHNF x) y = y; 10.39/4.32 10.39/4.32 enumFromToMyInt :: MyInt -> MyInt -> List MyInt; 10.39/4.32 enumFromToMyInt = numericEnumFromTo; 10.39/4.32 10.39/4.32 enumFromToTup0 :: Tup0 -> Tup0 -> List Tup0; 10.39/4.32 enumFromToTup0 x y = map toEnumTup0 (enumFromToMyInt (fromEnumTup0 x) (fromEnumTup0 y)); 10.39/4.32 10.39/4.32 esEsMyInt :: MyInt -> MyInt -> MyBool; 10.39/4.32 esEsMyInt = primEqInt; 10.39/4.32 10.39/4.32 esEsOrdering :: Ordering -> Ordering -> MyBool; 10.39/4.32 esEsOrdering LT LT = MyTrue; 10.39/4.32 esEsOrdering LT EQ = MyFalse; 10.39/4.32 esEsOrdering LT GT = MyFalse; 10.39/4.32 esEsOrdering EQ LT = MyFalse; 10.39/4.32 esEsOrdering EQ EQ = MyTrue; 10.39/4.32 esEsOrdering EQ GT = MyFalse; 10.39/4.32 esEsOrdering GT LT = MyFalse; 10.39/4.32 esEsOrdering GT EQ = MyFalse; 10.39/4.32 esEsOrdering GT GT = MyTrue; 10.39/4.32 10.39/4.32 flip :: (b -> c -> a) -> c -> b -> a; 10.39/4.32 flip f x y = f y x; 10.39/4.32 10.39/4.32 fromEnumTup0 :: Tup0 -> MyInt; 10.39/4.32 fromEnumTup0 Tup0 = Main.Pos Main.Zero; 10.39/4.32 10.39/4.32 fromIntMyInt :: MyInt -> MyInt; 10.39/4.32 fromIntMyInt x = x; 10.39/4.32 10.39/4.32 fsEsOrdering :: Ordering -> Ordering -> MyBool; 10.39/4.32 fsEsOrdering x y = not (esEsOrdering x y); 10.39/4.32 10.39/4.32 ltEsMyInt :: MyInt -> MyInt -> MyBool; 10.39/4.32 ltEsMyInt x y = fsEsOrdering (compareMyInt x y) GT; 10.39/4.32 10.39/4.32 map :: (a -> b) -> List a -> List b; 10.39/4.32 map f Nil = Nil; 10.39/4.32 map f (Cons x xs) = Cons (f x) (map f xs); 10.39/4.32 10.39/4.32 not :: MyBool -> MyBool; 10.39/4.32 not MyTrue = MyFalse; 10.39/4.32 not MyFalse = MyTrue; 10.39/4.32 10.39/4.32 numericEnumFrom n = Cons n (dsEm numericEnumFrom (psMyInt n (fromIntMyInt (Main.Pos (Main.Succ Main.Zero))))); 10.39/4.32 10.39/4.32 numericEnumFromTo n m = takeWhile (flip ltEsMyInt m) (numericEnumFrom n); 10.39/4.32 10.39/4.32 otherwise :: MyBool; 10.39/4.32 otherwise = MyTrue; 10.39/4.32 10.39/4.32 primCmpInt :: MyInt -> MyInt -> Ordering; 10.39/4.32 primCmpInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = EQ; 10.39/4.32 primCmpInt (Main.Pos x) (Main.Pos y) = primCmpNat x y; 10.39/4.32 primCmpInt (Main.Pos x) (Main.Neg y) = GT; 10.39/4.32 primCmpInt (Main.Neg x) (Main.Pos y) = LT; 10.39/4.32 primCmpInt (Main.Neg x) (Main.Neg y) = primCmpNat y x; 10.39/4.32 10.39/4.32 primCmpNat :: Main.Nat -> Main.Nat -> Ordering; 10.39/4.32 primCmpNat Main.Zero Main.Zero = EQ; 10.39/4.32 primCmpNat Main.Zero (Main.Succ y) = LT; 10.39/4.32 primCmpNat (Main.Succ x) Main.Zero = GT; 10.39/4.32 primCmpNat (Main.Succ x) (Main.Succ y) = primCmpNat x y; 10.39/4.32 10.39/4.32 primEqInt :: MyInt -> MyInt -> MyBool; 10.39/4.32 primEqInt (Main.Pos (Main.Succ x)) (Main.Pos (Main.Succ y)) = primEqNat x y; 10.39/4.32 primEqInt (Main.Neg (Main.Succ x)) (Main.Neg (Main.Succ y)) = primEqNat x y; 10.39/4.32 primEqInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.39/4.32 primEqInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.39/4.32 primEqInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.39/4.32 primEqInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.39/4.32 primEqInt vv vw = MyFalse; 10.39/4.32 10.39/4.32 primEqNat :: Main.Nat -> Main.Nat -> MyBool; 10.39/4.32 primEqNat Main.Zero Main.Zero = MyTrue; 10.39/4.32 primEqNat Main.Zero (Main.Succ y) = MyFalse; 10.39/4.32 primEqNat (Main.Succ x) Main.Zero = MyFalse; 10.39/4.32 primEqNat (Main.Succ x) (Main.Succ y) = primEqNat x y; 10.39/4.32 10.39/4.32 primMinusNat :: Main.Nat -> Main.Nat -> MyInt; 10.39/4.32 primMinusNat Main.Zero Main.Zero = Main.Pos Main.Zero; 10.39/4.32 primMinusNat Main.Zero (Main.Succ y) = Main.Neg (Main.Succ y); 10.39/4.32 primMinusNat (Main.Succ x) Main.Zero = Main.Pos (Main.Succ x); 10.39/4.32 primMinusNat (Main.Succ x) (Main.Succ y) = primMinusNat x y; 10.39/4.32 10.39/4.32 primPlusInt :: MyInt -> MyInt -> MyInt; 10.39/4.32 primPlusInt (Main.Pos x) (Main.Neg y) = primMinusNat x y; 10.39/4.32 primPlusInt (Main.Neg x) (Main.Pos y) = primMinusNat y x; 10.39/4.32 primPlusInt (Main.Neg x) (Main.Neg y) = Main.Neg (primPlusNat x y); 10.39/4.32 primPlusInt (Main.Pos x) (Main.Pos y) = Main.Pos (primPlusNat x y); 10.39/4.32 10.39/4.32 primPlusNat :: Main.Nat -> Main.Nat -> Main.Nat; 10.39/4.32 primPlusNat Main.Zero Main.Zero = Main.Zero; 10.39/4.32 primPlusNat Main.Zero (Main.Succ y) = Main.Succ y; 10.39/4.32 primPlusNat (Main.Succ x) Main.Zero = Main.Succ x; 10.39/4.32 primPlusNat (Main.Succ x) (Main.Succ y) = Main.Succ (Main.Succ (primPlusNat x y)); 10.39/4.32 10.39/4.32 psMyInt :: MyInt -> MyInt -> MyInt; 10.39/4.32 psMyInt = primPlusInt; 10.39/4.32 10.39/4.32 seq :: b -> a -> a; 10.39/4.32 seq x y = Main.enforceWHNF (Main.WHNF x) y; 10.39/4.32 10.39/4.32 takeWhile :: (a -> MyBool) -> List a -> List a; 10.39/4.32 takeWhile p Nil = takeWhile3 p Nil; 10.39/4.32 takeWhile p (Cons x xs) = takeWhile2 p (Cons x xs); 10.39/4.32 10.39/4.32 takeWhile0 p x xs MyTrue = Nil; 10.39/4.32 10.39/4.32 takeWhile1 p x xs MyTrue = Cons x (takeWhile p xs); 10.39/4.32 takeWhile1 p x xs MyFalse = takeWhile0 p x xs otherwise; 10.39/4.32 10.39/4.32 takeWhile2 p (Cons x xs) = takeWhile1 p x xs (p x); 10.39/4.32 10.39/4.32 takeWhile3 p Nil = Nil; 10.39/4.32 takeWhile3 wu wv = takeWhile2 wu wv; 10.39/4.32 10.39/4.32 toEnum0 MyTrue vx = Tup0; 10.39/4.32 10.39/4.32 toEnum1 vx = toEnum0 (esEsMyInt vx (Main.Pos Main.Zero)) vx; 10.39/4.32 10.39/4.32 toEnumTup0 :: MyInt -> Tup0; 10.39/4.32 toEnumTup0 vx = toEnum1 vx; 10.39/4.32 10.39/4.32 } 10.39/4.32 10.39/4.32 ---------------------------------------- 10.39/4.32 10.39/4.32 (5) Narrow (EQUIVALENT) 10.39/4.32 Haskell To QDPs 10.39/4.32 10.39/4.32 digraph dp_graph { 10.39/4.32 node [outthreshold=100, inthreshold=100];1[label="enumFromToTup0",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 10.39/4.32 3[label="enumFromToTup0 ww3",fontsize=16,color="grey",shape="box"];3 -> 4[label="",style="dashed", color="grey", weight=3]; 10.39/4.32 4[label="enumFromToTup0 ww3 ww4",fontsize=16,color="black",shape="triangle"];4 -> 5[label="",style="solid", color="black", weight=3]; 10.39/4.32 5[label="map toEnumTup0 (enumFromToMyInt (fromEnumTup0 ww3) (fromEnumTup0 ww4))",fontsize=16,color="black",shape="box"];5 -> 6[label="",style="solid", color="black", weight=3]; 10.39/4.32 6[label="map toEnumTup0 (numericEnumFromTo (fromEnumTup0 ww3) (fromEnumTup0 ww4))",fontsize=16,color="black",shape="box"];6 -> 7[label="",style="solid", color="black", weight=3]; 10.39/4.32 7[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (fromEnumTup0 ww4)) (numericEnumFrom (fromEnumTup0 ww3)))",fontsize=16,color="black",shape="box"];7 -> 8[label="",style="solid", color="black", weight=3]; 10.39/4.32 8[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (fromEnumTup0 ww4)) (Cons (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];8 -> 9[label="",style="solid", color="black", weight=3]; 10.39/4.32 9[label="map toEnumTup0 (takeWhile2 (flip ltEsMyInt (fromEnumTup0 ww4)) (Cons (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];9 -> 10[label="",style="solid", color="black", weight=3]; 10.39/4.32 10[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero))))) (flip ltEsMyInt (fromEnumTup0 ww4) (fromEnumTup0 ww3)))",fontsize=16,color="black",shape="box"];10 -> 11[label="",style="solid", color="black", weight=3]; 10.39/4.32 11[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero))))) (ltEsMyInt (fromEnumTup0 ww3) (fromEnumTup0 ww4)))",fontsize=16,color="black",shape="box"];11 -> 12[label="",style="solid", color="black", weight=3]; 10.39/4.32 12[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero))))) (fsEsOrdering (compareMyInt (fromEnumTup0 ww3) (fromEnumTup0 ww4)) GT))",fontsize=16,color="black",shape="box"];12 -> 13[label="",style="solid", color="black", weight=3]; 10.39/4.32 13[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (compareMyInt (fromEnumTup0 ww3) (fromEnumTup0 ww4)) GT)))",fontsize=16,color="black",shape="box"];13 -> 14[label="",style="solid", color="black", weight=3]; 10.39/4.32 14[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (fromEnumTup0 ww3) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 ww3) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (fromEnumTup0 ww3) (fromEnumTup0 ww4)) GT)))",fontsize=16,color="burlywood",shape="box"];53[label="ww3/Tup0",fontsize=10,color="white",style="solid",shape="box"];14 -> 53[label="",style="solid", color="burlywood", weight=9]; 10.39/4.32 53 -> 15[label="",style="solid", color="burlywood", weight=3]; 10.39/4.32 15[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (fromEnumTup0 Tup0) (dsEm numericEnumFrom (psMyInt (fromEnumTup0 Tup0) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (fromEnumTup0 Tup0) (fromEnumTup0 ww4)) GT)))",fontsize=16,color="black",shape="box"];15 -> 16[label="",style="solid", color="black", weight=3]; 10.39/4.32 16[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 ww4)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos Zero) (fromEnumTup0 ww4)) GT)))",fontsize=16,color="burlywood",shape="box"];54[label="ww4/Tup0",fontsize=10,color="white",style="solid",shape="box"];16 -> 54[label="",style="solid", color="burlywood", weight=9]; 10.39/4.32 54 -> 17[label="",style="solid", color="burlywood", weight=3]; 10.39/4.32 17[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (fromEnumTup0 Tup0)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos Zero) (fromEnumTup0 Tup0)) GT)))",fontsize=16,color="black",shape="box"];17 -> 18[label="",style="solid", color="black", weight=3]; 10.39/4.32 18[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos Zero) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];18 -> 19[label="",style="solid", color="black", weight=3]; 10.39/4.32 19[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering EQ GT)))",fontsize=16,color="black",shape="box"];19 -> 20[label="",style="solid", color="black", weight=3]; 10.39/4.32 20[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not MyFalse))",fontsize=16,color="black",shape="box"];20 -> 21[label="",style="solid", color="black", weight=3]; 10.39/4.32 21[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) MyTrue)",fontsize=16,color="black",shape="box"];21 -> 22[label="",style="solid", color="black", weight=3]; 10.39/4.32 22[label="map toEnumTup0 (Cons (Pos Zero) (takeWhile (flip ltEsMyInt (Pos Zero)) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];22 -> 23[label="",style="solid", color="black", weight=3]; 10.39/4.32 23[label="Cons (toEnumTup0 (Pos Zero)) (map toEnumTup0 (takeWhile (flip ltEsMyInt (Pos Zero)) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="green",shape="box"];23 -> 24[label="",style="dashed", color="green", weight=3]; 10.39/4.32 23 -> 25[label="",style="dashed", color="green", weight=3]; 10.39/4.32 24[label="toEnumTup0 (Pos Zero)",fontsize=16,color="black",shape="box"];24 -> 26[label="",style="solid", color="black", weight=3]; 10.39/4.32 25[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (Pos Zero)) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];25 -> 27[label="",style="solid", color="black", weight=3]; 10.39/4.32 26[label="toEnum1 (Pos Zero)",fontsize=16,color="black",shape="box"];26 -> 28[label="",style="solid", color="black", weight=3]; 10.39/4.32 27[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (Pos Zero)) (seq (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];27 -> 29[label="",style="solid", color="black", weight=3]; 10.39/4.32 28[label="toEnum0 (esEsMyInt (Pos Zero) (Pos Zero)) (Pos Zero)",fontsize=16,color="black",shape="box"];28 -> 30[label="",style="solid", color="black", weight=3]; 10.39/4.32 29[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (Pos Zero)) (enforceWHNF (WHNF (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];29 -> 31[label="",style="solid", color="black", weight=3]; 10.39/4.32 30[label="toEnum0 (primEqInt (Pos Zero) (Pos Zero)) (Pos Zero)",fontsize=16,color="black",shape="box"];30 -> 32[label="",style="solid", color="black", weight=3]; 10.39/4.32 31[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (Pos Zero)) (numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];31 -> 33[label="",style="solid", color="black", weight=3]; 10.39/4.32 32[label="toEnum0 MyTrue (Pos Zero)",fontsize=16,color="black",shape="box"];32 -> 34[label="",style="solid", color="black", weight=3]; 10.39/4.32 33[label="map toEnumTup0 (takeWhile (flip ltEsMyInt (Pos Zero)) (Cons (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];33 -> 35[label="",style="solid", color="black", weight=3]; 10.39/4.32 34[label="Tup0",fontsize=16,color="green",shape="box"];35[label="map toEnumTup0 (takeWhile2 (flip ltEsMyInt (Pos Zero)) (Cons (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];35 -> 36[label="",style="solid", color="black", weight=3]; 10.39/4.32 36[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (flip ltEsMyInt (Pos Zero) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];36 -> 37[label="",style="solid", color="black", weight=3]; 10.39/4.32 37[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (ltEsMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (Pos Zero)))",fontsize=16,color="black",shape="box"];37 -> 38[label="",style="solid", color="black", weight=3]; 10.39/4.32 38[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (fsEsOrdering (compareMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (Pos Zero)) GT))",fontsize=16,color="black",shape="box"];38 -> 39[label="",style="solid", color="black", weight=3]; 10.39/4.32 39[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (compareMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];39 -> 40[label="",style="solid", color="black", weight=3]; 10.39/4.32 40[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];40 -> 41[label="",style="solid", color="black", weight=3]; 10.39/4.32 41[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (primPlusInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (primPlusInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (primPlusInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];41 -> 42[label="",style="solid", color="black", weight=3]; 10.39/4.32 42[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (primPlusInt (Pos Zero) (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (primPlusInt (Pos Zero) (Pos (Succ Zero))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (primPlusInt (Pos Zero) (Pos (Succ Zero))) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];42 -> 43[label="",style="solid", color="black", weight=3]; 10.39/4.32 43[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos (primPlusNat Zero (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos (primPlusNat Zero (Succ Zero))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (primPlusNat Zero (Succ Zero))) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];43 -> 44[label="",style="solid", color="black", weight=3]; 10.39/4.32 44[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (Succ Zero)) (Pos Zero)) GT)))",fontsize=16,color="black",shape="box"];44 -> 45[label="",style="solid", color="black", weight=3]; 10.39/4.32 45[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpNat (Succ Zero) Zero) GT)))",fontsize=16,color="black",shape="box"];45 -> 46[label="",style="solid", color="black", weight=3]; 10.39/4.32 46[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering GT GT)))",fontsize=16,color="black",shape="box"];46 -> 47[label="",style="solid", color="black", weight=3]; 10.39/4.32 47[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not MyTrue))",fontsize=16,color="black",shape="box"];47 -> 48[label="",style="solid", color="black", weight=3]; 10.39/4.32 48[label="map toEnumTup0 (takeWhile1 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) MyFalse)",fontsize=16,color="black",shape="box"];48 -> 49[label="",style="solid", color="black", weight=3]; 10.39/4.32 49[label="map toEnumTup0 (takeWhile0 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) otherwise)",fontsize=16,color="black",shape="box"];49 -> 50[label="",style="solid", color="black", weight=3]; 10.39/4.32 50[label="map toEnumTup0 (takeWhile0 (flip ltEsMyInt (Pos Zero)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) MyTrue)",fontsize=16,color="black",shape="box"];50 -> 51[label="",style="solid", color="black", weight=3]; 10.39/4.32 51[label="map toEnumTup0 Nil",fontsize=16,color="black",shape="box"];51 -> 52[label="",style="solid", color="black", weight=3]; 10.39/4.32 52[label="Nil",fontsize=16,color="green",shape="box"];} 10.39/4.32 10.39/4.32 ---------------------------------------- 10.39/4.32 10.39/4.32 (6) 10.39/4.32 YES 10.44/4.39 EOF