Programación Funcional

Información Básica

  • Créditos: 4
  • Horas de Clase: 5 / semana (3 horas de clase, 2 de taller)
  • Horas de trabajo independiente: 7 / semana
  • Prerequisitos: Fundamentos de Matemáticas (300MAG018).
  • Tipo de curso: Núcleo de Formación Fundamental.

Descripción del Curso

El curso de Programación funcional presenta los fundamentos de la lógica, conjuntos, funciones, series, estructuras discretas básicas y principios de conteo, con el fin de que el estudiante conozca los fundamentos matemáticos que sustentan la práctica de la computación. El curso trata también las nociones básicas del modelo funcional, en particular el principio de computación como evaluación, incluyendo el cálculo lambda, Para que el estudiante aprecie la programación sin efectos de borde, entienda la correspondencia entre los fundamentos de inducción matemática y la recursión, y pueda desarrollar las bases para entender la semántica de los lenguajes de programación.

Objetivos

Al finalizar el curso los participantes podrán:

  1. Describir los conceptos básicos de la lógica, conjuntos, funciones y las diferentes técnicas demostrativas.
    1. Determinar si un enunciado es una proposición.
    2. Usar operadores lógicos para formar proposiciones compuestas y verificar equivalencias lógicas.
    3. Enunciar proposiciones usando funciones proposicionales y cuantificadores.
    4. Traducir frases del lenguaje natural al lenguaje formal.
    5. Demostrar teoremas utilizando reglas de inferencia y métodos de demostración.
    6. Realizar operaciones sobre conjuntos.
    7. Demostrar relaciones generales sobre conjuntos.
    8. Identificar funciones y demostrar enunciados matemáticos que involucren funciones.
  2. Describir las propiedades esenciales de los números enteros.
    1. Demostrar propiedades de divisibilidad de enteros y de los números primos.
    2. Describir un proceso de cálculo de enteros como un sistema de transiciones y proponer invariantes.
    3. Describir y demostrar propiedades básicas de las congruencias de enteros.
    4. Escribir enteros en distintas bases.
    5. Usar el algoritmo de Euclides para hallar el máximo común divisor entre dos enteros.
    6. Ilustrar algunas aplicaciones de la teoría de números, en particular estrategias de comunicación segura (RSA y otros).
  3. Definir y demostrar propiedades inductivamente y recursivamente.
    1. Identificar sucesiones y sumatorias.
    2. Realizar demostraciones utilizando inducción matemática.
    3. Construir funciones, conjuntos y estructuras recursivamente.
    4. Aplicar inducción estructural para demostrar algunos resultados matemáticos.
  4. Utilizar las técnicas básicas de conteo.
    1. Calcular el número de elementos de un conjunto utilizando las técnicas fundamentales de conteo.
    2. Estudiar las reglas básicas de conteo para productos y sumas de cardinalidades de conjuntos.
    3. Analizar el principio general del palomar
    4. Aplicar el principio del palomar para mostrar la existencia de un objeto que cumple una propiedad dada.
  5. Describir formas cerradas para series.
    1. Estudiar el método de perturbación para series geométricas y de potencia
    2. Analizar series infinitas
    3. Calcular formas cerradas por diferenciación de series
    4. Aproximar sumas con integrales
    5. Aplicaciones
  6. Entender los principios de la programación funcional.
    1. Programar mediante composición funcional.
    2. Construir programas mediante razonamiento inductivo.
    3. Probar corrección de programas funcionales por inducción
    4. Aplicar correspondencia de patrones en construcción de funciones
    5. Entender el uso de funciones como datos.
    6. Estudiar el tratamiento funcional de colecciones: Listas, árboles, flujos.
  7. Saber aplicar la programación funcional de alto orden.
    1. Usar clausuras para representar la noción de estado.
    2. Aplicar la evaluación parcial
    3. Entender el chequeo estático para analizar programas funcionales.
    4. Conocer el los principios del cálculo lambda y su relación con prog. funcional
    5. Entender el cálculo lambda como modelo general de computación

Se desarrollan competencias en

Contenido

Capítulo 1: Fundamentos: Lógica y demostración, conjuntos y funciones

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
1,2,3 6 4 Lógica, equivalencias proposicionales, predicados y cuantificadores. [1, cap. 1]
4,5 2 1 Métodos de demostración. [1, cap. 1]
6 1 Conjuntos. [1, cap. 1]
7 1 1 Operaciones entre conjuntos. [1, cap. 1]
8 1 1 Funciones. [1, cap. 1]
9 1 1 Crecimiento de funciones [1, cap. 2]

Total de Horas: 20.

Sesión Horas de trabajo independiente Temas Bibliografía
1-9 28 Tareas semanales, resolución de problemas en temas vistos [1, cap. 1,2]

Capítulo 2: Números enteros

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
11 1 Enteros y división, aritmética modular [1, cap. 2]
13 1 Representación de enteros, el algoritmo de Euclides. [1, cap. 2]
14 1 2 Algunas aplicaciones de la teoría de números. [1, cap. 2]

Total de Horas: 5.

Sesión Horas de trabajo independiente Temas Bibliografía
11-14 13 Tareas semanales, resolución de problemas en temas vistos [1, cap. 2]

Capítulo 3: Inducción y recursividad

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
15,16 3 2 Sucesiones y sumatorias. Inducción matemática. [1, cap. 3]
17 3 2 Definiciones recursivas e inducción estructural. [1, cap. 3]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
15-17 14 Tareas semanales, resolución de problemas en temas vistos [1, cap. 3]

Capítulo 4: Recuento

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
18,19 3 2 Fundamentos de combinatoria, Principios del palomar. [1, cap. 4]
20,21 3 2 Permutaciones y combinaciones, Coeficientes binomiales [1, cap. 4]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
18-21 14 Tareas semanales, resolución de problemas en temas vistos [1, cap. 4]

Capítulo 5: : Series

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
23 3 2 Series geométricas y de potencia [1, cap. 6]
24 3 2 cálculo de formas cerradas de series, series infinitas, aproximación. [1, cap. 6]

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
23,24 14 Tareas semanales, resolución de problemas en temas vistos [1, cap. 6]

Capítulo 6: Introducción a la programación Funcional

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
25 1 Programar con funciones, variables inmutables
26 2 2 Despacho por patrones, composición funcional
27 3 2 Funciones de primer orden, clausuras

Total de Horas: 10.

Sesión Horas de trabajo independiente Temas Bibliografía
25-27 14 Tareas semanales: resolución de problemas y ejercicios de programación

Capítulo 7: Programación funcional de alto orden

Sesión Horas teóricas Prácticas acompañadas Temas Profundidad Bibliografía
28 1 “Currying”, aplicación parcial
29 2 2 Iteradores, “map”, filtros
30 1 Análisis estático, chequeo de errores
31,32 5 4 El Cálculo lambda

Total de Horas: 15.

Sesión Horas de trabajo independiente Temas Bibliografía
28-29 10 Tareas semanales: ejercicios de programación
30-32 17 Tareas semanales: resolución de problemas en el cálculo lambda

Uso de material en exámenes

Asistencia

Es obligatoria

Bibliografía

  1. Rosen, Kenneth H. Matemática Discreta y sus aplicaciones. Editorial McGraw Hill. Quinta Edición 2004.
  2. Cousineau, Guy and Michel Mauny. The Functional Approach to Programming. Cambridge, UK: Cambridge University Press, 1998.
  3. Felleisen, Matthias; Findler, Robert; Flatt, Matthew; Krishnamurthi, Shriram (2001). How to Design Programs. MIT Press.
  4. Bruce J. Maclennan. Functional Programming: Practice and Theory. Addison-Wesley (1990).
  5. Robert Harper. Programming in Standard ML. http://www.cs.cmu.edu/~rwh/isml/book.pdf

Instalaciones

Salón de clase con computador y proyector.

Material de este semestre