Table Of ContentContenido
Especificaci´on
(cid:73) clase 1, p. 3
(cid:73) clase 2, p. 28
(cid:73) clase 3, p. 48
Algoritmos y Estructuras de Datos I
(cid:73) clase 4, p. 78
Programaci´on funcional
(cid:73) clase 1: p. 94
(cid:73) clase 2: p. 114
(cid:73) clase 3: p. 131
DepartamentodeComputaci´on,FCEyN,UBA
(cid:73) clase 4: p. 154
2◦ cuatrimestre de 2008 (cid:73) clase 5: p. 181
Programaci´on imperativa
(cid:73) clase 1: p. 205
(cid:73) clase 2: p. 225
(cid:73) clase 3: p. 247
(cid:73) clase 4: p. 260
(cid:73) clase 5: p. 272
1 2
Cursada
(cid:73) clases te´oricas
(cid:73) Paula Zabala y Santiago Figueira
(cid:73) clases pr´acticas
Especificaci´on
(cid:73) Carlos L´opez Pombo, Pablo Turjanski y Mart´ın Urtasun
Clase 1
(cid:73) sitio web de la materia: www.dc.uba.ar/people/materias/algo1
(cid:73) r´egimen de aprobaci´on
Introducci´on a la especificaci´on de problemas (cid:73) parciales
(cid:73) 3 parciales
(cid:73) 3 recuperatorios (al final de la cursada)
(cid:73) trabajos pr´acticos
(cid:73) 3 entregas
(cid:73) 3 recuperatorios (cada uno a continuaci´on)
(cid:73) grupos de 4 alumnos
(cid:73) examen final (si lo dan en diciembre 2008 o febrero/marzo
2009, cuenta la nota de la cursada)
3 4
Objetivos y contenidos Especificaci´on, algoritmo, programa
(cid:73) Objetivos:
(cid:73) especificar problemas
(cid:73) describirlos de forma no ambigua 1. especificaci´on = descripci´on del problema
(cid:73) escribir programas sencillos
(cid:73) ¿qu´e problema tenemos?
(cid:73) tratamiento de secuencias
(cid:73) en lenguaje formal
(cid:73) razonar acerca de estos programas
(cid:73) describe propiedades de la soluci´on
(cid:73) demostrar matem´aticamente que un programa es correcto
(cid:73) vision abstracta del proceso de computaci´on (cid:73) Dijkstra, Hoare (an˜os 70)
(cid:73) manejo simbo´lico y herramientas para demostrar
2. algoritmo = descripci´on de la soluci´on (escrito para humanos)
(cid:73) Contenidos:
(cid:73) especificaci´on (cid:73) ¿c´omo resolvemos el problema?
(cid:73) describir problemas en un lenguaje formal (preciso, claro,
abstracto) 3. programa = descripci´on de la soluci´on (escrito para la
(cid:73) programaci´on funcional (Haskell) computadora)
(cid:73) parecido al lenguaje matem´atico
(cid:73) tambi´en, ¿c´omo resolvemos el problema?
(cid:73) escribir de manera simple algoritmos y estructuras de datos
(cid:73) usando un lenguaje de programaci´on
(cid:73) programaci´on imperativa (C++)
(cid:73) paradigma m´as difundido
(cid:73) m´as eficiente
(cid:73) se necesita para seguir la carrera
5 6
Problemas y solucio´n Problema vs. solucio´n
Si voy a escribir un programa, es porque hay un problema a Parece una diferencia trivial
resolver (cid:73) en los ejemplos, es clara
(cid:73) a veces, la descripci´on es vaga o ambigua (cid:73) pero es f´acil confundirlos
(cid:73) no siempre es claro que haya soluci´on Ejemplo:
(cid:73) no siempre involucra uno o m´as programas de computaci´on (cid:73) confundir el problema con la soluci´on:
A: “tengo un problema: necesito un alambre”
Ejemplos de problemas: B: “no tengo”
(cid:73) cerr´e el auto con las llaves adentro (cid:73) en realidad, ese no era el problema:
(cid:73) seguramente tiene soluci´on, sin programas A: “tengo un problema: cerr´e el auto con las llaves adentro”
(cid:73) quiero calcular la edad de una persona B: “tom´a la copia de la llave que me pediste que te guardara
cuando compraste el auto”
(cid:73) tal vez podamos crear un programa
(cid:73) necesitamos que la empresa reduzca sus gastos en un 10%
(cid:73) confundir el problema con la soluci´on trae nuevos problemas
(cid:73) puede o no tener soluci´on, que puede o no requerir programas
(cid:73) es muy comu´n en computaci´on
nuevos o existentes
(cid:73) los programas de computadora casi nunca son la soluci´on
(cid:73) soy muy petiso completa
(cid:73) quiz´as no tenga soluci´on (cid:73) a veces forman parte de la soluci´on
7 (cid:73) ¡y a veces ni siquiera se necesitan! 8
Etapas en el desarrollo de programas 1. Especificacio´n
(cid:73) el planteo inicial del problema es vago y ambiguo
1. especificaci´on: definici´on precisa del problema
(cid:73) especificaci´on = descripci´on clara y precisa
↓ (cid:73) ´optimo: lenguaje formal, por ejemplo, el lenguaje de la l´ogica matem´atica
2. disen˜o: elegir una soluci´on y dividir el problema en partes
Por ejemplo, el problema de calcular de edad de una persona parece bien
↓ planteado, pero:
3. programaci´on: escribir algoritmos e implementarlos en algu´n (cid:73) ¿c´omo recibo los datos? manualmente, archivo en disco, sensor
lenguaje (cid:73) ¿cu´ales son los datos? fecha de nacimiento, taman˜o de la persona,
deterioro celular
↓
(cid:73) ¿c´omo devuelvo el resultado? pantalla, papel, voz alta, email
4. validaci´on: ver si el programa cumple con lo especificado (cid:73) ¿qu´e forma van a tener? d´ıas, an˜os enteros, fracci´on de an˜os
↓
Una buena especificaci´on responde algunas:
5. mantenimiento: corregir errores y adaptarlo a nuevos
(cid:73) Necesito una funci´on que, dadas dos fechas en formato dd/mm/aaaa, me
requerimientos devuelva la cantidad de d´ıas que hay entre ellas.
todav´ıa faltan los requerimientos no funcionales
(cid:73) forma de entrada de par´ametros y de salida de resultados, tipo de
E D P V M ··· computadora, tiempo con el que se cuenta para programarlo, etc.
(cid:73) no son parte de la especificaci´on funcional y quedan para otras materias
9 10
2. Disen˜o 3. Programaci´on - Algoritmos
Pensar en la soluci´on al problema. Escribir un algoritmo:
(cid:73) pasos precisos para llegar al resultado buscado de manera efectiva
Etapa en la que se responde
(cid:73) primero tienen que estar definidos los pasos primitivos
(cid:73) ¿varios programas o uno muy complejo?
(cid:73) ¿c´omo dividirlo en partes, qu´e porci´on del problema resuelve Ejemplo de algoritmo para la especificaci´on
cada una? Necesito una funci´on que, dadas dos fechas a y b en formato
(cid:73) ¿distintas partes en distintas m´aquinas? dd/mm/aaaa, me devuelva la cantidad de d´ıas que hay entre ellas.
(cid:73) estudio de las partes que lo componen
(cid:73) (mini) especificacio´n de cada parte 1. restar el an˜o de b al an˜o de a
(cid:73) un programador recibe una sola (o una por vez) 2. multiplicar el resultado por 365
3. sumarle la cantidad de d´ıas desde el 1◦ de enero del an˜o de b hasta el d´ıa b
(cid:73) ¿programas ya hechos con los que interactuar?
4. restarle la cantidad de d´ıas desde el 1◦ de enero del an˜o de a hasta el d´ıa a
(cid:73) lo van a ver en Algoritmos y Estructuras de Datos II y en 5. sumarle la cantidad de 29 de febrero que hubo en el per´ıodo
Ingenier´ıa del Software I 6. devolver ese resultado, acompan˜ado de la palabra “d´ıas”
¿Son todos primitivos? (3, 4, 5)
(cid:73) si no, hay que dar algoritmos para realizarlos
11 12
Pasos primitivos 3. Programaci´on - Programas
(cid:73) problema: sumar dos nu´meros naturales
(cid:73) algoritmos: (cid:73) traducir el algoritmo (escrito o idea) para que una
(cid:73) voy sumando uno al primero y restando uno al segundo, hasta computadora lo entienda
que llegue a cero (cid:73) lenguaje de programaci´on
(cid:73) sumo las unidades del primero a las del segundo, despu´es las
(cid:73) vamos a empezar usando uno: Haskell
decenas y as´ı (“llev´andome uno” cuando hace falta)
(cid:73) despu´es, C++
(cid:73) escribo el primero en una calculadora, aprieto +, escribo el
(cid:73) hay muchos otros
segundo, aprieto =
(cid:73) pueden ser m´as adecuados para ciertas tareas
(cid:73) los tres son v´alidos
(cid:73) depende del algoritmo, de la interfaz, tiempo de ejecuci´on, tipo
(cid:73) depende de qu´e operaciones primitivas tenga
de m´aquina, interoperabilidad, entrenamiento de los
(cid:73) sumar / restar uno programadores, licencias, etc.
(cid:73) sumar d´ıgitos (y concatenar resultados)
(cid:73) apretar una tecla de una calculadora
13 14
Representacio´n de los datos 4. Validaci´on
Asegurarse de que un programa cumple con la especificaci´on
(cid:73) testing
(cid:73) ya vimos que era importante en el ejemplo de calcular la edad
(cid:73) probar el programa con muchos datos y ver si hace lo que tiene
de una persona (d´ıas, meses, an˜os, fracciones de an˜o)
que hacer
(cid:73) otro ejemplo: (cid:73) en general, para estar seguro de que anda bien, uno tendr´ıa
(cid:73) contar la cantidad de alumnos de cada sexo que probarlo para infinitos datos de entrada
(cid:73) yo puedo darme cuenta a simple vista (a veces) (cid:73) si hay un error, con algo de suerte uno puede encontrarlo
(cid:73) la computadora probablemente no. ¿Que dato conviene tener? (cid:73) no es infalible (puede pasar el testing pero haber errores)
(cid:73) foto (cid:73) en Ingenier´ıa del Software I van a ver t´ecnicas para hacer
(cid:73) foto del documento testing
(cid:73) ADN (cid:73) verificaci´on formal
(cid:73) valor de la propiedad sexo para cada alumno
(cid:73) demostrar matem´aticamente que un programa cumple con una
(cid:73) estructuras de datos especificaci´on
(cid:73) necesarias para especificar (cid:73) es m´as dif´ıcil que hacer testing
(cid:73) puede ser que haya que cambiarlas al programar (cid:73) una demostraci´on cubre infinitos valores de entrada a la vez
(cid:73) las van a estudiar a fondo en Algoritmos y Estructuras de (abstracci´on)
Datos II (cid:73) es infalible (si est´a demostrado, el programa no tiene errores)
(cid:73) en esta materia van a estudiar c´omo demostrar que programas
simples son correctos para una especificaci´on
15 16
5. Mantenimiento Especificaci´on
(cid:73) objetivos:
(cid:73) tiempo despu´es, encontramos errores (cid:73) antes de programar: entender el problema
(cid:73) despu´es de programar: determinar si el programa es correcto
(cid:73) el programa no cumpl´ıa la especificaci´on
(cid:73) la especificaci´on no describ´ıa correctamente el problema (cid:73) testing
(cid:73) verificacio´n formal
(cid:73) o cambian los requerimientos
(cid:73) derivacio´n(construyoelprogramaapartirdelaespecificacio´n)
(cid:73) puede hacerlo el mismo equipo u otro
(cid:73) justifica las etapas anteriores (cid:73) estrategia:
(cid:73) si se hicieron bien la especificaci´on, disen˜o, programaci´on y (cid:73) evitar pensar (todav´ıa) una soluci´on para el problema
validaci´on, las modificaciones van a ser m´as sencillas y menos (cid:73) limitarse a describir cu´al es el problema a resolver
frecuentes (cid:73) qu´e propiedades tiene que cumplir una solucio´n para resolver
el problema
(cid:73) buscamos el qu´e y no el co´mo
17 18
Instancias de un problema Problemas funcionales
(cid:73) ejemplo de problema: arreglar una cafetera
(cid:73) para solucionarlo, necesitamos m´as datos
(cid:73) no podemos especificar formalmente cualquier problema
(cid:73) ¿qu´e clase de cafetera es?
(cid:73) ¿qu´e defecto tiene? (cid:73) el hambre en el mundo
(cid:73) ¿cu´anto presupuesto tenemos? (cid:73) la salud de Sandro
(cid:73) simplificaci´on (para esta materia)
(cid:73) se llaman par´ametros del problema
(cid:73) problemas que puedan solucionarse con una funci´on
(cid:73) cada combinaci´on de valores de los par´ametros es una
(cid:73) par´ametros de entrada
instancia del problema
(cid:73) un resultado para cada combinaci´on de valores de entrada
(cid:73) una instancia: “arreglar una cafetera de filtro cuya jarra pierde
agua, gastando a lo sumo $30”
(cid:73) los valores de los par´ametros se llaman argumentos
19 20
Tipos de datos Encabezado de un problema
Indica la forma que debe tener una soluci´on.
problema nombre(par´ametros) =nombreRes :tipoRes
Cada par´ametro tiene un tipo de datos
(cid:73) conjunto de valores para los que hay ciertas operaciones
definidas (cid:73) nombre: nombre que le damos al problema
(cid:73) ser´a resuelto por una funci´on con ese mismo nombre
Por ejemplo: (cid:73) nombreRes: nombre que le damos al resultado
(cid:73) par´ametros de tipo fecha (cid:73) tipoRes: tipo de datos del resultado
(cid:73) valores: ternas de nu´meros enteros (cid:73) par´ametros: lista que da el tipo y el nombre de cada uno
(cid:73) operaciones: comparaci´on, obtener el an˜o,...
(cid:73) par´ametros de tipo dinero Ejemplo
(cid:73) problema resta(minuendo,sustraendo : Int)= res : Int
(cid:73) valores: nu´meros reales con dos decimales
(cid:73) operaciones: suma, resta,... (cid:73) la funci´on se llama resta
(cid:73) da un resultado que vamos a llamar res
(cid:73) y es de tipo Int (los enteros)
(cid:73) depende de dos par´ametros: minuendo y sustraendo
(cid:73) tambi´en son de tipo Int
21 22
Contratos Partes de una especificacio´n
(cid:73) la funci´on que solucione el problema va a ser llamada o invocada por
un usuario
(cid:73) puede ser el programador de otra funci´on Tiene 3 partes
(cid:73) especificaci´on = contrato entre el programador de una funci´on que
1. encabezado (ya lo vimos)
resuelva el problema y el usuario de esa funci´on
2. precondici´on
(cid:73) condici´on sobre los argumentos
Por ejemplo:
(cid:73) el programador da por cierta
(cid:73) problema: calcular la ra´ız cuadrada de un real
(cid:73) lo que requiere la funci´on para hacer su tarea
(cid:73) soluci´on (funci´on)
(cid:73) por ejemplo: “el valor de entrada es un real no negativo”
(cid:73) va a tener un par´ametro real
3. poscondici´on
(cid:73) va a calcular un resultado real
(cid:73) para hacer el c´alculo, debe recibir un nu´mero no negativo (cid:73) condici´on sobre el resultado
(cid:73) debe ser cumplida por el programador, siempre y cuando el
(cid:73) compromiso para el usuario: no puede proveer nu´meros negativos
usuario haya cumplido la precondici´on
(cid:73) derecho para el programador de la funci´on: puede suponer que el
(cid:73) lo que la funci´on asegura que se va a cumplir despu´es de
argumento recibido no es negativo
llamarla (si se cumpl´ıa la precondici´on)
(cid:73) el resultado va a ser la ra´ız del nu´mero
(cid:73) por ejemplo: “la salida es la ra´ız del valor de entrada”
(cid:73) compromiso del programador: debe calcular la ra´ız, siempre y cuando
haya recibido un nu´mero no negativo
(cid:73) derecho del usuario: puede suponer que el resultado va a ser correcto
23 24
El contrato dice: Lenguaje naturales y lenguajes formales
El programador va a hacer un programa P tal que si el (cid:73) lenguajes naturales
usuario suministra datos que hacen verdadera la (cid:73) idiomas (castellano)
precondicio´n, entonces P va a terminar en una cantidad (cid:73) mucho poder expresivo (emociones, deseos, suposiciones y dem´as)
(cid:73) con un costo (conocimiento del contexto, experiencias compartidas
finita de pasos y va a devolver un valor que hace
ambigu¨edad e imprecisi´on)
verdadera la poscondici´on.
(cid:73) queremos evitarlo al especificar
(cid:73) si el usuario no cumple la precondici´on y P se cuelga o no (cid:73) lenguajes formales
cumple la poscondici´on... (cid:73) limitan lo que se puede expresar
(cid:73) ¿el usuario tiene derecho a quejarse? No. (cid:73) todas las suposiciones quedan expl´ıcitas
(cid:73) ¿se viola el contrato? No. El contrato prev´e este caso y dice (cid:73) relaci´on directa entre lo escrito (sintaxis) y su significado (sem´antica)
que P solo debe funcionar en caso de que el usuario cumpla (cid:73) pueden tratarse formalmente
con la precondici´on (cid:73) s´ımbolos manipulables directamente
(cid:73) si el usuario cumple la precondici´on y P se cuelga o no cumple (cid:73) seguridad de que las manipulaciones son v´alidas tambi´en para el significado
(cid:73) ejemplo: aritm´etica
la poscondici´on...
(cid:73) lenguaje formal para los nu´meros y sus operaciones
(cid:73) ¿el usuario tiene derecho a quejarse? S´ı.
(cid:73) resolvemos problemas simbo´licamente sin pensar en los significados
(cid:73) ¿se viola el contrato? S´ı. Es el u´nico caso en que se viola el num´ericos y llegamos a resultados correctos
contrato. El programador no hizo lo que se hab´ıa (cid:73) en Teor´ıa de Lenguajes y L´ogica y Computabilidad van a estudiarlos en
comprometido a hacer. profundidad
25 26
Especificaci´on formal
(cid:73) ya aprendimos a escribir encabezados
(cid:73) tenemos que dar tambi´en
(cid:73) la precondici´on (lo que la funci´on requiere) Especificaci´on
(cid:73) la poscondici´on (lo que asegura)
Clase 2
(cid:73) usamos un lenguaje formal para describir la precondici´on y la
poscondici´on
(cid:73) ejemplo de problema: calcular la ra´ız cuadrada de un nu´mero L´ogica proposicional - tipos b´asicos
(cid:73) lo llamamos rcuad
(cid:73) Float representa el conjunto R
problema rcuad(x :Float)=result :Float {
requiere x ≥0;
asegura result∗result ==x;
}
27 28
Lo´gica proposicional - sintaxis Ejemplos
(cid:73) s´ımbolos
true , false , ⊥ , ¬ , ∧ , ∨ , → , ↔ , ( , )
¿Cu´ales son f´ormulas?
(cid:73) variables proposicionales (infinitas) (cid:73) p∨q no
(cid:73) (p∨q) s´ı
p , q , r , ...
(cid:73) p∨q →r no
(cid:73) f´ormulas
(cid:73) (p∨q) →r no
1. true, false y ⊥ son f´ormulas
2. cualquier variable proposicional es una f´ormula (cid:73) ((p∨q)→ r) s´ı
3. si A es una f´ormula, ¬A es una f´ormula (cid:73) (p →q →r) no
4. si A ,A ,...,A son f´ormulas, (A ∧A ∧···∧A ) es una
1 2 n 1 2 n
f´ormula
5. si A ,A ,...,A son f´ormulas, (A ∨A ∨···∨A ) es una
1 2 n 1 2 n
f´ormula
6. si A y B son f´ormulas, (A→B) es una f´ormula
7. si A y B son f´ormulas, (A↔B) es una f´ormula
29 30
Sem´antica cl´asica Sem´antica cl´asica
Conociendo el valor de las variables proposicionales de una
(cid:73) 2 valores de verdad posibles f´ormula, conocemos el valor de verdad de la f´ormula
1. verdadero (1)
p q (p∧q) p q (p∨q)
2. falso (0)
p ¬p 1 1 1 1 1 1
(cid:73) interpretaci´on:
1 0 1 0 0 1 0 1
(cid:73) true siempre vale 1 0 1 0 1 0 0 1 1
(cid:73) false siempre vale 0 0 0 0 0 0 0
(cid:73) ¬ se interpreta como “no”, se llama negaci´on
(cid:73) ∧ se interpreta como “y”, se llama conjunci´on
p q (p →q) p q (p ↔ q)
(cid:73) ∨ se interpreta como “o”(no exclusivo), se llama disyunci´on
1 1 1 1 1 1
(cid:73) → se interpreta como “si... entonces”, se llama implicaci´on
(cid:73) ↔ se interpreta como “si y solo si”, se llama doble implicaci´on 1 0 0 1 0 0
o equivalencia 0 1 1 0 1 0
0 0 1 0 0 1
31 32
Ejemplo: tabla de verdad para ((p ∧ q) → r) Sem´antica trivaluada
(cid:73) 3 valores de verdad posibles
1. verdadero (1)
2. falso (0)
p q r (p∧q) ((p∧q) →r) 3. indefinido (−)
1 1 1 1 1 (cid:73) es la que vamos a usar en esta materia
1 1 0 1 0 (cid:73) ¿por qu´e?
1 0 1 0 1 (cid:73) queremos especificar problemas que puedan resolverse con un
1 0 0 0 1 algoritmo
0 1 1 0 1 (cid:73) puede ser que un algoritmo realice una operaci´on inv´alida
0 1 0 0 1 (cid:73) dividir por cero
(cid:73) ra´ız cuadrada de un nu´mero negativo
0 0 1 0 1
0 0 0 0 1 (cid:73) necesitamos contemplar esta posibilidad en la especificaci´on
(cid:73) interpretaci´on:
(cid:73) true siempre vale 1
(cid:73) false siempre vale 0
(cid:73) ⊥ siempre vale −
(cid:73) se extienden las definiciones de ¬,∧,∨,→,↔
33 34
Sem´antica trivaluada (secuencial) Sem´antica trivaluada (secuencial)
Se llama secuencial porque
(cid:73) los t´erminos se evalu´an de izquierda a derecha
Extendemos la sem´antica de →, ↔
(cid:73) la evaluaci´on termina cuando se puede deducir el valor de
verdad, aunque el resto est´e indefinido
p q (p →q) p q (p ↔ q)
Extendemos la sem´antica de ¬, ∧, ∨ 1 1 1 1 1 1
1 0 0 1 0 0
p q (p∧q) p q (p∨q)
0 1 1 0 1 0
1 1 1 1 1 1
0 0 1 0 0 1
1 0 0 1 0 1
1 − − 1 − −
p ¬p 0 1 0 0 1 1
0 − 1 0 − −
1 0 0 0 0 0 0 0
− 1 − − 1 −
0 1 1 − − 1 − 1
− 0 − − 0 −
− − 0 − 0 0 − −
− − − − − −
− 1 − − 1 −
− 0 − − 0 −
− − − − − −
35 36
Dos conectivos bastan Tautolog´ıas, contradicciones y contingencias
(cid:73) una f´ormula es una tautolog´ıa si siempre toma el valor 1 para
(cid:73) ¬ y ∨
valores definidos de sus variables proposicionales
(cid:73) (A∧B) es ¬(¬A∨¬B) Por ejemplo, ((p∧q) →p) es tautolog´ıa:
(cid:73) (A→B) es (¬A∨B)
p q (p∧q) ((p∧q) → p)
(cid:73) true es (A∨¬A)
1 1 1 1
(cid:73) false es ¬true
1 0 0 1
(cid:73) ¬ y ∧
0 1 0 1
(cid:73) (A∨B) es ¬(¬A∧¬B) 0 0 0 1
(cid:73) (A→B) es ¬(A∧¬B)
(cid:73) una f´ormula es una contradicci´on si siempre toma el valor 0
(cid:73) false es (A∧¬A)
para valores definidos de sus variables proposicionales
(cid:73) true es ¬false
Por ejemplo, (p∧¬p) es contradicci´on:
(cid:73) ¬ y →
p ¬p (p∧¬p)
(cid:73) (A∨B) es (¬A→B)
1 0 0
(cid:73) (A∧B) es ¬(A→¬B)
0 1 0
(cid:73) true es (A→A)
(cid:73) false es ¬true (cid:73) una f´ormula es una contingencia cuando no es ni tautolog´ıa ni
contradicci´on
37 38
Relacio´n de fuerza Lenguaje de especificacio´n
Decimos que A es m´as fuerte que B cuando (A→B) es tautolog´ıa.
Tambi´en decimos que A fuerza a B o que B es m´as d´ebil que A.
(cid:73) hasta ahora vimos l´ogica proposicional
Por ejemplo, (cid:73) es muy limitada
(cid:73) nuestro objetivo es especificar (describir problemas)
(cid:73) ¿(p∧q) es m´as fuerte que p? s´ı
(cid:73) vamos a usar un lenguaje m´as poderoso
(cid:73) ¿(p∨q) es m´as fuerte que p? no
(cid:73) permite hablar de elementos y sus propiedades
(cid:73) ¿p es m´as fuerte que (q → p)? s´ı (cid:73) es un lenguaje tipado
(cid:73) ¿p es m´as fuerte que q? no (cid:73) los elementos pertenecen a distintos dominios o conjuntos
(enteros, reales, etc.)
(cid:73) ¿p es m´as fuerte que p? s´ı
(cid:73) ¿hay una f´ormula m´as fuerte que todas? s´ı, por ej. false
(cid:73) ¿hay una f´ormula m´as d´ebil que todas? s´ı, por ej. true
39 40
Description:Algoritmos y Estructuras de Datos I. Departamento de Computación, FCEyN, UBA. 2◦ cuatrimestre de 2008. 1. Contenido. Especificación. ▻ clase 1, p