{-# OPTIONS -XNoMonomorphismRestriction #-} module ADD (inv_Fadd,add) where import Control.Monad import InvUtil import Data.Tuple import MyData inv_Fadd = e_Fadd data StatesOfFadd e_0 e_2 e_DEAD = S_Fadd_0 e_0 | S_Fadd_2 e_2 | S_Fadd_DEAD e_DEAD e_Fadd x = case trav_Fadd_0 x of S_Fadd_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: Fadd" trav_Fadd_0 (S t1) = sem_Fadd_0_S (S t1) (trav_Fadd_1 t1) trav_Fadd_0 t = sem_Fadd_0___ t trav_Fadd_1 (S t1) = sem_Fadd_1_S (S t1) (trav_Fadd_1 t1) trav_Fadd_1 t = sem_Fadd_1___ t sem_Fadd_0_S tree (S_Fadd_2 t1) = S_Fadd_0 ((\(x1_1) -> (mymplus (return tree >>= (\(r_v1) -> return ((,) Z r_v1))) (do tmp_r1 <- x1_1 (\(r_v11, r_v12) -> (\(r_v1, r_v2) -> return ((,) (S r_v1) r_v2)) (r_v11, r_v12)) tmp_r1))) t1) sem_Fadd_0_S _ _ = S_Fadd_DEAD mymzero sem_Fadd_0___ tree = S_Fadd_0 (return tree >>= (\(r_v1) -> return ((,) Z r_v1))) sem_Fadd_0___ _ = S_Fadd_DEAD mymzero sem_Fadd_1_S tree (S_Fadd_2 t1) = S_Fadd_2 ((\(x1_1) -> (mymplus (return tree >>= (\(r_v1) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) Z r_v1))) (do tmp_r1 <- x1_1 (\(r_v11, r_v12) -> (\(r_v1, r_v2) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) (S r_v1) r_v2)) (r_v11, r_v12)) tmp_r1))) t1) sem_Fadd_1_S _ _ = S_Fadd_DEAD mymzero sem_Fadd_1___ tree = S_Fadd_2 (return tree >>= (\(r_v1) -> (\(r_x1, r_x2) -> do (r_v11) <- return r_x1 (r_v21) <- return r_x2 return (r_v11, r_v21)) ((,) Z r_v1))) sem_Fadd_1___ _ = S_Fadd_DEAD mymzero data StatesOfE10 e_0 e_DEAD = S_E10_0 e_0 | S_E10_DEAD e_DEAD e_E10 x = case trav_E10_0 x of S_E10_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E10" trav_E10_0 t = sem_E10_0___ t sem_E10_0___ tree = S_E10_0 (return tree) sem_E10_0___ _ = S_E10_DEAD mymzero data StatesOfE11 e_0 e_DEAD = S_E11_0 e_0 | S_E11_DEAD e_DEAD e_E11 x = case trav_E11_0 x of S_E11_0 y -> y _ -> fail "Input is not the range of the expression/function corresponding to the state: E11" trav_E11_0 t = sem_E11_0___ t sem_E11_0___ tree = S_E11_0 (return tree) sem_E11_0___ _ = S_E11_DEAD mymzero add (Z) y = y add (S x) y = S (add x y)