8.77/3.80 YES 10.90/4.44 proof of /export/starexec/sandbox/benchmark/theBenchmark.hs 10.90/4.44 # AProVE Commit ID: 48fb2092695e11cc9f56e44b17a92a5f88ffb256 marcel 20180622 unpublished dirty 10.90/4.44 10.90/4.44 10.90/4.44 H-Termination with start terms of the given HASKELL could be proven: 10.90/4.44 10.90/4.44 (0) HASKELL 10.90/4.44 (1) BR [EQUIVALENT, 0 ms] 10.90/4.44 (2) HASKELL 10.90/4.44 (3) COR [EQUIVALENT, 0 ms] 10.90/4.44 (4) HASKELL 10.90/4.44 (5) Narrow [EQUIVALENT, 7 ms] 10.90/4.44 (6) YES 10.90/4.44 10.90/4.44 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (0) 10.90/4.44 Obligation: 10.90/4.44 mainModule Main 10.90/4.44 module Main where { 10.90/4.44 import qualified Prelude; 10.90/4.44 data List a = Cons a (List a) | Nil ; 10.90/4.44 10.90/4.44 data MyBool = MyTrue | MyFalse ; 10.90/4.44 10.90/4.44 data MyInt = Pos Main.Nat | Neg Main.Nat ; 10.90/4.44 10.90/4.44 data Main.Nat = Succ Main.Nat | Zero ; 10.90/4.44 10.90/4.44 data Ordering = LT | EQ | GT ; 10.90/4.44 10.90/4.44 data Main.WHNF a = WHNF a ; 10.90/4.44 10.90/4.44 compareMyInt :: MyInt -> MyInt -> Ordering; 10.90/4.44 compareMyInt = primCmpInt; 10.90/4.44 10.90/4.44 dsEm :: (a -> b) -> a -> b; 10.90/4.44 dsEm f x = Main.seq x (f x); 10.90/4.44 10.90/4.44 enforceWHNF :: Main.WHNF b -> a -> a; 10.90/4.44 enforceWHNF (Main.WHNF x) y = y; 10.90/4.44 10.90/4.44 enumFromMyBool :: MyBool -> List MyBool; 10.90/4.44 enumFromMyBool x = enumFromToMyBool x MyTrue; 10.90/4.44 10.90/4.44 enumFromToMyBool :: MyBool -> MyBool -> List MyBool; 10.90/4.44 enumFromToMyBool x y = map toEnumMyBool (enumFromToMyInt (fromEnumMyBool x) (fromEnumMyBool y)); 10.90/4.44 10.90/4.44 enumFromToMyInt :: MyInt -> MyInt -> List MyInt; 10.90/4.44 enumFromToMyInt = numericEnumFromTo; 10.90/4.44 10.90/4.44 esEsMyInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 esEsMyInt = primEqInt; 10.90/4.44 10.90/4.44 esEsOrdering :: Ordering -> Ordering -> MyBool; 10.90/4.44 esEsOrdering LT LT = MyTrue; 10.90/4.44 esEsOrdering LT EQ = MyFalse; 10.90/4.44 esEsOrdering LT GT = MyFalse; 10.90/4.44 esEsOrdering EQ LT = MyFalse; 10.90/4.44 esEsOrdering EQ EQ = MyTrue; 10.90/4.44 esEsOrdering EQ GT = MyFalse; 10.90/4.44 esEsOrdering GT LT = MyFalse; 10.90/4.44 esEsOrdering GT EQ = MyFalse; 10.90/4.44 esEsOrdering GT GT = MyTrue; 10.90/4.44 10.90/4.44 flip :: (b -> a -> c) -> a -> b -> c; 10.90/4.44 flip f x y = f y x; 10.90/4.44 10.90/4.44 fromEnumMyBool :: MyBool -> MyInt; 10.90/4.44 fromEnumMyBool MyFalse = Main.Pos Main.Zero; 10.90/4.44 fromEnumMyBool MyTrue = Main.Pos (Main.Succ Main.Zero); 10.90/4.44 10.90/4.44 fromIntMyInt :: MyInt -> MyInt; 10.90/4.44 fromIntMyInt x = x; 10.90/4.44 10.90/4.44 fsEsOrdering :: Ordering -> Ordering -> MyBool; 10.90/4.44 fsEsOrdering x y = not (esEsOrdering x y); 10.90/4.44 10.90/4.44 ltEsMyInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 ltEsMyInt x y = fsEsOrdering (compareMyInt x y) GT; 10.90/4.44 10.90/4.44 map :: (a -> b) -> List a -> List b; 10.90/4.44 map f Nil = Nil; 10.90/4.44 map f (Cons x xs) = Cons (f x) (map f xs); 10.90/4.44 10.90/4.44 not :: MyBool -> MyBool; 10.90/4.44 not MyTrue = MyFalse; 10.90/4.44 not MyFalse = MyTrue; 10.90/4.44 10.90/4.44 numericEnumFrom n = Cons n (dsEm numericEnumFrom (psMyInt n (fromIntMyInt (Main.Pos (Main.Succ Main.Zero))))); 10.90/4.44 10.90/4.44 numericEnumFromTo n m = takeWhile (flip ltEsMyInt m) (numericEnumFrom n); 10.90/4.44 10.90/4.44 otherwise :: MyBool; 10.90/4.44 otherwise = MyTrue; 10.90/4.44 10.90/4.44 primCmpInt :: MyInt -> MyInt -> Ordering; 10.90/4.44 primCmpInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Pos x) (Main.Pos y) = primCmpNat x y; 10.90/4.44 primCmpInt (Main.Pos x) (Main.Neg y) = GT; 10.90/4.44 primCmpInt (Main.Neg x) (Main.Pos y) = LT; 10.90/4.44 primCmpInt (Main.Neg x) (Main.Neg y) = primCmpNat y x; 10.90/4.44 10.90/4.44 primCmpNat :: Main.Nat -> Main.Nat -> Ordering; 10.90/4.44 primCmpNat Main.Zero Main.Zero = EQ; 10.90/4.44 primCmpNat Main.Zero (Main.Succ y) = LT; 10.90/4.44 primCmpNat (Main.Succ x) Main.Zero = GT; 10.90/4.44 primCmpNat (Main.Succ x) (Main.Succ y) = primCmpNat x y; 10.90/4.44 10.90/4.44 primEqInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 primEqInt (Main.Pos (Main.Succ x)) (Main.Pos (Main.Succ y)) = primEqNat x y; 10.90/4.44 primEqInt (Main.Neg (Main.Succ x)) (Main.Neg (Main.Succ y)) = primEqNat x y; 10.90/4.44 primEqInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.90/4.44 primEqInt vv vw = MyFalse; 10.90/4.44 10.90/4.44 primEqNat :: Main.Nat -> Main.Nat -> MyBool; 10.90/4.44 primEqNat Main.Zero Main.Zero = MyTrue; 10.90/4.44 primEqNat Main.Zero (Main.Succ y) = MyFalse; 10.90/4.44 primEqNat (Main.Succ x) Main.Zero = MyFalse; 10.90/4.44 primEqNat (Main.Succ x) (Main.Succ y) = primEqNat x y; 10.90/4.44 10.90/4.44 primMinusNat :: Main.Nat -> Main.Nat -> MyInt; 10.90/4.44 primMinusNat Main.Zero Main.Zero = Main.Pos Main.Zero; 10.90/4.44 primMinusNat Main.Zero (Main.Succ y) = Main.Neg (Main.Succ y); 10.90/4.44 primMinusNat (Main.Succ x) Main.Zero = Main.Pos (Main.Succ x); 10.90/4.44 primMinusNat (Main.Succ x) (Main.Succ y) = primMinusNat x y; 10.90/4.44 10.90/4.44 primPlusInt :: MyInt -> MyInt -> MyInt; 10.90/4.44 primPlusInt (Main.Pos x) (Main.Neg y) = primMinusNat x y; 10.90/4.44 primPlusInt (Main.Neg x) (Main.Pos y) = primMinusNat y x; 10.90/4.44 primPlusInt (Main.Neg x) (Main.Neg y) = Main.Neg (primPlusNat x y); 10.90/4.44 primPlusInt (Main.Pos x) (Main.Pos y) = Main.Pos (primPlusNat x y); 10.90/4.44 10.90/4.44 primPlusNat :: Main.Nat -> Main.Nat -> Main.Nat; 10.90/4.44 primPlusNat Main.Zero Main.Zero = Main.Zero; 10.90/4.44 primPlusNat Main.Zero (Main.Succ y) = Main.Succ y; 10.90/4.44 primPlusNat (Main.Succ x) Main.Zero = Main.Succ x; 10.90/4.44 primPlusNat (Main.Succ x) (Main.Succ y) = Main.Succ (Main.Succ (primPlusNat x y)); 10.90/4.44 10.90/4.44 psMyInt :: MyInt -> MyInt -> MyInt; 10.90/4.44 psMyInt = primPlusInt; 10.90/4.44 10.90/4.44 seq :: b -> a -> a; 10.90/4.44 seq x y = Main.enforceWHNF (Main.WHNF x) y; 10.90/4.44 10.90/4.44 takeWhile :: (a -> MyBool) -> List a -> List a; 10.90/4.44 takeWhile p Nil = takeWhile3 p Nil; 10.90/4.44 takeWhile p (Cons x xs) = takeWhile2 p (Cons x xs); 10.90/4.44 10.90/4.44 takeWhile0 p x xs MyTrue = Nil; 10.90/4.44 10.90/4.44 takeWhile1 p x xs MyTrue = Cons x (takeWhile p xs); 10.90/4.44 takeWhile1 p x xs MyFalse = takeWhile0 p x xs otherwise; 10.90/4.44 10.90/4.44 takeWhile2 p (Cons x xs) = takeWhile1 p x xs (p x); 10.90/4.44 10.90/4.44 takeWhile3 p Nil = Nil; 10.90/4.44 takeWhile3 wy wz = takeWhile2 wy wz; 10.90/4.44 10.90/4.44 toEnum0 MyTrue vx = MyTrue; 10.90/4.44 10.90/4.44 toEnum1 vx = toEnum0 (esEsMyInt vx (Main.Pos (Main.Succ Main.Zero))) vx; 10.90/4.44 10.90/4.44 toEnum2 MyTrue vy = MyFalse; 10.90/4.44 toEnum2 vz wu = toEnum1 wu; 10.90/4.44 10.90/4.44 toEnum3 vy = toEnum2 (esEsMyInt vy (Main.Pos Main.Zero)) vy; 10.90/4.44 toEnum3 wv = toEnum1 wv; 10.90/4.44 10.90/4.44 toEnumMyBool :: MyInt -> MyBool; 10.90/4.44 toEnumMyBool vy = toEnum3 vy; 10.90/4.44 toEnumMyBool vx = toEnum1 vx; 10.90/4.44 10.90/4.44 } 10.90/4.44 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (1) BR (EQUIVALENT) 10.90/4.44 Replaced joker patterns by fresh variables and removed binding patterns. 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (2) 10.90/4.44 Obligation: 10.90/4.44 mainModule Main 10.90/4.44 module Main where { 10.90/4.44 import qualified Prelude; 10.90/4.44 data List a = Cons a (List a) | Nil ; 10.90/4.44 10.90/4.44 data MyBool = MyTrue | MyFalse ; 10.90/4.44 10.90/4.44 data MyInt = Pos Main.Nat | Neg Main.Nat ; 10.90/4.44 10.90/4.44 data Main.Nat = Succ Main.Nat | Zero ; 10.90/4.44 10.90/4.44 data Ordering = LT | EQ | GT ; 10.90/4.44 10.90/4.44 data Main.WHNF a = WHNF a ; 10.90/4.44 10.90/4.44 compareMyInt :: MyInt -> MyInt -> Ordering; 10.90/4.44 compareMyInt = primCmpInt; 10.90/4.44 10.90/4.44 dsEm :: (b -> a) -> b -> a; 10.90/4.44 dsEm f x = Main.seq x (f x); 10.90/4.44 10.90/4.44 enforceWHNF :: Main.WHNF a -> b -> b; 10.90/4.44 enforceWHNF (Main.WHNF x) y = y; 10.90/4.44 10.90/4.44 enumFromMyBool :: MyBool -> List MyBool; 10.90/4.44 enumFromMyBool x = enumFromToMyBool x MyTrue; 10.90/4.44 10.90/4.44 enumFromToMyBool :: MyBool -> MyBool -> List MyBool; 10.90/4.44 enumFromToMyBool x y = map toEnumMyBool (enumFromToMyInt (fromEnumMyBool x) (fromEnumMyBool y)); 10.90/4.44 10.90/4.44 enumFromToMyInt :: MyInt -> MyInt -> List MyInt; 10.90/4.44 enumFromToMyInt = numericEnumFromTo; 10.90/4.44 10.90/4.44 esEsMyInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 esEsMyInt = primEqInt; 10.90/4.44 10.90/4.44 esEsOrdering :: Ordering -> Ordering -> MyBool; 10.90/4.44 esEsOrdering LT LT = MyTrue; 10.90/4.44 esEsOrdering LT EQ = MyFalse; 10.90/4.44 esEsOrdering LT GT = MyFalse; 10.90/4.44 esEsOrdering EQ LT = MyFalse; 10.90/4.44 esEsOrdering EQ EQ = MyTrue; 10.90/4.44 esEsOrdering EQ GT = MyFalse; 10.90/4.44 esEsOrdering GT LT = MyFalse; 10.90/4.44 esEsOrdering GT EQ = MyFalse; 10.90/4.44 esEsOrdering GT GT = MyTrue; 10.90/4.44 10.90/4.44 flip :: (b -> a -> c) -> a -> b -> c; 10.90/4.44 flip f x y = f y x; 10.90/4.44 10.90/4.44 fromEnumMyBool :: MyBool -> MyInt; 10.90/4.44 fromEnumMyBool MyFalse = Main.Pos Main.Zero; 10.90/4.44 fromEnumMyBool MyTrue = Main.Pos (Main.Succ Main.Zero); 10.90/4.44 10.90/4.44 fromIntMyInt :: MyInt -> MyInt; 10.90/4.44 fromIntMyInt x = x; 10.90/4.44 10.90/4.44 fsEsOrdering :: Ordering -> Ordering -> MyBool; 10.90/4.44 fsEsOrdering x y = not (esEsOrdering x y); 10.90/4.44 10.90/4.44 ltEsMyInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 ltEsMyInt x y = fsEsOrdering (compareMyInt x y) GT; 10.90/4.44 10.90/4.44 map :: (b -> a) -> List b -> List a; 10.90/4.44 map f Nil = Nil; 10.90/4.44 map f (Cons x xs) = Cons (f x) (map f xs); 10.90/4.44 10.90/4.44 not :: MyBool -> MyBool; 10.90/4.44 not MyTrue = MyFalse; 10.90/4.44 not MyFalse = MyTrue; 10.90/4.44 10.90/4.44 numericEnumFrom n = Cons n (dsEm numericEnumFrom (psMyInt n (fromIntMyInt (Main.Pos (Main.Succ Main.Zero))))); 10.90/4.44 10.90/4.44 numericEnumFromTo n m = takeWhile (flip ltEsMyInt m) (numericEnumFrom n); 10.90/4.44 10.90/4.44 otherwise :: MyBool; 10.90/4.44 otherwise = MyTrue; 10.90/4.44 10.90/4.44 primCmpInt :: MyInt -> MyInt -> Ordering; 10.90/4.44 primCmpInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Pos x) (Main.Pos y) = primCmpNat x y; 10.90/4.44 primCmpInt (Main.Pos x) (Main.Neg y) = GT; 10.90/4.44 primCmpInt (Main.Neg x) (Main.Pos y) = LT; 10.90/4.44 primCmpInt (Main.Neg x) (Main.Neg y) = primCmpNat y x; 10.90/4.44 10.90/4.44 primCmpNat :: Main.Nat -> Main.Nat -> Ordering; 10.90/4.44 primCmpNat Main.Zero Main.Zero = EQ; 10.90/4.44 primCmpNat Main.Zero (Main.Succ y) = LT; 10.90/4.44 primCmpNat (Main.Succ x) Main.Zero = GT; 10.90/4.44 primCmpNat (Main.Succ x) (Main.Succ y) = primCmpNat x y; 10.90/4.44 10.90/4.44 primEqInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 primEqInt (Main.Pos (Main.Succ x)) (Main.Pos (Main.Succ y)) = primEqNat x y; 10.90/4.44 primEqInt (Main.Neg (Main.Succ x)) (Main.Neg (Main.Succ y)) = primEqNat x y; 10.90/4.44 primEqInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.90/4.44 primEqInt vv vw = MyFalse; 10.90/4.44 10.90/4.44 primEqNat :: Main.Nat -> Main.Nat -> MyBool; 10.90/4.44 primEqNat Main.Zero Main.Zero = MyTrue; 10.90/4.44 primEqNat Main.Zero (Main.Succ y) = MyFalse; 10.90/4.44 primEqNat (Main.Succ x) Main.Zero = MyFalse; 10.90/4.44 primEqNat (Main.Succ x) (Main.Succ y) = primEqNat x y; 10.90/4.44 10.90/4.44 primMinusNat :: Main.Nat -> Main.Nat -> MyInt; 10.90/4.44 primMinusNat Main.Zero Main.Zero = Main.Pos Main.Zero; 10.90/4.44 primMinusNat Main.Zero (Main.Succ y) = Main.Neg (Main.Succ y); 10.90/4.44 primMinusNat (Main.Succ x) Main.Zero = Main.Pos (Main.Succ x); 10.90/4.44 primMinusNat (Main.Succ x) (Main.Succ y) = primMinusNat x y; 10.90/4.44 10.90/4.44 primPlusInt :: MyInt -> MyInt -> MyInt; 10.90/4.44 primPlusInt (Main.Pos x) (Main.Neg y) = primMinusNat x y; 10.90/4.44 primPlusInt (Main.Neg x) (Main.Pos y) = primMinusNat y x; 10.90/4.44 primPlusInt (Main.Neg x) (Main.Neg y) = Main.Neg (primPlusNat x y); 10.90/4.44 primPlusInt (Main.Pos x) (Main.Pos y) = Main.Pos (primPlusNat x y); 10.90/4.44 10.90/4.44 primPlusNat :: Main.Nat -> Main.Nat -> Main.Nat; 10.90/4.44 primPlusNat Main.Zero Main.Zero = Main.Zero; 10.90/4.44 primPlusNat Main.Zero (Main.Succ y) = Main.Succ y; 10.90/4.44 primPlusNat (Main.Succ x) Main.Zero = Main.Succ x; 10.90/4.44 primPlusNat (Main.Succ x) (Main.Succ y) = Main.Succ (Main.Succ (primPlusNat x y)); 10.90/4.44 10.90/4.44 psMyInt :: MyInt -> MyInt -> MyInt; 10.90/4.44 psMyInt = primPlusInt; 10.90/4.44 10.90/4.44 seq :: a -> b -> b; 10.90/4.44 seq x y = Main.enforceWHNF (Main.WHNF x) y; 10.90/4.44 10.90/4.44 takeWhile :: (a -> MyBool) -> List a -> List a; 10.90/4.44 takeWhile p Nil = takeWhile3 p Nil; 10.90/4.44 takeWhile p (Cons x xs) = takeWhile2 p (Cons x xs); 10.90/4.44 10.90/4.44 takeWhile0 p x xs MyTrue = Nil; 10.90/4.44 10.90/4.44 takeWhile1 p x xs MyTrue = Cons x (takeWhile p xs); 10.90/4.44 takeWhile1 p x xs MyFalse = takeWhile0 p x xs otherwise; 10.90/4.44 10.90/4.44 takeWhile2 p (Cons x xs) = takeWhile1 p x xs (p x); 10.90/4.44 10.90/4.44 takeWhile3 p Nil = Nil; 10.90/4.44 takeWhile3 wy wz = takeWhile2 wy wz; 10.90/4.44 10.90/4.44 toEnum0 MyTrue vx = MyTrue; 10.90/4.44 10.90/4.44 toEnum1 vx = toEnum0 (esEsMyInt vx (Main.Pos (Main.Succ Main.Zero))) vx; 10.90/4.44 10.90/4.44 toEnum2 MyTrue vy = MyFalse; 10.90/4.44 toEnum2 vz wu = toEnum1 wu; 10.90/4.44 10.90/4.44 toEnum3 vy = toEnum2 (esEsMyInt vy (Main.Pos Main.Zero)) vy; 10.90/4.44 toEnum3 wv = toEnum1 wv; 10.90/4.44 10.90/4.44 toEnumMyBool :: MyInt -> MyBool; 10.90/4.44 toEnumMyBool vy = toEnum3 vy; 10.90/4.44 toEnumMyBool vx = toEnum1 vx; 10.90/4.44 10.90/4.44 } 10.90/4.44 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (3) COR (EQUIVALENT) 10.90/4.44 Cond Reductions: 10.90/4.44 The following Function with conditions 10.90/4.44 "undefined |Falseundefined; 10.90/4.44 " 10.90/4.44 is transformed to 10.90/4.44 "undefined = undefined1; 10.90/4.44 " 10.90/4.44 "undefined0 True = undefined; 10.90/4.44 " 10.90/4.44 "undefined1 = undefined0 False; 10.90/4.44 " 10.90/4.44 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (4) 10.90/4.44 Obligation: 10.90/4.44 mainModule Main 10.90/4.44 module Main where { 10.90/4.44 import qualified Prelude; 10.90/4.44 data List a = Cons a (List a) | Nil ; 10.90/4.44 10.90/4.44 data MyBool = MyTrue | MyFalse ; 10.90/4.44 10.90/4.44 data MyInt = Pos Main.Nat | Neg Main.Nat ; 10.90/4.44 10.90/4.44 data Main.Nat = Succ Main.Nat | Zero ; 10.90/4.44 10.90/4.44 data Ordering = LT | EQ | GT ; 10.90/4.44 10.90/4.44 data Main.WHNF a = WHNF a ; 10.90/4.44 10.90/4.44 compareMyInt :: MyInt -> MyInt -> Ordering; 10.90/4.44 compareMyInt = primCmpInt; 10.90/4.44 10.90/4.44 dsEm :: (b -> a) -> b -> a; 10.90/4.44 dsEm f x = Main.seq x (f x); 10.90/4.44 10.90/4.44 enforceWHNF :: Main.WHNF a -> b -> b; 10.90/4.44 enforceWHNF (Main.WHNF x) y = y; 10.90/4.44 10.90/4.44 enumFromMyBool :: MyBool -> List MyBool; 10.90/4.44 enumFromMyBool x = enumFromToMyBool x MyTrue; 10.90/4.44 10.90/4.44 enumFromToMyBool :: MyBool -> MyBool -> List MyBool; 10.90/4.44 enumFromToMyBool x y = map toEnumMyBool (enumFromToMyInt (fromEnumMyBool x) (fromEnumMyBool y)); 10.90/4.44 10.90/4.44 enumFromToMyInt :: MyInt -> MyInt -> List MyInt; 10.90/4.44 enumFromToMyInt = numericEnumFromTo; 10.90/4.44 10.90/4.44 esEsMyInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 esEsMyInt = primEqInt; 10.90/4.44 10.90/4.44 esEsOrdering :: Ordering -> Ordering -> MyBool; 10.90/4.44 esEsOrdering LT LT = MyTrue; 10.90/4.44 esEsOrdering LT EQ = MyFalse; 10.90/4.44 esEsOrdering LT GT = MyFalse; 10.90/4.44 esEsOrdering EQ LT = MyFalse; 10.90/4.44 esEsOrdering EQ EQ = MyTrue; 10.90/4.44 esEsOrdering EQ GT = MyFalse; 10.90/4.44 esEsOrdering GT LT = MyFalse; 10.90/4.44 esEsOrdering GT EQ = MyFalse; 10.90/4.44 esEsOrdering GT GT = MyTrue; 10.90/4.44 10.90/4.44 flip :: (a -> c -> b) -> c -> a -> b; 10.90/4.44 flip f x y = f y x; 10.90/4.44 10.90/4.44 fromEnumMyBool :: MyBool -> MyInt; 10.90/4.44 fromEnumMyBool MyFalse = Main.Pos Main.Zero; 10.90/4.44 fromEnumMyBool MyTrue = Main.Pos (Main.Succ Main.Zero); 10.90/4.44 10.90/4.44 fromIntMyInt :: MyInt -> MyInt; 10.90/4.44 fromIntMyInt x = x; 10.90/4.44 10.90/4.44 fsEsOrdering :: Ordering -> Ordering -> MyBool; 10.90/4.44 fsEsOrdering x y = not (esEsOrdering x y); 10.90/4.44 10.90/4.44 ltEsMyInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 ltEsMyInt x y = fsEsOrdering (compareMyInt x y) GT; 10.90/4.44 10.90/4.44 map :: (b -> a) -> List b -> List a; 10.90/4.44 map f Nil = Nil; 10.90/4.44 map f (Cons x xs) = Cons (f x) (map f xs); 10.90/4.44 10.90/4.44 not :: MyBool -> MyBool; 10.90/4.44 not MyTrue = MyFalse; 10.90/4.44 not MyFalse = MyTrue; 10.90/4.44 10.90/4.44 numericEnumFrom n = Cons n (dsEm numericEnumFrom (psMyInt n (fromIntMyInt (Main.Pos (Main.Succ Main.Zero))))); 10.90/4.44 10.90/4.44 numericEnumFromTo n m = takeWhile (flip ltEsMyInt m) (numericEnumFrom n); 10.90/4.44 10.90/4.44 otherwise :: MyBool; 10.90/4.44 otherwise = MyTrue; 10.90/4.44 10.90/4.44 primCmpInt :: MyInt -> MyInt -> Ordering; 10.90/4.44 primCmpInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = EQ; 10.90/4.44 primCmpInt (Main.Pos x) (Main.Pos y) = primCmpNat x y; 10.90/4.44 primCmpInt (Main.Pos x) (Main.Neg y) = GT; 10.90/4.44 primCmpInt (Main.Neg x) (Main.Pos y) = LT; 10.90/4.44 primCmpInt (Main.Neg x) (Main.Neg y) = primCmpNat y x; 10.90/4.44 10.90/4.44 primCmpNat :: Main.Nat -> Main.Nat -> Ordering; 10.90/4.44 primCmpNat Main.Zero Main.Zero = EQ; 10.90/4.44 primCmpNat Main.Zero (Main.Succ y) = LT; 10.90/4.44 primCmpNat (Main.Succ x) Main.Zero = GT; 10.90/4.44 primCmpNat (Main.Succ x) (Main.Succ y) = primCmpNat x y; 10.90/4.44 10.90/4.44 primEqInt :: MyInt -> MyInt -> MyBool; 10.90/4.44 primEqInt (Main.Pos (Main.Succ x)) (Main.Pos (Main.Succ y)) = primEqNat x y; 10.90/4.44 primEqInt (Main.Neg (Main.Succ x)) (Main.Neg (Main.Succ y)) = primEqNat x y; 10.90/4.44 primEqInt (Main.Pos Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Neg Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Neg Main.Zero) (Main.Neg Main.Zero) = MyTrue; 10.90/4.44 primEqInt (Main.Pos Main.Zero) (Main.Pos Main.Zero) = MyTrue; 10.90/4.44 primEqInt vv vw = MyFalse; 10.90/4.44 10.90/4.44 primEqNat :: Main.Nat -> Main.Nat -> MyBool; 10.90/4.44 primEqNat Main.Zero Main.Zero = MyTrue; 10.90/4.44 primEqNat Main.Zero (Main.Succ y) = MyFalse; 10.90/4.44 primEqNat (Main.Succ x) Main.Zero = MyFalse; 10.90/4.44 primEqNat (Main.Succ x) (Main.Succ y) = primEqNat x y; 10.90/4.44 10.90/4.44 primMinusNat :: Main.Nat -> Main.Nat -> MyInt; 10.90/4.44 primMinusNat Main.Zero Main.Zero = Main.Pos Main.Zero; 10.90/4.44 primMinusNat Main.Zero (Main.Succ y) = Main.Neg (Main.Succ y); 10.90/4.44 primMinusNat (Main.Succ x) Main.Zero = Main.Pos (Main.Succ x); 10.90/4.44 primMinusNat (Main.Succ x) (Main.Succ y) = primMinusNat x y; 10.90/4.44 10.90/4.44 primPlusInt :: MyInt -> MyInt -> MyInt; 10.90/4.44 primPlusInt (Main.Pos x) (Main.Neg y) = primMinusNat x y; 10.90/4.44 primPlusInt (Main.Neg x) (Main.Pos y) = primMinusNat y x; 10.90/4.44 primPlusInt (Main.Neg x) (Main.Neg y) = Main.Neg (primPlusNat x y); 10.90/4.44 primPlusInt (Main.Pos x) (Main.Pos y) = Main.Pos (primPlusNat x y); 10.90/4.44 10.90/4.44 primPlusNat :: Main.Nat -> Main.Nat -> Main.Nat; 10.90/4.44 primPlusNat Main.Zero Main.Zero = Main.Zero; 10.90/4.44 primPlusNat Main.Zero (Main.Succ y) = Main.Succ y; 10.90/4.44 primPlusNat (Main.Succ x) Main.Zero = Main.Succ x; 10.90/4.44 primPlusNat (Main.Succ x) (Main.Succ y) = Main.Succ (Main.Succ (primPlusNat x y)); 10.90/4.44 10.90/4.44 psMyInt :: MyInt -> MyInt -> MyInt; 10.90/4.44 psMyInt = primPlusInt; 10.90/4.44 10.90/4.44 seq :: b -> a -> a; 10.90/4.44 seq x y = Main.enforceWHNF (Main.WHNF x) y; 10.90/4.44 10.90/4.44 takeWhile :: (a -> MyBool) -> List a -> List a; 10.90/4.44 takeWhile p Nil = takeWhile3 p Nil; 10.90/4.44 takeWhile p (Cons x xs) = takeWhile2 p (Cons x xs); 10.90/4.44 10.90/4.44 takeWhile0 p x xs MyTrue = Nil; 10.90/4.44 10.90/4.44 takeWhile1 p x xs MyTrue = Cons x (takeWhile p xs); 10.90/4.44 takeWhile1 p x xs MyFalse = takeWhile0 p x xs otherwise; 10.90/4.44 10.90/4.44 takeWhile2 p (Cons x xs) = takeWhile1 p x xs (p x); 10.90/4.44 10.90/4.44 takeWhile3 p Nil = Nil; 10.90/4.44 takeWhile3 wy wz = takeWhile2 wy wz; 10.90/4.44 10.90/4.44 toEnum0 MyTrue vx = MyTrue; 10.90/4.44 10.90/4.44 toEnum1 vx = toEnum0 (esEsMyInt vx (Main.Pos (Main.Succ Main.Zero))) vx; 10.90/4.44 10.90/4.44 toEnum2 MyTrue vy = MyFalse; 10.90/4.44 toEnum2 vz wu = toEnum1 wu; 10.90/4.44 10.90/4.44 toEnum3 vy = toEnum2 (esEsMyInt vy (Main.Pos Main.Zero)) vy; 10.90/4.44 toEnum3 wv = toEnum1 wv; 10.90/4.44 10.90/4.44 toEnumMyBool :: MyInt -> MyBool; 10.90/4.44 toEnumMyBool vy = toEnum3 vy; 10.90/4.44 toEnumMyBool vx = toEnum1 vx; 10.90/4.44 10.90/4.44 } 10.90/4.44 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (5) Narrow (EQUIVALENT) 10.90/4.44 Haskell To QDPs 10.90/4.44 10.90/4.44 digraph dp_graph { 10.90/4.44 node [outthreshold=100, inthreshold=100];1[label="enumFromMyBool",fontsize=16,color="grey",shape="box"];1 -> 3[label="",style="dashed", color="grey", weight=3]; 10.90/4.44 3[label="enumFromMyBool xu3",fontsize=16,color="black",shape="triangle"];3 -> 4[label="",style="solid", color="black", weight=3]; 10.90/4.44 4[label="enumFromToMyBool xu3 MyTrue",fontsize=16,color="black",shape="box"];4 -> 5[label="",style="solid", color="black", weight=3]; 10.90/4.44 5[label="map toEnumMyBool (enumFromToMyInt (fromEnumMyBool xu3) (fromEnumMyBool MyTrue))",fontsize=16,color="black",shape="box"];5 -> 6[label="",style="solid", color="black", weight=3]; 10.90/4.44 6[label="map toEnumMyBool (numericEnumFromTo (fromEnumMyBool xu3) (fromEnumMyBool MyTrue))",fontsize=16,color="black",shape="box"];6 -> 7[label="",style="solid", color="black", weight=3]; 10.90/4.44 7[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (fromEnumMyBool MyTrue)) (numericEnumFrom (fromEnumMyBool xu3)))",fontsize=16,color="black",shape="box"];7 -> 8[label="",style="solid", color="black", weight=3]; 10.90/4.44 8[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (fromEnumMyBool MyTrue)) (Cons (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];8 -> 9[label="",style="solid", color="black", weight=3]; 10.90/4.44 9[label="map toEnumMyBool (takeWhile2 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (Cons (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];9 -> 10[label="",style="solid", color="black", weight=3]; 10.90/4.44 10[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero))))) (flip ltEsMyInt (fromEnumMyBool MyTrue) (fromEnumMyBool xu3)))",fontsize=16,color="black",shape="box"];10 -> 11[label="",style="solid", color="black", weight=3]; 10.90/4.44 11[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero))))) (ltEsMyInt (fromEnumMyBool xu3) (fromEnumMyBool MyTrue)))",fontsize=16,color="black",shape="box"];11 -> 12[label="",style="solid", color="black", weight=3]; 10.90/4.44 12[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero))))) (fsEsOrdering (compareMyInt (fromEnumMyBool xu3) (fromEnumMyBool MyTrue)) GT))",fontsize=16,color="black",shape="box"];12 -> 13[label="",style="solid", color="black", weight=3]; 10.90/4.44 13[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (compareMyInt (fromEnumMyBool xu3) (fromEnumMyBool MyTrue)) GT)))",fontsize=16,color="black",shape="box"];13 -> 14[label="",style="solid", color="black", weight=3]; 10.90/4.44 14[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool xu3) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool xu3) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (fromEnumMyBool xu3) (fromEnumMyBool MyTrue)) GT)))",fontsize=16,color="burlywood",shape="box"];90[label="xu3/MyTrue",fontsize=10,color="white",style="solid",shape="box"];14 -> 90[label="",style="solid", color="burlywood", weight=9]; 10.90/4.44 90 -> 15[label="",style="solid", color="burlywood", weight=3]; 10.90/4.44 91[label="xu3/MyFalse",fontsize=10,color="white",style="solid",shape="box"];14 -> 91[label="",style="solid", color="burlywood", weight=9]; 10.90/4.44 91 -> 16[label="",style="solid", color="burlywood", weight=3]; 10.90/4.44 15[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool MyTrue) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool MyTrue) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (fromEnumMyBool MyTrue) (fromEnumMyBool MyTrue)) GT)))",fontsize=16,color="black",shape="box"];15 -> 17[label="",style="solid", color="black", weight=3]; 10.90/4.44 16[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (fromEnumMyBool MyFalse) (dsEm numericEnumFrom (psMyInt (fromEnumMyBool MyFalse) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (fromEnumMyBool MyFalse) (fromEnumMyBool MyTrue)) GT)))",fontsize=16,color="black",shape="box"];16 -> 18[label="",style="solid", color="black", weight=3]; 10.90/4.44 17[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (Succ Zero)) (fromEnumMyBool MyTrue)) GT)))",fontsize=16,color="black",shape="box"];17 -> 19[label="",style="solid", color="black", weight=3]; 10.90/4.44 18[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (fromEnumMyBool MyTrue)) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos Zero) (fromEnumMyBool MyTrue)) GT)))",fontsize=16,color="black",shape="box"];18 -> 20[label="",style="solid", color="black", weight=3]; 10.90/4.44 19[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (Succ Zero)) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="triangle"];19 -> 21[label="",style="solid", color="black", weight=3]; 10.90/4.44 20[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos Zero) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];20 -> 22[label="",style="solid", color="black", weight=3]; 10.90/4.44 21[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpNat (Succ Zero) (Succ Zero)) GT)))",fontsize=16,color="black",shape="box"];21 -> 23[label="",style="solid", color="black", weight=3]; 10.90/4.44 22[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpNat Zero (Succ Zero)) GT)))",fontsize=16,color="black",shape="box"];22 -> 24[label="",style="solid", color="black", weight=3]; 10.90/4.44 23[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpNat Zero Zero) GT)))",fontsize=16,color="black",shape="box"];23 -> 25[label="",style="solid", color="black", weight=3]; 10.90/4.44 24[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering LT GT)))",fontsize=16,color="black",shape="box"];24 -> 26[label="",style="solid", color="black", weight=3]; 10.90/4.44 25[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering EQ GT)))",fontsize=16,color="black",shape="box"];25 -> 27[label="",style="solid", color="black", weight=3]; 10.90/4.44 26[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (not MyFalse))",fontsize=16,color="black",shape="box"];26 -> 28[label="",style="solid", color="black", weight=3]; 10.90/4.44 27[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not MyFalse))",fontsize=16,color="black",shape="box"];27 -> 29[label="",style="solid", color="black", weight=3]; 10.90/4.44 28[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos Zero) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) MyTrue)",fontsize=16,color="black",shape="box"];28 -> 30[label="",style="solid", color="black", weight=3]; 10.90/4.44 29[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) MyTrue)",fontsize=16,color="black",shape="box"];29 -> 31[label="",style="solid", color="black", weight=3]; 10.90/4.44 30[label="map toEnumMyBool (Cons (Pos Zero) (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];30 -> 32[label="",style="solid", color="black", weight=3]; 10.90/4.44 31[label="map toEnumMyBool (Cons (Pos (Succ Zero)) (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];31 -> 33[label="",style="solid", color="black", weight=3]; 10.90/4.44 32[label="Cons (toEnumMyBool (Pos Zero)) (map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="green",shape="box"];32 -> 34[label="",style="dashed", color="green", weight=3]; 10.90/4.44 32 -> 35[label="",style="dashed", color="green", weight=3]; 10.90/4.44 33[label="Cons (toEnumMyBool (Pos (Succ Zero))) (map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="green",shape="box"];33 -> 36[label="",style="dashed", color="green", weight=3]; 10.90/4.44 33 -> 37[label="",style="dashed", color="green", weight=3]; 10.90/4.44 34[label="toEnumMyBool (Pos Zero)",fontsize=16,color="black",shape="box"];34 -> 38[label="",style="solid", color="black", weight=3]; 10.90/4.44 35[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];35 -> 39[label="",style="solid", color="black", weight=3]; 10.90/4.44 36[label="toEnumMyBool (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];36 -> 40[label="",style="solid", color="black", weight=3]; 10.90/4.44 37[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];37 -> 41[label="",style="solid", color="black", weight=3]; 10.90/4.44 38[label="toEnum3 (Pos Zero)",fontsize=16,color="black",shape="box"];38 -> 42[label="",style="solid", color="black", weight=3]; 10.90/4.44 39[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (seq (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))) (numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];39 -> 43[label="",style="solid", color="black", weight=3]; 10.90/4.44 40[label="toEnum3 (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];40 -> 44[label="",style="solid", color="black", weight=3]; 10.90/4.44 41[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (seq (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];41 -> 45[label="",style="solid", color="black", weight=3]; 10.90/4.44 42[label="toEnum2 (esEsMyInt (Pos Zero) (Pos Zero)) (Pos Zero)",fontsize=16,color="black",shape="box"];42 -> 46[label="",style="solid", color="black", weight=3]; 10.90/4.44 43[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (enforceWHNF (WHNF (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))) (numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];43 -> 47[label="",style="solid", color="black", weight=3]; 10.90/4.44 44[label="toEnum2 (esEsMyInt (Pos (Succ Zero)) (Pos Zero)) (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];44 -> 48[label="",style="solid", color="black", weight=3]; 10.90/4.44 45[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (enforceWHNF (WHNF (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];45 -> 49[label="",style="solid", color="black", weight=3]; 10.90/4.44 46[label="toEnum2 (primEqInt (Pos Zero) (Pos Zero)) (Pos Zero)",fontsize=16,color="black",shape="box"];46 -> 50[label="",style="solid", color="black", weight=3]; 10.90/4.44 47[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (numericEnumFrom (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];47 -> 51[label="",style="solid", color="black", weight=3]; 10.90/4.44 48[label="toEnum2 (primEqInt (Pos (Succ Zero)) (Pos Zero)) (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];48 -> 52[label="",style="solid", color="black", weight=3]; 10.90/4.44 49[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];49 -> 53[label="",style="solid", color="black", weight=3]; 10.90/4.44 50[label="toEnum2 MyTrue (Pos Zero)",fontsize=16,color="black",shape="box"];50 -> 54[label="",style="solid", color="black", weight=3]; 10.90/4.44 51[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ 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"];51 -> 55[label="",style="solid", color="black", weight=3]; 10.90/4.44 52[label="toEnum2 MyFalse (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];52 -> 56[label="",style="solid", color="black", weight=3]; 10.90/4.44 53[label="map toEnumMyBool (takeWhile (flip ltEsMyInt (Pos (Succ Zero))) (Cons (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];53 -> 57[label="",style="solid", color="black", weight=3]; 10.90/4.44 54[label="MyFalse",fontsize=16,color="green",shape="box"];55[label="map toEnumMyBool (takeWhile2 (flip ltEsMyInt (Pos (Succ 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"];55 -> 58[label="",style="solid", color="black", weight=3]; 10.90/4.44 56[label="toEnum1 (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];56 -> 59[label="",style="solid", color="black", weight=3]; 10.90/4.44 57[label="map toEnumMyBool (takeWhile2 (flip ltEsMyInt (Pos (Succ Zero))) (Cons (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero)))))))",fontsize=16,color="black",shape="box"];57 -> 60[label="",style="solid", color="black", weight=3]; 10.90/4.44 58[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero)) (psMyInt (Pos Zero) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];58 -> 61[label="",style="solid", color="black", weight=3]; 10.90/4.44 59[label="toEnum0 (esEsMyInt (Pos (Succ Zero)) (Pos (Succ Zero))) (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];59 -> 62[label="",style="solid", color="black", weight=3]; 10.90/4.44 60[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (flip ltEsMyInt (Pos (Succ Zero)) (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))))",fontsize=16,color="black",shape="box"];60 -> 63[label="",style="solid", color="black", weight=3]; 10.90/4.44 61[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))))",fontsize=16,color="black",shape="box"];61 -> 64[label="",style="solid", color="black", weight=3]; 10.90/4.44 62[label="toEnum0 (primEqInt (Pos (Succ Zero)) (Pos (Succ Zero))) (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];62 -> 65[label="",style="solid", color="black", weight=3]; 10.90/4.44 63[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (ltEsMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (Pos (Succ Zero))))",fontsize=16,color="black",shape="box"];63 -> 66[label="",style="solid", color="black", weight=3]; 10.90/4.44 64[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))) GT))",fontsize=16,color="black",shape="box"];64 -> 67[label="",style="solid", color="black", weight=3]; 10.90/4.44 65[label="toEnum0 (primEqNat Zero Zero) (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];65 -> 68[label="",style="solid", color="black", weight=3]; 10.90/4.44 66[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (fsEsOrdering (compareMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (Pos (Succ Zero))) GT))",fontsize=16,color="black",shape="box"];66 -> 69[label="",style="solid", color="black", weight=3]; 10.90/4.44 67[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];67 -> 70[label="",style="solid", color="black", weight=3]; 10.90/4.44 68[label="toEnum0 MyTrue (Pos (Succ Zero))",fontsize=16,color="black",shape="box"];68 -> 71[label="",style="solid", color="black", weight=3]; 10.90/4.44 69[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (compareMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];69 -> 72[label="",style="solid", color="black", weight=3]; 10.90/4.44 70[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];70 -> 73[label="",style="solid", color="black", weight=3]; 10.90/4.44 71[label="MyTrue",fontsize=16,color="green",shape="box"];72[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];72 -> 74[label="",style="solid", color="black", weight=3]; 10.90/4.44 73[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];73 -> 75[label="",style="solid", color="black", weight=3]; 10.90/4.44 74[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (primPlusInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (dsEm numericEnumFrom (psMyInt (primPlusInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (primPlusInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero)))) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];74 -> 76[label="",style="solid", color="black", weight=3]; 10.90/4.44 75[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];75 -> 77[label="",style="solid", color="black", weight=3]; 10.90/4.44 76[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (primPlusInt (Pos (Succ Zero)) (Pos (Succ Zero))) (dsEm numericEnumFrom (psMyInt (primPlusInt (Pos (Succ Zero)) (Pos (Succ Zero))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (primPlusInt (Pos (Succ Zero)) (Pos (Succ Zero))) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];76 -> 78[label="",style="solid", color="black", weight=3]; 10.90/4.44 77[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ 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 (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];77 -> 79[label="",style="solid", color="black", weight=3]; 10.90/4.44 78[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (primPlusNat (Succ Zero) (Succ Zero))) (dsEm numericEnumFrom (psMyInt (Pos (primPlusNat (Succ Zero) (Succ Zero))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (primPlusNat (Succ Zero) (Succ Zero))) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];78 -> 80[label="",style="solid", color="black", weight=3]; 10.90/4.44 79 -> 19[label="",style="dashed", color="red", weight=0]; 10.90/4.44 79[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ Zero)) (dsEm numericEnumFrom (psMyInt (Pos (Succ Zero)) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (Succ Zero)) (Pos (Succ Zero))) GT)))",fontsize=16,color="magenta"];80[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (Pos (Succ Zero))) GT)))",fontsize=16,color="black",shape="box"];80 -> 81[label="",style="solid", color="black", weight=3]; 10.90/4.44 81[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpNat (Succ (Succ (primPlusNat Zero Zero))) (Succ Zero)) GT)))",fontsize=16,color="black",shape="box"];81 -> 82[label="",style="solid", color="black", weight=3]; 10.90/4.44 82[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering (primCmpNat (Succ (primPlusNat Zero Zero)) Zero) GT)))",fontsize=16,color="black",shape="box"];82 -> 83[label="",style="solid", color="black", weight=3]; 10.90/4.44 83[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not (esEsOrdering GT GT)))",fontsize=16,color="black",shape="box"];83 -> 84[label="",style="solid", color="black", weight=3]; 10.90/4.44 84[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) (not MyTrue))",fontsize=16,color="black",shape="box"];84 -> 85[label="",style="solid", color="black", weight=3]; 10.90/4.44 85[label="map toEnumMyBool (takeWhile1 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) MyFalse)",fontsize=16,color="black",shape="box"];85 -> 86[label="",style="solid", color="black", weight=3]; 10.90/4.44 86[label="map toEnumMyBool (takeWhile0 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) otherwise)",fontsize=16,color="black",shape="box"];86 -> 87[label="",style="solid", color="black", weight=3]; 10.90/4.44 87[label="map toEnumMyBool (takeWhile0 (flip ltEsMyInt (Pos (Succ Zero))) (Pos (Succ (Succ (primPlusNat Zero Zero)))) (dsEm numericEnumFrom (psMyInt (Pos (Succ (Succ (primPlusNat Zero Zero)))) (fromIntMyInt (Pos (Succ Zero))))) MyTrue)",fontsize=16,color="black",shape="box"];87 -> 88[label="",style="solid", color="black", weight=3]; 10.90/4.44 88[label="map toEnumMyBool Nil",fontsize=16,color="black",shape="box"];88 -> 89[label="",style="solid", color="black", weight=3]; 10.90/4.44 89[label="Nil",fontsize=16,color="green",shape="box"];} 10.90/4.44 10.90/4.44 ---------------------------------------- 10.90/4.44 10.90/4.44 (6) 10.90/4.44 YES 11.12/6.60 EOF