Previous Up Next

4  Logique intuitionniste d’ordre deux et système F

L’arithmétique de Peano du premier ordre PA1, ou bien celle de Heyting HA1, est en fait un système logique relativement faible. Il se trouve que, même si de nombreuses vérités arithmétiques sont démontrables en PA1 ou en HA1, il en existe de relativement simples qui ne sont pas démontrables en PA1 [PH78].

4.1  Logique et arithmétique d’ordre deux

Un système beaucoup plus complet est l’arithmétique de Peano du second ordre PA2, et sa contrepartie intuitionniste HA2. Nous allons nous intéresser à HA2, qui est défini comme HA1 à partir de la logique du premier ordre, mais à partir de la logique du second ordre. La nouveauté apportée par la logique du second ordre est que nous disposons maintenant de variables de prédicats X, Y, …, que l’on peut appliquer à des termes du premier ordre, et sur lesquelles on peut quantifier.

Formellement, étant donné un langage du premier ordre L donné par des familles de symboles de fonctions Fn, n≥ 0, et des familles de symboles ou variables de prédicats Pn, n≥ 0, on définit les formules du second ordre par la grammaire:

  F ::= A ∣ ⊥ ∣ F ⇒ F ∣ ∀  X · F ∣ ∀  Pn · F

A parcourt l’ensemble des formules atomiques, et les formules sont vues à α-conversion près. La différence avec les formules du premier ordre est l’ajout de la quantification ∀ P · F d’ordre deux. Par commodité, nous supposerons que chaque ensemble Pn est infini.

L’autre différence avec la logique d’ordre un est la notion de substitution. Pour toute variable du premier ordre i et pour tout terme t du premier ordre, F [i:=t] est défini comme d’habitude. Fixons une fois pour toutes une suite de variables k1, k2, …, alors F [P (k1, …, kn) := G], où P est une variable de prédicat n-aire et G est une formule est défini par récurrence structurelle sur F par:

  
    P (t1, …, tn) [P (k1, …, kn) := G]=defG [k1:=t1, …, kn:=tn
    Q (t1, …, tm) [P (k1, …, kn) := G]=defQ (t1, …, tm)      (P ≠ Q
    ⊥ [P (k1, …, kn) := G]=def⊥ 
    (F1 ⇒ F2)  [P (k1, …, kn) := G]=def(F1 [P (k1, …, kn) := G]) ⇒ (F2 [P (k1, …, kn) := G]) 
    (∀ i · F) [P (k1, …, kn) := G]=def    ∀ i · (F [P (k1, …, kn) := G]) 
           (où i n’est libre ni dans G, ni dans k1, …, kn
    (∀ Q · F) [P (k1, …, kn) := G]=def    ∀ Q · (F [P (k1, …, kn) := G]) 
       (QP, où Q n’est pas libre dans G)

où dans la première ligne, côté droit, la substitution est une substitution du premier ordre. Intuitivement, la substitution [P (k1, …, kn) := G] consiste à remplacer P (k1, …, kn) par G, et donc aussi P (t1, …, tn) = P (k1, …, kn) [k1:=t1, …, kn:=tn] par G [k1:=t1, …, kn:=tn].

Les règles de déduction de la logique d’ordre deux sont celles de la logique d’ordre un plus:

P Pn. De même, HA2 est HA1 plus ces deux règles, et PA2 est PA1 plus ces deux règles.

Exercice 31   Soit X une variable de prédicat 0-aire. Démontrer (∀ X · X) ⇒ ⊥ et ⊥ ⇒ (∀ X · X) en logique d’ordre deux. En déduire qu’on n’a pas besoin de construction spéciale pour le faux en logique d’ordre deux.

Notre λ-calcul est le même que le λ∇ R-calcul, plus les constructions u G (application d’un terme à un type) et Λ P · u (abstraction sur une variable de prédicat), et est défini par la grammaire:

  ΛN, 2 ::=  V ∣ ΛN, 2 ΛN, 2 ∣ λ  V · ΛN, 2 ∣ ∇ ΛN, 2 ∣ ΛN, 2 T ∣ λ  X · ΛN, 2 ∣ r0 ∣ R ΛN, 2 ΛN, 2 T ∣ ΛN, 2 F ∣ λ  Pn · ΛN, 2

T est le langage des termes du premier ordre de l’arithmétique, et F est celui des formules du second ordre.

Les règles de réduction sont celles de HA1, plus:

  
    (Beta)(λ P · uFu [P (k1, …, kn) := F]

P est n-aire, et la substitution est étendue aux termes de preuve de façon immédiate.

4.2  Système F2

Les termes et les réductions de HA2 sont complexes, et nous allons commencer par étudier une restriction drastique, un système de typage du λ-calcul appelé le système F2 et dû à Jean-Yves Girard. Nous verrons plus tard que le système F2 contient l’essentiel des caractéristiques logiques de HA2.

On obtient le système F2 d’une part en supprimant dans les formules tous les termes et toutes les quantifications du premier ordre, en ne gardant que des variables de prédicats 0-aires, et en ne gardant dans le λ∇ R-calcul que le λ-calcul plus les applications et abstractions du second ordre sur les variables de prédicats 0-aires — on supprime récurseur, application et abstraction du premier et du second ordre non 0-aire.

Ce qui reste est un langage de types de la forme:

  F =def  P0 ∣ F ⇒ F ∣ ∀  P0 · F

La substitution sur les types est la substitution usuelle (regarder la définition de la substitution d’ordre deux lorsque la variable de prédicat est 0-aire).

Le λ-calcul du système F2 est défini par:

  Λ::=  V ∣ ΛΛ∣ λ  V · Λ∣ ΛF ∣ λ  P0 · Λ

F2 parcourt l’ensemble des formules ci-dessus; et les règles de typage sont:

Comme dans le système des types simples, nous utilisons la convention que les règles sont données pour des termes à α-renommage près. Ceci nous permet d’écrire les règles (Abs) et (TAbs) comme ci-dessus, plutôt que sous la forme plus complexe (mais rigoureuse) ci-dessous:

D’un point de vue logique, ce système de typage est un système de déduction naturelle pour la logique intuitionniste minimale propositionnelle quantifiée.

Les règles de réduction définissant →βη sont:

  
    (β)(λ x · uvu [x:=v
    (η)λ x · uxu      (où x n’est pas libre dans v
    (Beta)(λ P · uFu [P:=F
    (Eta)λ P · uPu      (où P n’est libre dans aucun type d’aucune variable libre de u)
Exercice 32   Montrer l’auto-réduction pour βη et le système F2. (Dans le cas de (Eta), montrer d’abord la propriété d’amincissement, voir lemme 4.)
Théorème 7   Tout λ-terme typé dans le système F2 est fortement normalisant.

Preuve : Bien que la preuve ne soit pas très longue, elle est beaucoup plus subtile que dans les cas précédents. Essayons d’adapter la méthode de réductibilité. Le problème est de définir REDP · F: on est tenté de le définir comme étant l’ensemble des λ-termes u tels que, pour toute formule G, uG soit dans REDF [P:=G]. Mais la formule F [P:=G] n’est non seulement pas en général une sous-expression de ∀ P · F, mais elle peut en fait être beaucoup plus grosse. Le passage par le squelette comme aux théorèmes 4 et 6 ne fonctionne plus. Prenons en effet par exemple REDP · P: si on le définit comme ci-dessus, ce sera l’ensemble des λ-termes u tels que, pour toute formule G, uG est dans REDG. Autrement dit, pour définir REDP · P, on a besoin de disposer déjà par hypothèse de récurrence des définitions des REDG pour toutes les formules G — y compris ∀ P · P, au passage. La subtilité fondamentale du système F2, comme on le voit, est que lorsque l’on quantifie sur P pour définir ∀ P · F, P varie sur toutes les formules, y compris la formule à définir ∀ P · F elle-même. Un système logique qui a cette propriété est dit imprédicatif.

On contourne le problème comme suit. Considérons des contextes C servant à interpréter les variables de types: C est une fonction qui à chaque variable de type P associe un ensemble de λ-termes. Pour toute variable de type P et pour tout ensemble S de λ-termes, notons C [P:=S] le contexte qui à P associe S et à tout QP associe C (Q). On définit alors l’ensemble REDFC des termes réductibles au type F dans le contexte C. Ceci permettra de contourner le problème en définissant (en gros) REDP · FC comme l’ensemble des termes u tels que pour tout ensemble S de termes, pour toute formule G, u G est dans RECFC [P:=S]. L’ensemble REDFC sera tel, notamment, que pour toute variable de type P, REDPC sera simplement l’ensemble C (P). (Dans les preuves précédentes, c’était SN: on peut rejouer ces preuves en utilisant le contexte qui à tout P associe SN.) Mais pour que la preuve de normalisation forte fonctionne, il faudra que nous vérifions les propriétés (CR1), (CR2) et (CR3). Ces propriétés ne sont pas valides sur REDPC si C (P) est un ensemble arbitraire de termes. On restreint donc les C (P) a être des ensembles de λ-termes particuliers appelés candidats de réductibilité. Définissons donc les candidats de réductibilité en paraphrasant les conditions (CR1), (CR2) et (CR3). Un candidat de réductibilité est un ensemble S de λ-termes tels que:

Dans cette définition, un terme neutre est un terme ne commençant pas par λ, et SN est l’ensemble des termes fortement normalisants pour →βη.

Reprenons maintenant la définition de REDFC. Pour toute variable de prédicat P, on pose donc REDPC =def C (P); REDF1F2C est l’ensemble des termes u tels que pour tout vREDF1C, uvREDF2C; et REDP · FC est l’ensemble des termes u tels que, pour tout candidat de réductibilité S, pour toute formule G, uGREDFC [P:=S]. Cette définition de REDFC est valide, et procède par récurrence structurelle sur F.

Un contexte C est appelé un contexte de candidats si C (P) est un candidat de réductilibité pour tout P. Montrons que REDFC vérifie les conditions (CR1) à (CR3), autrement dit que REDFC est un candidat de réductibilité pour tout contexte de candidats C et pour toute formule F. Ceci ne présente pas plus de difficulté qu’au théorème 1, et s’effectue par récurrence structurelle sur F. Si F est une variable de type P, REDPC = C (P) est un candidat de réductibilité par hypothèse. Si F est de la forme F1F2, c’est comme au théorème 1. Le cas intéressant est celui où F est de la forme ∀ P · F1. Remarquons d’abord que SN est lui-même un candidat de réductibilité; en particulier, il existe des candidats de réductibilité.

Observons que: (*) si Q n’est pas libre dans G, alors REDGC = REDGC [Q:=S] pour tout candidat S. Autrement dit, REDGC ne dépend que de la restriction de C aux variables de prédicats libres dans G. On montre (*) par récurrence structurelle sur G. Si G est une variable de prédicat P, alors REDGC = C (P), alors que REDGC [Q:=S] = (C [Q:=S]) (P) = C (P) aussi, car par hypothèse Q n’est pas libre dans G, donc QP. Si G est de la forme G1G2, alors REDGC = {u ∣ ∀ vREDG1C · uvREDG2C} = {u ∣ ∀ vREDG1C [Q:=S] · uvREDG2C [Q:=S]} (par hypothèse de récurrence) = REDGC [Q:=S]. Si G est de la forme ∀ P · G1 (où par α-renommage on peut supposer PQ), alors REDGC = {u ∣ ∀ S′ candidat · ∀ G′ · u G′ ∈ REDG1C [P:=S′]} = {u ∣ ∀ S′ candidat · ∀ G′ · u G′ ∈ REDG1C [P:=S′] [Q:=S]} (par hypothèse de récurrence) = {u ∣ ∀ S′ candidat · ∀ G′ · u G′ ∈ REDG1C [Q:=S] [P:=S′]} = REDGC [Q:=S] (car PQ).

Montrons maintenant que: (**) REDFC [P := REDGC] = REDF [P:=G]C. Ceci est par récurrence structurelle sur F. Si F=P, alors REDFC [P := REDGC] = (C [P:= REDGC]) (P) = REDGC = REDF [P:=G]C. Si F est une autre variable de prédicat Q, REDFC [P := REDGC] = C (Q) = REDQC = REDF [P:=G]C. Si F est de la forme F1F2, alors REDFC [P := REDGC] = {u ∣ ∀ vREDF1C [P := REDGC] · uvREDF2C [P := REDGC]} = {u ∣ ∀ vREDF1 [P:=G]C · uvREDF2 [P:=G]C} (par hypothèse de récurrence) = REDF1 [P:=G] ⇒ F2 [P:=G]C = REDF [P:=G]C. Si F est de la forme ∀ Q · F1, alors REDFC [P := REDGC] = {u ∣ ∀ S candidat · ∀ H · u HREDF1C [P:=REDGC] [Q:=S]} = {u ∣ ∀ S candidat · ∀ H · u HREDF1C [Q:=S] [P:=REDGC]} = {u ∣ ∀ S candidat · ∀ H · u HREDF1C [Q:=S] [P:=REDGC [Q:=S]]} (par (*), car par α-renommage on peut supposer Q non libre dans G) = {u ∣ ∀ S candidat · ∀ H · u HREDF1 [P:=G]C [Q:=S]} (par hypothèse de récurrence) = REDF [P:=G]C.

On a alors: (+) pour tout terme u1 tel que u1 [x:=v] ∈ REDF2C pour tout vREDF1C, alors λ x· u1REDF1F2C. C’est comme au lemme 6, voir la preuve du théorème 1.

Aussi: (++) pour tout terme u1 tel que u1 [P:=G] ∈ REDF1C [P:=S] pour toute formule G et tout candidat S, alors λ P · u1REDP · F1C. Par hypothèse, en prenant G=def P et S =def C (P), u1 lui-même est dans REDF1C, donc dans SN par (CR1). Nous démontrons (++) en montrant que (λ P · u1) GREDF1C [P:=S] pour toute formule G et tout candidat S. C’est par récurrence sur ν (u1), en utilisant (CR3), puisque (λ P · u1) G est neutre. Mais (λ P · u1) G ne peut se réduire en une étape que vers: (λ P · u1) G avec u1βη u1, qui est dans REDF1C [P:=S] par hypothèse de récurrence; ou vers u1 [P:=G], qui est dans REDF1C [P:=S] par hypothèse; ou vers u2 G par (Eta), alors que u1 est de la forme u2 P et P n’est libre dans aucun type d’aucune variable libre de u2 — mais alors u2 G = u1 [P:=G], qui est dans REDF1C [P:=S] par hypothèse.

Il ne reste plus qu’à démontrer:

(♣) si x1:F1, …, xn:Fnu : F est dérivable en système F2, pour tout contexte de candidats C, pour tous v1REDF1C, …, vnREDFnC, alors u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] ∈ REDFC

où la substitution [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] qui remplace en parallèle les xi par les vi et les variables de types Pj par les formules Gj est définie de la façon naturelle.

On montre (♣) par récurrence structurelle sur la dérivation de typage donnée de u. Si la dernière règle est (Var), u est une variable xi, 1≤ in, donc u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] = vi est dans REDFiC = REDFC par hypothèse.

Si u est de la forme u1 u2, par hypothèse de récurrence u1 [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] est dans REDGFC pour une certaine formule G telle que u2 [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] est dans REDGC, donc u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] ∈ REDFC.

Si u est de la forme u1 G, avec u1 de type ∀ P · F1 et F = F1 [P:=G], alors par hypothèse de récurrence u1 [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] ∈ REDP · F1C, donc u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] ∈ REDF1C [P:=S] pour tout candidat S. Prenons S =def REDGC: par (**), u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] ∈ REDF1 [P:=G]C = REDFC.

Si u est de la forme λ x · u1, avec F = F1F2, alors par hypothèse de récurrence u1 [x1:=v1, …, xn:=vn, x:=v, P1:=G1, …, Pm:=Gm] ∈ REDF2C pour tout vREDF1C, mais u1 [x1:=v1, …, xn:=vn, x:=v, P1:=G1, …, Pm:=Gm] = (u1 [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm]) [x:=v]. Nous utilisons ici que x peut être prise différente de x1, …, xn, et non libre dans v1, …, vn, par α-renommage. Donc par (+) u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] ∈ REDFC.

Si u est de la forme λ P · u1, avec F = ∀ P · F1, alors par hypothèse de récurrence u1 [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm, P:=G] est dans REDF1C, et ce pour tout contexte de candidats C′, en particulier pour C′ de la forme C [P:=S]. Comme u1 [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm, P:=G] = (u1 [x1:=v1, …, xn:=vn, x:=v, P1:=G1, …, Pm:=Gm]) [P:=G] (en α-renommant P au besoin dans u), et comme S est arbitraire, par (++) u [x1:=v1, …, xn:=vn, P1:=G1, …, Pm:=Gm] est dans REDP · F1C = REDFC.

Le théorème de normalisation forte des termes typés dans le système F2 se déduit de (♣) en prenant vi=xi pour tout i, 1≤ in, et m=0, en utilisant (CR3) pour justifier le choix des xi, et (CR1) pour conclure.     ♦

Vu sous l’angle des langages de programmation, les règles (TAbs) et (TApp) offrent la notion de fonctions, et en général d’objets polymorphes. Prenons par exemple la fonction id =def λ P · λ x · x, de type ∀ P · PP: c’est la fonction identité sur tout type P, au sens où id nat est la fonction identité sur les entiers, id real est la fonction identité sur les réels, etc. Il s’agit de polymorphisme paramétrique, le comportement de la fonction étant indépendant du type P passé en paramètre. (L’autre forme classique de polymorphisme est le polymorphisme ad hoc, où le corps de la fonction teste d’abord le type P; c’est la forme typique de polymorphisme présent dans les langages orientés objets.)

Le polymorphisme paramétrique est typiquement le polymorphisme présent dans le langage ML, en particulier en OCaml. Le polymorphisme est cependant restreint en ML: les seules quantifications universelles sont au sommet, pas à l’intérieur, des types. Formellement, appelons monotype tout type du système F2 dans lequel ∀ n’intervient pas (ce sont les types simples), et appelons polytype tout type de la forme ∀ α1, …, αn · F, où F est un monotype. Les types ML sont les polytypes. De plus, les jugements de typage en ML sont asymétriques, et sont de la forme x1 : F1, …, Fnu : τ, où F1, …, Fn sont des polytypes et τ est un monotype. À cause de cette forme de jugement, la règle (∀ I) n’a aucun sens comme règle de typage, et la construction λ P · u non plus. La création de polytypes passe par la règle de généralisation (Gen) et la construction de programmes let…in:

où α1, …, αn sont les variables de types libres dans τ1 mais pas libres dans aucun polytype de Γ.

ML diffère aussi du système F2 par d’autres points. D’abord, le polymorphisme est implicite, comme dans le système F (exercice 40): lorsque x est de type ∀ α · F, on n’écrit pas x G pour obtenir une instance de x de type F [α:=G], mais simplement x. Formellement, la règle de typage des variables est:

Enfin ML est un langage de programmation réel, et inclut donc un certain nombre de constructions moins justifiables logiquement. Par exemple, ML possède les définitions par récursion générales (la construction let rec, codable à l’aide d’une constante Y : ∀ α · (α ⇒ α) ⇒ α — ou plutôt Y : ∀ α, β · ((α ⇒ β) ⇒ (α ⇒ β)) ⇒ (α ⇒ β)), des types de données récursifs (généralisant la définition des entiers de Peano construits sur 0 et S, notamment), des effets de bord, et OCaml a en plus les objets (polymorphisme ad hoc) et encore d’autres constructions.

Exercice 33   Les entiers de Church en système F2 sont n⌉ =def λ P · λ f, x · fn x. Montrer qu’ils sont tous de type N =defP · (PP) ⇒ (PP). En s’inspirant des définitions correspondantes en λ-calcul pur, donner des définitions du successeur S de type NN, de l’addition ⌈+⌉, de la multiplication ⌈×⌉ et de la fonction puissance exp, ces trois dernières de type NNN. Comparer avec l’exercice 4.
Exercice 34   On pose F1 × F2 =defP · (F1F2P) ⇒ P. (Comparer avec l’exercice 5.) On pose u, v ⟩ =def λ P · λ z · z u v, et lorsque u est de type F1 × F2, π1 F1 u =def u F1x, y · x), π2 F2 u =def u F2x, y · y). Montrer que les règles (∧ I), (∧ E1) et (∧ E2) sont admissibles (en remplaçant π1 par π1 F1 et π2 par π2 F2), et que π1 F1u, v⟩ →βη+ u, π2 F2u, v ⟩ →βη+ v. En somme, on peut définir le produit (la conjonction) en système F2.
Exercice 35   On pose F1 + F2 =defP · (F1P) ⇒ (F2P) ⇒ P, et:
    
      ι1 u=defλ P · λ k1k2 · k1 u 
      ι2 u=defλ P · λ k1k2 · k2 u 
      ⟨ G⟩ case u 

      ι1 x1 ↦ v1 
ι2 x2 ↦ v2


=defu G (λ x1 · v1) (λ x1 · v2)
k, k1, k2 sont des variables fraîches, P est une variable de type fraîche dans les deux premiers cas et v1 et v2 sont de types G dans le troisième cas. Montrer que les règles de typage (∨ I1), (∨ I2) et (∨ E) sont vérifiées, et que l’on a les réductions:
    
      ⟨ G ⟩ case ι1 u 

      ι1 x1 ↦ v1 
ι2 x2 ↦ v2


βη+v1 [x1:=u
      ⟨ G ⟩ case ι2 u 

      ι1 x1 ↦ v1 
ι2 x2 ↦ v2


βη+v2 [x2:=u
    
En somme, on peut définir la somme (la disjonction) en système F2. Comparer avec l’exercice 22.
Exercice 36   On pose P · F =defQ · (∀ P · FQ) ⇒ Q, où Q est une variable de type fraîche. On définit ι G u =def λ Q · λ k · k G u et case uP xv} =def u HP · λ x · v) (où H est le type de v dans un contexte idoine, cf. ci-dessous).

Montrer que les règles de typage suivantes sont admissibles:

En déduire que le quantificateur existentiel du second ordre est définissable dans le système F2. Montrer qu’on a la règle de réduction:

    
      case ι G u 

ι P x ↦ v

βη+v [P:=G] [x:=u]
Exercice 37   Comme à l’exercice 36, montrer qu’on peut définir le quantificateur existentiel du premier ordre en système F2 par i · F =defQ · (∀ i · FQ) ⇒ Q. En déduire une preuve simple de la normalisation forte de HA1 (exercice 28).
Exercice 38   Montrer que P=def λ k · π2 N (k (N × N) (λ s · ⟨ S1 N s), π1 N s ⟩) ⟨ ⌈0⌉, ⌈0⌉ ⟩), où S et ⌈0⌉ sont comme à l’exercice 33 et ⟨ … ⟩, π1, π2 et × sont comme à l’exercice 34, est un terme définissant le prédécesseur, au sens où P est de type NN et où P (Sn⌉) →βη*n pour tout entier n. (Effectuer une récurrence sur n.)
Exercice 39 ()   Le but de cet exercice est de montrer qu’on peut définir le récurseur sur les entiers de Church dans le système F2. Ceci procède comme pour le prédécesseur. On pose R=def λ Q · λ x, y, n · π1 Q (n (Q × N) (λ z · ⟨ y2 N z) (π1 Q z), S2 N z) ⟩) ⟨ x, ⌈0⌉⟩). Vérifier que R est de type Q · Q ⇒ (NQQ) ⇒ NQ, et que RG u v ⌈0⌉ →βη+ u, RG u vn+1⌉ ↔βη* vn⌉ (RG u vn⌉), où βη* est la clôture réflexive symétrique transitive de βη. (Montrer par récurrence sur n que, si l’on pose f (Q, u, v, n) =def n (Q × N) (λ z · ⟨ v2 N z) (π1 Q z), S2 N z) ⟩) ⟨ u, ⌈0⌉⟩, alors f (Q, u, v, ⌈0⌉) →βη+u, ⌈0⌉⟩, et que si f (Q, u, v, ⌈n⌉) ↔βη*w, ⌈n⌉ ⟩, alors f (Q, u, v, ⌈n+1⌉) ↔βη*vnw, ⌈n+1⌉ ⟩.)
Exercice 40   Le système F est comme le système F2, sauf que les règles (TApp) et (TAbs) sont changées en:

Autrement dit, on se passe des constructions d’application à des types et d’abstraction sur les types. Noter que tout terme a alors en général une infinité de types, même dans un contexte Γ fixé. Montrer que la propriété d’auto-réduction est vérifiée pour la règle (β), mais pas pour la règle (η).

Exercice 41 ()   Montrer que le λ-calcul typé en système F (exercice 40) est fortement normalisant. (Adapter la preuve du théorème 7.) Pourquoi ceci n’est-il pas un cas particulier du théorème 7 ?

4.3  Normalisation forte de la logique d’ordre deux

Le langage des termes de la logique intuitionniste d’ordre deux est le λ∇-calcul plus les constructions d’application et d’abstraction de prédicats:

  Λ2 ::=  V ∣ Λ2 Λ2 ∣ λ  V · Λ2 ∣ ∇ Λ2 ∣ Λ2 T ∣ λ  X · Λ2 ∣ Λ2 F ∣ λ  Pn · Λ2

T est l’ensemble des termes du premier ordre et F est celui des formules du second ordre. Les règles de preuve, c’est-à-dire de typage, sont (Ax), (⊥ E), (⇒ I), (⇒ E), (∀ I), (∀ E), (∀2 I) et (∀2 E). On normalise les preuves par les règles de réduction:

  
    (β)(λ x · uvu [x:=v
    (β1)(λ i · utu [i:=t
    (Beta)(λ P · uFu [P (k1, …, kn) := G]    (P∈  Pn
    

La propriété de normalisation forte des preuves de logique intuitionniste d’ordre deux est une conséquence directe de celle du système F2. En effet, définissons comme au théorème 4 une fonction qui efface tout ce qui est du premier ordre dans les formules et les λ∇-termes. Sur les formules:

  
    E (P (t1, …, tn)) =def P    E (⊥) =def ∀ P · P    E (F1 ⇒ F2) =def E (F1) ⇒ E (F2
    E (∀ i · F) =def E (F)    E (∀ P · F) =def ∀ P · E (F)

Noter que P Pn sur le côté gauche est vu comme variable 0-aire sur le côté droit. On traduit aussi ⊥ en ∀ P · P, cf. exercice 31. Sur les λ∇-termes, l’effacement est défini par:

  
    E (x)=defx      E (uv)=defE (uE (v
    E (λ x · u)=defλ x · E (u)      E (∇ u)=defE (uE (G)    (∇ u de type G
    E (ut)=defE (u)      E (λ i · u)=defE (u
    E (u G)=defE (uE (G)      E (λ P · u)=defλ P · E (u)

On a:

Lemme 13   Si x1:F1, …, xm:Fmu : F est dérivable en logique intuitionniste du second ordre, alors x1 : E (F1), …, xm : E (Fm) ⊢ E (u) : E (F) en système F2.

Preuve : Remarquons d’abord que: (*) E (F′ [P (k1, …, kn) := G]) = E (F′) [P := E (G)]. C’est une récurrence structurelle facile sur F′. Ensuite, que: (**) si P n’est pas libre dans F′, alors P n’est pas libre dans E (F′). C’est encore une récurrence structurelle facile sur F′.

On démontre le lemme par récurrence structurelle sur la dérivation donnée de x1:F1, …, xm:Fmu : F.

C’est évident si u est une variable xi, 1≤ in, si u est de la forme uv′, ou λ x · u′.

Si u est de la forme ∇ u′, alors par hypothèse de récurrence on a dérivé x1:E (F1), …, xm:E (Fm) ⊢ E (u′) : ∀ P · P, donc x1:E (F1), …, xm:E (Fm) ⊢ E (u) : E (F) par (TApp).

Si u est de la forme ut avec t un terme du premier ordre, alors par hypothèse de récurrence on a dérivé x1:E (F1), …, xm:E (Fm) ⊢ E (u′) : E (G), où G = ∀ i · F, donc x1:E (F1), …, xm:E (Fm) ⊢ E (u) : E (F), puisque E (u) = E (u′) et E (F) = E (G).

Si u est de la forme λ i · u′, alors par hypothèse de récurrence on a dérivé x1:E (F1), …, xm:E (Fm) ⊢ E (u′) : E (G), où F = ∀ i · G, donc x1:E (F1), …, xm:E (Fm) ⊢ E (u) : E (F), puisque E (u) = E (u′) et E (F) = E (G).

Si u est de la forme uG, alors par hypothèse de récurrence on a dérivé x1:E (F1), …, xm:E (Fm) ⊢ E (u′) : E (∀ P · F′), où F = F′ [P (k1, …, kn) := G]; on en déduit que x1:E (F1), …, xm:E (Fm) ⊢ E (u′) E (G) : E (F′) [P := E (G)]: par (*), E (F) = E (F′) [P := E (G)], donc on a dérivé x1:E (F1), …, xm:E (Fm) ⊢ E (u) : E (F).

Si u est de la forme λ P · u′, alors par hypothèse de récurrence on a dérivé x1:E (F1), …, xm:E (Fm) ⊢ E (u′) : E (F′), avec F = ∀ P · F′, où P n’est pas libre dans F1, …, Fm; par (**), on peut appliquer (TAbs) et inférer x1:E (F1), …, xm:E (Fm) ⊢ λ P · E (u′) : λ P · E (F′), c’est-à-dire x1:E (F1), …, xm:E (Fm) ⊢ E (u) : E (F).     ♦

Lemme 14   Si uv par les règles (β) ou (Beta), alors E (u) → E (v) par (β) ou (Beta). Si uv par 1), alors E (u) = E (v).

Preuve : Montrons d’abord que: (*) E (u′) [x:=E (v′)] = E (u′ [x:=v′]). Aussi, que: (**) E (u′) [P:=E (G)] = E (u′ [P (k1, …, kn) := G]) pour tout P Pn. Enfin, que: (***) E (u′ [i:=t]) = E (u′). Les trois sont par récurrence structurelle sur u′, (**) utilisant la propriété (*) démontrée au lemme 13 dans le cas où u′ est de la forme vG′, où G′ est une formule.

On démontre le lemme par récurrence sur la profondeur du rédex que l’on contracte dans u. Le seul cas intéressant est celui où u est lui-même le rédex. Or E ((λ x · u′) v′) = (λ x · E (u′)) E (v′) → E (u′) [x:=E (v′)] = E (u′ [x:=v′]) (par (*)), ce qui règle le cas de (β), E ((λ P · u′) G) = (λ P · E (u′)) E (G) → E (u′) [P:=E (G)] = E (u′ [P (k1, …, kn):=G]) (par (**)), ce qui règle le cas de (Beta), et E ((λ i · u′) t) = E (u′) = E (u′ [i:=t]) (par (***)).     ♦

Théorème 8   Tout λ∇-terme u typé en logique intuitionniste du second ordre est fortement normalisant.

Preuve : Notons que si vw par la règle (β1), alors la taille |Sk (v)| du squelette de v est strictement supérieure à celle |Sk (w)| du squelette de w. Définissons le squelette d’un terme par: Sk (x) =def x, Sk (uv′) =def Sk (u′) Sk (v′), Skx · u′) =def λ x · Sk (u′), Ski · u′) =def λ i · Sk (u′), Sk (ut) =def Sk (u′), SkP · u′) =def λ P · Sk (u′), Sk (uG) =def Sk (u′) Sk (G), où le squelette de G est défini comme au théorème 4. La taille de Sk ((λ i · u′) t) = λ i · Sk (u′) est strictement supérieure à celle de Sk (u′ [i:=t]) = Sk (u′) (comme une récurrence structurelle facile sur u′ le montre).

Donc, si on mesure u par le couple (E (u), |Sk (u)|), et que l’on ordonne ces couples par l’ordre lexicographique des deux relations →+ et >, si vw, alors la mesure de v est strictement supérieure à celle de w, en utilisant le lemme 14. L’ordre lexicographique étant bien fondé, le théorème est démontré.

Une preuve peut-être plus intuitive est la suivante. Supposons qu’il existe une réduction infinie partant de u: u = u0u1 → … → ui → …. En passant aux effacements, E (u0) →= E (u1) →= … →= E (ui) →= … par lemme 14, où →= dénote 0 ou une étape de réduction en F2. Par le théorème 7 il n’y a qu’un nombre fini de ces symboles →= qui sont des →, donc il existe un entier i tel qu’à partir de l’indice i on n’ait plus que des réductions par (β1). Mais il ne peut y avoir qu’un nombre fini consécutif de telles réductions, ce qui contredit le fait que la réduction considérée soit infinie.     ♦

Corollaire 6   La logique intuitionniste d’ordre deux est cohérente: on ne peut pas démontrer u : ⊥ pour aucun λ∇-terme u.

Preuve : Par le théorème 8, on peut se restreindre à considérer u normal. Prenons u de taille minimale parmi les termes normaux tels que ⊢ u : ⊥ soit dérivable; u est de la forme h u1un, où h est une variable ou le symbole ∇ (auquel cas n≥ 1), et u1, …, un sont des λ∇-termes, des termes du premier ordre ou des formules. Mais h ne peut pas être une variable, parce que le contexte à gauche de ⊢ est vide. Donc h est ∇, mais alors on a ⊢ u1 : ⊥, ce qui contredit la minimalité de la taille de u.     ♦

Exercice 42   Dans les démonstrations ci-dessus, nous n’avons pas considéré la règle (∇): u v → ∇ u. Pourquoi la technique de preuve que nous avons utilisé ne fonctionne-t-elle plus si on ajoute cette règle ?
Exercice 43 ()   La logique classique du second ordre est la logique intuitionniste du second ordre plus l’opérateur C, autrement dit plus la règle de typage (¬¬ E). La règles de réduction sont (β), 1), (Beta), ( CL) et C). Montrer en étendant le système F2 au cas classique, c’est-à-dire en ajoutant la règle de typage:

et les règles de réduction ( CL) et C), que la logique classique du second ordre est cohérente.

Exercice 44   On définit l’égalité de Leibniz comme suit: st est vu comme une abréviation de P · P (s) ⇒ P (t). Trouver des termes de preuve montrant que est réflexive et que st implique que l’on peut déduire F [i:=t] à partir de F [i:=s]. En conclure qu’on n’a pas besoin de symbole spécial ou de règle spéciale pour traiter l’égalité en logique d’ordre deux: l’égalité est définissable à l’ordre deux.
Exercice 45   Montrer que l’égalité de Leibniz est symétrique, autrement dit trouver u tel que x : stu : ts. (Indication: instancier P (k1) par Q (k1) ⇒ Q (s).)

4.4  Retour sur HA2 et PA2

On va montrer que HA2 est cohérent, par une extension de la technique utilisée pour HA1. La principale innovation est le traitement de la quantification du second ordre, qui sera traitée comme dans le système F2.

Lemme 15   Si Γ, x : F1u : F2 et Γ ⊢ v : F1 sont dérivables en HA2, alors Γ ⊢ u [x:=v] : F2 aussi.

Preuve : Comme au lemme 12, on prouve que pour toute preuve π2 de Γ, x : F1, Δ ⊢ u : F2 et toute preuve π1 de Γ ⊢ v : F1, on peut construire une preuve π de Γ, Δ ⊢ u [x:=v] : F2 par récurrence structurelle sur π2.     ♦

Lemme 16   Si Γ ⊢ u : F est dérivable en HA2, et P Pn n’est pas libre dans aucune formule de Γ, alors Γ ⊢ u [P (k1, …, kn):=G] : F [P (k1, …, kn) := G] aussi.

Preuve : On prouve plus généralement que pour toute preuve π de x1:F1, …, xm:Fmu : F, on peut construire une preuve π de x1 : F1 [P (k1, …, kn):=G], …, xm : Fm [P (k1, …, kn):=G] ⊢ u [P (k1, …, kn):=G] : F [P (k1, …, kn):=G] par récurrence structurelle sur π.     ♦

Nous considérons les règles de réduction suivantes, qui sont celles de HA1 plus (Beta). On ne considère pas (η) et (Eta), dont nous n’aurons pas besoin.

  
    (β)(λ x · uvu [x:=v
    (β1)(λ i · utu [i:=t
    (Beta)(λ P · uFu [P (k1, …, kn) := G]    (P∈  Pn
    (∇)∇ u v∇ u 
    (R0)R u v 0u 
    (RS)R u v (S (t))v t (R u v t
    (+0)s + 0s 
    (+S)s + S (t)S (s + t
    (*0)s * 00 
    (*S)s * S (t)s * t  + s
Théorème 9 (Auto-réduction)   Si Γ ⊢ u : F est dérivable en HA2 et uv, alors Γ ⊢ v : F est dérivable en HA2.

Preuve : Par rapport au théorème 5, le cas de la règle (β) est par le lemme 15, celui de la règle (β1) est comme au lemme 11, et celui de la règle (Beta) est par le lemme 16. Les autres cas sont comme au théorème 5.     ♦

Théorème 10   Tout λ∇ R-terme typé en HA2 est fortement normalisant.

Preuve : Comme au théorème 6, notons que tout terme t du premier ordre termine. Appelons encore un λ∇ R-terme neutre s’il ne commence pas par λ ou ∇. Soit SN l’ensemble des λ∇ R-termes fortement normalisants. Un candidat de réductibilité est un ensemble S de λ∇ R-termes vérifiant les propriétés (CR1), (CR2) et (CR3) du théorème 7. Un contexte de candidats C est une fonction des variables de prédicats vers des candidats de réductibilité. On définit ensuite REDC et REDstC comme étant SN, REDP (t1, …, tn)C est C (P), REDFGC est l’ensemble des λ∇ R-termes u tels que pour tout vREDFC, uvREDGC, REDi · FC est l’ensemble des λ∇ R-termes u tels que pour tous termes t du premier ordre (qui terminent), utREDF [i:=t]C, et finalement REDP · FC est l’ensemble des λ∇ R-termes u tels que pour toute formule G, pour tout candidat de réductibilité S, u GREDFC [P:=S]. Ceci est une définition de REDF par récurrence structurelle sur le squelette Sk (F) de F, qui est défini comme au théorème 4, étendu par Sk (∀ P · F) =defP · Sk (F).

Il est facile de vérifier que REDFC est un candidat de réductibilité pour tout contexte de candidats C et toute formule F, par récurrence structurelle sur Sk (F), que (*) si Q n’est pas libre dans G, alors REDGC = REDGC [Q:=S] pour tout candidat S (par récurrence sur Sk (G)), que (**) REDFC [P := REDGC] = REDF [P (k1, …, kn):=G]C (par récurrence sur Sk (F)), que (+) pour tout terme u1 tel que u1 [x:=v] ∈ REDF2C pour tout vREDF1C, alors λ x· u1REDF1F2C, et que (++) pour tout terme u1 tel que u1 [P (k1, …, kn):=G] ∈ REDF1C [P:=S] pour toute formule G et tout candidat S, alors λ P · u1REDP · F1C. C’est comme au théorème 7.

Comme au théorème 6, on montre que (∘) si vREDF [i:=0] et wREDj · F[i:=j] ⇒ F[i:=S (j)], alors R v w tREDF [i:=t].

Les propriétés (*), (**), (+), (++) et (∘) nous permettent de démontrer:

(♣) si x1:F1, …, xn:Fnu : F est dérivable en HA2, alors pour tout contexte de candidats C, pour tous v1REDF1C, …, vnREDFnC, u [x1:=v1, …, xn:=vn, P1 (k1, …, kn1):=G1, …, Pm (k1, …, knm):=Gm] ∈ REDFC,

d’où l’on déduit le théorème.     ♦

Corollaire 7   L’arithmétique de Heyting du second ordre HA2 est cohérente.

Preuve : Exactement comme au corollaire 5.     ♦

Exercice 46   Exercez-vous à refaire rigoureusement et en détail la preuve du théorème 10.
Exercice 47   L’arithmétique de Peano du premier ordre PA2 est à HA2 ce que PA1 est à HA1, sa version classique. (Voir exercice 29.) On ajoute les règles (∀2 I) et (∀2 E) à PA1, et les règles de réduction (Beta). Montrer, en s’inspirant des résultats déjà démontrés, l’auto-réduction et la normalisation forte de ce calcul. En déduire que PA2 est cohérente.

L’arithmétique du second ordre et le système F2 sont tellement proches qu’en fait les fonctions mathématiques de N vers N dont on peut démontrer qu’elles sont totales en arithmétique d’ordre deux sont exactement celles que l’on peut coder comme des λ-termes u de type NN en système F2. C’est le théorème de Girard, dont on pourra trouver une démonstration au chapitre 15 de [GLT89]. Mais certaines fonctions n’ont que des implémentations inefficaces. L’exemple typique est le prédécesseur, dont l’implémentation la plus efficace en système F2 est celle de l’exercice 38, qui calcule le prédécesseur de n en temps linéaire en n. Une façon de corriger ce problème est d’ajouter à F2 un type de base N, plus deux constantes 0 : N et S : NN, ainsi qu’un récurseur R : ∀ Q · Q ⇒ (NQQ) ⇒ NQ tel que R u v 0 → u et R u v (S w) → v w (R u v w) — essentiellement comme en HA2, sauf qu’en HA2 les entiers naturels sont codés comme des termes du premier ordre et non comme des λ-termes de type N. Le prédécesseur est alors R 0 (λ n, x · n).

4.5  Logiques d’ordre supérieur

Il n’y a aucune raison de s’arrêter à l’ordre deux, et l’on peut définir des systèmes logiques d’ordre 3, 4, …, ω. La logique et l’arithmétique à tous ordres est encore cohérente. Le but de cette section est d’une part d’indiquer comment le λ-calcul est utilisé ici pour définir non seulement les preuves mais les formules elles-mêmes, et d’autre part d’avertir le lecteur qui aurait l’impression que tous les systèmes logiques que l’on peut définir intuitivement sont cohérents, qu’il existe des systèmes logiques apparemment très proches des systèmes précédents mais qui sont incohérents.

Rappelons que nous avons formalisé l’arithmétique du premier ordre par un λ-calcul dont les types étaient des formules du premier ordre modulo quelques règles de calcul pour définir l’addition et la multiplication. La logique d’ordre supérieure est définie de façon similaire en choisissant comme langage des formules un λ-calcul simplement typé enrichi de quelques constantes représentant l’implication et la quantification universelle, modulo les règles de calcul définies par la βη-conversion.

Les types simples que l’on utilise sont:

   T ::= B ∣  T →  T

où l’on note → ce que l’on notait ⇒ auparavant, et B est un ensemble de types dit de base, contenant au moins un type Prop, le type des formules, et un autre type ι, qui servira de type des termes. On pourrait considérer plusieurs types de termes, N, R, string, etc., mais pour simplifier nous ferons comme s’il n’y en avait qu’un.

Les expressions logiques sont les λ-termes typables. Ceux de type Prop sont appelés les formules, ceux de type ι sont appelés les termes. On considère deux constantes additionnelles servant à fabriquer les formules: pour chaque type τ, ∀τ de type (τ → Prop) → Prop, qui sert à former les quantifications universelles (∀ x : τ · F sera codé comme ∀τx · F)), et imp de type PropPropProp, qui sert à former les implications (et on notera FG au lieu de imp  F  G). Les symboles de prédicats n-aires seront représentés par des variables P de type ι → … → ι → Prop, où il y a n ι: si t1, …, tn sont n termes (de type ι, donc), P t1tn est la formule que nous notions P (t1, …, tn) en logique du premier ordre. Les symboles de fonctions n-aires sont représentés par des variables f de type ι → … → ι → ι, où il y a n+1 ι en tout: si t1, …, tn sont n termes, f t1tn sera donc aussi un terme, celui que nous notions f (t1, …, tn) en logique du premier ordre.

Les règles de typage des expressions logiques sont essentiellement celles du λ-calcul simplement typé, plus les règles de typage de ∀τ et imp:

La quantification d’ordre un est ∀ι. Notamment, ∀ x : ι · F est ce que nous notions ∀ i · F [x:=i] auparavant. La quantification d’ordre deux est ∀ι → … → ι → Prop: en somme, ∀ x : ι → … → ι → Prop · F, où il y a n ι, est ce que nous notions ∀ P · F [x:=P] avec P Pn en logique du second ordre.

La substitution du premier ordre est la substitution du λ-calcul, et la substitution du second ordre F [P (k1, …, kn) := G] est à βη-équivalence près la substitution F [P := λ k1, …, kn · G] du λ-calcul.

Dans un contexte de typage simple Γ, soient F1, …, Fn des formules (des expressions de type Prop dans Γ), alors x1 : F1, …, xn : Fn est un contexte pourvu que les xi soient des variables différentes deux à deux et en dehors du domaine de Γ. Alors que les contextes de typage seront typiquement notés Γ, les contextes seront typiquement notés Π. Les jugements de preuves seront de la forme Γ; Π ⊢ u : F, et leur dérivabilité signifiera que dans le contexte de typage Γ, Π est un contexte et F est une formule, et que de plus u est une preuve de F à partir des hypothèses F1, …, Fn présentes dans Π. Noter que les jugements de typage Γ ⊢ e : τ seront aussi utilisés, et sont des jugements du λ-calcul simplement typé avec les constantes ∀τ et imp. On définit la logique d’ordre supérieure par les règles:

Les règles (∀ E), (∀ I) traitent des quantifications d’ordre un, deux, et encore d’autres. Noter la ressemblance entre les règles sur l’implication et les règles sur la quantification universelle. Il se trouve que ce système est encore cohérent, et ceci peut se démontrer en gros comme pour la logique d’ordre deux, en passant par un système similaire au système F2 appelé Fω. Ce dernier a aussi été inventé par Jean-Yves Girard, mais le fait qu’il normalise fortement est plus compliqué que pour F2.

On peut concevoir des systèmes logiques encore plus expressifs. Utilisant l’égalité de Leibniz ≈ (voir exercice 44), on peut modéliser l’arithmétique HAω d’ordre supérieur par l’ajout de constantes 0 de type ι, S de type ι → ι, d’un récurseur R au niveau des preuves:

d’un récurseur au niveau des expressions:

et de termes de preuve vérifiant les règles:

Ce système, ainsi que sa version classique PAω, sont encore cohérents, pour des raisons similaires aux précédents, par des résultats de normalisation forte.

Si l’on ajoute à ce genre de systèmes des types dépendants à la LF, des types inductifs généralisant le type N des entiers naturels, plus quelques autres constructions logiques, on aboutit à des systèmes comme le calcul des constructions inductives, qui sert de fondement au système Coq [BBC+99], et dont le pouvoir expressif est essentiellement celui de la théorie des ensembles avec une infinité de cardinaux fortement inaccessibles [Wer97, Acz99].

Étendre petit à petit des systèmes logiques semble ainsi une activité anodine, qui produit facilement des logiques cohérentes de plus en plus puissantes. Pourtant, de nombreux mathématiciens célèbres ont été à l’origine de systèmes logiques incohérents, dont on pouvait pourtant croire qu’ils ne poseraient pas de problèmes de cohérence a priori.

L’un de ces premiers systèmes est (une partie de) la théorie naïve des ensembles. Dans ce système qui est une extension de la logique du premier ordre, on a pour tout formule F des termes de la forme {iF} dénotant l’ensemble des i vérifiant F, et dont l’ensemble des variables libres est celui de F moins i — c’est très proche de la notation λ i · F. On a aussi un symbole de prédicat binaire є dénotant l’appartenance, et deux règles de déduction nouvelles:

Lemme 17   On peut déduire u : ⊥ pour un certain terme u dans la théorie naïve des ensembles.

Preuve : Il s’agit du contre-exemple de Bertrand Russell. Considérons la formule F (i) =def ¬ (i є i) qui exprime que i ne s’appartient pas à lui-même, où ¬ G =def G ⇒ ⊥. Notons A le terme {iF (i)}. On a:

    ♦

En somme, toute formule est déductible dans cette théorie. Noter la ressemblance entre le terme (λ x · x2 x)) (λ x · є1 x x) et le terme (λ x · xx) (λ x · xx) qui boucle en λ-calcul pur. La ressemblance n’est pas complètement fortuite. Si on voulait démontrer que la théorie naïve des ensembles était cohérente comme nous l’avons fait jusqu’ici pour d’autres théories, nous essaierions de normaliser les preuves, et ceci se ferait naturellement en utilisant la règle є12 u) → u. Mais alors (λ x · x2 x)) (λ x · є1 x x) → (λ x · є1 x x) (є2x · є1 x x)) → є12x · є1 x x)) (є2x · є1 x x)) → (λ x · є1 x x) (є2x · є1 x x)), qui boucle. C’est heureux, car le système est justement incohérent.

En un sens, c’est parce que {iF} agit comme un λ i · F non typé. On peut éviter le problème en le typant par des types simples, et alors on obtiendra essentiellement la logique d’ordre supérieur.

On peut se demander si on ne pourrait pas enrichir le système de types des expressions logiques de la logique d’ordre supérieur, en remplaçant les types simples par les types du système F2, par exemple. On obtiendra ainsi le système U. Définissons-le formellement. On note α, β, …, les variables de types, Π ce que nous notions ∀ en système F2, autrement dit les types sont:

   T ::= B ∣ TVar ∣  T →  T ∣ Π TVar ·  T

B est un ensemble de types de base et TVar dénote l’ensemble des variables de types. Mais, bien que cette extension du langage des formules ait l’air innocente, on a:

Théorème 11 ([Coq94])   Le système U est incohérent: on peut déduire u : ⊥ pour un certain terme u en U.

L’argument est élaboré et ne sera pas donné ici: voir [Coq94], qui donne aussi quelques intuitions et quelques applications.


Previous Up Next