Laboratorio de Conocimiento y Razonamiento Automatizado

51
Laboratorio de Conocimiento y Razonamiento Automatizado David Castro Esteban

Transcript of Laboratorio de Conocimiento y Razonamiento Automatizado

Page 1: Laboratorio de Conocimiento y Razonamiento Automatizado

Laboratorio de Conocimiento y RazonamientoAutomatizado

David Castro Esteban

Page 2: Laboratorio de Conocimiento y Razonamiento Automatizado

TEX & LATEX

Page 3: Laboratorio de Conocimiento y Razonamiento Automatizado

Informacion sobre el profesor

Profesor: David Castro EstebanDepartamento: Ciencias de la ComputacionDespacho: N346Tutorıas: Martes de 9:00-11:00 y de 15:00-19:00Direccion postal: Escuela Tecnica Superior de Informatica

Campus UniversitarioCtra. Barcelona km. 31.728805 Alcala de HenaresMADRID

Direccion electronica: [email protected] web: http://www.cc.uah.es/dcastroTelefono: 918856668

Page 4: Laboratorio de Conocimiento y Razonamiento Automatizado

Temario Practicas

1 Introduccion al Prolog

2 Tablas de verdad.

3 Tableros semanticos para el Calculo Proposicional.

4 Resolucion en el Calculo Proposicional.

5 Tableros semanticos en el Calculo de Predicados.

6 Resolucion en el Calculo de Predicados.

Page 5: Laboratorio de Conocimiento y Razonamiento Automatizado

Desarrollo y Evaluacion de Practicas

Desarrollo de las practicas

Pueden hacerse en grupos de dos .

La mayor parte debe realizarse en las propias sesiones.

Con cada practica se entregara a los alumnos un programa paraverificar el funcionamiento de la misma.

Antes de la defensa hay que entregar un CD-ROM con losprogramas.

Valoracion de las practicas

Se tendra en cuenta el trabajo realizado en el laboratorio.

Hasta 4 puntos por la calidad del c odigo (estilo deprogramacion, limpieza del codigo, comentarios,...).

Hasta 6 puntos por la defensa de las practicas.

Page 6: Laboratorio de Conocimiento y Razonamiento Automatizado

Bibliografıa Laboratorio

Clasicos de la programacion en Prolog :

W. Clocksin, C. Mellish, “Programming in PROLOG”,Springer–Verlag.

Libro que describe, de facto, el estandar de Prolog .

W. Clocksin, “Clauses and Effects”, Springer–Verlag.

Otro buen libro de Prolog .

Page 7: Laboratorio de Conocimiento y Razonamiento Automatizado

Alguno recursos en la red

Pueden ser utiles los siguientes enlaces:

T. Escrig, J. Pacheco, F. Toledo, “El lenguaje de programacionProlog”.

http://ics.uji.es/asignaturas/practicas.pdf

P. Brna, “Prolog programming”

http://www.cbl.leeds.ac.uk/˜paul/prologbook/

Algunas notas y transparencias sobre Prolog en

http://staff.science.uva.nl/ ulle/teaching/prolog/

Page 8: Laboratorio de Conocimiento y Razonamiento Automatizado

Software

SWI-Prolog

Ejecutables, codigo fuente y manuales en

http://www.swi-prolog.org/

Versiones para Windows, Unix y Mac OS.

Entorno de desarrollo para Windows en

http://lernen.bildung.hessen.de/informatik

/swiprolog/indexe.htm

Page 9: Laboratorio de Conocimiento y Razonamiento Automatizado

Ideas basicas

El Prolog esta basado en la logica y es interpretado(tıpicamente).

Los progamas tienen hechos y reglas .

Los hechos son informaciones y premisas sobre el problema aresolver.

Las reglas indican como inferir informacion de los hechos.

Los programas se ejecutan mediante preguntas al sistema.

Las preguntas indican la informacion que queremos obtener.

Page 10: Laboratorio de Conocimiento y Razonamiento Automatizado

Hechos

Los hechos codificacion informacion sobre el problema.

Ejemplo

padre(juan,pedro).% El padre de Juan es Pedropadre(fernando,pedro).% ...madre(alonso,maria).% ...

Los hechos, las preguntas y las reglas terminan siempre en ’.’

Los comentarios se indican con %

Page 11: Laboratorio de Conocimiento y Razonamiento Automatizado

Preguntas

Las preguntas sirven para ejecutar el programa.

Ejemplo

?-padre(fernando,pedro).Yes.

?-padre(fernando,paco).No.

?-padre(fernando,X).X=pedro.Yes.

Las variables comienzan siempre con mayuscula .

Page 12: Laboratorio de Conocimiento y Razonamiento Automatizado

Reglas

Las reglas indican como extraer informacion sobre el problema.

Ejemplo

hermanos(X,Y):-padre(X,Z),padre(Y,Z).hermanos(X,Y):-madre(X,Z),madre(Y,Z).

% Son hermanos si tienes el mismo padre o

% la misma madre.

La ’,’ indica la conjuntcion logica, el ’;’ la conjuncion y ’\+’ lanegacion..

Ejemplo

?-hermanos(juan,fernando).Yes.

?-hermanos(juan,X).X=juanX=fernando

Page 13: Laboratorio de Conocimiento y Razonamiento Automatizado

¿Como contesta a las preguntas el Prolog (1)?

Lee el programa de manera descendente (¡el orden importa! ).

Busca hechos o reglas que se correspondan con la pregunta.

Intenta averiguar el valor de las variables para que la pregunta secorrespondan con hechos o reglas.

Ejemplo

padre ( juan , pedro).padre(fernando,pedro).madre(alonso,maria).?- padre ( juan , X).

X=pedroYes.

Si la pregunta es compuesta, se contestan las subpreguntas deizquierda a derecha (¡el orden sigue importando! ).

Page 14: Laboratorio de Conocimiento y Razonamiento Automatizado

¿Como contesta a las preguntas el Prolog (2)?

Ejemplo

padre(juan,pedro).padre(fernando,pedro).madre(alonso,maria).

?-padre(fernando,X),padre(Y,X).Primero considera la primera subpregunta--> padre(fernando,X)Obtiene como respuesta--> X=pedroSubstituye X por pedro en lo que resta y considera la subpregunta--> padre(Y,pedro)Da como primera respuesta a la pregunta global

Y=juan...

Page 15: Laboratorio de Conocimiento y Razonamiento Automatizado

Representacion de Listas

Una lista es una coleccion de objetos entre corchetes.

Se usa el operador | para acceder al primer elemento y a la listade los restantes.

El operador | sirve para tambien sirve construir listas.

Ejemplo

?-[X |Y]=[0,1,2,3,4,a,b,5,6].X=0Y=[1,2,3,4,a,b,5,6]Yes.

?-X=[0 |[1,2]].X=[0,1,2]Yes.

Page 16: Laboratorio de Conocimiento y Razonamiento Automatizado

Mas Ejemplos

Ejemplo

?-[X,Y |Z]=[0,1,2,3,4,a,b,5,6].X=0Y=1Y=[2,3,4,a,b,5,6]Yes.

?-[X,0 |Z]=[0,Y,2,3,4,a,b,5,6].X=0Y=0Y=[2,3,4,a,b,5,6]Yes.

Page 17: Laboratorio de Conocimiento y Razonamiento Automatizado

Operaciones con listas

append/3 : concatena dos listas.

union/3 : une dos listas (elimina duplicados).

member/2 : verifica si un termino esta en la lista.

length/2 : da la longitud de la lista.

reverse/2 : invierte la lista.

Ejemplo?-append([1,2],[3,4],X).

X=[1,2,3,4] ...?-append([1,2],X,[1,2,3,4]).

X=[3,4] ...?-union([1,2],X,[1,2,5,6]).

X=[1,2,5,6] ...?-member(X,[1,2,3]).

X=1X=2 ...

Page 18: Laboratorio de Conocimiento y Razonamiento Automatizado

Recorrido de Listas

Para recorrer listas hay que construir reglas recursivas.

Estas reglas indican que es lo que hay que hacer con losprimeros elementos y cuando hay que parar.

Ejemplo

list length([ |Y],N):- list length(Y,N1),N is N1 + 1.

list length([],N):- N is 0.

La variable se usa cuando no nos interesa el resultado.

Ejemplo

write list(X):- member(Y,X),write(Y),fail.

fail es siempre falso (¡no encuentra respuesta! ).

Page 19: Laboratorio de Conocimiento y Razonamiento Automatizado

Estructuras

Los terminos compuestos o estructuras reunen varios atomos deforma ordenada. Tienen funtor y argumentos .

Se puede acceder a sus elementos empleando el operador ’=..’que devuelve una lista.

¡Un atomo es una estructura sin argumentos.!

¡Las listas son estructuras!

Ejemplo

?-padre(juan,pedro) =.. X.X=[padre,juan,pedro]

?-X =.. [hombre,juan].X=hombre(juan) ...

?-paco=.. X.X=[paco] ...

?-[1,2,3]=.. .(1,.(2,.(3,[]))).Yes

Page 20: Laboratorio de Conocimiento y Razonamiento Automatizado

Practicar lo aprendido

Ejercicio

Construir una base de datos que codifique vuestra familia.

Ejercicio

Definir varias reglas que usen la base de datos anterior:tiene hermanos, tiene hermanas, ...

Page 21: Laboratorio de Conocimiento y Razonamiento Automatizado

Operadores

Pueden definirse operadores en Prolog mediante

:-op(Prioridad, Tipo Operador, Nombre Operador)

Tipos de operadores

xfx infijo no asociativoxfy infijo asociativo por la derechayfx infijo asociativo por la izquierdafx prefijo no asociativofy prefijo asociativoxf postfijo no asociativoyf postfijo asociativo por la izquierda

Prioridad

La prioridad es un natural: a mayor natural, menor prioridad.

Page 22: Laboratorio de Conocimiento y Razonamiento Automatizado

Representacion de Arboles

Los arboles se representan mediante estructuras. Por ejemplo,

a

b c

d a a a

Page 23: Laboratorio de Conocimiento y Razonamiento Automatizado

Representacion de Arboles

Puede representarse mediante

nodo(a,nodo(b,

nodo(d,empty,empty),nodo(a,empty,empty)),

nodo(c,nodo(a,empty,empty),

nodo(a,empty,empty))

Page 24: Laboratorio de Conocimiento y Razonamiento Automatizado

Recorrido de Arboles

Los arboles se recorren de manera recursiva indicando que hacer concada nodo intermedio y con las hojas.

Page 25: Laboratorio de Conocimiento y Razonamiento Automatizado

Tablas de verdad

Objetivo: Implementar el algoritmo de tablas de verdad.

Definir los operadores logicos: neg , imp ,eqv , and , or , xor ,nand y nor .

Definir el valor de los operadores mediante hechos.

Obtener los atomos de un formula.

Generar todas las posibles asignaciones para los atomosobtenidos.

Para cada asignacion calcular el valor de la formula e imprimir elvalor.

Page 26: Laboratorio de Conocimiento y Razonamiento Automatizado

Operadores logicos

Para definir el and hay que definir el operador:-op(100,xfy,and).y dar su valor mediante una tablaopr(t,t,t).opr(t,f,f).opr(f,t,f).opr(f,f,f).

Page 27: Laboratorio de Conocimiento y Razonamiento Automatizado

Formulas del Calculo Proposicional

eqv

xor or

p q p q

(p xor q) eqv (p or q)

Page 28: Laboratorio de Conocimiento y Razonamiento Automatizado

Asignaciones

Las asignaciones se representaran mediante listas.[[p,t],[q,f]]asigna al atomo p el valor de t (verdadero) y f (falso) al atomo q.

Page 29: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar

get atoms(Fml, Atoms) : es cierta si Atoms es lista deatomos de la formula Fml .get atoms(p or q, [p,q]).Yes.

generate(Atoms, V) : es cierta si V es una asignacion delos atomos Atoms .generate([p,q],[[p,t],[q,f]]).Yes.

tt(Fml, V, TV) : cierta si el valor de la formula Fml , para laasignacion V, es TV.tt(p and q, [[p,t],[q,f]], t).No.

create tt(Fml) : es la clausula principal, llama a lasrestantes e imprime la tabla.

Page 30: Laboratorio de Conocimiento y Razonamiento Automatizado

Tableros semanticos

Objetivo: Implementar el algoritmo de tableros sem anticos.

Definir los operadores logicos: neg , imp ,eqv , and , or , xor ,nand y nor .

Definir las α y las β–formulas mediante hechos.

Codificar adecuadamente los nodos del tablero semantico.

Definir las reglas que permiten extender el tablero semantico.

Page 31: Laboratorio de Conocimiento y Razonamiento Automatizado

α-reglas

α-Reglas

α α1 ᬬA1 A1

A1∧A2 A1 A2

¬(A1∨A2) ¬A1 ¬A2

¬(A1→ A2) A1 ¬A2

¬(A1 ↑ A2) A1 A2

A1 ↓ A2 ¬A1 ¬A2

A1↔ A2 A1→ A2 A2→ A1

¬(A1⊕A2) A1→ A2 A2→ A1

Page 32: Laboratorio de Conocimiento y Razonamiento Automatizado

β -reglas

β -Reglas

β β1 β¬(B1∧B2) ¬B1 ¬B2

B1∨B2 B1 B2

B1→ B2 ¬B1 B2

B1 ↑ B2 ¬B1 ¬B2

¬(B1 ↓ B2) B1 B2

¬(B1↔ B2) ¬(B1← B2) ¬(B2← B1)B1⊕B2 ¬(B1← B2) ¬(B2← B1)

Page 33: Laboratorio de Conocimiento y Razonamiento Automatizado

Construccion/Definicion de Tableros Semanticos

El nodo raız esta etiquetado con un conjunto de A y, dado un nodocualquiera l , etiquetada con un conjunto de formulas U(l), aplicamosalguna de las siguientes reglas:

Si U(l) es un conjunto de literales, se contradicen, la rama semarca cerrada ×; en caso contrario se marca abierta ⊙.

Si U(l) no es un conjunto de literales, escogemos una formulaF ∈ U(l) que no sea literal y se aplica alguna de las reglas:

Si F es la α–formula A, se crea un nuevo nodo hijo l ′, y seetiqueta con

U(l ′) := (U(l)\ {A})∪{A1,A2}

de acuerdo a las tablas anteriores.Si F es la β –formula B, se crean dos nuevos nodos hijos l ′ y l ′′, yse etiquetan

U(l ′) := (U(l)\ {B})∪{B1}, y

U(l ′′) := (U(l)\ {B})∪{B2}.

Page 34: Laboratorio de Conocimiento y Razonamiento Automatizado

Representacion de Tableros Semanticos

Los tableros se pueden representar mediante arboles en PROLOGmediante estructura anidadas (igual que las formulas en la Practicaanterior). En general, cada nodo del tablero se representa medianteuna estructura del tipo t(Fmls, Left, Right) , donde Fmlsson las formulas y Left y Right son subarboles. Las ramas vacıasse indican con el atomo empty (p.e. la rama derecha cuando seaplica una α–formula), las cerradas con el atomo closed y lasabiertas con el atomo open . Por ejemplo, el tablero semanticoasociado a A∨¬A, puede representarse en Prolog mediante lasestructuras anidadas

t([A or neg A],t([A],open,empty),t([neg A],open, empty))

Page 35: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (1)

create tableau(Fml,Tab) : es cierta si Tab es unatablero para la formula Fml .

extend tableau(t(Fmls, Left, Right) : lleva a cabouna regla en el tablero semantico. Su estructura es la siguiente:

1 Comprueba si Fmls contiene literales contradictorios, esto es, sila rama es cerrada (closed ).

2 Comprueba si Fmls contiene solo literales, esto es, si la rama esabierta (open ).

3 Aplica una regla (α o β –regla segun corresponda) al primerelemento de la lista Fmls .

4 Si ninguna regla es aplicable (es un literal), mueve el primerelemento de Fmls al final de lista.

Page 36: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (2)

check closed(Fmls) : es cierta si Fmls contiene formulascontradictorias, esto es, si A y neg A, donde A es un literal,pertenecen a Fmls .

literal(Fml) : es cierta si Fml es un literal, esto es, o bienes A o bien neg A, siendo A un atomo de Prolog a.

contains only literals(Fmls) : es cierta si Fmlscontiene unicamente literales.

aEmplear la primitiva atom .

Page 37: Laboratorio de Conocimiento y Razonamiento Automatizado

Resolucion

Objetivo: Implementar el algoritmo de tableros sem anticos.

Definir los operadores logicos: neg , imp ,eqv , and , or , xor ,nand y nor .

Implementar la conversion de formulas del Calculo Proposicionala su forma normal conjuntiva.

Implementar la conversion de formulas de forma normalconjuntiva a forma clausal.

Implementar el procedimiento de resolucion.

Page 38: Laboratorio de Conocimiento y Razonamiento Automatizado

Conversion a FNC (1)

Teorema

Toda formula del Calculo Porposicional F , admite una FNCequivalente.

Demostracion.

Basta realizar los siguientes pasos:

Eliminar todos los operadores, salvo la conjuncion, la disyunciony la negacion, empleando la tabla:

A→ B ¬A∨BA↔ B (A→ B)∧ (B→ A)

A ↑ B ¬(A∧B)A ↓ B ¬(A∨B)A⊗B ¬(A↔ B)

Page 39: Laboratorio de Conocimiento y Razonamiento Automatizado

Conversion a FNC (2)

Se llevan las negaciones al interior de la formula aplicando deMorgan:

¬(A∨B) (¬A)∧ (¬B)¬(A∧B) (¬A)∨ (¬B)

Se eliminan los dobles negaciones, i.e. ¬¬A≡ A.

Se extraen las conjunciones aplicando las leyes distributivas:

A∨ (B∧C) (A∨B)∧ (A∨C)(A∧B)∨C (A∨C)∧ (B∨C)

Page 40: Laboratorio de Conocimiento y Razonamiento Automatizado

Algoritmo de Resolucion

Entrada: Una forma clausal S.Salida: Indica si forma clausal S es satisfacible o insatisfacible.Comenzamos con el conjunto S0← S. Suponiendo que hemosconstruido Si , si existen dos clausulas C1,C2 ∈ Si contradictorias,definimos

Si+1← Si ∪Res(C1,C2)

El algoritmo termina cuando no es posible anadir nuevas clausulas,devolviendo satisfacible si no se ha derivado la clausula vacıa. Si enalgun momento se deriva la clausula vacıa se para indicandoinsatisfabilidad.

Page 41: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (1)

cnf(A,X) : es cierta si X es la forma normal conjuntiva de laformula A.

eliminate(A,X) : es cierta si la formula X es el resultado deeliminar de la formula A los operadores: imp , xor , nand , nor yeqv .

demorgan(A,X) : es cierta si la formula X es el resultado deaplicar a A las Leyes de Morgan.

distribute(A,X) : es cierta si X es el resultado de distribuirlas disyunciones sobre las conjunciones en A.

Page 42: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (2)

cnf to clausal(A,B) : es cierta si la representacion clausalde A es B (A es una formula en forma normal conjuntiva).

disjunction to set(D,S) : es cierta si la disyuncion Dserepresenta mediante el conjunto S. Notese que una disyuncionconteniendo literales contradictorios es valida y debe sereliminada.

Una vez realizada la conversion de la forma normal conjuntiva a larepresentacion clausal, se esta en condiciones de llevar a cabo elproceso de resolucion. Para ello, se deben implementar las siguientesclausulas:

resolve(Fml) : resuelve la formula Fml .

resolve set(S) : resuelve el conjunto de clausulas S.

clashing(C1,L1,C2,L2) : comprueba si las clausulas C1 yC2 son contradictorias, i.e. si existe un literal L1 de C1 que es lanegacion de un literal L2 de C2).

Page 43: Laboratorio de Conocimiento y Razonamiento Automatizado

Tableros semanticos

Objetivo: Implementar el algoritmo de tableros sem anticos.

Definir los operadores logicos: neg , imp ,eqv , and , or , xor ,nand y nor .

Definir las α y las β–formulas mediante hechos.

Codificar adecuadamente los nodos del tablero semantico.

Definir las reglas que permiten extender el tablero semantico (α ,β , γ y δ ).

Page 44: Laboratorio de Conocimiento y Razonamiento Automatizado

δ y γ-reglas

γ-Reglas

γ γ(a)

∀xA(x) A(a)¬∃xA(x) ¬A(a)

δ -Reglas

δ δ (a)

∃xA(x) A(a)¬∀xA(x) ¬A(a)

Page 45: Laboratorio de Conocimiento y Razonamiento Automatizado

Construccion/Definicion de Tableros Semanticos(Predicados)

El nodo raız esta etiquetado con una formula A y una constante {a},dado un nodo cualquiera l , etiquetada con un conjunto de formulasU(l) y constantes C(l), aplicamos alguna de las siguientes reglas:

Si U(l) es un conjunto de literales y existe un par que secontradicen, la rama se marca cerrada ×; en caso contrario semarca abierta ⊙.

Si U(l) no es un conjunto de literales, escogemos una formulaF ∈ U(l) que no sea literal y se aplica alguna de las reglas:

Page 46: Laboratorio de Conocimiento y Razonamiento Automatizado

Construccion/Definicion de Tableros SemanticosCalculo de Predicados (1)

Si F ∈ U(l) es la α–formula A, se crea un nuevo nodo hijo l ′, yse etiqueta con

U(l ′) := (U(l)\{A})∪{A1,A2}

de acuerdo a las tablas anteriores.

Si F ∈ U(l) es la β–formula B, se crean dos nuevos nodos hijosl ′ y l ′′, y se etiquetan

U(l ′) := (U(l)\{B})∪{B1}, y U(l ′′) := (U(l)\{B})∪{B2}.

Las constantes son las del padre.

Page 47: Laboratorio de Conocimiento y Razonamiento Automatizado

Construccion/Definicion de Tableros SemanticosCalculo de Predicados (2)

Si F ∈ U(l) es una δ–formula, se crea un nuevo nodo hijo l ′, y seetiqueta con

U(l ′) := (U(l)\{F})∪{F(b)} y C(l ′) = C(l)∪{b}

de acuerdo a las tablas anteriores y siendo b una nuevaconstante.

Si F ∈ U(l) es una γ–formula y b ∈ C(l), se crean un nuevonodo hijo l ′ y se etiqueta

U(l ′) := (U(l)\{B})∪{F(b)} y C(l ′) = C(l)∪{a}

Si todas las reglas que se puedan aplicar a un nodo, no generanun hijo distinto, y no es cerrado, se marca como abierto ⊙.

Page 48: Laboratorio de Conocimiento y Razonamiento Automatizado

Representacion de Tableros Semanticos

De entrada el alumno debe fijar una representacion para las formulasdel Calculo de Predicados. Para ello, puede utilizar la aproximacionempleada en practicas anteriores con la salvedad de que debeconsiderar cuantificaciones. Para ello, puede representar lascuantificaciones existenciales mediante estructuras del tipo ex(X,F)(i.e. ∃xF(x)) y las universales mediante estructuras all(X,F) (i.e.∀xF(x)).Insistimos en que las variables del Calculo de Predicadosdeben corresponderse con variables en PROLOG.En cuanto a la codificacion de los nodos del tablero semantico,senalar que tambien se deben almacenar las constantes que se hanido generando en la etiqueta.

Page 49: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (1)

La estructura del programa es similar a la de la practica anterior. Sinembargo, con el fin de facilitar el desarrollo de la misma, incluimos acontinuacion el codigo encargo de llevar a cabo la substitucion devariables por constantes en una formula. En el se definen dosclausulas:

subst constant(X, C, Vars, Vars1) y

instance(A, A1, X, C) .

La primera de ellas es cierta si la lista de variables Vars1 es la listade variables obtenida substituyendo X por C en la lista de variablesVars . La segunda es cierta si A1 es una instancia de A en la que seha substituido X por C. Notamos, que dicho codigo se debe emplear ala hora de aplicar γ o δ–reglas.

Page 50: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (2)

Tambien hay que implementar:

create tableau(Fml,Tab) : es cierta si Tab es unatablero para la formula Fml .

extend tableau(t(Fmls, Left, Right,C) : seencarga de extender el tablero de manera recursiva.

Page 51: Laboratorio de Conocimiento y Razonamiento Automatizado

Clausulas a implementar (3)

Tambien hay que implementar:

check closed(Fmls) : es cierta si Fmls contiene formulascontradictorias, esto es, si A y neg A pertenecen a Fmls .

literal(Fml) : es cierta si Fml es un literal, esto es, o bienes A o bien neg A..

contains only literals(Fmls) : es cierta si Fmlscontiene unicamente literales.