Posté par Burps .
En réponse à la dépêche OCaml 4.03.
Évalué à 3.
Peut on prouver faux dans un système de typage ?
S'il n'est pas dédié à la preuve oui:
let rec f () = f () in f () : 'a . 'a
qui prouve (forall P, P) (pour une certaine notion de quantification sur les prédicats). S'il est dédié à la preuve, il faut espérer que non. Sinon, tu obtiens une logique dont le seul modèle est à un point... pas très intéressant du point de vue logique.
Il me semblait que le "faux" se traduisait par une exception à l'exécution, ou un programme que ne termine pas. Dans le cas de racine de deux, c'est une fraction qu'on simplifie infiniment par exemple.
Il y a en effet des liens assez forts entre terminaison et consistance logique --- même s'il n'est pas forcément nécessaire d'avoir l'un pour avoir l'autre. À noter que dans mon exemple OCaml, j'ai utilisé la non-terminaison pour prouver (forall P, P).
Mais peut on créer un fonction de type dont le type de retour est "faux" ?
Une fonction qui retourne faux n'est pas problématique. C'est de pouvoir l'appliquer qui pose problème... car tu obtiens alors une preuve de faux. E.g., en Coq:
Definition f (p : False) := p.
est de type (False -> False), qui est une tautologie.
[^] # Re: Et pendant ce temps, CamlLight poursuite sa route...
Posté par Burps . En réponse à la dépêche OCaml 4.03. Évalué à 3.
S'il n'est pas dédié à la preuve oui:
qui prouve (forall P, P) (pour une certaine notion de quantification sur les prédicats). S'il est dédié à la preuve, il faut espérer que non. Sinon, tu obtiens une logique dont le seul modèle est à un point... pas très intéressant du point de vue logique.
Il y a en effet des liens assez forts entre terminaison et consistance logique --- même s'il n'est pas forcément nécessaire d'avoir l'un pour avoir l'autre. À noter que dans mon exemple OCaml, j'ai utilisé la non-terminaison pour prouver (forall P, P).
Une fonction qui retourne faux n'est pas problématique. C'est de pouvoir l'appliquer qui pose problème... car tu obtiens alors une preuve de faux. E.g., en Coq:
est de type (False -> False), qui est une tautologie.