  .___                   ._._             
  |   | ____  ____ ._____| | |  ._       
  |   |/ __ \/  _ \|  __ \ | | _| |__ 
  |   / /_/  ) <_> )  | \/ | |/_   _/   
  |___\___  /\____/|__|  |_|_|  |_|    
     /_____/               

Igor2 is free to use for educational or research purpose only. So feel free to 
play with it as long as you acknowledge the LICENSE.  We would appreciate any 
bugs to be reported to us. If you have commercial interest in one of the 
following programs, please contact us, too.
     
Contact: 
   	 martin.hofmann@uni-bamberg.de
   	 cogsys@uni-bamberg.de
URL:
   	 http://www.cogsys.wiai.uni-bamberg.de/effalip/download.html
   	 
With this Cabal package you should have received the following files:

     ./LICENSE			  -- the license files
     ./README             -- this readme file
     ./igor2.cabal        -- Cabal package description
     ./Setup.hs           -- Cabal package installation
     ./expl/batch.txt     -- a batch file example
     ./expl/Examples.hs   -- some example specifications
     ./src/*              -- the source files (see APPENDIX for a complete list)
   	 
   	 
I. Introduction
---------------------------
Igor2 is an inductive programming system, which generalises over given I/O 
examples of some target functions and constructs a solution which is complete 
and correct w.r.t the given examples. Given the type and some equations of e.g. 
the function 'last' as Haskell code

  last :: [a] -> a
  last [a] = a
  last [a,b] = b
  last [a,b,c] = c
 
following function definition is synthesised:

  last [x0] = x0
  last (x0:x1:x2) = last (x1:x2)
 
II. Installation
---------------------------
Igor2 comes as a Cabal package. To install Igor2 ghc-6.10 is required. To 
resolve all direct and indirect package dependencies the command line interface 
of Cabal is highly recommended. A complete installation guide for Igor2 with 
ghc-6.10 and cabal-install can be found at:
 
	http://www.cogsys.wiai.uni-bamberg.de/effalip/installguide.html .
	
Assuming you have ghc-6.10 and cabal-install already, substitute 
<version number> with an actual version number of a package at

	http://www.cogsys.wiai.uni-bamberg.de/effalip/download.html

and execute the following commands to install Igor2 locally. 

	cabal update
	cabal install happy 
	
	igor2v=<version number>
	wget http://www.cogsys.wiai.uni-bamberg.de/darcs/igor2+/dist/igor2-$igor2v.tar.gz
	tar zxvf igor2-$igor2v.tar.gz
	pushd igor2-$igor2v/
	cabal install
	popd
	rm igor2-$igor2v.tar.gz
	rm -Rf igor2-$igor2v/


III. Usage
---------------------------
To start Igor2 in interactive mode simply type 'igor2' after installation. You 
control Igor2 by typing commands at its prompt 'Igor2 >'. A short command-line 
reference is showed by typing ':help', or a more elaborate explanation can be 
viewed with ':verboseHelp'. To write multiple commands in one line, they have 
to be separated by semicolons.

  Igor2 > :load Examples.hs
  Igor2 > :generalise reverse; test reverse on "reverse [1,2,3,4]"
  
Furthermore, the system can be run in batch mode with an explicitly given 
batch file

  $ igor2 -b batch.txt
  
or by simply passing the commands to the system at the command line. Quotes 
have to be escaped here!

  $ igor2 :load Examples.hs; :generalise reverse; test reverse on \"reverse [1,2,3,4]\"
  

IV. Problem Specification
---------------------------
A specification file for Igor2 is a valid Haskell98 module, which is required 
to type check. Examples for both target functions and background knowledge are 
given extensionally. The patterns on the need to cover the 'n' smallest inputs 
w.r.t. the underlying data type.

V. Trouble Shooting
---------------------------
 * Igor2 is still a prototype under development, so it is quite likely, that 
   you are the first one coming across a bug. If you think you have found one, 
   please send your specification file and the commands to reproduce the bug to 
   the email address mentioned in the header.
 * The Prelude types list ([a]) as well as (Maybe a), Bool, and (Either a b) 
   are built in, other data types have to be defined explicitly, because 
   imports are not supported, yet. This is due to avoid probable name clashes. 
 * If you want to use natural numbers, define them as Peano numbers:
   
    data Peano = Z | S Peano 
    
 * Only use parentheses to clarify associativity, the infix operator ($) is not 
   supported. 

 APPENDIX: List of files
---------------------------
 
     ./LICENSE
     ./igor2.cabal
     ./Setup.hs
     ./README
     ./expl/
     ./expl/batch.txt
     ./expl/Examples.hs
     ./src/
     ./src/Logging.hs
     ./src/Syntax.hs
     ./src/Rating/
     ./src/Rating/Rateable.hs
     ./src/SynthesisEngine.hs
     ./src/Main.hs
     ./src/Syntax/
     ./src/Syntax/IFTemplateHaskell.hs
     ./src/Syntax/Antiunifier.hs
     ./src/Syntax/Expressions.hs
     ./src/Syntax/Unifier.hs
     ./src/Syntax/Patterns.hs
     ./src/Syntax/Types.hs
     ./src/Syntax/Terms.hs
     ./src/Data/
     ./src/Data/IOData.hs
     ./src/Data/Rules.hs
     ./src/Data/CallDependencies.hs
     ./src/Data/MySet.hs
     ./src/Data/Util.hs
     ./src/Data/GlobalConfig.hs
     ./src/Data/Hypotheses.hs
     ./src/Data/HypoSpace.hs
     ./src/Data/IgorMonad.hs
     ./src/RuleDevelopment/
     ./src/RuleDevelopment/Matching.hs
     ./src/RuleDevelopment/Subfunction.hs
     ./src/RuleDevelopment/Partition.hs
     ./src/RuleDevelopment/Abduce.hs
     ./src/Context/
     ./src/Context/SynthesisContext.hs
     ./src/Context/ContextBuilder.hs
     ./src/Context/ModuleContext.hs
     ./src/RuleDevelopment.hs
     ./src/Logging/
     ./src/Logging/PrettyPrinter.hs
     ./src/Logging/Logger.hs
     ./src/UI/
     ./src/UI/IOInterpreter.hs
     ./src/UI/REPLoop.hs
     ./src/UI/Help.hs
     ./src/UI/UIStarter.hs
     ./src/Language/
     ./src/Language/Haskell/
     ./src/Language/Haskell/Meta/
     ./src/Language/Haskell/Meta/Syntax.hs
     ./src/Language/Haskell/Meta/Parse.hs
     ./src/Language/Haskell/Meta/Utils.hs
     ./src/Language/Haskell/Meta/Syntax/
     ./src/Language/Haskell/Meta/Syntax/Vars.hs
     ./src/Language/Haskell/Meta/Syntax/Translate.hs
     ./src/Language/Haskell/Meta.hs
  