λProlog , también escrito lambda Prolog , es un lenguaje de programación lógica que incluye tipado polimórfico , programación modular y programación de orden superior . Estas extensiones de Prolog se derivan de las fórmulas hereditarias de Harrop de orden superior utilizadas para justificar los fundamentos de λProlog. La cuantificación de orden superior , los términos λ simplemente tipados y la unificación de orden superior proporcionan a λProlog el soporte básico necesario para capturar el enfoque de sintaxis de árbol λ para la sintaxis abstracta de orden superior , un enfoque para representar la sintaxis que asigna enlaces a nivel de objeto a enlaces de lenguaje de programación. Los programadores en λProlog no necesitan lidiar con nombres de variables vinculadas: en su lugar, hay varios mecanismos declarativos disponibles para manejar ámbitos de vinculación y sus instanciaciones.
Historia
Desde 1986, λProlog ha recibido numerosas implementaciones. A fecha de 2023, el lenguaje y sus implementaciones siguen en desarrollo activo.
El demostrador de teoremas Abella ha sido diseñado para proporcionar un entorno interactivo para demostrar teoremas sobre el núcleo declarativo de λProlog.
Programación en λProlog
Dos características únicas de λProlog son las implicaciones y la cuantificación universal. La implicación se utiliza para el alcance local de las definiciones de predicados, mientras que la cuantificación universal se utiliza para el alcance local de las variables, como en la siguiente implementación de `reverse` que depende de un predicado auxiliar `rev`:
revertir L K :- pi revertir \ ( revertir nil K & ( pi H \ pi T \ pi S \ revertir ( H :: T ) S :- revertir T ( H :: S ))) => revertir L nil .?- inverso [ 1 , 2 , 3 ] L .Éxito : L = 3 :: 2 :: 1 :: nil Un uso común de estas construcciones de alcance es simular el alcance que se observa a menudo en una presentación de una lógica mediante reglas de inferencia. Por ejemplo, la búsqueda de pruebas (y la verificación de pruebas) en la deducción natural se puede codificar de la siguiente manera:
pv Pf P :- hyp Pf P . pv ( andI P1 P2 ) ( and A B ) :- pv P1 A , pv P2 B . pv ( impI P ) ( imp A B ) :- pi p \ ( hyp p A ) => ( pv ( P p ) B ) . pv ( andE1 P ) A :- sigma B \ hyp P ( and A B ) . pv ( andE2 P ) B :- sigma A \ hyp P ( and A B ) . pv ( impE P1 P2 ) B :- sigma A \ hyp P1 ( imp A B ) , pv P2 A .?- pi p qr \ pv ( Pf p q r ) ( imp p ( imp ( y q r ) ( y ( y p q ) r ))) .Éxito : Pf = W1 \ W2 \ W3 \ impI ( W4 \ impI ( W5 \ yI ( yI W4 ( yE1 W5 )) ( yE2 W5 )))Véase también
- La paradoja de Curry#Cálculo lambda : sobre los problemas de inconsistencia causados por la combinación de la lógica (proposicional) y el cálculo lambda sin tipos .
- Comparación de implementaciones de Prolog
- Sintaxis y semántica de Prolog
Referencias
- ↑ "Preguntas frecuentes: ¿Qué implementaciones de lambda Prolog están disponibles?" . www.lix.polytechnique.fr . Consultado el 16 de diciembre de 2019 .
Tutoriales y textos
- Dale Miller y Gopalan Nadathur son los autores del libro " Programación con lógica de orden superior" , publicado por Cambridge University Press en junio de 2012.
- Amy Felty escribió en un tutorial de 1997 sobre lambda Prolog y sus aplicaciones a la demostración de teoremas .
- John Hannan ha escrito un tutorial sobre análisis de programas en lambda Prolog para la Conferencia PLILP de 1998.
- Olivier Ridoux ha escrito Lambda-Prolog de A à Z... ou presque (163 páginas, en francés). Está disponible en formato PostScript , PDF y HTML .
Enlaces externos
- Página principal de λProlog
- Entrada en el Grupo de Preservación de Software.
Implementaciones
- El compilador Teyjus λProlog es actualmente la implementación más antigua que aún recibe mantenimiento. [ 1 ] Este proyecto de compilador está dirigido por Gopalan Nadathur y varios de sus colegas y estudiantes.
- ELPI, un intérprete integrable de λProlog, ha sido desarrollado por Enrico Tassi y Claudio Sacerdoti Coen . Está implementado en OCaml y disponible en línea . El sistema se describe en un artículo publicado en LPAR 2015. ELPI también está disponible como complemento de Coq : consulte el tutorial de Enrico Tassi sobre este complemento.
- El demostrador Abella se puede utilizar para demostrar teoremas sobre programas y especificaciones de λProlog.
- Familia de lenguajes de programación Prolog
- Lógica en informática
- Temas básicos de lenguajes de programación