Question

Pouvez-vous s'il vous plaît me expliquer quel est le lien fondamental entre les bases de la programmation logique et le phénomène de similitude syntaxique entre les systèmes de type et de la logique classique?

Était-ce utile?

La solution

La correspondance de Curry-Howard est pas sur la programmation logique, mais la programmation fonctionnelle. Le mécanicien fondamental de Prolog est justifiée en théorie de la preuve par John Robinson technique résolution , qui montre comment il est possible de vérifier si les formules logiques exprimées en clauses de Horn sont satisfiable , qui est, si vous pouvez trouver des termes de leurs variables pour substitue logiques qui les rendent vrai.

programmation logique est donc sur la spécification des programmes comme des formules logiques, et le calcul du programme est une forme d'inférence la preuve, en Prolog reolution, comme je l'ai dit. En revanche, les émissions de correspondance de Curry-Howard comment les preuves dans une formulasition spéciale de la logique, appelée déduction naturelle de href="http://en.wikipedia.org/wiki/Natural_deduction", correspondent à des programmes dans le calcul de lambda, avec le type de programme correspondant à la formule qui prouve la preuve; calcul dans le calcul correspond de lambda à un phénomène important dans la théorie appelée la preuve de normalisation, qui transforme les preuves en nouvelles preuves plus directes. Ainsi, correspondent programmation logique et programmation fonctionnelle à différents niveaux dans ces logiques. Programmes logiques correspondent à des formules d'une logique, tandis que les programmes fonctionnels correspondent à des épreuves de formules

Il y a une autre différence: les logiques utilisées sont généralement différentes. La programmation logique utilise généralement des logiques plus simples - comme je l'ai dit, Prolog est fondée sur les clauses de Horn, qui sont une classe très restreinte de formules où les implications ne peuvent pas être imbriquées et il n'y a pas de disjonctions, bien que Prolog récupère toute la force de la logique classique en utilisant la règle coupe. En revanche, les langages de programmation fonctionnels tels que Haskell font un usage intensif des programmes dont les types ont des implications imbriquées, et sont décorées par toutes sortes de formes de polymorphisme. Ils sont également basés sur la logique intuitionniste, une classe de logiques qui interdit l'utilisation du principe du tiers exclu, dont le mécanisme de calcul de Robinson est basé sur.

D'autres points:

  1. Il est possible de programmation logique de base sur des logiques plus sophistiquées que les clauses de Horn; par exemple, Lambda-prolog est basé sur la logique intuitionniste, avec un mécanisme de calcul différente de la résolution.
  2. Dale Miller a appelé le paradigme de la preuve théorique derrière la logique de programmation recherche la preuve que la programmation métaphore, en contraste avec la preuves que les programmes métaphore qui est un autre terme utilisé pour la correspondance de Curry-Howard.

Autres conseils

Programmation logique est fondamentalement à but dirigé rechercher des preuves. La relation structurelle entre les langages typés et la logique implique généralement les langages fonctionnels, bien que parfois impératif et d'autres langues - mais pas les langages de programmation logique directement. Cette relation se rapporte preuves aux programmes.

Ainsi, la recherche de la preuve de la programmation logique peut être utilisée pour trouver des preuves qui sont ensuite interprétées comme des programmes fonctionnels. Cela semble être la plus relation directe entre les deux (comme vous avez demandé).

Les programmes entiers de construction de cette façon est pas pratique, mais il peut être utile pour remplir les détails fastidieux dans les programmes, et il y a quelques exemples importants de cette pratique. Un exemple de base de c'est sous-typage structurel - ce qui correspond à remplir en quelques étapes via une simple preuve la preuve de entailment. Un exemple beaucoup plus sophistiqué est le système de classe de type de Haskell, ce qui implique un certain type de recherche axé sur le but -. À l'extrême cela implique une forme Turing-complet de la programmation logique au moment de la compilation

scroll top