Séjour de Mathieu à Nancy du 1 au 2 juillet 2009

Objectif : intégrer fold/unfold dans Dedukti

Avec des règles de réécriture du genre : Nat(n) -> ... Nat(m)... le typechecker boucle.
Une solution, adoptée par lemuridae, est de séparer les règles de réécriture en deux ensembles : le premier modulo lequel le système de type est considéré, le second contenant des règles destinées à être pliée/dépliées explicitement. Il faut donc prévoir deux nouvelles constructions dans les termes de preuves et les règles de typage et de réduction qui vont avec. Pour la règle de réécriture R : P -> Phi, on a les deux règles de typage suivantes :


pi : Phi
-------------- (pliage)
R pi : P


pi : P
--------------------------- (dépliage)
let (R x) = pi in x : Phi

et la règle de réduction :

let (R x) = R pi in x --> pi

On ne peut pas s'en passer dans lemu car on n'a pas de règles de réécriture sur les termes de preuve, seulement sur les termes du premier ordre. En revanche, on peut réécrire les termes de preuve dans Dedukti, donc on peut simuler
fold/unfold avec deux axiomes et une regle de réécriture:

foldR : x1:T1 -> ... -> xn:Tn -> Phi:Prop -> P
unfoldR : x1:T1 -> ... -> xn:Tn -> P:Prop -> Phi

et la règle

unfoldR (foldR pi) --> pi

On perd juste un peu le confort apporté par l'instanciation automatique de x1 ... xn lors de l'application des règles d'inférence.

Un fichier arith.eu a été créé dans les exemples de Deduktipour démontrer la faisabilité de cette "technique".

Reste du séjour

Correction de bugs divers et avancement dans la traduction du prélude de Coq.