Add statistics printing in Makefile.
Add syntactic support for dot patterns.

Allowing dot patterns implies changing the syntax of left hand side of
rewrite rules and adding syntax nodes. These nodes (struct Pat) are now
described in dk.h, the yacc syntax in dkparse.y has been extended.

The new module pat.c checks that patterns respect basic well formation
conditions, it has not yet been extensively tested. No scoping checks
are performed in pat.c, instead scope.c was extended to smoothly scope
and qualify pattern nodes (see the pscope function).

The struct Rule type was changed to support patterns as left hand side
members, and the fields vpa and elen were added, they store respectively
the bindings from pattern variable to paths, and the size of the rule
environment. The vpa field is filled by the pchk function in pat.c,
while the elen field can readily be computed when constructing the rule
node (in pushrule in rule.c).

Rule checking is now made easier because most of the job is done in
the pat.c module.
Update README file.
Check that pattern variables are not applied.

Before changing their arity to -1, we must make sure that the variable
is not applied, if it is, an error is raised.
Fix a bug in path generation.

Root elements of the path were screwed because dot patterns were not
taken into account. The test that a variable is applied is now done in
pscope, so we only need to update their usage counter.

Not that variables are marked by np<0, not nd<0, we must be extra
cautious with this! One bug in pat.c related to this issue was fixed.
Changing the type of nd to unsigned could solve this problem...
Update to the newest syntax.

In the newest syntax, using extra parenthesis in patterns is considered
as a syntax error.
Add code generation for dot patterns.

The code generator is only slightly changed because the old struct Pat
almost matches with the new one. Though, there is one big difference:
before, we stored array of patterns, now we use array of pointers on
patterns, this makes the copy slightly faster but the access is a bit
longer. I did not benchmark this change.

We need to find a good terminology to speak about the two kinds of
arities (dot patterns v.s. regular patterns). Many functions still use
'ar' or 'arity' when they mean 'regular arity', i.e. the number of
arguments to the constructor which are not dot patterns (i.e. terms).
Add a simple dot pattern test.

This test should type check with the newest version of dedukti, I am not
still quite sure if the restrictions I imposed on dot patterns will
imply a big lack of 'completeness' but I did not experience any problem
while writing the 'app' function in this test.
Remove useless argument to IO functions.

Since the FILE pointer is global we do not need to give it to IO
functions.
Abort checking when a lambda does not face a Pi.

In this case, a friendly error message is issued instead of a more
cryptic "Type synthesis failed.".
Use explicit comparisons with strcmp.

The 'idiom' !strcmp(a, b) is not very intuitive, to avoid errors, we
always compare strcmp to an explicit integer.
Add two test files generated by coqine.
Tidy the test directory.
Add an automatic test system.

I hacked a small test system in Lua, it type checks dedukti files in the
test directory. This is still very hacky because dkparse must be
launched in a specific directory if we want it to work.

I also added a small test ensuring that products cannot be made over
objects.
Update README.
Run the 'exemple.dk' test.
Handle properly qualified names.

Atoms are still stored as strings however, a function aqual is now
provided in the alloc.c module. This function returns the position of
the first char an identifier's unqualified name. For instance, for the
name "Mod.A.x", aqual returns 6. This function executes in constant time
because its result is provided during the creation of atoms (by the
astrdup function).

This allowed to clean the function gname in the code generator. Indeed,
the module part of a qualified name is now skipped and not mangled.
Call gname on atoms only.

The gname function call aqual on its argument, hence this one must be an
atom, I documented this trap in the comment describing the gname
function.
Optimize the gname function.

This function is called a huge amount of times, it must be almost
optimal.
Use usual conditionals to test domains.

This makes adummy useless and seems to be a bit more efficient.