\item un lambda terme creux (\verb|Ref (ref Hole)|) que l'on construit petit à petit à l'aide des tactiques.
\item le type associé à ce que l'on souhaite prouver
\item son contexte, c'est à dire un liste d'hypothèses (nom de l'hypothèse, type, $\lambda$-terme possiblement encore creux qui sera mis à jour facilement grâce aux \verb|ref|s)
\end{itemize}
Au moment du \verb|Qed|, ce $\lambda$-terme de preuve qui a
été gardé de côté est $\beta$-réduit puis typé contre le type
du but définit au moment de \verb|Goal|.
\section{Tactiques}
\label{s:tactic}
Dans le mode générique, le programme démarre un assistant de preuve interactif semblable à Coq.
Voici les commandes et tactiques implémentées:
\begin{itemize}
\item\verb|Goal| pour émettre un nouveau but
\item\verb|Undo| pour annuler la dernière tactique
\item\verb|Qed| pour clore la preuve d'un but
\item\verb|exact| si une hypothèse correspond parfaitement à notre but courant
\item\verb|assumption| recherche automatique d'une hypothèse correspondant au but courant
\item\verb|intro| pour défaire une implication
\item\verb|intros| pour répéter \verb|intro| autant que possible
\item\verb|cut| permet de faire une élimination
de la coupure.
\item\verb|apply H| où \verb|H| est une implication
avec le but courant en conclusion permet de prouver
directement les prémisses de l'implication.
\item\verb|split| permet de prouver un côté puis l'autre
d'une conjonction
\item\verb|left| et \verb|right| permettent de choisir
quel côté de la conjonction prouver
\item\verb|try| pour essayer une tactique. Si elle échoue,
rien ne se passe.
\end{itemize}
\section{Conlusion}
Nous avons présenté notre assistant de preuve \textbf{Pieuvre}.
Il permet de prouver des prédicats logiques simples.
Plusieurs extensions (et améliorations) sont envisageables.
Tout d'abord, on pourrait évidemment enrichir la grammaire
et les tactiques pour avoir un langage plus expressif.
On pourrait également laisser la possibilité à l'utilisateur
de prouver des \verb|lemmes| et des \verb|théorèmes| pour les
sauvegarder et les réutiliser plus tard.
Il faudrait alors également proposer les types dépendants.
Enfin, il faut se poser la question de la fiabilité de notre
assistant de preuve. Il serait difficile de prouver formellement
toutes les composantes du programme (la~$\beta$-réduction,
l'~$\alpha$-conversion, le \verb|typecheck|, etc.).
Ainsi, on propose de sauvegarder les termes de preuves puis de