[new version and tidy Main
martin.hofmann@uni-bamberg.de**20090423133522] hunk ./src/Main.hs 4
-import Syntax
-import Logging
-import Control.Monad
-import Control.Monad.Trans 
-import Language.Haskell.TH
-import SynthesisEngine
-import Data.IgorMonad
---import Data.Initialiser 
-import ExampleDefs
-
hunk ./src/Main.hs 5
-{-------------------------------------------------------------------------------
-   Test Cases
--------------------------------------------------------------------------------}
-
-data Tree a = E | N a (Tree a) (Tree a)
-
-printQ q = (runQ q) >>= putStrLn . pprint 
-showQ q = (runQ q) >>= putStrLn . show
-
-
-tuples1,tuples2,tuples3,tuples4 :: Q [Exp]        
-tuples1 = sequence [[|(1,1)|]
-          ,[|(2,2)|]
-          ,[|(3,3)|]] 
-tuples2 = sequence [[|(1,2)|]
-          ,[|(2,2)|]
-          ,[|(3,3)|]]
-tuples3 = sequence [[|(3,1)|]
-          ,[|(2,2)|]
-          ,[|(3,3)|]]
-tuples4 = sequence [[|(3,1)|]
-          ,[|(3,2)|]
-          ,[|(3,3)|]]
-
-apps1, apps2, apps3, apps4, apps5  :: Q [Exp]                  
-apps1 = sequence [[|(:) 1 ((:) 2 [])|]
-        ,[|(:) 1 ((:) 2 [])|]]
-apps2 = sequence [[|(:) 2 ((:) 2 [])|]
-        ,[|(:) 1 ((:) 2 [])|]]
-apps3 = sequence [[|(:) 1 ((:) 2 [])|]
-        ,[|(:) 1 ((:) 2 ((:) 3 []))|]
-        ,[|(:) 1 ((:) 2 [])|]]
-apps4 = sequence [[|reverse ((:) 1 ((:) 2 []))|]
-        ,[|reverse ((:) 1 ((:) 2 ((:) 3 [])))|]
-        ,[|reverse ((:) 1 ((:) 2 []))|]]
-apps5 = sequence [[|reverse ((:) 1 ((:) 2 []))|]
-        ,[|(:) 1 ((:) 2 ((:) 3 []))|]
-        ,[|(:) 1 ((:) 2 [])|]]
-
-list1,list2,list3,list4,list5,list6 :: Q [Exp]      
-list1 = sequence [[|[1,2,3]|]
-        ,[|[1,2,3]|]]
-list2 = sequence [[|[1,2,3]|]
-        ,[|[1,2,4]|]]
-list3 = sequence [[|[1,2,3]|]
-        ,[|[1,2,4,5]|]]
-list4 = sequence [[|[1,2,3]|]
-        ,[|[4,5,6]|]]
-list5 = sequence [[|[1,2,3]|]
-        ,[|[4,5,6,7]|]]
-list6 = sequence [[|[]|]
-        ,[|[]|]]
-
-infix1,infix2,infix3,infix4,infix5,infix6,infix7,infix8 :: Q [Exp]
-infix1 = sequence [[|1+2|]
-         ,[|1+2|]]
-infix2 = sequence [[|2+2|]
-         ,[|1+2|]] 
-infix3 = sequence [[|1+2|]
-         ,[|2+1|]]
-infix4 = sequence [[|(+2)|]
-         ,[|(+2)|]]
-infix5 = sequence [[|(1+)|]
-         ,[|(1+)|]]
-infix6 = sequence [[|(+2)|]
-         ,[|(1+)|]
-         ,[|1+2|]]
-infix7 = sequence [[|(2+)|]
-         ,[|(1+)|]]
-infix8 = sequence [[|(+2)|]
-         ,[|(+1)|]]
-
-fundef0,fundef1,fundef2,fundef3,fundef4,fundef5 :: Q [Dec]
-fundef0 = return []
-fundef1 = sequence [liftM head [d| reverse (1:xs)   = xs ; 
-                                   reverse (1:2:xs) = (2:xs) |]]
-fundef2 = sequence [liftM head [d| reverse (1:xs)   = xs ; 
-                                   reverse (1:2:xs) = 2 |]]
-fundef3 = sequence [liftM head [d| reverse [1,2,3] = [3,2,1] ;
-                                   reverse [3,2,1] = [1,2,3] |]]
-fundef4 = sequence [liftM head [d| fst (1,2) = 1 ;
-                                   fst (1,4) = 1 |]]
-fundef5 = sequence [liftM head [d| fst (1,x) = 1 ;
-                                   fst (1,x) = 1 |]]
-
-
-
-
-u = 1
-v = 2
-w = 3
-x = 4
-y = 5
-z = 6
-
-
-varU = varE $ mkName "u"
-varV = varE $ mkName "v"
-varW = varE $ mkName "w"
-varX = varE $ mkName "x"
-varY = varE $ mkName "y"
-varZ = varE $ mkName "z"
-var0 = varE $ mkName "0"
-var1 = varE $ mkName "1"
-var2 = varE $ mkName "2"
-var3 = varE $ mkName "3"
-var4 = varE $ mkName "4"
-
-
-varpU = varP $ mkName "u"
-varpV = varP $ mkName "v"
-varpW = varP $ mkName "w"
-varpX = varP $ mkName "x"
-varpY = varP $ mkName "y"
-varpZ = varP $ mkName "z"
-varp0 = varP $ mkName "0"
-varp1 = varP $ mkName "1"
-varp2 = varP $ mkName "2"
-varp3 = varP $ mkName "3"
-varp4 = varP $ mkName "4"
-
-term00 =  [| (w,2,y)|]
-term00v = [| (1,x,3)|]
-
-term01 =  [| (x,y)|]
-term01v = [| (y,x)|]
-
-term02 =  [| (x,x)|]
-term02v = [| (w,y)|]
-
-term03 =  [| (x,w)|]
-term03v = [| (w,y)|]
-
-term04 =  [| (x,w,w)|]
-term04v = [| (x,w,x)|]
-
-term04' =  [| (x,w,w)|]
-term04v' = [| (x,w,x)|]
-
-term1 = [| (x,y)|]
-term1v = [| (fst (x,y),y)|]
-
-term2 =   [|reverse ((:) 1 ((:) 2 ((:) 3 ((:) 4 [] ))))|]
-term2v =  [|reverse ((:) u ((:) v ((:) w ((:) x [] ))))|]    
-
-term3 = appE (varE 'reverse) (appE (appE (conE '(:)) (litE (IntegerL 1))) (appE (appE (conE '(:)) (litE (IntegerL 2))) (appE (appE (conE '(:)) (litE (IntegerL 3))) (appE (appE (conE '(:)) (litE (IntegerL 4))) (conE '[])))))
-term3v = appE (varE 'reverse) (appE (appE (conE '(:)) (varU )) (appE (appE (conE '(:)) ( varV)) (appE (appE (conE '(:)) (varW)) (appE (appE (conE '(:)) (varX)) (conE '[])))))
-
-term4 = appE (appE (varE 'drop) (litE (IntegerL 3))) (listE [tupE [litE (IntegerL 1),litE (IntegerL 2),litE (IntegerL 3),litE (IntegerL 4)],tupE [litE (IntegerL 1),litE (IntegerL 2),litE (IntegerL 3),litE (IntegerL 4)],tupE [litE (IntegerL 1),litE (IntegerL 2),litE (IntegerL 3),litE (IntegerL 4)]])
-term4v = appE (appE (varE 'drop) (litE (IntegerL 3))) (listE [tupE [litE (IntegerL 1),litE (IntegerL 2),litE (IntegerL 3),litE (IntegerL 4)],tupE [litE (IntegerL 1),litE (IntegerL 2),litE (IntegerL 3),litE (IntegerL 4)],tupE [litE (IntegerL 1),litE (IntegerL 2),litE (IntegerL 3),litE (IntegerL 4)]])
-
-term5' = appE (appE (varE 'drop) (litE (IntegerL 3))) (appE (appE (conE '(:)) (appE (appE (appE (appE (conE '(,,,)) (litE (IntegerL 1))) (litE (IntegerL 2))) (litE (IntegerL 3))) (litE (IntegerL 4)))) (appE (appE (conE '(:)) (appE (appE (appE (appE (conE '(,,,)) (litE (IntegerL 1))) (litE (IntegerL 2))) (litE (IntegerL 3))) (litE (IntegerL 4)))) (appE (appE (conE '(:)) (appE (appE (appE (appE (conE '(,,,)) (litE (IntegerL 1))) (litE (IntegerL 2))) (litE (IntegerL 3))) (litE (IntegerL 4)))) (conE '[]))))
-term5v' = appE (appE (varE 'drop) (varX)) (appE (appE (conE '(:)) (appE (appE (appE (appE (conE '(,,,)) (varW)) (varY)) (varX)) (varZ))) (appE (appE (conE '(:)) (appE (appE (appE (appE (conE '(,,,)) (varW)) (varY)) (varX)) (varZ))) (appE (appE (conE '(:)) (appE (appE (appE (appE (conE '(,,,)) (varW)) (varY)) (varX)) (varZ))) (conE '[]))))
-term5    = [|drop 3 [(1,2,3,4,5),(1,2,3,4,5),(1,2,3,4,5),(1,2,3,4,5)]|]
-term5v   = [|drop 3 [(5,4,3,2,1),(5,4,3,2,1),(5,4,3,2,1),(5,4,3,2,1)]|]
-term5''  = [|drop 3 [(1,2,3,4,5),(1,2,3,4,5),(1,2,3,4,5),(1,2,3,4,5)]|]
-term5v'' = [|drop 3 [(5,4,3,2,1),(5,4,3,2,1),(5,4,3,2,1)]|]
-
-term6' = (appE (appE (appE (appE (conE '(,,,)) (litE (IntegerL 1))) (litE (IntegerL 2))) (litE (IntegerL 3))) (litE (IntegerL 4)))
-term6v' = (appE (appE (appE (appE (conE '(,,,)) (varZ)) (varY)) (varX)) (varU))
-term6 = [|(1,2,3,4)|]
-term6v = [|(w,x,y,z)|]
-
-term7' = (appE (appE (appE (appE (conE '(,,,)) (litE (IntegerL 1))) (litE (IntegerL 1))) (litE (IntegerL 1))) (litE (IntegerL 1)))
-term7v' = (appE (appE (appE (appE (conE '(,,,)) (varZ)) (varY)) (varX)) (varU))
-term7 = [|(1,1,1,1)|]
-term7v = [|(w,x,y,z)|]
-
-term8 =  [| N 1 (N 3 (N 4 E E) ( N 5 E E)) (N 2 (E) (E)) |] 
-term8' = [| N 2 (N 2 (E) (E)) (N 3 (N 4 E E) ( N 5 E E)) |]
-
-
-a = (N 4 E E)
-term9b  =  [| N 1 (N 3 (N 4 E E) ( N 5 E E)) (N 2 (E) (E)) |] 
-term9b' =  [| N 1 (N 3     a     ( N 5 E E)) (N 2 (E) (E)) |] 
-
-terms9 = sequence [ [d|rev [] = []|]
-                  , [d|rev [a] = [a]|]
-                  , [d|rev [a,b] = [b,a]|]
-                  , [d|rev [a,b,c] = [c,b,a]|]
-                  ]
-term10 = [| [x,y,z]|]        
-term10' = [| [u,v]|]        
-pat1 = conP '(:) [litP (IntegerL 1),conP '(:) [litP (IntegerL 2),conP '(:) [litP (IntegerL 3),conP '(:) [litP (IntegerL 4),conP '[] []]]]]
-pat1v = conP '(:) [varpZ,conP '(:) [varpY,conP '(:) [varpX,conP '(:) [varpW,conP '[] []]]]]
-
-
-
-
-	
---testunify :: (Term t, Antiunifieable k v t,Unifieable t) => t -> t -> LM t
---testunify t s = do --setGlobalLogLevel "Test"
---                   setCurrentLogger "Test.testunify"
---                   logIN $ ["Term 1 is ", skip (view t),"Term 2 is ", skip (view s) ]
---                                      
---                   logIN $ ["Unifying Term1 and Term1"]
---                   u1 <- mgu t s
---                   logIN $ ["Resulting unifier is " ++ (view u1)]      
---                   return t
---                   
---testantiunify :: (Term t, Antiunifieable k v t,Unifieable t) => t -> t -> LM t
---testantiunify t s = do logIN $ ["Term 1 is ", skip (view t),"Term 2 is ", skip (view s) ]
---                   
---                       logIN $ ["Antiunifying Term1 and Term2"]
---                       ai <- antiunify [t,s]
---                       logIN $ ["Resulting antiinstance is " ++ (view ai)]    
---                       return t                                   
---testcase1 :: (Term t, Antiunifieable k v t,Unifieable t) => t -> t -> LM t
---testcase1 t s = do --setGlobalLogLevel "Test"
---                   setCurrentLogger "Test.testcase1" 
---                   logIN $ ["Term 1 is ", skip (view t),"Term 2 is ", skip (view s) ]
---                   
---                   logIN $ ["Antiunifying Term1 and Term2"]
---                   ai <- antiunify [t,s]
---                   logIN $ ["Resulting antiinstance is " ++ (view ai)]                   
---                   
---                   logIN $ ["Unifying Term1 and antiinstance"]
---                   u1 <- mgu t ai
---                   logIN $ ["Resulting unifier is " ++ (view u1)]      
---                   
---                   logIN $ ["Unifying Term1 and Term2"]
---                   u2 <- mgu t s
---                   logIN $ ["Resulting unifier is " ++ (view u2)]
---                   
---                   logIN ["Applying unifier to Term1: " ++ (view t)]
---                   au1 <- applyMgu u2 t
---                   logIN $ ["Result is " ++ (view au1)]    
---                   
---                   logIN ["Applying unifier to Term2: " ++ (view s)]
---                   au2 <- applyMgu u2 s
---                   logIN $ ["Result is " ++ (view au2)]            
---                   return au2
---                   
---testcase2 :: (Term t, Antiunifieable k v t,Unifieable t) => t -> t -> LM t
---testcase2 t s = do --setGlobalLogLevel "Test"
---                   setCurrentLogger "Test.testcase2" 
---                   logIN $ ["Term 1 is ", skip (view t),"Term 2 is ", skip (view s) ]
---                   
---                   logIN $ ["Antiunifying Term1 and Term2"]
---                   ai <- antiunify [t,s]
---                   logIN $ ["Resulting antiinstance is " ++ (view ai)]                   
---                   
---                   logIN $ ["Unifying Term1 and antiinstance"]
---                   u1 <- mgu t ai
---                   logIN $ ["Resulting unifier is " ++ (view u1)]
---                   
---                   logIN $ ["Matching Term1 and antiinstance"]
---                   m <- matches t ai
---                   logIN $ ["Result is " ++ (show m)]
---                   return t
---                   
---testcase3 :: (Term t, Antiunifieable k v t,Unifieable t) => t -> t -> LM t
---testcase3 t s = do --setGlobalLogLevel "Test"
---                   setCurrentLogger "Test.testcase3" 
---                   logIN $ ["Term 1 is ", skip (view t),"Term 2 is ", skip (view s) ]
---                   
---                   logIN $ ["Antiunifying Term1 and Term2"]
---                   ai <- antiunify [t,s]
---                   logIN $ ["Resulting antiinstance is ",(view ai)]  
---                   
---                   logIN $ ["Positions of Variable in Anitinstance"]
---                   let varpos = getVarPos ai
---                   logIN $ ["Variables at positions:",(show varpos)]
---                   
---                   return t
---                   
-----testinit :: Dec -> Dec -> LM Dec
-----testinit d1 d2 = do logIN $ ["Dec1 is ", skip (view d1),"Dec2 is ", skip (view d2) ]
-----
-----                    logIN $ ["Transforming Dec1 to FunDef"] 
-----                    let fdef1 = toFunDef d1
-----                    logIN $ ["Resulting FunDef is:", skip (show fdef1)]
-----                    
-----                    logIN $ ["Transforming Dec2 to FunDef"]
-----                    let fdef2 = toFunDef d2
-----                    logIN $ ["Resulting FunDef is:", skip (show fdef2)]
-----                    return d1
---
---                   
---dotest  :: (Ppr t) => (t -> t -> LM t) -> (Q t) -> (Q t) -> IO ()
---dotest f t s = runQ $
---    do t1 <- t
---       t2 <- s
---       let (r,l) = runEL  (f t1 t2) 
---       runIO $ putStrLn "*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*"
---       runIO $ putStrLn "|                                 Logging Result                                |"
---       runIO $ putStrLn "*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*"
---       runIO $ putStrLn (view l)
---       runIO $ putStrLn "*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*"
---       runIO $ putStrLn "|                              Computational Result                             |"
---       runIO $ putStrLn "*- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -*"
---       runIO $ (printQ.return) r
-
-loop ::  Int -> Int
-loop i = if odd i then loop (i+1) else loop (i-1)
hunk ./src/Main.hs 6
-main = startUI -- igortest -- print test1 --  dotest testunify term7 term7v
---igortest = startSynthesis revdef [d||]
+main = startUI
hunk ./src/UI/UIStarter.hs 27
-version = "v0.5.4"
+version = "v0.5.5"