Previous Up Next

5  A-traduction et théorème de Kreisel-Friedman

Nous avons souvent parlé des versions classiques des systèmes logiques intuitionnistes que nous avons étudié: PA1 correspondant à HA1, PA2 à HA2, etc. Les systèmes intuitionnistes étaient plus faciles à étudier, notamment ils nécessitaient moins de règles de normalisation des preuves. Cependant, les systèmes classiques correspondants sont cohérents eux aussi, et de plus ils sont d’un usage beaucoup plus courant en mathématiques. On peut donc se demander quels sont les rapports précis entre les variantes intuitionnistes et classiques des systèmes logiques étudiés.

5.1  Non-non traductions et style par passage de continuations

Une partie claire du rapport entre logiques intuitionnistes et classiques est que toute preuve intuitionniste est une preuve classique, mais qu’il existe des preuves classiques non intuitionnistes. Cependant, ceci n’entame en rien le pouvoir expressif des logiques intuitionnistes comparées à leurs variantes classiques. Ce résultat est dû à Kurt Gödel, mais les traductions que nous utiliserons se rapprochent davantage de traductions dues à Kolmogorov ou à Kuroda.

Commençons par la logique propositionnelle avec ⇒ et ⊥ comme connecteurs logiques. Pour toute formule F, on définit sa ¬¬-traduction F¬¬ comme suit:

  
    F¬¬=def¬ ¬ F 
    A=defA(A type de base, y compris ⊥) 
    (F ⇒ G)=defF⇒ G¬¬  

Ceci peut se justifier comme suit: en logique classique, FG est non F ou G, c’est-à-dire aussi ¬ (F ∧ ¬ G); or F ∧ ¬ G est équivalent à (F ⇒ ¬ G ⇒ ⊥) ⇒ ⊥ = ¬ (F ⇒ ¬ ¬ G). Ceci mène à l’idée que l’on peut définir F¬¬ en remplaçant récursivement tous les FG par quelque chose ressemblant à ¬ ¬ (F ⇒ ¬ ¬ G).

Rappelons que ¬ F est défini comme F ⇒ ⊥. En particulier, ( ¬ F )¬¬ = ¬ ¬ (F⇒ ¬ ¬ ⊥).

Lemme 18   En logique propositionnelle classique, F et F¬¬ sont logiquement équivalentes pour toute formule F. De plus, F est prouvable en logique classique si et seulement si F¬¬ est prouvable en logique intuitionniste.

Autrement dit, modulo l’ajout de suffisamment de doubles négations saupoudrées dans F, on obtient une formule qui signifie la même chose que F en classique et qui est prouvable en intuitionniste dès que F est prouvable en classique. Par exemple, ¬ ¬ AA n’est pas prouvable en intuitionniste, mais ( ¬ ¬ AA )¬¬ = ¬ ¬ (((A ⇒ ¬ ¬ ⊥) ⇒ ¬ ¬ ⊥) ⇒ ¬ ¬ A) l’est. (On notera au passage que cette traduction n’est pas particulièrement économe en négations. Il en existe des plus économes.)

Preuve : Il peut servir de s’exercer à construire quelques preuves intuitionnistes de base. D’abord, si u : G, alors u =def λ k · ku est de type ¬ ¬ G. Ensuite, si u : ¬ ¬ ¬ G, alors u0 =def λ y · uz · zy) est de type ¬ G. Et si u : ¬ ¬ (GH) et v : ¬ ¬ G, alors u * v =def λ k · ux · vy · k (xy))) est de type ¬ ¬ H (où k : ¬ H, x : GH, y : G).

L’équivalence entre F et F¬¬ en classique signifie qu’il existe un λ C-terme clos uF de type FF¬¬ et un λ C-terme clos vF de type F¬¬F. On définit ces termes par récurrence structurelle sur F: pour tout type de base A, uA =def λ x · x, vA =def λ x · C x; enfin uFG =def λ x · λ k · ky · uG (x (vF y))) (où x : FG, k : ¬ (FG¬¬), y : F); et vFG =def λ x · λ y · vG (( x * uF y )0) (où x : ¬ ¬ (FG¬¬), y : F; ceci est bien défini car x * uF y est de type ¬ ¬ G¬¬ = ¬ ¬ ¬ (¬ G), donc ( x * uF y )0 est bien défini).

Si F¬¬ est prouvable en intuitionniste, autrement dit s’il existe un λ∇-terme clos u de type F¬¬, alors on peut considérer u comme un λ C-terme en posant ∇ v =def Cz · v) pour tout v, avec z non libre dans v. Donc vF u est un λ C-terme clos de type F: F est prouvable en classique.

Réciproquement, montrons que si F est prouvable en classique, alors F¬¬ est prouvable en intuitionniste. Pour ceci, considérons un λ C-terme u quelconque tel que ⊢ u : F, et construisons un λ∇-terme u′ tel que ⊢ u′ : F¬¬. Plus généralement, construisons par récurrence structurelle sur le λ C-terme u tel que x1 : F1, …, xn : Fnu : F, un λ∇-terme u* tel que x1 : F1, …, xn : Fnu* : F¬¬. Comme F¬¬ = ¬ ¬ F, on va construire u* comme ⟨ u k, où x1 : F1, …, xn : Fn, k : ¬ F⊢ ⟨ u k : ⊥.

Si u est une variable, alors c’est un xi, 1≤ in, et on pose ⟨ u k =def ku.

Si u est de la forme λ x · v de type GH, alors par hypothèse de récurrence on a pu dériver x1 : F1, …, xn : Fn, x : Gv* : H¬¬, donc ⟨ u k =def kx · v*) = kx · λ k′ · ⟨ v k) convient.

Si u est de la forme vw avec v de type GH et w de type G, alors par hypothèse de récurrence dans le contexte x1 : F1, …, xn : Fn, v* est de type ¬ ¬ (GH¬¬) et w* est de type G¬¬ = ¬ ¬ G, donc u* peut être défini comme ( v* * w* )0. Plus explicitement, comme λ y · (λ k · v*x · w*y · k (xy)))) (λ z · zy), qui se réduit en λ k · v*x · w*y · xyk)) (à α-conversion près). On pose donc ⟨ u k =defvx · ⟨ wy · xyk)).

Si u est de la forme C v avec v de type ¬ ¬ F, alors par hypothèse de récurrence dans le contexte x1 : F1, …, xn : Fn, v* est de type ¬ ¬ ((F⇒ ¬ ¬ ⊥) ⇒ ¬ ¬ ⊥). Donc si k : ¬ F, v*x · xy, k′ · ky) (λ z · z)) est de type ⊥ (où x : (F⇒ ¬ ¬ ⊥) ⇒ ¬ ¬ ⊥, y : F, k′ : ¬ ⊥, z : ⊥). On pose donc ⟨ u k =defvx · xy, k′ · ky) (λ z · z)).

    ♦

Le terme ⟨ u k est défini par:

  
    ⟨ x ⟩ k=defkx 
    ⟨ λ x · u ⟩ k=defk (λ x · λ k′ · ⟨ u ⟩ k′) 
    ⟨ uv ⟩ k=def⟨ u ⟩ (λ x · ⟨ v ⟩ (λ y · xyk)) 
    ⟨  C u ⟩ k=def⟨ u ⟩ (λ x · x (λ yk′ · ky) (λ z · z))

Les trois premières lignes sont connues comme la traduction par valeur de Plotkin [Plo76].

Dans cette définition, k est toujours d’un type de la forme ¬ F, et joue le rôle d’une continuation acceptant des valeurs de retour de type F. La traduction uu* = λ k · ⟨ u k est ce qu’on appelle une traduction en style de passage de continuations (continuation-passing style ou CPS en anglais). Elle exprime en fait directement une sémantique par continuations (comparer avec la section 5.2 en partie I): pour évaluer une variable x dans une continuation k, on retourne (la valeur de) la variable par k; pour évaluer une abstraction λ x · u, on retourne par la continuation k la fonction qui prend (la valeur de) l’argument x et la continuation k′ qui sera courante au moment de l’application de l’abstraction à son argument, et qui retourne la valeur du corps u de l’abstraction dans la continuation k′; pour évaluer une application uv dans la continuation k, on évalue u dans une continuation qui récupère la valeur x de u, évalue ensuite v dans une continuation qui récupère la valeur y de v, enfin applique x à y et la continuation courante k; pour évaluer C u dans la continuation k, on évalue u dans la continuation qui récupère la valeur x de u: x est censée être une fonction prenant une continuation en argument, ici λ y, k′ · ky qui jette la continuation courante k′ pour renvoyer y par l’ancienne continuation courante k capturée par C; l’argument λ z · z est la continuation fournie à x, qui est triviale car l’application de x est obligé d’appliquer une autre continuation et ne retourne pas.

La traduction u, k ↦ ⟨ u k a donc non seulement un sens logique (le plongement de la logique classique en logique intuitionniste), mais aussi un sens calculatoire. Les exercices suivants précisent cette remarque. (On pourra s’inspirer des résultats de la partie I.)

Exercice 48   Montrer que u k est bien défini, au sens où deux termes α-équivalents u et v donnent deux termes α-équivalents u k et v k. (Montrer que u [x:=y] ⟩ k = ⟨ u k [x:=y] dès que ni x ni y n’est libre dans k.)
Exercice 49   Rappelons qu’une P-valeur V est une variable ou une abstraction. Montrer que pour toute continuation k, pour tout λ C-terme u, pour toute P-valeur V, u [x:=V] ⟩ k  *← ⟨ Vx · ⟨ u k). (On pourra d’une part s’aider de l’exercice précédent, d’autre part lorsque V = λ y · v, montrer que u k [x:=λ y, k′ · ⟨ v k′] = ⟨ u [x:=λ y · v] ⟩ k.)
Exercice 50   Rappelons que la règle v) est: x · u) Vu [x:=V], où V est une P-valeur. Montrer que la traduction u, k ↦ ⟨ u k interprète correctement v), au sens où, si uv par la règle v), alors u k+v k pour toute continuation k. On montrera d’abord en s’aidant des exercices précédents que ⟨ (λ x · u) V k+u [x:=V] ⟩ k pour tout λ C-terme u et toute P-valeur V.
Exercice 51 ()   On rappelle les règles suivantes:
    
      ( CL) C u v C (λ k′ · u (λ f · k′ (f v))) 
      ( CR)V ( C u) C (λ k′ · u (λ x · k′ (V x))) 
      (η C) C (λ k · k u)u      (kfv(u))
Montrer que si uv par ( CL) ou ( CR) ou C), alors u k =βηv k. Peut-on se passer de la règle (η) ?
Exercice 52   Montrer qu’en général le fait que u se réduise en v par (β) ou (η) n’implique pas que u k =βηv k. (On considérera le (β)-rédex x, y · x) (zz′) et l’(η)-rédex λ x · yzx, où x, y, z, z sont des variables distinctes.)
Exercice 53   La traduction par nom de Plotkin est définie sur les formules par:
    F* =def ¬ ¬ F     A=def A    (A type de base)      ( F ⇒ G )=def F* ⇒ G*
On a donc ( ¬ F )= F* ⇒ ¬ ¬ ⊥, donc ( ¬ ¬ F )= ¬ ¬ (F* ⇒ ¬ ¬ ⊥) ⇒ ¬ ¬ ⊥. Montrer que le lemme 18 est encore valide en remplaçant F¬¬ par F*. Vérifier en particulier que la traduction obtenue des λ C-termes en λ∇-termes est:
    
      ⟨ x ⟩ k=defxk 
      ⟨ λ x · u ⟩ k=defk (λ x · λ k′ · ⟨ u ⟩ k′) 
      ⟨ uv ⟩ k=def⟨ u ⟩ (λ f · f (λ k′ · ⟨ v ⟩ k′) k
      ⟨  C u ⟩ k=def⟨ u ⟩ (λ x · x (λ k′ · k′ (λ yk″ · yk)) (λ z · z))
Exercice 54 ()   Montrer, en s’inspirant de l’exercice 48, que u k est bien défini modulo α-conversion; en s’inspirant de l’exercice 49, que u k [x:=λ k′ · ⟨ v k′] →*u[x:=v] ⟩ k pour tous termes u, v; en s’inspirant de l’exercice 51, montrer que si uv par (β) ou par C), alors u k+v k (même si v n’est pas une P-valeur), si uv par ( CL), alors u k =βv k, mais que les règles ( CR) et (η) ne donnent en général pas lieu à des égalités valides à travers la traduction.

On peut étendre ces ¬¬-traductions et les traductions en style par passage de continuations correspondantes à la logique et à l’arithmétique du premier ordre. La traduction par valeur F¬¬ s’étend ainsi comme suit (mais il y a de nombreuses autres possibilités) aux autres constructions de la logique du premier ordre:

  
    ( F ∧ G )=defF∧ G
    ( F ∨ G )=defF∨ G
    ( ∀ i · F )=def∀ i · F¬¬ 
    ( ∃ i · F )=def∃ i · F

et la traduction en style par passage de continuations u, k ↦ ⟨ u k s’étend alors en:

  
    ⟨ ⟨ uv ⟩ ⟩ k=def    ⟨ u ⟩ (λ x · ⟨ v ⟩ (λ y · k ⟨ xy ⟩)) 
    ⟨ π1 u ⟩ k=def⟨ u ⟩ (λ x · k (π1 x)) 
    ⟨ π2 u ⟩ k=def⟨ u ⟩ (λ x · k (π2 x))

pour le fragment conjonctif (∧), en:

  
    ⟨ ι1 u ⟩ k=def⟨ u ⟩ (λ x · k (ι1 x)) 
    ⟨ ι2 u ⟩ k=def⟨ u ⟩ (λ x · k (ι2 x)) 
    
⟨ case u 

      ι1 x1 ↦ v1 
ι2 x2 ↦ v2


 k
=def
    ⟨ u ⟩ (λ x · case x 

      ι1 x1 ↦ ⟨ v1 ⟩ k 
ι2 x2 ↦ ⟨ v2 ⟩ k


)

pour le fragment disjonctif (∨), en:

  
    ⟨ λ i · u ⟩ k=defk (λ i · λ k′ · ⟨ u ⟩ k′) 
    ⟨ ut ⟩ k=def⟨ u ⟩ (λ x · xtk)

pour la quantification universelle du premier ordre, en:

  
    ⟨ ι t u ⟩ k=def⟨ u ⟩ (λ x · k (ι t x)) 
    
⟨ case u 

ι i x ↦ v

 k
=def
⟨ u ⟩ (λ y · case y 

ι i x ↦ ⟨ v ⟩ k

)

pour la quantification existentielle du premier ordre.

Désormais, nous considérerons les versions des logiques classique et intuitionniste, ainsi que des arithmétiques PA1 et HA1 qui incluent ∧, ∨, et ∃, obéissant aux règles de déduction (∧ I), (∧ E1), (∧ E2), (∨ I1), (∨ I2), (∨ E), (∃ I), (∃ E).

Exercice 55   Montrer que, en logique classique du premier ordre, F et F¬¬ sont logiquement équivalentes. De plus, F est prouvable en logique classique du premier ordre si et seulement si F¬¬ est prouvable en logique intuitionniste du premier ordre. (Étendre la preuve du lemme 18, et utiliser la traduction en CPS ci-dessus.)

Pour passer à l’arithmétique, il nous faut étendre notre traduction en CPS pour traiter de r0 : 00 et le récurseur:

  
    ⟨ r0 ⟩ k=defkr0 
    ⟨ R u v t ⟩ k=def⟨ v ⟩ (λ x · R (λ k′ · ⟨ u ⟩ k′) (λ j · λ yk″ · x j (λ x′ · y (λ y′ · xyk″))) t k)
Lemme 19   F est prouvable en PA1 si et seulement si F¬¬ est prouvable en HA1.

Preuve : On a déjà la traduction en CPS, il suffit de vérifier qu’elle définit des objets des bons types. Dans le cas de r0, on doit vérifier que si k : ¬ (00), alors k r0 : ⊥; c’est évident. Dans le cas du récurseur, dans la formule pour ⟨ R u v t k ci-dessus, on a par hypothèse k : ¬ ( F [i:=t] ), et en supposant que x : ∀ j · ¬ ¬ (( F [i:=j] )⇒ ( F [i:=S (j)] )¬¬), que y : ( F [i:=j] )¬¬, que k″ : ¬ ( F [i:=S (j)] ), que x′ : ( F [i:=j] )⇒ ( F [i:=S (j)] )¬¬, que y′ : ( F [i:=j] ), on a: xyk″ est de type ⊥, donc λ y′ · xyk″ est de type ¬ ( F [i:=j] ), donc yy′ · xyk″) est de type ⊥, donc λ x′ · yy′ · xyk″) est de type ¬ (( F [i:=j] )⇒ ( F [i:=S (j)] )¬¬). Comme x j est de type ¬ ¬ (( F [i:=j] )⇒ ( F [i:=S (j)] )¬¬), x jx′ · yy′ · xyk″)) est de type ⊥, donc λ k″ · x jx′ · yy′ · xyk″)) est de type ¬ ¬ ( F [i:=S (j)] )= ( F [i:=S (j)] )¬¬ = F¬¬ [i:=S (j)]. (Une récurrence structurelle facile montre en effet que G¬¬ [i:=t] = ( G [i:=t] )¬¬.) Comme y est supposé de type ( F [i:=j] )¬¬ = F¬¬ [i:=j], le terme v′ =def λ j · λ y, k″ · x jx′ · yy′ · xyk″)) est de type ∀ j · F¬¬ [i:=j] ⇒ F¬¬ [i:=S (j)]. D’autre part le terme u′ =def λ k′ · ⟨ u k′ est de type ( F [i:=0] )¬¬ = F¬¬ [i:=0]. Donc R uvt est de type F¬¬ [i:=t] = ( F [i:=t] )¬¬. Comme k : ¬ ( F [i:=t] ), R uvt k est de type ⊥, donc λ x · R uvt k est de type ¬ (∀ j · ¬ ¬ (( F [i:=j] )⇒ ( F [i:=S (j)] )¬¬)). On en déduit que ⟨ vx · R uvt k) est de type ⊥; or ⟨ vx · R uvt k) est exactement ⟨ R u v t k.     ♦

Exercice 56 ()   La démonstration du lemme 19 est incomplète, et le manque le plus flagrant est que nous n’avons pas traité la règle (↔N*). La traiter directement est difficile, et nous transformons d’abord la preuve de F en PA1:
  1. On dit qu’une instance Γ, FF de (Ax) est atomique si F est une formule de la forme st (une formule atomique, à l’exclusion de ). On dit qu’une preuve en PA1 est η-longue si tous ses axiomes sont atomiques. Montrer que pour tout séquent Γ, FF est prouvable par une preuve η-longue. (On effectuera une récurrence sur F.)
  2. En déduire que tout séquent prouvable en PA1 l’est par une preuve η-longue.
  3. Une preuve en PA1 est spéciale si les seules instances utilisées de (↔N*) le sont sur les conclusions des règles (⊥ E) ou (Ax). Montrer qu’on peut transformer n’importe quelle preuve π en PA1 d’un séquent en une preuve spéciale π′ du même séquent. De plus, si π est η-longue, alors π′ est η-longue.
  4. Reprendre la preuve du lemme 19, en montrant que si π est une dérivation spéciale η-longue de x1:F1, …, xn:Fnu : F en PA1, alors x1:F1, …, xn:Fn, kF⊢ ⟨ u k : ⊥ est dérivable en HA1.
Exercice 57   Redémontrer que PA1 est cohérente (cf. exercice 29) en utilisant le lemme 19.
Exercice 58   Étendre la ¬¬-traduction au second ordre (on démontrera au passage que F¬¬ [P (k1, …, kn) := G] = ( F [P (k1, …, kn) := G] )¬¬), et déduire du théorème 10 que PA2 est cohérente. Comparer avec la preuve de l’exercice 47.
Exercice 59 (Glivenko)   Par une traduction en CPS modifiée, montrer que si x1:F1, …, xn:Fnu : F est prouvable en logique propositionnelle classique, alors x1 : ¬ ¬ F1, …, xn : ¬ ¬ Fnu* : ¬ ¬ F pour un certain terme u* à trouver. (Traiter aussi le cas de , . Montrer que ceci s’étend aux quantifications existentielles mais pas aux quantifications universelles.) En déduire le théorème de Glivenko: pour toute formule ne contenant que des quantifications existentielles, ¬ F est prouvable en logique classique si et seulement si elle est prouvable en logique intuitionniste.

5.2  Formules décidables et classiques

En arithmétique de Heyting, les formules atomiques (les types de base) sont des égalités st. Il se trouve que ces égalités sont démontrables en PA1 si et seulement si elles le sont en HA1 — on n’a pas besoin de ¬¬-traduction. Une question naturelle est alors: quelles sont les formules de l’arithmétique qui sont prouvables en PA1 si et seulement si elles le sont en HA1 ? Georg Kreisel a montré dans les années soixante que les formules Π20 ont cette propriété, et sa démonstration a été simplifiée par la suite par Harvey Friedman [Fri78]. Les formules Π20 (prononcer: “pi zéro deux”) sont les formules de la forme ∀ i1, …, im · ∃ j1, …, jn · F, où F est sans quantificateur, ou du moins n’a que des instances bénignes des quantificateurs. En général:

Définition 2   On définit l’ordre sur les entiers en HA1 en posant que la notation s t abrège k · k+st. Les quantifications bornées i t · F et i t · F, lorsque i n’est pas libre dans t, sont des abréviations pour i · i tF et i · i tF.

On définit les classes de formules Δ00, Σn0 et Πn0 par récurrence sur n ≥ 0: Δ00 = Σ00 = Π00 est la classe des formules dont toutes les quantifications sont bornées. Σn+10 est la classe des formules de la forme i1, …, im · F avec m≥ 0, F ∈ Πn0; Πn+10 est la classe des formules de la forme i1, …, im · F avec m≥ 0, F ∈ Σn0.

Ces classes ainsi que leurs inclusions (sous formes de flèches) sont représentées en figure 1.


Figure 1: La hiérarchie arithmétique

Nous allons établir au lemme 22 que toute formule Δ00 est décidable en HA1:

Définition 3   Une formule F est décidable en HA1 si et seulement si F ∨ ¬ F est prouvable en HA1. Une formule F est classique en HA1 si et seulement si ¬ ¬ FF est prouvable en HA1.

Notons que:

Lemme 20   Toute formule décidable est classique en HA1.

Preuve : Soit F une formule décidable, et soit u un λ∇ R-terme clos de type F ∨ ¬ F. Alors clF (u) =def λ x · case u {

      ι1 x1 ↦ x1 
ι2 x2 ↦ ∇ (xx2)

} est une preuve de ¬¬ FF.     ♦

Lemme 21   Toute égalité st est décidable en HA1.

Preuve : On démontre ∀ i · it ∨ ¬ it par récurrence sur t, puis sur i. Définissons:

    
      a=def      ι1 r00 ≈ 0 ∨ ¬ 0 ≈ 0 
      b(j)=def      ι2 (λ x · x)S (j) ≈ 0 ∨ ¬ S (j) ≈ 0 
      c=def      λ i · R a (λ j · λ x · b(j)) i: ∀ i · i ≈ 0 ∨ ¬ i ≈ 0 
      d(j)=def      ι2 (λ x · x)0 ≈ S (j) ∨ ¬ 0 ≈ S (j
      e(j)=def      λ x · λ i · R (d(j)) (λ j′ · λ y · xj′) i: (∀ i · i ≈ j ∨ ¬ i ≈ j) ⇒ (∀ i · i ≈ S (j) ∨ ¬ i ≈ S (j)) 
      u=defR c (λ j · e (j)) t: ∀ i · i ≈ t ∨ ¬ i ≈ t

Pour aider à vérifier les types annoncés, vérifier que dans la définition de e(j), xj′ est de type j′ ≈ j ∨ ¬ j′ ≈ j, donc aussi S (j′) ≈ S (j) ∨ ¬ S (j′) ≈ S (j). Le terme us est la preuve souhaitée de st ∨ ¬ st.     ♦

Lemme 22   Toute formule F de HA1 ne contenant que des quantifications bornées est décidable.

Preuve : () Par récurrence structurelle sur Sk (F), on construit un terme dF de type F ∨ ¬ F.

Si F est une égalité st, alors on définit dst comme étant le terme us de la preuve du lemme 21.

Si F = ⊥, alors d=def ι2x · x).

Dans les cas des connecteurs ⇒, ∧, ∨, l’idée est de décrire leurs tables de vérité. Par exemple, on G1G2 est décidable pour la raison suivante: comme G1 est décidable par hypothèse de récurrence, G1 est soit vrai soit faux, de même G2 est soit vrai soit faux; mais si G1 est vrai et G2 faux, alors G1G2 est faux, et G1G2 est vrai dans les trois autres cas. Formellement:

    
      dG1⇒ G2=def
      case dG1 



      
ι1 x1 ↦ case dG2 

      ι1 y1 ↦ ι1 (λ x · y1
ι2 y2 ↦ ι2 (λ x · y2 (xx1))


 
ι2 x2 ↦ ι1 (λ x · ∇ (xx2))




: (G1 ⇒ G2) ∨ ¬ (G1 ⇒ G2
      dG1∧ G2=def
      case dG1 



      
ι1 x1 ↦ case dG2 

      ι1 y1 ↦ ι1 ⟨ x1y1 ⟩ 
ι2 y2 ↦ ι2 (λ x · y2 (π2 x))


 
ι2 x2 ↦ λ x · x2 (π1 x)




: (G1 ∧ G2) ∨ ¬ (G1 ∧ G2
      a=def
      λ kk′, x · case x 

      ι1 x1 ↦ kx1 
ι2 x2 ↦ kx2


: ¬ G1 ⇒ ¬ G2 ⇒ ¬ (G1 ∨ G2
      dG1∨ G2=def
      case dG1 



      ι1 x1 ↦ ι1 (ι1 x1
ι2 x2 ↦ case dG2 

      ι1 y1 ↦ ι1 (ι2 y1
ι2 y2 ↦ ι2 (ax2y2)






: (G1 ∨ G2) ∨ ¬ (G1 ∨ G2)

Les cas des quantifications bornées F sont plus difficiles. L’idée est que F ne quantifiant que sur les entiers de 0 à t, on peut prouver F par récurrence, en énumérant tous les entiers de 0 à t. Définissons d’abord quelques termes de preuve auxiliaires démontrant quelques évidences dont nous aurons besoin (on note G (i) une formule quelconque et G (t) la formule G (i) [i:=t] pour plus de clarté). Rappelons (exercice 27) qu’il existe en HA1 un terme de preuve repk · H(k) pour toute formule H (k), de type ∀ i, j · ijH (i) ⇒ H (j).

    
      nlS0 (s)=def
      λ x · case x 

ι ky ↦ y

: ¬ S (s 0 
      rep0S (s)=def      λ x · R (λ y · x) (λ j · λ yz · ∇ (nlS0 (jz)) sG (0) ⇒ s  0 ⇒ G (s
      repS0 (s)=def      R (λ xy · x) (λ j · λ xyz · ∇ (nlS0 (jz)) sG(s) ⇒ s  0 ⇒ G(0
      l0=def      ι 0 r00  0 
      n0 (s)=defR r0 (λ j · λ x · xs0 + s ≈ s 
      lrefl(s)=defι 0 (n0 (s))s  s 
      refl=defλ i · R r0 (λ j · λ x · xi: ∀ i · i ≈ i 
      nS (s,t)=defR (refl (S (s))) (λ j · λ x · xtS (s+ t ≈ S (s + t
      com (st)=defR (n0 (t)) (λ j · λ x · repk · S (j+ t ≈ S (k) (j + t) (t + jx (nS (jt))) ss + t ≈ t + s 
      lch0 (k,s,t)=def      R (λ x · ι2 (x)) (λ j · λ xy · ι1 (ι j (repk · S (k) ≈ t (s + j) (j + s) (com (sj)) y))) ks + k ≈ t ⇒ S (s t ∨ s ≈ t 
      lch1 (s,t)=def
      λ x · case x 

ι k y ↦ lch0 (k,s,t) (repi · i ≈ t (k + s) (s + k) (com (ks)) y)

s  t ⇒ S (s t ∨ s ≈ t 
      lch (st)=def      lch1 (s,S (t))s  S (t) ⇒ s  t ∨ s ≈ S (t
      sym=def      λ i,j · λ x · repk · k ≈ i i j x (refl  i): ∀ ij · i ≈ j ⇒ j ≈ i 
      repsk · H(k)=def      λ ij · λ x · repk · H(k) j i (sym  i  j  x): ∀ ij · i ≈ j ⇒ H (j) ⇒ H (i
      lS (st)=def
      λ x · case x 

ι k y · ι (S (k)) (repsi · i≈ S (t) (S (k+ s) (S (k + s)) (nS (ks)) y)

s  t ⇒ s  S (t)

Lorsque F = ∀ i t · G(i), on démontre que F est décidable par récurrence sur t. Le cas de base est démontré par le terme u1:

    
      u11=def      λ x · λ i · rep0S (ixG(0) ⇒ ∀ i  0 · G(i
      u12=def      λ xy · x (y  0   l0): ¬ G(0) ⇒ ¬∀ i  0 · G(i
      u1=def
      case dG(0) 

      ι1 x1 ↦ ι1 (u11 x1
ι2 x2 ↦ ι2 (u12 x2)


: (∀ i  0 · G(i)) ∨ ¬ (∀ i  0 · G(i))

Le cas inductif demande à montrer que, sous l’hypothèse h : (∀ i j · G(i)) ∨ ¬ (∀ i j · G(i)), on a (∀ i S (j) · G(i)) ∨ ¬ (∀ i S (j) · G(i)). On considère deux cas. Dans le cas h1 : ∀ i j · G(i), ceci est montré par le terme u2 (j) ci-dessous:

    
      u21 (h1,j)=def      λ x · λ i · λ y · 
  
   case lch (i,jy 

      ι1 x1 ↦ h1 i x1 
ι2 x2 ↦ repsk · G(k) i (S (j)) x2 x


G (S (j)) ⇒ ∀ i  S (j) · G(i
      u22 (j)=def      λ xy · x (y (S (j)) (lrefl (S (j)))): ¬ G (S (j)) ⇒ ¬ ∀ i  S (j) · G(i
      u2(h1,j)=def
      case dG(S (j)) 

      ι1 x1 ↦ ι1 (u21 (h1,jx1
ι2 x2 ↦ ι2 (u22 (jx2)


: (∀ i  S (j) · G(i)) ∨ ¬ (∀ i  S (j) · G(i))

Dans le cas h2 : ¬ ∀ i j · G(i), ceci est montré par le terme u3 (j) ci-dessous:

    
      u31 (j)=def      λ x · λ i · λ y · x i (lS (i,jy): (∀ i  S (j) · G(i)) ⇒ ∀ i  j · G(i
      u3 (h2,j)=def      ι2 (λ x · h2 (u31 (jx)): (∀ i  S (j) · G(i)) ∨ ¬ (∀ i  S (j) · G(i))

On pose donc:

    
      d∀ i  t · G(i)=def
R u1 (λ j · λ h · case h 

      ι1 h1 ↦ u2 (h1,j
ι2 h2 ↦ u3 (h2,j)


) t
: (∀ i  t · G(i)) ∨ ¬ (∀ i  t · G(i))

Lorsque F = ∃ i t · G, avec i non libre dans t, on construit:

    
      v11=def      λ x · ι 0 ⟨ l0, xG(0) ⇒ ∃ i  0 · G(i
      v12=def
      λ xy · x (case y 

ι i z ↦ rep0S(i) (π2 z) (π1 z)

)
: ¬ G(0) ⇒ ¬ ∃ i  0 · G(i
      v1=def
      case dG(0) 

      ι1 x1 ↦ ι1 (v11 x1
ι2 x2 ↦ ι2 (v12 x2)


: (∃ i  0 · G(i)) ∨ ¬ (∃ i  0 · G(i))

Sous l’hypothèse h1 : ∃ i j · G(i), on a:

    
      v2 (h1,j)=def
      ι1 (case h1 

ι i x ↦ ι i ⟨ lS (i,j) (π1 x), π2 x

)
: (∃ i  S (j) · G(i)) ∨ ¬ ∃ i  S (j) · G(i)

Sous l’hypothèse h2 : ¬ ∃ i j · G (i), on a:

    
      v31 (j)=def      λ x · ι (S (j)) ⟨ lrefl (S (j)), x ⟩G (S (j)) ⇒ ∃ i  S (j) · G(i
      v32 (h2,j)=def
λ xy · case y 

ι i z ↦ case lch (i,j) (π1 z

      ι1 z1 ↦ h2 (ι i ⟨ z1, π2 z ⟩) 
ι2 z2 ↦ x (repk · G(k) i (S (j)) z2 (π2 z))




   : ¬ G (S (j)) ⇒ ¬ ∃ i  S (j) · G (i
      v3 (h2,j)=def
      case dG(S (j)) 

      ι1 x1 ↦ ι1 (v31 (jx1
ι2 x2 ↦ ι2 (v32 (h2,jx2)


: (∃ i  S (j) · G(i)) ∨ ¬ ∃ i  S (j) · G(i)

Donc on pose:

    
      d∃ i  j · G(i)=def
      R v1 (λ j · λ h · case h 

      ι1 h1 ↦ v2 (h1j
ι2 h2 ↦ v3 (h2j)


t
: (∃ i  t · G(i)) ∨ ¬ ∃ i  t · G(i)

    ♦

Lemme 23   En HA1, pour toute formule F dans Δ00, les formules F, F¬¬ et F sont prouvablement équivalentes. Autrement dit, n’importe quelle implication d’une de ces formules vers n’importe quelle autre est prouvable en HA1.

Preuve : Notons d’abord que, pour toute formule G dans Δ00, si dG est le terme de type G ∨ ¬ G construit au lemme 22, alors cG =def clG (dG) (cf. lemme 20) est de type ¬¬ GG. On démontre ensuite que F et F¬¬ sont équivalentes en HA1, comme au lemme 18 mais en utilisant le terme cG à la place de C. Nous devons cependant étendre le résultat aux constructions ∧, ∨, ∃. Pour ceci, nous allons construire par récurrence structurelle sur F des termes clos uF : FF et vF : F¬¬F. Comme d’autre part wF =def λ x, k · kx : FF¬¬, ceci suffira pour démontrer le lemme.

En convenant du fait que A dénote n’importe quelle égalité ou ⊥, on définit (par exemple, il y a de nombreux autres choix possibles):

    
      uA=defλ x · x  vA=defλ x · cA x 
      uF ⇒ G=def      λ xyk · k (uG (x (vF (λ k′ · ky))))        vF ⇒ G=defλ x · cF ⇒ G (λ k · x (λ y · k (λ z · vG (y (uF z)))))
uF ∧ G=defλ x · ⟨ uF (π1 x), uG (π2 x) ⟩        vF ∧ G=defλ x · cF ∧ G (λ k · x (λ z · 
          k ⟨ vF (λ k′ · k′ (π1 z)), vG (λ k′ · k′ (π2 z)) ⟩))
uF ∨ G=def
λ x · case x 

      ι1 x1 ↦ ι1 (uF x1
ι2 x2 ↦ ι2 (uG x2)


        vF ∨ G=defλ x · cF ∨ G (λ k · x (λ y · 
       
   case y 

      ι1 y1 ↦ k (ι1 (vF (λ k′ · ky1))) 
ι2 y2 ↦ k (ι2 (vG (λ k′ · ky2)))


)) 
u∀ i t · F=def      λ x · λ i · λ k · k (λ yk′ · k′ (uF (xiy)))        v∀ i t · F=def      λ x · c∀ i t · F (λ k · x (λ y · k (
          λ i · λ z · vF (λ k′ · yi(λ y′ · yzk′)))))
u∃ i t · F=def
      λ x · case x 

ι i y ↦ ⟨ π1 yuF (π2 y) ⟩

        v∃ i t · F=def      λ x · c∃ i t · F (λ k · x (λ y · 
       
case y 

ι i z ↦ k (ι i ⟨ π1 zvF (λ k′ · k′ (π2 z)) ⟩)

))

    ♦

Lemme 24   En HA1, pour toute formule Σ10 F, on peut prouver FF.

Preuve : Observons que si on peut prouver GG, alors on peut prouver ( ∃ i · G )⇒ ∃ i · G. En effet, si u : GG, alors λ x · case xi y ↦ ι i (uy)} est de type ( ∃ i · G )⇒ ∃ i · G. Le lemme se déduit ainsi de cette remarque et du lemme 23 par récurrence sur le nombre de quantificateurs ∃ au début de F.     ♦

Mais on ne peut pas prouver en général F¬¬F, car F n’est pas décidable en général lorsque F est une formule Σ10 — ce qui revient à dire que F elle-même n’est pas en général décidable. Nous ne développerons pas l’argument ici, qui fait appel à la théorie des fonctions calculables.

5.3  A-traduction et théorème de Kreisel-Friedman

On peut en fait aller un peu plus loin. L’astuce de Friedman est de modifier la ¬¬-traduction en observant que le type ⊥ dans F¬¬ = ¬ ¬ F= (F⇒ ⊥) ⇒ ⊥ (deux occurrences de ⊥ dans cette dernière formule) pourrait être remplacé par n’importe quelle formule: rien n’oblige à utiliser ⊥ ici. Du point de vue de la traduction en CPS, le type ⊥ est utilisé comme type des réponses fournies par le programme traduit en CPS (cf. le domaine Ans de la partie I). Or on peut utiliser le type de réponses que l’on souhaite, pas seulement ⊥.

La A-traduction de Friedman est ainsi l’analogue de la ¬¬-traduction, mais avec ⊥ remplacé par une formule quelconque φ (que Friedman notait A, d’où le nom de A-traduction). Noter ¬φF =def F ⇒ φ pour rappeler la négation, et redéfinissons la ¬¬-traduction relativisée à φ par:

  
    φF¬¬=def¬φ¬φφF 
    φ=defφ 
    φA=defA ∨ φ(A type de base, sauf ⊥) 
    φ(F ⇒ G)=defφF⇒ φG¬¬ 
φ( ∀ i · F )=def∀ i · φF¬¬ 
    φ( ∃ i · F )=def∃ i · φF

et la traduction en CPS correspondante est:

  
    ⟨ x ⟩φ k=defkx 
    ⟨ λ x · u ⟩φ k=defk (λ x · λ k′ · ⟨ u ⟩φ k′) 
    ⟨ uv ⟩φ k=def⟨ u ⟩φ (λ x · ⟨ v ⟩φ (λ y · xyk)) 
    ⟨  C u ⟩φ k=def⟨ u ⟩φ (λ x · x (λ yk′ · ky) (λ z · ∇ z)) 
⟨ λ i · u ⟩φ k=defk (λ i · λ k′ · ⟨ u ⟩φ k′) 
    ⟨ ut ⟩φ k=def⟨ u ⟩φ (λ x · xtk
    ⟨ ι t u ⟩φ k=def⟨ u ⟩φ (λ x · k (ι t x)) 
    
⟨ case u 

ι i x ↦ v

φ k
=def
⟨ u ⟩φ (λ y · case y 

ι i x ↦ ⟨ v ⟩φ k

    ⟨ r0 ⟩φ k=defkr0 
    ⟨ R u v t ⟩φ k=def⟨ v ⟩φ (λ x · R (λ k′ · ⟨ u ⟩φ k′) (λ j · λ yk″ · x j (λ x′ · y (λ y′ · xyk″))) t k)
Exercice 60   Noter que la seule différence entre la définition de u k et celle de uφ k est un en plus dans le cas C u de la dernière: pourquoi ? Vérifier que pour tout u : F (via une preuve spéciale η-longue, cf. exercice 56), pour tout k : ¬φF, uφ k est de type φ.
Exercice 61   Étendre la traduction u, k ↦ ⟨ uφ k aux cas des conjonctions et des disjonctions, de sorte que uφ k soit toujours de type φ pour tout u : F (via une preuve spéciale η-longue, cf. exercice 56) et pour tout k : ¬φF.

La version relativisée du lemme 22 est:

Lemme 25   Pour toute formule Δ00 F, F est φ-décidable: F ∨ ¬φF est démontrable en HA1.

Preuve : Par le lemme 22, dF est un terme clos de type F ∨ ¬ F, donc φdF =def case dF {

      ι1 x1 ↦ ι1 x1 
ι2 x2 ↦ ι2 (λ y · ∇ (x2 y))

} est un terme clos de type F ∨ ¬φF.     ♦

De même, on relativise le lemme 20:

Lemme 26   Toute formule F φ-décidable est φ-classique: ¬φ¬φFF ∨ φ est prouvable en HA1.

Preuve : Soit u un terme clos de type F ∨ ¬φF. Alors φclF (u) =def λ x · case u {

      ι1 x1 ↦ ι1 x1 
ι2 x2 ↦ ι2 (xx2)

} est de type ¬φ¬φFF ∨ φ.     ♦

On peut alors démontrer la version relativisée du lemme 23 — c’est le lemme 28 plus bas —, mais ceci demande de nombreuses preuves auxiliaires:

Lemme 27   Si F est φ-décidable, alors ¬φ(∀ i t · F) ⇒ ∃ i t · ¬φF est démontrable en HA1.

Preuve : En reprenant les termes de preuve fabriqués dans la preuve du lemme 22, et en écrivant F(i) à la place de F, posons:

    
      ae1=defλ x · ι 0 ⟨ l0, λ y · x (λ i · λ z · rep0S (iy z) ⟩: ¬φ(∀ i 0 · F(i)) ⇒ ∃ i 0 · ¬φF(i)
      allS (t)=def      λ xy · λ i · λ z · 
  
   case lch (i,tz 

      ι1 z1 ↦ x i z1 
ι2 z2 ↦ repsk · F(k) i (S (t)) z2 y


: (∀ i t · F(i)) ⇒ F (S (t)) ⇒ ∀ i S (t) · F(i)
      ll0 (s)=defι s (refl  s)0  s 
      ae2(t)=def
λ xy · case φd∀ i t · F(i) 





      
ι1 x1 ↦ case φdF (S (t)) 

      ι1 y1 ↦ ι 0 ⟨ ll0 (S (t)), λ z · x (allS (tx1 y1) ⟩ 
ι2 y2 ↦ ι (S (t)) ⟨ lrefl(S (t)), y2


 
ι2 x2 ↦ case xx2 

ι i z ↦ ι i ⟨ lS (i,t)(π1 z), π2 z







   : (¬φ(∀ i t · F(i)) ⇒ ∃ i t · ¬φF(i)) ⇒ ¬φ(∀ i S (t) · F(i)) ⇒ ∃ i S (t) · ¬φF(i)
      ae(t)=def      R ae1 (λ j · ae2 (j)) t: ¬φ(∀ i t · F(i)) ⇒ ∃ i t · ¬φF(i)

    ♦

Lemme 28   En HA1, pour toute formule F dans Δ00, les formules F ∨ φ, φF¬¬ et φF sont prouvablement équivalentes.

Preuve : Pour toute formule G dans Δ00, notons φcG =def φclG (φdG) de type ¬φ¬φGG ∨ φ, où φclG est défini au lemme 26 et φdG est défini au lemme 25. Construisons par récurrence structurelle sur F des termes clos φuF : F ∨ φ ⇒ φF et vF : φF¬¬F ∨ φ. Le lemme se déduira de ces termes, et du terme φwF =def λ x, k · kx : φFφF¬¬.

Si k : ¬φF et u : F ∨ φ, on pose [k] u =def case u {

      ι1 x1 ↦ kx1 
ι2 x2 ↦ x2

} de type φ.

Ensuite, pour tout opérateur f1, π2, ι1, ι2) tel que fu : G dès que u:F on pose φf v =def case v {

      ι1 x1 ↦ ι1 (fx1
ι2 x2 ↦ ι2 x2

}: dès que v:F ∨ φ, φf v est de type G ∨ φ. De même, on pose φu, v ⟩ =def case u {

      
ι1 x1 ↦ case v 

      ι1 y1 ↦ ι1 ⟨ x1y1 ⟩ 
ι2 y2 ↦ ι2 y2


 
ι2 x2 ↦ ι2 x2

} de type (FG) ∨ φ dès que u : F ∨ φ et v : G ∨ φ.

Si v1 : F ∨ φ ⇒ H et v2 : G ∨ φ ⇒ H, et u : (FG) ∨ φ, on pose φcase u {

      v1 
v2

} le terme case u {

      
ι1 x1 ↦ case x1 

      ι1 y1 ↦ v1 (ι1 y1
ι2 y2 ↦ v21 y2)


 
ι2 x2 ↦ ι2 x2

} de type H.

Soit A n’importe quelle égalité ou ⊥, on définit:

    
      φuA=defλ x · x        φvA=def
λ x · case φcA x 

      ι1 x1 ↦ x1 
ι2 x2 ↦ ι2 x2


      uF ⇒ G=def      λ xyk · k (        φvF ⇒ G=def      λ x · φcF ⇒ G (λ k · x (λ y · 
     φuG (x @ (φvF (λ k′ · ky))))       φaFG k (λ z · φvG (y (φuF z)))))
φuF ∧ G=def      λ x · ⟨ φuF (φπ1 x), φuG (φπ2 x) ⟩        φvF ∧ G=defλ x · φcF ∧ G (λ k · x (λ z · 
          [kφφvF (λ k′ · k′ (π1 z)), φvG (λ k′ · k′ (π2 z)) ⟩))
φuF ∨ G=def
λ x · φcase x 

      λ x1 · ι1 (φuF x1
λ x2 · ι2 (φuG x2)


        φvF ∨ G=defλ x · φcF ∨ G (λ k · x (λ y · 
       
   case y 

      ι1 y1 ↦ [k] (φι1 (φvF (λ k′ · ky1))) 
ι2 y2 ↦ [k] (φι2 (φvG (λ k′ · ky2)))


)) 
φu∀ i t · F=def λ x · λ i · λ k · k (λ yk′ · k′ ( φuF (x @ i @ y)))
φv∀ i t · F=def
λ x · case φd∀ i t · F 





      ι1 x1 ↦ ι1 x1 
ι2 x2 ↦ case ae (t



              ι i y ↦ x (λ x′ · xi (λ z · z (ι1 (π1 y)) (λ z′ · 
                   case φvF (λ k · kz′) 

      ι1 y1 ↦ π2 y y1 
ι2 y2 ↦ y2


)))










φu∃ i t · F=def
λ x · case x 



      
ι1 x1 ↦ case x1 

ι i y ↦ ι i ⟨ π1 yφuF (ι1 (π2 y)) ⟩

 
ι2 x2 ↦ ι 0 ⟨ ll0 (t), φuF[i:=0] (ι2 x2)⟩




      φv∃ i t · F=def
λ x · φc∃ i t · F (λ k · x (λ x′ · case x′ 

ι i y ↦ case φvF (λ k′ · k′ (π2 y)) 

      ι1 y1 ↦ k (ι i ⟨ π1 yy1⟩) 
ι2 y2 ↦ y2




))

    ♦

Si F est une formule Σ10 prouvable en PA1, par l’exercice 60 φF¬¬ = ¬φ¬φφF est prouvable en HA1, par une preuve λ k · ⟨ uφ k. Ceci est vrai pour tout φ, en particulier pour φ = F. Donc (φFF) ⇒ F est prouvable en PA1 pour φ = F. Mais par le lemme 28, il existe un terme de preuve en HA1 de φFF, à savoir la continuation kF =def λ x · case φvFk · kx) {

      ι1 x1 ↦ x1 
ι2 x2 ↦ x2

}. Donc ⟨ uφ kF est une preuve de F en PA1. On en déduit:

Théorème 12 (Kreisel-Friedman)   Pour toute formule Π20 de l’arithmétique F, si F est prouvable en PA1, alors F est prouvable en HA1.

Preuve : Écrivons F =defi1, …, im · GG est une formule Σ10. En utilisant (∀ E), si F est prouvable en PA1, alors G aussi. Comme G est Σ10, G est prouvable en HA1 par la remarque ci-dessus. En utilisant (∀ I), on en déduit que F est elle aussi prouvable en HA1.     ♦

Il se trouve que ce résultat ne peut pas être étendu au-delà de Π20, et il existe des formules Σ20 prouvables en PA1 mais pas en HA1. Ceci sort cependant du cadre de ce cours.

La signification calculatoire de ce résultat, qui est contenue dans le cas où F est Σ10, est qu’on peut toujours extraire d’une preuve classique u de F une preuve intuitionniste ⟨ uφ kF de F, en calculant la traduction en CPS de u et en l’appliquant à une continuation kF bien choisie.

Une application informatique est la suivante. Considérons pour simplifier une formule de la forme ∀ i · ∃ j · P (i, j) sans variable libre. Une preuve intuitionniste d’une telle formule, écrite en forme normale, décrit nécessairement pour tout i une valeur de j tel que P (i, j) soit vrai. Autrement dit, une formule de cette forme est une spécification d’une fonction qui envoie tout entier i vers un entier j tel que P (i, j). Prouver ∀ i · ∃ j · P (i, j) en HA1, c’est donc essentiellement trouver une fonction de i vers j satisfaisant la spécification. En effet, considérons un terme de preuve normal u tel que ⊢ u : ∀ i · ∃ j · P (i, j). Pour tout entier m, posons [m] le terme S (S (… (S (0)) … )), où il y a m symboles S. Alors on a ⊢ u [m] : ∃ j · P ([m], j). Soit v une forme normale de u [m] (par une stratégie de réduction donnée, disons; en fait, la réduction de preuves en HA1 est confluente, et il n’y a donc qu’une forme normale). Alors v est tel que ⊢ v : ∃ j · P ([m], j). Comme v est normal et clos, v ne peut qu’être de la forme ι t w, pour un certain terme clos normal t et un certain terme de preuve w. Or un terme clos normal t est nécessairement de la forme [n] pour un certain entier n; et w est une preuve de P ([m], [n]): la preuve u définit donc bien une fonction totale des m vers les n tels que P ([m], [n]) soit vraie. De plus, cette fonction est calculable: il existe un programme informatique qui calcule n en fonction de m; en effet, il suffit de construire u [m], de normaliser et d’extraire [n] de la forme normale. On dit que HA1 est une logique constructive, car d’une preuve d’une spécification de la forme ∀ i · ∃ j · P (i, j) on peut toujours extraire un programme qui calcule j en fonction de i. (Attention, le terme “constructif” a de nombreux autres sens.)

Exercice 62   Montrer cette affirmation formellement. L’étendre au cas des formules i1, …, ip · ∃ j1, …, jq · P (i1, …, ip, j1, …, jq).

En revanche, si ∀ i · ∃ j · P (i, j) est prouvable en PA1, l’argument ci-dessus ne fonctionne pas: le terme v de type ∃ j · P ([m], j) peut être de la forme ι t w comme ci-dessus, ou bien de la forme C v′; dans ce dernier cas, on ne peut pas extraire de v une valeur de v telle que P ([m], j) soit prouvable. La fonction qui aux i associe des j tels que P (i, j) est donc en général partielle dans le cas de PA1, alors que HA1 permet de produire une fonction totale. Ce que le théorème 12 montrer ici est que lorsque ∀ i · ∃ j · P (i, j) est Π20, autrement dit quand P (i, j) est décidable, alors il y a toujours moyen de transformer cette fonction partielle en une fonction totale calculable qui satisfait la propriété P (i, j): PA1 est donc aussi une logique constructive, si on la restreint aux formules Π20.

On notera que le programme extrait de la preuve est automatiquement correct, au sens où il calcule nécessairement ce que la spécification P (i, j) prescrit. De plus, on n’a pas eu à l’écrire, il suffit de l’extraire de la preuve. Cette idée s’étend naturellement — dans un cadre intuitionniste — à l’utilitaire d’extraction de programme à partir d’une preuve dans Coq [BBC+99].

Exercice 63   Étendre le théorème 12 au cas des formules de la forme de la forme F =defX1, …, Xm, x1, …, xp · ∃ Y1, …, Yn, y1, …, yq · G, où G est sans quantificateur, X1, …, Xm, Y1, …, Yn sont des variables du second ordre et x1, …, xp, y1, …, yq sont des variables du premier ordre: autrement dit, montrer que si F est prouvable en PA2, alors F est prouvable en HA2. (On considérera les versions de PA2 et HA2 avec les connecteurs , , , , les quantifications universelles et existentielles tant du premier que du second ordre. Les règles de déduction sur le du second ordre sont celles de l’exercice 36. On posera ( ∀ P · F )=defP · F¬¬, ( ∃ P · F )=defP · F et on montrera que F[P (k1, …, kn) := G] = ( F [P (k1, …, kn) := G] ).)

PA1 et HA1 sont expressives; notamment on peut définir toute fonction calculable en PA1 [Joh87], mais c’est difficile et peu naturel à montrer. On peut améliorer ceci en enrichissant le langage de calcul à l’intérieur des formules. L’exercice suivant donne un exemple. De nombreuses autres solutions sont envisageables, et l’on peut (presque) utiliser le langage de programmation que l’on souhaite à l’intérieur des formules.

Exercice 64   Le langage des termes de PA1ω et de HA1ω est similaire à celui de HAω: il est formé des λ-termes simplement typés construits à partir des trois constantes 0 : N, S : NN et Rτ: τ → (N → τ → τ) → N → τ (le récurseur de type τ), les types étant donnés par τ ::= N ∣ τ → τ. PA1ω et HA1ω (d’ordre 1 mais portant sur des termes d’ordre supérieur) sont définies comme PA1 et HA1 respectivement, mais avec le langage de termes ci-dessus, et la réduction suivante sur les formules au lieu de N:
    
      (0S)0 ≈ S t+⊥ 
      (SS)S s ≈ S t+s ≈ t 
      (R0)Rτs1 s2 0+s1 
      (RS)Rτs1 s2 (S s3)+s2 s3 (Rτs1 s2 s3
      (β)(λ i · st+s [i:=t
    
Montrer qu’on peut définir l’addition et la multiplication respectivement par s + t =def RNsi, j · S j) t et s * t =def RN0i, j · j+ s) t. Comment définiriez-vous ts, s!, s- t (répondant st si st, 0 sinon), if s then t1 else t2 (répondant t1 si s≠ 0 et t2 sinon), s div t (la partie entière de s/t, que vous prendrez égale à 0 quand t+* 0), s modt?
Exercice 65   Montrer le théorème de normalisation forte de PA1ω et HA1ω. En déduire que ces logiques sont cohérentes.
Exercice 66   Montrer le théorème de Kreisel-Friedman pour PA1ω et HA1ω.
Exercice 67 ()   En utilisant les définitions trouvées à l’exercice 64, montrer que st et s - t0t - s0 sont prouvablement équivalentes en HA1ω. (Faites-le informellement, et produisez les termes de preuve si vous en avez le courage.) Montrer d’autre part que les paires de formules suivantes sont aussi prouvablement équivalentes en PA1ω:
  1. s0t0 et s+ t0;
  2. s0t0 et s* t0;
  3. ¬ s0 et if s then 0 else S00;
  4. s0t0 et ¬ s0t0;
  5. i t · s(i) ≈ 0 et RN(s(0)) (λ i, j · s(S i) + j) t0;
  6. i t · s(i) ≈ 0 et RN(s(0)) (λ i, j · s(S i) * j) t0;
En déduire que toute formule Δ00 de PA1ω est prouvablement équivalente en HA1ω à une formule de la forme s0. En conclure qu’on peut redémontrer le théorème de Kreisel-Friedman sans utiliser de CPS et en remplaçant le lemme 28 par un lemme plus simple à démontrer.

Il existe de nombreux autres outils que l’on peut utiliser pour analyser les systèmes de preuve; consulter [Koh98] pour plus de détails.


Previous Up Next