
* Compilation

    - You will need a recent version of OCaml, as well as Coq version 8.5.
    If you are using opam, this can be performed by:
        opam update
        opam upgrade
        eval `opam config env` # Note: Check that this line is in your .bashrc
        opam pin add coq 8.5.0
        opam install coq

    - To compile, you need to first install the Coq library “Containers”.
    It can be installed via Opam, if you are using Opam:
        opam repo add extra-dev https://coq.inria.fr/opam/extra-dev
        opam install coq:containers
    If the last line does not work, maybe the following will:
        opam install coq-containers
    Otherwise, it can for instance be found at:
        http://coq.inria.fr/pylons/contribs/view/Containers/v8.4
    If you install it by hand, we advise you to add such lines in your “~/.coqrc” file:
        Add Rec LoadPath "<path to library>".

    - You also need the TLC library (trunk version, branch “suggestion”).
    To install and compile it, run at the “Coq/” level (this step requires Git to be installed):
        make tlc
    If you prefer to install it manually, it can also be found at:
        https://gforge.inria.fr/scm/?group_id=2638
    Make sure that you selected branch “suggestion” of TLC, on which this development is based on.
    By default, TLC only checks files instead of really compiling it.  This is a problem for our development as we need the fully compiled “*.vo” files. Before the compilation, make sure to have a file named “settings.sh” in “Coq/lib/tlc/src” with the following line:
        SERIOUS=true

    - You need to compile some files in the directory “Coq/lib/itp10”:
        cd lib/itp10 ; make ; cd ../..

    - The following command can perform the last two steps. It should install and compile TLC and the files of “Coq/lib/itp10”.
        make lib

    - The following command builds the “.depend” file needed for the rest of the compilation.
        make depend

    - Typing “make -j” should work after these steps completed.  Note that this can take some time. It can also take a lot of resources: in certain cases, dropping the “-j” option may be advisable.
    - “make doc” generates the documentation (this will compile everything and convert every compiled file into html).


* Description of the Files.

** libsem/PrettyBigStep.v

    This file contains the definition of pretty-big-step derivations, concrete and abstract, as well te predicates stating that these are related.
    The correctness theorem is stated and proven. An example of a concrete semantics is given in the file “ConcreteWhile.v”, as well as some derivations example.
    File AbstractSign gives an example of an abstract semantics.

** libsem/LiftSem.v

    This file contains some way to build new semantics from already defined semantics, and to lift all lemmae proven for the initial semantics to the generated ones.

** itp10

    We make use of the lattice definition by David Cachera and David Pichardie in
        Proof Pearl: A Certified Denotational Abstract Interpreter (ITP 2010)
    Everything within this directory is from their library.

** liblat

    Some additional lattice definitions not present on itp10 but which might be added.
    Note that some lemmae are left admitted in this file. This is not a problem to picture our methodology, as this file only intervenes in the definition of Domains, not its usages.

** Shared.v

    Some additional definitions which might be added into TLC at one point.

