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:
-
Describir los conceptos básicos de la lógica, conjuntos, funciones y las diferentes técnicas demostrativas.
-
Determinar si un enunciado es una proposición.
-
Usar operadores lógicos para formar proposiciones compuestas y verificar equivalencias lógicas.
-
Enunciar proposiciones usando funciones proposicionales y cuantificadores.
-
Traducir frases del lenguaje natural al lenguaje formal.
-
Demostrar teoremas utilizando reglas de inferencia y métodos de demostración.
-
Realizar operaciones sobre conjuntos.
-
Demostrar relaciones generales sobre conjuntos.
-
Identificar funciones y demostrar enunciados matemáticos que involucren funciones.
-
Describir las propiedades esenciales de los números enteros.
- Demostrar propiedades de divisibilidad de enteros y de los números primos.
- Describir un proceso de cálculo de enteros como un sistema de transiciones y proponer invariantes.
-
Describir y demostrar propiedades básicas de las congruencias de enteros.
-
Escribir enteros en distintas bases.
-
Usar el algoritmo de Euclides para hallar el máximo común divisor entre dos enteros.
-
Ilustrar algunas aplicaciones de la teoría de números, en particular estrategias de comunicación segura (RSA y otros).
-
Definir y demostrar propiedades inductivamente y recursivamente.
-
Identificar sucesiones y sumatorias.
-
Realizar demostraciones utilizando inducción matemática.
-
Construir funciones, conjuntos y estructuras recursivamente.
-
Aplicar inducción estructural para demostrar algunos resultados matemáticos.
-
Utilizar las técnicas básicas de conteo.
-
Calcular el número de elementos de un conjunto utilizando las técnicas fundamentales de conteo.
- Estudiar las reglas básicas de conteo para productos y sumas de cardinalidades de conjuntos.
- Analizar el principio general del palomar
-
Aplicar el principio del palomar para mostrar la existencia de un objeto que cumple una propiedad dada.
-
Describir formas cerradas para series.
-
Estudiar el método de perturbación para series geométricas y de potencia
-
Analizar series infinitas
- Calcular formas cerradas por diferenciación de series
-
Aproximar sumas con integrales
- Aplicaciones
-
Entender los principios de la programación funcional.
-
Programar mediante composición funcional.
- Construir programas mediante razonamiento inductivo.
- Probar corrección de programas funcionales por inducción
-
Aplicar correspondencia de patrones en construcción de funciones
-
Entender el uso de funciones como datos.
- Estudiar el tratamiento funcional de colecciones: Listas, árboles, flujos.
-
Saber aplicar la programación funcional de alto orden.
-
Usar clausuras para representar la noción de estado.
-
Aplicar la evaluación parcial
-
Entender el chequeo estático para analizar programas funcionales.
-
Conocer el los principios del cálculo lambda y su relación con prog. funcional
-
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
Bibliografía
-
Rosen, Kenneth H. Matemática Discreta y sus aplicaciones. Editorial McGraw Hill. Quinta Edición 2004.
-
Cousineau, Guy and Michel Mauny. The Functional Approach to Programming. Cambridge, UK: Cambridge University Press, 1998.
-
Felleisen, Matthias; Findler, Robert; Flatt, Matthew; Krishnamurthi, Shriram (2001). How to Design Programs.
MIT Press.
-
Bruce J. Maclennan. Functional Programming: Practice and Theory. Addison-Wesley (1990).
-
Instalaciones
Salón de clase con computador y proyector.
Material de este semestre