Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Apuntes y transparencias, Apuntes de Ingeniería Infórmatica

Asignatura: Programación declarativa, Profesor: , Carrera: Ingeniería Informática en Tecnologías de la Información, Universidad: UNIOVI

Tipo: Apuntes

Antes del 2010

Subido el 29/05/2007

uendenait
uendenait 🇪🇸

3.8

(501)

109 documentos

1 / 20

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
PROGRAMACIÓN DECLARATIVA
(Lógica de Predicados y la SLD-Resolución)
Jorge Puente Peinador, 1999-2000
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14

Vista previa parcial del texto

¡Descarga Apuntes y transparencias y más Apuntes en PDF de Ingeniería Infórmatica solo en Docsity!

PROGRAMACIÓN DECLARATIVA

(Lógica de Predicados y la SLD-Resolución)

Jorge Puente Peinador, 1999-

Indice

  • INDICE
  • LÓGICA DE PREDICADOS.................................................................................................................... - Término (básico) - Fórmula atómica (básica) - Fórmula................................................................................................................................................ - Variable Libre - Literal - Cláusula
    • P ROGRAMAS L ÓGICOS Y OBJETIVOS DEFINIDOS
      • Cláusula definida
    • P ROGRAMAS D EFINIDOS Y O BJETIVOS D EFINIDOS
      • Programa definido
      • Modelo..................................................................................................................................................
      • Modelo propuesto.................................................................................................................................
      • Objetivos definidos
  • SLD-RESOLUCION
    • S USTITUCIONES
      • Sustitución
      • Sustitución sobre un término................................................................................................................
      • Composición de sustituciones
      • Propiedades de la composición............................................................................................................
    • U NIFICADORES MÁS GENERALES
      • Unificador
      • Observaciones:.....................................................................................................................................
      • Sustitución más general........................................................................................................................
      • Sustitución renombramiento...............................................................................................................
      • Unificador más general ( u.m.g. )
      • Teorema..............................................................................................................................................
    • CONSTRUCCIÓN DEL U M. G
      • Par discrepante
      • Algoritmo de unificación
    • SLD-RESOLUCIÓN
      • Observaciones sobre la Resolución SLD
      • SLD-Resolución..................................................................................................................................
      • Sustitución Computada.......................................................................................................................
      • SLD-Refutación
      • Sustitución Respuesta Computada
      • Derivación fallida...............................................................................................................................
      • Derivación Completa
      • Arbol-SLD
    • COMPROBACIÓN : COMPLETITUD Y CORRECCIÓN DE LA SLD-RESOLUCIÓN

Variable Libre

Aquella variable que se encuentra fuera del ámbito de todo cuantificador.

Literal

Se define como un predicado ó un predicado negado.

Veamos con un ejemplo las definiciones vistas:

¬ juega (futbol, pedro )

átomo término

término

literal

predicado = literal

pedro y futbol son átomos y por tanto términos. A su vez el predicado juega(futbol,pedro) es un literal, como lo es su negación.

Cláusula

Una cláusula es una fórmula de la siguiente forma:

∀ X1 ∀ X2 ∀ X3 … ∀ Xn ( L1 ∨ L2 ∨…∨ Lm ), siendo Li un literal.

Ejemplo : ∀ X ∀ Y ∀ Z ( p(X,Z) ∨ q(X,Y) ∨ ¬ r(Y,Z) )

La notación que se suele utilizar es la siguiente, paso a fórmula de implicación:

∀ X1 … ∀ Xn ( ¬ B1 ∨ ¬ B2 ∨ … ∨ ¬ Bm ∨ A1 ∨ …Am’ )

se omiten los cuantificadores universales,

( ¬ B1 ∨ ¬ B2 ∨ … ∨ ¬ Bm ∨ A1 ∨ …Am’ )

se extraen las negaciones,

¬( B1 ∧ … ∧ Bm ) ∨ A1 ∨ …Am’

si etiquetamos ( B1 ∧ … ∧ Bm ) como X y ( A1 ∨ … ∨ Am’ )como Y tendremos:

¬X ∨Y ≡ X → Y

en definitiva podemos escribir:

( B1 ∧ … ∧ Bm ) → ( A1 ∨ …Am’ )

Programas Lógicos y objetivos definidos

La idea de programación Lógica es la de obtener conclusiones a partir de descripciones declarativas.

Estas descripciones consisten en realidad en un conjunto finito de fórmulas lógicas expresadas de acuerdo con una serie de restricciones. Estas restricciones son las que hacen posible la aplicación de la regla de inferencia denominada “principio de SLD-resolución”.

Las restricciones restringen o limitan las sentencias a las denominadas cláusulas lógicas que describen hechos (ó conocimiento positivo) y reglas.

Un hecho establece que se da una relación entre objetos, mientras que una regla establece que se da una relación entre objetos en el caso de que se den otras relaciones entre objetos.

Cláusula definida

Una cláusula definida es de la forma:

B ∨ ¬ B1 ∨ … ∨ ¬ Bn

donde B y Bi ∀i ∈{1,…,n} son fórmulas atómicas.

Debemos de observar que:

B ∨ ¬ B1 ∨ … ∨ ¬ Bn ⇔ B ∨ ¬ (B1 ∧ … ∧ Bn)

y

cabeza de la cláusula

cuerpo de la cláusula

B ∨ ¬ (B1 ∧ … ∧ Bn) ⇔ B ← B1,B2,…, Bn

Si n = 0 entonces tenemos un Hecho ( B ← ). Se denomina “ conocimiento positivo ”, es decir, expresa

directamente una relación que es cierta. Ejemplo : progenitor(luisa,juan) ←.

Si n > 0 entonces tenemos una Regla ( B ← B1,…,Bn ). Expresa una relación B que es cierta en caso de

que sean ciertas la conjunción de relaciones B1,…,Bn. Ejemplo :

regla: hermano(X, Y) ← progenitor(Z,X),progenitor(Z,Y).

hecho: progenitor(luis,pepa).

Programas Definidos y Objetivos Definidos

Programa definido

Un programa definido no es más que un conjunto de cláusulas definidas.

En programación lógica los objetivos, o cláusulas objetivo, que se van a considerar tienen la siguiente forma:

∀ X ¬( B1 ∧ … ∧ Bn )

← B1 ∧ … ∧ Bn

donde cada fórmula atómica Bi es un subojetivo (o subgoal).

Esta cláusula puede considerarse resultante de :

¬∃ X ( B1 ∧ … ∧ Bn )

que en último término podemos considerar como la negación de la pregunta que se realiza al programa, para que averigüe para que determinados valores de X la cláusula objetivo es consecuencia lógica de las cláusulas definidas que constituyen el programa.

Así funciona el mecanismo de inferencia en Prolog para encontrar las soluciones a la pregunta trata de probar la inconsistencia de la negación de la pregunta. Los valores que hacen falso la negación son soluciones a nuestra pregunta.

SLD-RESOLUCION

Sustituciones

Sustitución

Una sustitución es un cjto finito de la forma {X 1 / t 1 , …, X (^) n/ tn} de pares X/ t donde

i) X 1 … X (^) n son variables distintas ii) t 1 … tn son términos iii) X (^) i≠ ti ∀i ∈ {1,…,n}

Además:

  • Si los términos ti son básicos se denomina sustitución básica.
  • Si la sustitución no tiene elementos se denomina vacía y se representa por ε ≡ { }

Sustitución sobre un término

Para una sustitución σ = {X 1 / t 1 , …, X (^) n/ tn} y un término s , se define como s σ (denominándose “resultado de la sustitución σ sobre el término s ”) como el término obtenido por reemplazamiento simultáneo de cada ocurrencia de X (^) i en s por ti para i = 1,…,n. Así :

i) X (^) i σ = ti ii) Yσ = Y , ∀Y ∉ {X 1 , …, X (^) n } iii) f( s1,…,sm )σ = f( s1 σ ,…,sm σ)

Se denomina instanciación del término s a s σ e instanciación básica si no contiene variables. Este mismo concepto puede ser extendido a fórmulas.

Ejemplos:

  • s = p( f(X), Y, g(X,Z)) σ={X/g(a), Y/g(Y), Z/c}

sσ={p(f(g(a)), g(Y), g(g(a),c)}

  • s = p( f(X), Y, g(X,Z)) σ={X/g(Y), Y/a}

sσ={p(f(g(Y)), a, g(g(Y),Z)}

  • s = p( f(X), Y, g(X,Z)) σ={X/Y, Y/Z, Z/X}

sσ={p(f(Y), Z, g(Y,X)}

Unificador

Sean S1 y S2 estructuras y sea θ una sustitución. Entonces θ se denominará unificador de S1 y S2 si y

sólo si:

S1 θ ≡ S2 θ

Ejemplo

  • θ={X/f(a), Z/f(f(a))} es unificador de p(X, f(X)) y p(f(a), Z)
  • θ={X/a, Z/b} “no” es unificador de p(X, Z) y p(X, X)

Observaciones:

i) Algunas estructuras no tienen unificador. ii) Las sustituciones cambian únicamente variables. iii) Si dos estructuras unifican, o bien una de ellas es una variable o bien tienen el mismo símbolo principal.

Ejemplos

p(X) y q(Y), no son unificables puesto que su símbolo principal no coincide.

p(a, X) y p(b,b) tampoco, ya que no es posible sustituir constantes sólo variables.

iv) Ninguna variable X y estructura que contenga a X como variable son unificables

Ejemplos

X y f(X) → σ={X/ ???} ??? , f( ??? )

Sustitución más general

Una sustitución θ se dice que es más general que σ si y sólo si verifica que existe una sustitución ω tal

que σ = θ ω.

Esta relación es antisimétrica. Sin embargo si dos sustituciones son más generales en reciprocidad, entonces para cualquier estructura S se cumple que (salvo renombramiento de variables)

S θ = S σ.

Ejemplo Dadas dos sustituciones θ={Y/X, Z/X} σ={Y/Z, X/Z} Se puede verificar que ambas son una sustitución más general de otra, ya que existen ω 1 y ω 2 que verifican que:

θ = σ ω 1 → ω 1 = {Z/X}

σ = θ ω 2 → ω 2 = {X/Z}

Sustitución renombramiento

Sea θ={X 1 / Y 1 ,…, X (^) n/ Y (^) n}, θ es denominada sustitución renombramiento si y sólo si Y 1 ,…, Y (^) n son

variables distintas y Dom( θ) = Rango( θ ) , es decir :

{X 1 ,…, X (^) n } = { Y 1 ,…, Y (^) n}

Las sustituciones renombramiento suponen una aplicación biyectiva y por tanto poseen una inversa; se denota por θ-1^ y será { Y 1 / X 1 ,…, Y (^) n / X (^) n }

Cumpliéndose: θ θ-1^ = θ-1^ θ = ε

Unificador más general ( u.m.g. )

Un unificador θ de S1 y S2 es un unificador más general (u.m.g.) cuando para cualquier otro unificador σ de S1 y S2 existe una sustitución ω tal que σ=θω.

Teorema UNICIDAD SALVO RENOMBRAMIENTO

Sean θ y σ dos u.m.g. de dos estructuras S1 y S2, entonces θ y σ son idénticos salvo renombramiento de variables.

∃ ω sustitución renombramiento | θ=σω , y ∃ δ sustitución renombramiento | σ=θδ

Ejemplo Dadas dos estructuras: p(X,f(Y)) y p(Z,f(Z)) claramente σ={X/a, Y/a, Z/a} es unificador de ambos. También lo es θ={X/Z, Y/Z} éste es más general ya que σ =θ{Z/a} ,, es más θ es el u.m.g.

No es el único u.m.g. Por ejemplo δ={ Z/X, Y/X } es u.m.g. ya que θ=δω y δ=θω- ω={X/Z} ω-1={Z/X}

Construcción del u.m.g.

Para resolver el problema de hallar un u.m.g. de dos estructurras indroduzcamos conceptos auxiliares previamente.

Par discrepante

Un par de estructuras discrepantes S1 y S2 es un par de estructuras definidas como sigue:

  • Si S1 y S2 tienen símbolos principales distintos entonces <S1, S2> es el único par discrepante de S1 y S2.
  • Si S1 y S2 tienen símbolos principales idénticos y si las i-simas subestructuras directas de S1 y S2 son distintas, entonces cualquier par discrepante de estas subestructuras también es un par discrepante de S1 y S2.

Ejemplos

Unificar p(f(X,Y),a) p(f(Z,Z),Z)

1º/ Pares discrepantes <X, Z> <Y, Z> <a, Z>

2º/ El u.m.g. para el primer par discrepante θ 1 ={X/Z}

3º/ p(f(X,Y),a)θ 1 = p(f(Z,Y),a) p(f(Z,Z),Z)θ 1 = p(f(Z,Z),Z)

4º/ Pares discrepantes <Y, Z> <a, Z>

5º/ El u.m.g. para el primer par discrepante θ 2 ={Y/Z}

6º/ p(f(Z,Y),a)θ 2 = p(f(Z,Z),a) p(f(Z,Z),Z)θ 2 = p(f(Z,Z),Z)

7º/ Pares discrepantes <a, Z>

8º/ El u.m.g. para el primer par discrepante θ 3 ={Z/a}

9º/ p(f(Z,Z),a)θ 3 = p(f(a,a),a) p(f(Z,Z),Z)θ 3 = p(f(a,a),a)

10º/ Al final aplicando la propiedad asociativa de la sustitución tenemos que el u.m.g. será la composición de las sustituciones que unificarán las estructuras iniciales. u.m.g. = θ 1 θ 2 θ 3 = {X/Z}{Y/Z}{Z/a} = {X/a, Y/a, Z/a}

Ejercicio

Unificar {f(X,g(a,Y),Z), f(h(u,c),g(a,W), k(X)), f(h(u,v),g(a,Y),w)} S1 S2 S

1º/ Unificamos S1 y S2 con θ 1 = σ 1 σ 2 …σn

2º/ Unificamos S1θ 1 ( o S2θ 1 ) con S3θ 1 generándose el u.m.g. θ 2

3º/ El U.M.G(S1,S2,S3) = θ 1 θ 2 = θ

Ejercicios

-Unificar las estructuras anteriores

  • Unificar {f(X,h(Z),h(X)) , f(g(a,Y), h(b), h(Y))}

, Los algoritmos de unificación incorporando la comprobación “ si un par discrepante de la forma

<X, t>, donde X es una variable de t , y por tanto no es unificable ”, son poco eficientes por lo que normalmente se elimina este módulo del algoritmo, por ejemplo en PROLOG. Esto provoca la posibilidad de entrar en un bucle infinito en la unificación.

Además este algoritmo de unificación tienen complejidad exponencial (2n^ ) siendo n la longitud de las estructuras a analizar.

SLD-Resolución

El punto de partida de la SLD-Resolución es por una parte el conjunto de cláusulas definidas del programa (las premisas).

H← B 1 , …, Bm ,, m≥ 0 (dependiendo de si es un hecho o una regla).

Por otra parte tenemos la cláusula (definida) objetivo de la forma:

← A 1 , …, A (^) n (n ≥ 0)

La cláusula objetivo puede incluir varias fórmulas atómicas como subgoals, que unifiquen con la cabeza de alguna de las cláusulas del programa.

Lo que se hace es introducir una regla para seleccionar que subgoal A (^) i coger en cada paso. Esta regla se denomina “Función de selección o Regla de computación”.

En el caso de la SLD-Resolución, al igual que el Prolog se considerará siempre el primer literal (o subgoal) a la izquierda para tratar de resolverlo con una cláusula del programa.

La resolución va a consistir en determinar la sustitución θ tal que θ=u.m.g.(A1, H) Con ello conseguimos una nueva cláusula objetivo de la forma:

(← B1,…,Bm, A 2 , … , A (^) n )θ

En sucesivas ocasiones iremos cogiendo de izquierda a derecha el resto de subobjetivos para ser resueltos con las cláusulas del programa.

La función de selección junto con la restricción a clásulas definidas en la resolución caracteriza la SLD-Resolución, o Linear Resolution for Definite clauses with Selection function.

Observaciones sobre la Resolución SLD

i) En cada paso “ La regla de resolución ” trabaja con una cláusula definida y una cláusula objetivo.

ii) Por estar acotadas universalmente las premisas es posible el renombramiento de variables para que las variables de ambas cláusulas sean conjuntos disjuntos, debemos recordar que el ámbito de una variable es la cláusula en la que aparece.

iii) La conclusión será una cláusula objetivo cuantificada universalmente.

iv) En el caso de objetivos con más de un literal la función de selección o regla de computación selecciona el subobjetivo más a la izquierda como primer subobjetivo a resolver.

SLD-Resolución

Es un proceso iterativo que se aplica reiteradamente sobre un conjunto de cláusulas (premisas del programa y el objetivo obtenido en el paso anterior de la resolución).

A continuación se presenta el proceso completo “SLD-resolución general”. La información de partida viene dada por :

  • El programa definido P
  • Un objetivo G 0 : ← A 1 ,…, Am (m≥ 0 )

Ejemplos

Consideremos el siguiente programa lógico: sabe_logica(X)← buen_estudiante(X),profesor(Y,X),logico(Y). buen_estudiante(antonio). logico(matias). profesor(matias,antonio). Ante este programa planteamos la pregunta ¿quién sabe lógica?, que se traduce al objetivo:

Goal: sabe_logica(Z).

El proceso consiguiente de SLD resolución sería el siguiente:

G 0 : ← sabe_logica(Z).

(renombramos)

C 0 : sabe_logica(X 0 )← buen_estudiante(X 0 ),profesor(Y 0 ,X 0 ),logico(Y 0 ).

θ 1 :{ Z/X 0 }

G 1 : ← buen_estudiante(X 0 ),profesor(Y 0 ,X 0 ),logico(Y 0 ).

C 1 : buen_estudiante(antonio).

La cláusula C 1 es un hecho de P , luego es cierta y se elimina del objetivo. Es lo mismo que insertar por delante el cuerpo de esta cláusula en el objetivo ya que el cuerpo está vacío.

θ 2 :{ X 0 /antonio }

G 2 : ← profesor(Y 0 ,antonio),logico(Y 0 ).

C 2 : profesor(matias, antonio).

De nuevo tenemos un hecho del programa y se elimina del objetivo una vez unificado.

θ 3 :{ Y 0 /matias }

G 3 : ← logico(matias).

C 3 : logico(matias).

G 4 : ← ⇔ †

De esta forma la respuesta a la pregunta vendrá dada por la Sustitución Computada :

θ 1 θ 2 θ 3 θ 4 ={ Z/X 0 }{ X 0 /antonio }{ Y 0 /matias }ε = { Z / antonio, X 0 / antonio, Y 0 / matias }

SLD-Refutación

Una SLD-derivación finita: < G 0 ; C 0 >, < G 1 ; C 1 >…< G (^) n ; C (^) n >, G (^) n+1 donde G (^) n+1 = † se denomina SLD-refutación de G 0.

Sustitución Respuesta Computada

La sustitución computada de una SLD-refutación de G 0 restringida a las variables de G 0 se denomina “Sustitución Respuesta Computada” para G 0.

Ejemplo: Para el ejemplo anterior donde la la Sustitución Computada era:

θ 1 θ 2 θ 3 θ 4 ={ Z/X 0 }{ X 0 /antonio }{ Y 0 /matias }ε = { Z / antonio, X 0 / antonio, Y 0 / matias }

la Sustitución Respuesta Computada teniendo en cuenta que G 0 : ← sabe_logica(Z) será: S.R.C. = { Z / antonio }

Derivación fallida

Una derivación finita de una cláusula objetivo G 0 cuyo último elemento no está vacío y además no puede ser resuelto con ninguna cláusula del programa se denomina derivación fallida.

Derivación Completa

Es una refutación, derivación fallida o una derivación infinita.

Generalmente un objetivo G 0 puede tener varias derivaciones completas. El conjunto de todas estas derivaciones pude representarse por un árbol “posiblemente infinito” denominado el SLD-árbol de G (^0)

(vía ℜ).

Arbol-SLD

Sea P un programa definido, G 0 un objetivo definido y ℜ una regla de computación. El árbol-SLD de G 0 de acuerdo con P y G 0 es un árbol etiquetado (posiblemente infinito) que satisface las siguientes condiciones:

  • G 0 es la raíz del árbol.
  • G (^) i+1 es un nodo hijo de G (^) i si y sólo si existe una versión “ renombrada ” de la cláusula Ci en P tal que

G i+1 se derive de G i y de la cláusula renombrada C i bajo ℜ. El segmento que une G i y G i+1 se etiqueta

con C (^) i. Dicho segmento es el n-simo de izquierda a derecha si C (^) i es la n-sima cláusula que unifica con el

subgoal elegido via ℜ.

Los nodos de un árbol-SLD son subobjetivos de la derivación. Las conexiones son etiquetadas por las cláusulas del programa.

← r(a,Y 0 )

← q(b,Z 0 ),r(Z 0 ,Y 0 )

← r(Y 1 ,b), r(Y 1 ,Y 0 )

← r(Y 0 ,b)

← p(b,X)

θ 2 ’={Y 0 /a}

θ 4 ={Y 0 /b}

θ 3 ={Y 1 /a}

θ 2 ={X 1 /b,Z 0 /Y 1 }

θ 1 ={X 0 /b,X/Y 0 } θ 1 ’={X 0 /b,X/Y 0 }

e

c d

f

f

f

Ejercicio:

c p(Y) ← q(X,Y), r(Y). d p(X) ← q(X,X). e q(X,X) ← s(X). f r(b) g s(a). h s(b).

y como objetivo G 0 : ← p(X)

Comprobación: Completitud y Corrección de la SLD-Resolución

Como proceso de inferencia formal que es la resolución conlleva cuestiones de corrección y completitud.

Corrección

Es una propiedad esencial que garantiza que las conclusiones producidas por el sistema son correctas. Corrección en el sentido de que sean consecuencias lógicas del programa.

El objetivo que se persigue en la resolución de un objetivo es que { P , G 0 } ⇒ Falso , es decir, a partir del programa y el objetivo inicial se obtenga por SLD-Resolución la cláusula VACIA. Para ello sea:

P programa definido ← A 1 ,…, An el objetivo a resolver con θ sustitución respuesta computada

Entonces (^) ∀∗ (A 1 ,…, An)θ es consecuencia lógica de P

Completitud

Puede verse como la propiedad contraria ya que hace referencia a que toda posible solución a un objetivo inicial se puede obtener por SLD-Resolución.

Sea P un programa definido y ← B el objetivo definido a resolver, entonces se verifica que para cada instancia B’ de B que sea consecuencia lógica de P existe una refutación de P y ← B con sustitución respuesta computada θ tal que B’ es instancia de Bθ.

Aunque aquí únicamente enunciamos estas dos propiedades presentes en el proceso de inferencia existen teoremas que aseguran dichas propiedades.