Comme ¬¬ F ⇒ F n’est pas prouvable en NJf, il est tentant d’ajouter une règle de déduction permettant de le prouver. Cette règle correspondra à un nouveau terme à ajouter au λ-calcul. Nous obtiendrons alors un système de démonstration pour la logique classique.
En fait, nous connaissons déjà le nouveau terme à ajouter ! Il s’agit de l’opérateur C de Felleisen [FFKD87], comme l’a découvert Griffin [Gri90]. Raisonnons en effet intuitivement, au niveau des types: C prend une fonction f en argument, et cette fonction prend une continuation k en argument. Une continuation est juste une fonction de type F ⇒ ⊥, où F est le type de la valeur V à retourner, puisque k V ne retourne pas (donc k V est de type ⊥). La fonction f elle-même ne retourne pas non plus, puisque f k est censée toujours appeler une continuation, k ou autre, pour retourner son résultat; donc f est de type (F ⇒ ⊥) ⇒ ⊥ = ¬ ¬ F. Et le résultat de C f est de type F, le type de la valeur passée à la continuation. En somme, C est de type ¬ ¬ F ⇒ F, pour tout F.
Pour des raisons esthétiques, on va préférer considérer que C n’est pas une constante, mais un opérateur unaire du langage, tel que si u : ¬ ¬ F alors C u : F. Une fois qu’on a C, la construction ∇ n’est plus nécessaire: il suffit de poser ∇ u = C (λ z · u), où z n’est pas libre dans u. (On notera que ∇ est essentiellement l’opérateur “abort” A de [FFKD87].) En effet, on a la dérivation:
où la première ligne est obtenue par affaiblissement du typage donné Γ ⊢ u : ⊥ de u.
On obtient le système de déduction naturelle ND suivant pour la logique classique implicationnelle:
Ce système de déduction n’offre plus la symétrie entre règles d’introduction et d’élimination de NJm, NJf et NJi. Ceci est réparé par le λµ-calcul de Michel Parigot [Par92], que nous ne présenterons cependant pas ici.
En attendant, la syntaxe du λ C-calcul est:
Λc ::= V ∣ Λc Λc ∣ λ V · Λc ∣ C Λc |
et ses règles de réduction sont:
|
On a laissé de côté la règle ( CR), à savoir V ( C u) → C (λ k · u (λ x · k (V x))) lorsque V est une P-valeur, car elle est inutile logiquement.
Preuve : Même preuve que pour le théorème 1, en considérant que ⊥ est un type de base, et que les termes neutres sont tous ceux qui ne commencent ni par λ ni par C; la seule différence est qu’il faut vérifier que si u ∈ RED¬ ¬ F, alors C u ∈ REDF pour tout type F. C’est, comme au théorème 2, par récurrence structurelle sur F.
Si F est un type de base, c’est par récurrence sur ν (u). En effet, C u est dans REDF si et seulement si u ∈ SN. Soit R une réduction partant de C u. Si R commence par une réduction dans u, i.e. u → u′, alors u′ ∈ SN par hypothèse de récurrence, donc R est finie. Si R commence par une réduction au sommet, alors la seule règle possible était (η C), donc u est de la forme λ k · k u′, k non libre dans u′. Dans ce cas, rappelons que u ∈ RED¬¬ F, donc u ∈ SN par (CR1), donc u′ ∈ SN, d’où R est finie de nouveau. R étant quelconque, C u est dans SN, donc dans REDF.
Si F est de la forme F1 ⇒ F2, montrons que C u v ∈ REDF2 pour tout v ∈ REDF1. Notons d’abord que, par hypothèse de récurrence: (*) pour tout w ∈ RED¬ ¬ F2, C w ∈ REDF2. Notons aussi que C u v est neutre. Montrons alors par récurrence sur ν (u) + ν (v) que C u v ∈ REDF2, en utilisant (CR3). Le terme C u v peut se réduire en une étape soit vers (1) C u′ v avec u → u′ (qui est donc dans REDF2 par hypothèse de récurrence), soit vers (2) C u v′ avec v → v′ (même argument), soit vers (3) u′ v par (η C) (avec u = λ k′ · k′ u′, k′ non libre dans u′), soit vers (4) C (λ k · u (λ f · k (f v))).
Dans le cas (4), on a le raisonnement suivant. Rappelons que: (**) si a [x:=b] ∈ REDG2 pour tout b ∈ REDG1, alors λ x · a ∈ REDG1 ⇒ G2. C’était le lemme 6, qui se démontre comme nous l’avons fait au cours de la preuve du théorème 1. Supposons que s ∈ RED¬ F2 et t ∈ REDF1 ⇒ F2 sont des termes arbitraires, s dénotant une valeur possible de k et t une de f:
Dans le cas (3) montrons d’abord que: (***) si λ k′ · k′ u′ ∈ RED¬ ¬ F et k′ n’est pas libre dans u′, alors u′ ∈ REDF. Ceci se démontre par récurrence structurelle sur F. Si F est un type de base, alors par (CR1) λ k′ · k′ u′ ∈ SN, donc u′ ∈ SN = REDF. Si F est de la forme F1 ⇒ F2, soit v ∈ REDF1 quelconque, et considérons le terme λ k″ · (λ k′ · k′ u′) (λ x · k″ (xv)). Ce terme est dans RED¬ ¬ F2, en effet, pour tout s∈ RED¬ F2 (valeur de k″), pour tout t ∈ REDF (valeur de x):
Mais ce terme se réduit en λ k″ · k″ (u′v), qui est dans RED¬ ¬ F2 aussi, par (CR2). Par hypothèse de récurrence, on en conclut u′v ∈ REDF2. Comme v est arbitraire, u′ ∈ REDF. On a donc démontré (***). On traite maintenant le cas (3) en remarquant que si u = λ k′ · k′ u′ ∈ RED¬ ¬ F, alors u′ ∈ REDF par (***), donc le réduit u′v du cas (3) est dans REDF2.
En somme, tous les réduits en une étape de C u v sont dans REDF2. Par (CR3), C u v est donc dans REDF2, et comme v est arbitraire, C u ∈ REDF1 ⇒ F2.
Le reste de la démonstration consiste à redémontrer le lemme 7, comme lors de la démonstration du théorème 1, par récurrence structurelle sur les termes. ♦
|
En déduire une procédure de recherche automatique de preuve pour la logique classique, en généralisant les règles (→+I) et (BC).
|
|
|
|
|