• No se han encontrado resultados

Tema 3: Una lógica para razonar sobre programas

N/A
N/A
Protected

Academic year: 2022

Share "Tema 3: Una lógica para razonar sobre programas"

Copied!
13
0
0

Texto completo

(1)

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

(2)

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))

(3)

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)

(4)

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)))))))

(5)

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

(6)

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)

(7)

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)

(8)

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]

(9)

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.

(10)

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 φ.

(11)

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

(12)

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.

(13)

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 = φ

Referencias

Documento similar