Tema 3: Una lógica para razonar sobre programas
José Luis Ruiz Reina
Departamento de Ciencias de la Computación e Inteligencia Artificial Universidad de Sevilla
Razonamiento Asistido por Computador, 2013/14
Propiedades de las funciones
Algoritmo de ordenación
(defun inserta (a x) (if (consp x)
(if (<<= a (car x)) (cons a x)
(cons (car x) (inserta a (cdr x)))) (list a)))
(defun isort (x) (if (consp x)
(insert (car x) (isort (cdr x))) nil))
Propiedades de las funciones
¿Es correcta la definición?
I Propiedades que debería verificar:
F (isort l) debería tener los mismos elementos que l.
F (isort l) debería estar ordenada.
Comprobaciones con algunos valores:
ACL2 !>(isort ’(45 2 34 22/4)) (2 11/2 34 45)
ACL2 !>(isort ’()) NIL
ACL2 !>(isort ’(9 8 7 6 5 4 3 2 1 0 -1)) (-1 0 1 2 3 4 5 6 7 8 9)
ACL2 !>(isort ’(1/2 1/3 2/3 3/2 5/789)) (5/789 1/3 1/2 2/3 3/2)
Necesidad de una lógica
Podemos incluso definir perm y ordenada
(defun borra-uno (x l) (cond ((endp l) l)
((equal x (car l)) (cdr l))
(t (cons (car l) (borra-uno x (cdr l)))))) (defun perm (lst1 lst2)
(cond ((endp lst1) (endp lst2)) ((member (car lst1) lst2)
(perm (cdr lst1) (borra-uno (car lst1) lst2))) (t nil)))
(defun ordenada (l)
(cond ((endp l) (equal l nil)) (t (or (equal (cdr l) nil)
(and (<<= (first l) (second l)) (ordenada (cdr l)))))))
Necesidad de una lógica
Y comprobar:
ACL2 !>(let ((l ’(45 2 34 22/4)))
(and (perm (isort l) l) (ordenada (isort l)))) T
ACL2 !>(let ((l ’(9 8 7 6 5 4 3 2 1 0 -1)))
(and (perm (isort l) l) (ordenada (isort l)))) T
ACL2 !>(let ((l ’(1/2 1/3 2/3 3/2 5/789)))
(and (perm (isort l) l) (ordenada (isort l)))) T
¿ Bastaría este método para concluir (perm (isort l)) y (ordenada (isort l))para cualquier l?
I Recurrimos a la lógica
La lógica de ACL2: sintaxis informal
Términos: expresiones Lisp (con variables)
(+ 1 x) (factorial n)
(isort (concatena l1 (cdr l2))) (perm (isort l))
Fórmulas: construidas a partir de los términos usando el símbolo
=y conectivas ∨, ∧, ¬, → y ↔.
En el sistema, escribimos:
(equal term1 term2) (or α1 α2) (and α1 α2) (not α)
(implies α1 α2) (iff α1 α2)
No hay cuantificadores (implícitamente, las fórmulas están universalmente cuantificadas)
La lógica de ACL2: sintaxis informal
Términos: expresiones Lisp (con variables)
(+ 1 x) (factorial n)
(isort (concatena l1 (cdr l2))) (perm (isort l))
Fórmulas: construidas a partir de los términos usando el símbolo
=y conectivas ∨, ∧, ¬, → y ↔.
En el sistema, escribimos:
(equal term1 term2) (or α1 α2) (and α1 α2) (not α)
(implies α1 α2) (iff α1 α2)
No hay cuantificadores (implícitamente, las fórmulas están universalmente cuantificadas)
La lógica de ACL2: sintaxis informal
Ejemplos de fórmulas
(implies (and (> x 0) (> y 0) (> z 0))
(equal (* x (+ y z)) (+ (* x y) (* x z)))) (and (perm (isort l) l) (ordenada (isort l)))
(equal (long (concatena l1 l2)) (+ (long l1) (long l2))) (implies (and (consp l) (member x (cdr l)))
(not (member x l)))
En notación estándar sería:
I ∀x∀y∀z[x > 0 ∧ y > 0 ∧ z > 0 → x · (y + z) = x · y + x · z]
I ∀l[perm(isort(l)) ∧ ordenada(isort(l))]
I ∀l1∀l2[long(concatena(l1,l2)) =long(l1) +long(l2)]
I ∀l[consp(l) ∧ x ∈ cdr (l) → x /∈ l]
Axiomas y reglas de inferencia
Axioma proposicional:
I Esquema de axioma proposicional: (¬φ ∨ φ).
Lo que sigue son cuatro reglas de inferencia para la parte proposicional de la lógica:
I Expansión: a partir de φ2se deriva φ1∨ φ2.
I Contracción: a partir de φ ∨ φ se deriva φ.
I Asociatividad: a partir de φ1∨ (φ2∨ φ3)se deriva (φ1∨ φ2) ∨ φ3.
I Corte: a partir de φ1∨ φ2y de ¬φ1∨ φ3se deriva φ2∨ φ3.
Axiomas y reglas de inferencia
Los tres axiomas siguientes se refieren a la igualdad:
I Axioma de reflexividad: x = x.
I Esquema de axioma de la igualdad respecto a funciones:
(x1 = y1) ∧ . . . ∧ (xn = yn) → (f x1 . . . xn) = (f y1 . . . yn)
I Axioma de igualdad:
[(x1 = y1) ∧ (x2 = y2)] → [(x1 = x2) → (y1 = y2)]
Regla de instanciación:
I Instanciación: a partir de φ se deriva σ(φ), σ(φ) representa el resultado de aplicar la sustitución σ a la fórmula φ.
Axiomas y reglas de inferencia
Los cinco axiomas siguientes especifican el comportamiento de los valores booleanos y de las funciones predefinidas if y equal:
I t6= nil.
I x= nil → (if x y z) = z.
I x6= nil → (if x y z) = y.
I x= y → (equal x y) = t
I x6= y → (equal x y) = nil Axiomas para la aritmética
Axiomas y reglas de inferencia
Axiomatización consistente con la especificación estándar de las funciones Common Lisp
Los cuatro axiomas siguientes especifican el comportamiento de las funciones car, cons y cdr, y el tipo de dato par punteado:
I (consp (cons x y)) = t.
I (consp x) = t → (cons (car x) (cdr x)) = x.
I (car (cons x y)) = x.
I (cdr (cons x y)) = y.
De manera análoga, se axiomatizan los restantes tipos de datos y funciones primitivas.
Queda una regla de inferencia:inducción
I Dedicaremos todo el capítulo siguiente a esta regla de inferencia.
Deducción en la lógica de ACL2
Teorema ACL2:
I Toda axioma es teorema
I Aplicando una regla de inferencia cuyas premisas son teoremas, se obtiene un teorema
Formalmente, la fórmula φ es un teorema si existe una secuencia finita de fórmulas φ0, φ1, φ2, . . . , φn, tal que:
I ∀0 ≤ i ≤ n, la fórmula φi es un axioma o es la conclusión de aplicar una regla de inferencia cuyas premisas están en φ0, . . . , φi−1.
I φn = φ