Contenidos de la materia:
-
Fundamentos de lógica proposicional y de primer orden. Sistemas deductivos: juicios, proposiciones y derivaciones. Sistemas de demostración y nociones de semántica (estructuras de primer orden, valuaciones, modelos, fórmulas válidas y satisfactibles). Nociones de corrección y completitud.
-
Programación aprovechando las características de distintos modelos de cómputo.
-
Programación funcional. Tipos de datos inductivos y funciones recursivas. Funciones anónimas. Esquemas de recursión básicos. Demostración de propiedades de programas por inducción estructural. Esquemas de recursión sobre listas y sobre tipos de datos inductivos en general. Recursión estructural y recursión primitiva.
-
Programación lógica. Método de resolución para lógica proposicional y de primer orden. Cláusulas de Horn y resolución SLD. Criterios de búsqueda y selección. Operador de corte y negación por falla.
-
Programación orientada a objetos. Nociones de objeto, mensaje, clase, instancia, subclasificación, herencia, polimorfismo.
-
Introducción a la semántica formal de lenguajes de programación. Cálculo-lambda simplemente tipado. Sustitución, alfa y beta-reducción. Semántica operacional small-step. Estrategias de reducción: call-by-name y call-by-value. Progreso, preservación y normalización fuerte. Extensiones del cálculo-lambda con recursión general (operador de punto fijo), polimorfismo y subtipado. Semántica big-step. Semántica denotacional.
-
Nociones básicas de implementación de lenguajes de programación. Interpretación y compilación. Máquinas abstractas. Algoritmos de unificación e inferencia de tipos.
Orden cronológico de presentación:
- Programación funcional
- Razonamiento ecuacional e inducción estructural
- Deducción natural para lógica proposicional
- Sistemas de tipos y reducción (semántica operacional small-step)
- Interpretación (semántica big-step y denotacional) y compilación
- Lógica de primer orden
- Programación lógica
- Resolución lógica
- Programación orientada a objetos
Temas a evaluar en el primer parcial:
- Programación funcional (en Haskell)
- Razonamiento ecuacional e inducción estructural
- Deducción natural para lógica proposicional
- Sistemas de tipos y reducción
- Interpretación y compilación
Temas a evaluar en el segundo parcial:
- Lógica de primer orden
- Resolución lógica
- Programación lógica (en Prolog)
- Programación orientada a objetos (en SmallTalk) "# Paradigmas-de-Programacion-UBA"