Documentos de Académico
Documentos de Profesional
Documentos de Cultura
I Sı́mbolos:
true , false , ⊥ , ¬ , ∧ , ∨ , → , ↔ , ( , )
Algoritmos y Estructuras de Datos I
I Variables proposicionales (infinitas)
Primer cuatrimestre de 2017 p , q , r , ...
I Dos valores de verdad posibles: Conociendo el valor de las variables proposicionales de una fórmula,
podemos calcular el valor de verdad de la fórmula:
1. verdadero (o bien “true”, “T” o “V”)
2. falso (o bien “false” o “F”) p q (p ∧ q) p q (p ∨ q)
I El valor de verdad de una fórmula se obtiene a partir del valor de p ¬p T T T T T T
verdad de sus subfórmulas: T F T F F T F T
F T F T F F T T
I true se interpreta como verdadero.
F F F F F F
I false se interpreta como falso.
I ¬A se interpreta como “no”, se llama negación
I ∧ se interpreta como “y”, se llama conjunción p q (p → q) p q (p ↔ q)
I ∨ se interpreta como “o”(no exclusivo), se llama disyunción T T T T T T
I → se interpreta como “si... entonces”, se llama implicación T F F T F F
I ↔ se interpreta como “si y solo si”, se llama doble implicación F T T F T F
o equivalencia F F T F F T
3 4
Ejemplo: tabla de verdad para ((p ∧ q) → r ) Dos conectivos bastan
I ¬y∨
I (A ∧ B) es ¬(¬A ∨ ¬B)
I (A → B) es (¬A ∨ B)
p q r (p ∧ q) ((p ∧ q) → r ) I true es (A ∨ ¬A)
T T T T T I false es ¬true
T T F T F
T F T F T I ¬y∧
T F F F T I (A ∨ B) es ¬(¬A ∧ ¬B)
F T T F T I (A → B) es ¬(A ∧ ¬B)
F T F F T I false es (A ∧ ¬A)
F F T F T I true es ¬false
F F F F T
I ¬y→
I (A ∨ B) es (¬A → B)
I (A ∧ B) es ¬(A → ¬B)
I true es (A → A)
I false es ¬true
5 6
¿Cuál es la tabla de verdad de →L ? I Un tipo de datos es un conjunto de valores (el conjunto base del
tipo) provisto de una serie de operaciones que involucran a esos
p q (p →L q) valores.
T T T
T F F I Para hablar de un elemento de un tipo T en nuestro lenguaje,
F T T escribimos un término o expresión
F F T
T − −
I Variable de tipo T
F − T
I Constante de tipo T
I Función (operación) aplicada a otros términos (del tipo T o de
− T −
otro tipo)
− F −
− − − I Todos los tipos tienen un elemento distinguido: ⊥ o Indef
11 12
Tipos de datos de nuestro lenguaje de especificación Tipo Z (números enteros)
I Básicos
I Constantes: 0 ; 1 ; −1 ; 2 ; −2 ; ...
I Enteros (Z) I Operaciones aritméticas:
I Reales (R) I a + b (suma); a − b (resta); abs(a) (valor absoluto)
I Booleanos (Bool) I a ∗ b (multiplicación); a div b (división entera);
I Caracteres (Char) I a mod b (resto de dividir a a por b), ab o pot(a,b) (potencia)
I Enumerados
I a / b (división, da un valor de R)
I Uplas
I Comparaciones de términos de tipo Z (dan un valor de tipo Bool):
I a<b (menor)
I Secuencias
I a≤b o a <= b (menor o igual)
I a>b (mayor)
I a≥b o a >= b (mayor o igual)
13 14
15 16
Tipo Bool (valor de verdad) Tipo Bool (valores de verdad)
17 18
Pre{True}
I Constantes: ‘a‘, ‘b‘, ‘c‘, . . . , ‘z‘, . . . , ‘A‘, ‘B‘, ‘C ‘, . . . , ‘Z ‘, . . . ,
‘0‘, ‘1‘, ‘2‘, . . . , ‘9‘ (en el orden dado por el estándar ASCII).
1. Post{x > 0 ∧ r = true} I Función ord, que numera los caracteres, con las siguientes
2. Post{(x > 0 ∧ r = true) ∧ (x <= 0 ∧ r = false)} propiedades:
3. Post{(x > 0 ∧ r = true) ∨ (x <= 0 ∧ r = false)} I ord(‘a‘) + 1 = ord(‘b‘)
I ord(‘A‘) + 1 = ord(‘B‘)
4. Post{x ≤ 0 =⇒ r = false}
I ord(‘1‘) + 1 = ord(‘2‘)
5. Post{x > 0 =⇒ r = true}
I Función char, de modo tal que char(ord(c)) = c.
6. Post{(x > 0 =⇒ r = true) ∨ (x <= 0 =⇒ r = false)}
7. Post{x > 0 ⇐⇒ r = true}
I Las comparaciones entre caracteres son comparaciones entre sus
órdenes, de modo tal que a < b es equivalente a ord(a) < ord(b).
8. Post{x <= 0 ⇐⇒ r = false}
19 20
Tipos enumerados Ejemplo de tipo enumerado
21 22
23 24
Semántica de los términos Semántica de los términos
Con x e y variables de tipo Z, decidir el valor de verdad de los siguientes
I Vimos que los términos representan elementos de los tipos términos cuando x = 0 e y = 5:
I Los términos tienen valor indefinido cuando no se puede hacer I y 6= 5
alguna operación
I 1 div 0 I x/(y − 5) ≥ 0
I (−1)1/2
I y = 5 ∨L x/(y − 5) ≥ 0
I Las operaciones son estrictas
I Si uno de sus argumentos es indefinido, el resultado también I x/(y − 5) ≥ 0 ∨L y = 5
está indefinido
I Ejemplos: I y 6= 5 ∧L x/(y − 5) ≥ 0
I 0 ∗ (−1)1/2 es indefinido (∗ es estricto)
I 01/0 es indefinido (pot es estricto) I x/(y − 5) ≥ 0 ∧L y 6= 5
I ((1 + 1 = 2) ∨L (0 > 1/0)) es verdadero (∨L no es estricto)
I Las comparaciones con ⊥ son indefinidas
I (y 6= 5 ∧L x/(y − 5) ≥ 0) ∨L x = 0
I En particular, si x está indefinido, x = x es indefinido (no es
verdadero)
I y + abs(x/(y − 5)) ≥ 0
25 26
27 28
Expresiones condicionales Definir funciones auxiliares versus especificar problemas
Función que elige entre dos elementos del mismo tipo, según una Definimos funciones auxiliares
condición booleana (guarda)
I Expresiones del lenguaje, que se usan dentro de las especificaciones
I si la guarda es verdadera, elige el primero
como reemplazos sintácticos. Son de cualquier tipo.
I si no, elige el segundo
I Dado que es un reemplazo sintáctico, no se permiten definiciones
recursivas!
Por ejemplo
I expresión que devuelve el máximo entre dos elementos:
Especificamos problemas
fun máx(a, b : Z) : Z = IfThenElseFihZi(a > b, a, b);
I Condiciones (el contrato) que deberı́a cumplir un algoritmo para ser
cuando los argumentos se deducen del contexto, se puede escribir
solución del problema.
directamente
I En una especificación dando la precondición y la postcondición con
fun máx(a, b : Z) : Z = IfThenElseFi(a > b, a, b); o bien
predicados de primer orden.
fun máx(a, b : Z) : Z = if a > b then a else b fi;
I No podemos usar otros problemas en la especificación (dado que no
I expresión que dado x devuelve 1/x si x 6= 0 y 0 sino
pertenecen a la lógica de primer orden). Sı́ podemos usar predicados
fun unoSobre(x : R) : R = if x 6= 0 then 1/x else 0 fi; y funciones auxiliares ya definidos.
| {z }
no se indefine cuando x = 0
29 30
31 32
Ejemplo Especificar problemas
33 34
35 36
Especificar problemas Especificar problemas
37 38
39 40
Especificando un semáforo Especificando un semáforo
41 42