You are on page 1of 28

TEMA 3

Método T∆S para la


Lógica Clásica Proposicional

Como veremos más adelante en el curso, el método de Resolución necesita


la conversión de las fórmulas de entrada a forma normal conjuntiva y por lo
tanto, la eficiencia del mismo está supeditada a la eficiencia del proceso de
normalización; además, ambos procesos (normalización y resolución) trabajan
independientemente. Por el contrario, el método de las Tablas semánticas que
hemos estudiado en el tema anterior, se basa en la conversión del conjunto
de fórmulas en forma normal disyuntiva, pero dicha conversión solo utiliza
las equivalencias básicas de definición de conectivos, leyes de De Morgan y
propiedad distributiva. Al igual que el método de las Tablas semánticas, el
método T∆S se basa en la conversión de las fórmulas de entrada en forma
normal disyuntiva pero incorporando más simplificaciones:

Además de las mencionadas se utilizan otras equivalencias: leyes de ab-


sorción, idempotencia, propagación de literales, etc.

Además de equivalencias se utilizan transformaciones que mantienen la


propiedad de satisfacibilidad: regla del literal puro, completa reducción.

El algoritmo trabaja sobre una representación alternativa de las fórmulas,


los ∆-árboles, que se construyen a partir de la forma normal negativa que
introducimos en la primera sección.

3.1. Forma normal negativa

Una forma normal es un esquema de fórmula que representa a una familia


de fórmulas. Es habitual que los algoritmos que se describen en lógica tra-
bajen sobre formas normales en lugar de trabajar con el lenguaje completo.
Los conjuntos adecuados de conectivos y las formas normales son métodos que

I. T. en Informática de Sistemas. Lógica computacional 1


2 Lógica Computacional

permiten simplificar los algoritmos, pero como contrapartida, con ellos reduci-
mos la expresividad del lenguaje. Por lo tanto, si queremos mantener la mayor
expresividad necesitaremos algoritmos de conversión al lenguaje reducido con
el que trabaje nuestro algoritmo.

En concreto, para el algoritmo T∆S, necesitamos introducir la forma nor-


mal negativa, que es la forma normal más simple y la que menos coste conlleva
en el proceso de conversión.

Antes de dar las definiciones necesarias, debemos tener en cuenta que a


lo largo de este tema vamos a trabajar con el lenguaje de la lógica clásica
proposicional extendido con las constantes lógicas ⊥ y ⊤ y que además vamos
a trabajar con fórmulas generalizadas, es decir, considerando los conectivos ∧
y ∨ con aridad variable.

Definición 3.1 1. Una fórmula se dice que es un literal si es una variable


proposicional o la negación de una variable proposicional. Si A es una
variable proposicional, decimos que A y ¬A son literales opuestos. Si ℓ
es un literal, ℓ denota a su literal opuesto.

2. Decimos que una fórmula es una cláusula si es la constante ⊥, la cons-


tante ⊤ o una disyunción de literales. Decimos que es una cláusula res-
tringida si no contiene literales repetidos ni pares de literales opuestos.

3. Decimos que una fórmula es un cubo si es la constante ⊥, la constante


⊤ o una conjunción de literales. Decimos que es un cubo restringido si
no contiene literales repetidos ni pares de literales opuestos.

Ejemplo 3.1.1
1. p, r y ¬q son literales; ¬r = r; q = ¬q.

2. p ∨ ¬q ∨ p es una cláusula que no es restringida; pero es equivalente a


p ∨ ¬q que sı́ es restringida.

3. ¬p ∧ r ∧ ¬q ∧ ¬r es un cubo que no es restringido; pero es equivalente a


⊥ que sı́ es restringido.

4. p ∧ (q ∨ ¬p) no es ni cláusula ni cubo.

Las cláusulas y los cubos son las fórmulas en forma normal negativa más
simples. En su definición, que vemos a continuación, distinguimos entre forma
normal negativa conjuntiva y forma normal negativa disyuntiva.

Definición 3.2 Dentro del conjunto de fórmulas generalizadas definimos re-


cursivamente las fórmulas en forma normal negativa como sigue:

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 3

Las constantes lógicas y los literales son fórmulas en forma normal ne-
gativa conjuntiva y son fórmulas en forma normal negativa disyuntiva.

Si C1 ,. . . ,Cn son fórmulas en forma normal negativa conjuntiva, enton-


ces C1 ∨ · · · ∨ Cn es una fórmula en forma normal negativa disyuntiva.

Si D1 ,. . . ,Dn son fórmulas en forma normal negativa disyuntiva, enton-


ces D1 ∧ · · · ∧ Dn es una fórmula en forma normal negativa conjuntiva.

Decimos que una fórmula en forma normal negativa es restringida si es ⊥


o ⊤ o no contiene ninguna constante lógica y todas las clasulas y cubos que
contiene son restringidos.

Ejemplo 3.1.1 La representación de las fórmulas usando árboles sintácticos


(generalizados) ayuda a identificar y entender el esquema que hemos definido
anteriormente. Como vemos en el ejemplo siguiente, los conectivos ∨ y ∧ se
van alternando en cada nivel y el conectivo de la negación solo aparece en
las hojas formando parte de los literales. Cuando trabajamos con este tipo de
fórmulas, se suele escribir A en lugar de ¬A, si A es una variable proposicional.

p ∧ ∧

∨ r̄ ∨ p

∧ ∧ s̄ r q̄
q p̄ p̄ s

Teorema 3.3 Toda fórmula es equivalente a una fórmula en forma normal


negativa restringida.

El proceso de conversión para obtener la forma normal equivalente consiste


en la aplicación de varias equivalencias lógicas.

1. Con las equivalencias

A → B ≡ ¬A ∨ B, ¬(A → B) ≡ A ∧ ¬B,
¬(A ∧ B) ≡ ¬A ∨ ¬B, ¬(A ∨ B) ≡ ¬A ∧ ¬B,

eliminamos las implicaciones y trasladamos la negación hasta las varia-


bles proposicionales

I. T. en Informática de Sistemas
4 Lógica Computacional

2. La equivalencia ¬¬A ≡ A simplifica las posibles cadenas de negaciones.


La asociatividad de la conjunción y de la disyunción permite agruparlas
y disponerlas en niveles alternativos.

3. Finalmente, aplicando si es posible las siguientes equivalencias dentro de


cada cláusula y cada cubo

A ∧ A ≡ A, ¬A ∧ A ≡ ⊥, ⊤ ∧ A ≡ A, ⊥ ∧ A ≡ ⊥,
A ∨ A ≡ A, ¬A ∨ A ≡ ⊤, ⊥ ∨ A ≡ A, ⊤ ∨ A ≡ ⊤,

conseguimos la forma restringida.

3.2. ∆-árboles

En esta sección vamos a introducir una representación alternativa para las


fórmulas en forma normal negativa restringida, los ∆-árboles. Aprovechándo-
nos de la sencillez de estas fórmulas, vamos a simplificar aun más los elementos
necesarios para definirlas. De forma sintética, podemos decir que en la repre-
sentación por ∆-árboles, las cláusulas y cubos son escritos como listas de
literales.

Definición 3.4 Una ∆-lista es la constante ⊤, la constante ⊥ o una lista de


literales en la que cada variable aparece a lo sumo una vez; denotaremos por
nil a la lista vacı́a. Si λ es una ∆-lista, λ es la lista formada por los literales
opuestos a los de λ: ℓ1 , . . . , ℓn = ℓ1 , . . . , ℓn

Ejemplo 3.2.1 Las siguientes listas de literales son ∆-listas:

pq̄s ¯
q stu pq̄r t̄w

Sin embargo, ni pqrq ni prqr lo son.

Los elementos de las ∆-listas se escribirán ordenados respecto del orden lexi-
cográfico. Esto no influye en la validez de las transformaciones que vamos a
describir posteriormente, pero sı́ en la eficiencia de las mismas.

Igual que para la forma normal negativa, en la definición de ∆-árbol dis-


tinguiremos entre ∆-árboles conjuntivos y ∆-árboles disyuntivos. Los nodos
de estos árboles están etiquetados con ∆-listas precedidas de los prefijos [α] o
[β], de manera alternativa en cada nivel, para especı́ficar el carácter conjun-
tivo o disyuntivo del correspondiente nodo. Este prefijo no es estrictamente
necesario, pero ayuda a leer y entender la fórmula asociada.

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 5

Definición 3.5 Definimos los ∆-árboles como sigue:

1. Si λ es una ∆-lista y λ 6= ⊤, entonces [α]λ es un ∆-árbol conjuntivo.

2. Si λ es una ∆-lista y λ 6= ⊥, entonces [β]λ es un ∆-árbol disyuntivo.

3. Si T1 ,. . . , Tn son ∆-árboles disyuntivos y λ es una ∆-lista, entonces el


siguiente árbol es un ∆-árbol conjuntivo:

[α]λ

T1 ... Tn

4. Si T1 ,. . . , Tn son ∆-árboles conjuntivos y λ es una ∆-lista, entonces el


siguiente árbol es un ∆-árbol disyuntivo:

[β]λ

T1 ... Tn

Los ∆-árboles definidos en los puntos 1 y 2 son ∆-árboles hoja.

Ejemplo 3.2.2 Los siguientes árboles son ∆-árboles:

[β]nil [α]pq [β]nil [α]pq [α]nil

[α]nil [α]pqr [β]pr [β]pr [β]pq

[α]qr [α]pqr

Cada ∆-árbol determina una fórmula en forma normal negativa, la construida


por el operador FNN que definimos a continuación.

Definición 3.6 El operador FNN, que convierte ∆-árboles en fórmulas en for-


ma normal negativa, se define de forma recursiva como sigue:

FNN([α]nil) = FNN([β]⊤) = ⊤
FNN([β]nil) = FNN([α]⊥) = ⊥
FNN([α]ℓ1 . . . ℓn ) = ℓ1 ∧ · · · ∧ ℓn
FNN([β]ℓ1 . . . ℓn ) = ℓ1 ∨ · · · ∨ ℓn

I. T. en Informática de Sistemas
6 Lógica Computacional

 
[α]ℓ1 . . . ℓn
FNN   = ℓ1 ∧ · · · ∧ ℓn ∧ FNN(T1 ) ∧ · · · ∧ FNN(Tm )
T1 ... Tm
 
[β]ℓ1 . . . ℓn
FNN   = ℓ1 ∨ · · · ∨ ℓn ∨ FNN(T1 ) ∨ · · · ∨ FNN(Tm )
T1 ... Tm
Ejemplo 3.2.3 Las fórmulas correspondientes a los ∆-árboles del ejemplo 3.2.2
son las siguientes:

FNN([β]nil) = ⊥

FNN([α]pq) = p ∧ ¬q
 
[β]nil
FNN   = FNN([α]nil) ∨ FNN([α]pqr) = ⊤ ∨ (¬p ∧ q)
[α]nil [α]pqr
 
[α]pq
FNN   = p ∧ ¬q ∧ FNN([β]pr) = p ∧ ¬q ∧ (¬p ∨ r)
[β]pr
 
[α]nil
 
 
FNN  [β]pr [β]pq
  = (¬p ∨ r) ∧ (p ∨ ¬q ∨ (q ∧ ¬r) ∨ (p ∧ ¬q ∧ r))

 
[α]qr [α]pqr

En adelante, aplicaremos a los ∆-árboles las propiedades y conceptos asociados


a fórmulas a través del operador FNN; ası́ por ejemplo, diremos que el ∆-árbol
A es satisfacible para indicar que la fórmula FNN(A) es satisfacible.

Por otra parte, toda fórmula en forma normal negativa restringida puede
ser escrita como ∆-árbol, por lo que podemos trabajar exclusivamente con
este tipo de representación. Por su definición, toda fórmula en forma normal
negativa restringida responde a uno de los siguientes esquemas:

ℓ1 ∧ · · · ∧ ℓn ∧ A1 ∧ · · · ∧ Am , en dónde las fórmulas Ai están en forma


normal negativa disyuntiva y en la lista ℓ1 ,. . . ,ℓn no aparecen literales
opuestos o repetidos.

ℓ1 ∨ · · · ∨ ℓn ∨ A1 ∨ · · · ∨ Am , en dónde las formulas Ai están en forma


normal negativa conjuntiva y en la lista ℓ1 ,. . . ,ℓn no aparecen literales
opuestos o repetidos.

De esta forma, es fácil definir el operador de conversión que vemos a continua-


ción.

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 7

Definición 3.7 El operador ∆Árbol que convierte fórmulas en forma normal


negativa en ∆-árboles, se define recursivamente como sigue:

1. ∆Árbol(ℓ1 ∧ · · · ∧ ℓn ) = [α]ℓ1 . . . ℓn .
[α]nil
2. ∆Árbol(A1 ∧ · · · ∧ Am ) =
∆Árbol(A1 ) ... ∆Árbol(Am )
[α]ℓ1 . . . ℓn
3. ∆Árbol(ℓ1 ∧ · · · ∧ ℓn ∧ A1 ∧ · · · ∧ Am ) =
∆Árbol(A1 ) . . . ∆Árbol(Am )
4. ∆Árbol(ℓ1 ∨ · · · ∨ ℓn ) = [β]ℓ1 . . . ℓn
[β]nil
5. ∆Árbol(A1 ∨ · · · ∨ Am ) =
∆Árbol(A1 ) ... ∆Árbol(Am )
[β]ℓ1 . . . ℓn
6. ∆Árbol(ℓ1 ∨ · · · ∨ ℓn ∨ A1 ∨ · · · ∨ Am ) =
∆Árbol(A1 ) . . . ∆Árbol(Am )

Ejemplo 3.2.4 Vamos a escribir la fórmula del ejemplo 3.1.1 como ∆-árbol:


 
 
p ∧ ∧ 
 
 
 ∨ r̄ ∨ p
∆Árbol 
 

∧ ∧ s̄ r q̄
 
 
 
 
 q p̄ p̄ s 

[β]p
[α]r̄ [α]p
=
[β]nil [β]q̄rs̄

[α]p̄q [α]p̄s

3.2.1. Operaciones básicas con ∆-árboles

En la descripción de las transformaciones sobre ∆-árboles que componen el


algoritmo T∆S, vamos a utilizar una serie de operaciones básicas. Como parte
de ellas, necesitaremos calcular la unión, intersección y diferencia de listas de
literales, que denotaremos con los correspondientes sı́mbolos conjuntistas, ∪,
∩ y r; estos operadores se definen considerando las listas como conjuntos.

I. T. en Informática de Sistemas
8 Lógica Computacional

Sin embargo, dado que necesitamos trabajar con ∆-listas, al unir dos de
ellas deberemos eliminar, en su caso, la posible existencia de literales opuestos,
reemplazando la lista por una constante lógica.

Definición 3.8 El operador Unión se define como:




[α]⊥ si λ ∩ λ̄′ 6= nil
Unión([α]λ, [α]λ ) =
[α](λ ∪ λ′ ) en otro caso

[β]⊤ si λ ∩ λ̄′ 6= nil
Unión([β]λ, [β]λ′ ) =
[β](λ ∪ λ′ ) en otro caso

La segunda operación básica es la sustitución de literales por constantes. Co-


mo veremos, la mayorı́a de las transformaciones se basa en la eliminación de
literales mediante este tipo de sustituciones. Además, una vez sustituidos, las
constantes introducidas en la fórmula pueden ser eliminadas fácilmente me-
diantes las leyes 0-1. La representación por ∆-árboles permite describir los dos
procesos, sustitución y eliminación de constantes, de forma compacta.

Definición 3.9 Sea A un ∆-árbol y ℓ un literal. El ∆-árbol A[ℓ/⊤] se cons-


truye recorriendo A primero en profundidad de la raı́z a las hojas para realizar
las siguientes transformaciones:

1. Si en un nodo [α]λ aparece el literal ℓ dicho literal es eliminado.

2. Si en un nodo [β]λ aparece el literal ℓ̄, dicho literal es eliminado.

3. Si en un nodo [α]λ aparece el literal ℓ̄ el subárbol con raı́z en dicho nodo es


eliminado, excepto si dicho nodo es la raı́z, en cuyo caso A[p/⊤] = [α]⊥.

4. Si en un nodo [β]λ aparece el literal ℓ el subárbol con raı́z en dicho nodo es


eliminado, excepto si dicho nodo es la raı́z, en cuyo caso A[p/⊤] = [β]⊤.

Por otra parte, definimos A[ℓ/⊥] como A[ℓ̄/⊤].

La sustitución de varios literales simultáneamente se puede hacer efectuando


la operación de la definición anterior para cada literal,

A[ℓ1 . . . ℓn /⊤] = A[ℓ1 /⊤] . . . [ℓn /⊤]


A[ℓ1 . . . ℓn /⊥] = A[ℓ1 /⊥] . . . [ℓn /⊥],

pero también puede hacerse en un único recorrido del árbol, según establece
el siguiente resultado.

Proposición 3.10 Sea A un ∆-árbol y µ = ℓ1 . . . ℓn una ∆-lista. El ∆-árbol


A[µ/⊤] se construye como sigue:

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 9

1. Si [α]λ es la raı́z de A y λ ∩ µ 6= nil, entonces A[µ/⊤] = [α]⊥.

2. Si [β]λ es la raı́z de A y λ ∩ µ 6= nil, entonces A[µ/⊤] = [β]⊤.

Si no se pueden aplicar las reglas anteriores, recorremos A primero en profun-


didad de la raı́z a las hojas para realizar las siguientes transformaciones:

3. Si un nodo está etiquetado con [α]λ y λ ∩ µ 6= nil, entonces el subárbol


correspondiente al nodo es eliminado; en caso contrario, el nodo es sus-
tituido por [α](λ rµ); es decir, cada literal de µ es eliminado del nodo.

4. Si un nodo está etiquetado con [β]λ y λ ∩ µ 6= nil, entonces el subárbol


correspondiente al nodo es eliminado; en caso contrario, el nodo es sus-
tituido por [β](λ rµ); es decir, cada literal de µ es eliminado del nodo.

Podemos calcular A[µ/⊥] usando la proposición anterior si tenemos en


cuenta que A[µ/⊥] = A[µ/⊤].

Ejemplo 3.2.5
 
[α]rs [α]nil
  [rs/⊤] =
[β]prt [β]qst [β]pqt [β]pt [β]pqt

3.2.2. ∆-árboles restringidos

Todas las transformaciones que vamos a realizar sobre los ∆-árboles están
inducidas por el contenido de las ∆-listas y la relación de dominancia en la
estructura de árbol. La transformación básica del algoritmo es aquella que
conduce a la obtención de la forma restringida, es decir, aquella en la que no
existen subárboles que puedan ser reducidos a constantes de forma trivial.

Definición 3.11 Sea A un ∆-árbol y η un nodo en A.

1. η se dice concluyente si verifica una de las siguientes condiciones:

a) η = [α]⊥ o η = [β]⊤.
b) Es un nodo monarı́o y su ∆-lista es nil.
c) Tiene un hijo que es hoja y cuya ∆-lista es nil.
d) Su ∆-lista es λ′ , la ∆-lista de su padre es λ y λ′ ∩ λ 6= nil.

2. η se dice simple si es una hoja y su ∆-lista es unitaria.

I. T. en Informática de Sistemas
10 Lógica Computacional

3. Decimos que η es actualizable si tiene un hijo, η ′ , cuya ∆-lista es nil y,


si λ1 ,. . . ,λn son las ∆-listas de los hijos de η ′ , entonces: λ1 ∩· · ·∩λm 6⊂ λ.

Decimos que A es restringido si no tiene nodos concluyentes, simples o actua-


lizables.

Los nodos concluyentes, simples y actualizables pueden ser eliminados man-


teniendo el significado de la fórmula. Esta propiedad es establecida por el
siguiente teorema.

Teorema 3.12 Todo ∆-árbol es equivalente a un ∆-árbol restringido.

La demostración de este teorema consiste en la definición del operador


Restringir que modifica el árbol eliminando los nodos concluyentes, simples
y actualizables. Si A es un ∆-árbol, el ∆-árbol Restringir(A) se obtiene a
partir de A aplicando las siguientes reglas de reescritura hasta que no puedan
aplicarse más; omitiremos los prefijos [α] y [β] cuando no influyan en la regla.

1. Si algún nodo está etiquetado con [α]⊥ o [β]⊤, entonces el correspon-


diente subárbol se elimina o simplifica de la siguiente forma:
η η


A1 ... Am [α]⊥ A1 ... Am

η η


A1 ... Am [β]⊤ A1 ... Am

Si la constante está en la raı́z, simplemente se eliminan sus hijos.

[α]⊥

→ [α]⊥
A1 ... Ak
[β]⊤

→ [β]⊤
A1 ... Ak

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 11

2. Si algún hijo de η es una hoja etiquetada con [α]nil o [β]nil entonces


el subárbol con raı́z η se sustituye por [β]⊤ y [α]⊥ respectivamente:
η

→ [β]⊤
A1 ... Am [α]nil
η

→ [α]⊥
A1 ... Am [β]nil

Obsérvese que si η no es la raı́z, podemos aplicar la regla 1 y eliminar


completamente el subárbol.

3. Si algún hijo de η es un nodo monario etiquetado con nil, entonces dicho


nodo es eliminado de la siguientes forma:

η Unión(η, η ′ )


A1 ... Am nil A1 . . . Am Am+1 . . . Am+k

η′

Am+1 ... Am+1

Si el nodo vacı́o y monario es la raı́z, entonces:

nil η


η A1 ... Am

A1 ... Am

4. Si la ∆-lista de η es λ, la ∆-lista de un hijo es λ′ y λ′ ∩ λ 6= nil, entonces


dicho hijo es eliminado:
η η


A1 ... Am η′ A1 ... Am

5. Si algún hijo de η es una hoja cuya ∆-lista es unitaria, entonces el con-


tenido de su ∆-lista se pasa a η:

η Unión(η, ℓ)


A1 ... Am ℓ A1 ... Am

I. T. en Informática de Sistemas
12 Lógica Computacional

6. Si en el esquema de abajo tenemos que δ = λ1 ∩· · ·∩λm 6⊂ λ, el contenido


de δ se pasa a λ:
λ Unión(λ, δ)


... nil ... nil

λ1 ... λm λ1 ... λm

... ... ... ...

El ∆-árbol Restringir(A) ası́ construido es restringido y equivalente a A.

Ejemplo 3.2.6 Mostramos algunos ejemplos de ∆-árboles que no son restrin-


gidos y las transformaciones que conducen a su forma restringida.

(5) (3)
1. [α]nil →
→ [α]nil →
→ [α]qr

[β]nil [β]nil [β]qr [β]nil [β]qr

[α]q [α]r [α]qr [α]qr


(6)
2. [α]nil →
→ [α]p

[β]nil [β]p [β]nil [β]p

[α]pq [α]pr [α]qr [α]pq [α]pr [α]qr


(2)
3. [α]nil →
→ [α]⊥

[β]nil

4. El orden de las reglas no influye en el resultado, aunque este puede


mostrarse de forma distinta. En el apartado anterior, podrı́amos haber
aplicado la regla 3 en lugar de la 2, obteniendo un resultado equivalente:
(3)
[α]nil →
→ [β]nil

[β]nil

3.3. Completa reducción

Definición 3.13 Un ∆-árbol A es completamente reducible si es conjuntivo


y su raı́z es no vacı́a.

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 13

Los átomos de la raı́z de un árbol completamente reducible pueden ser elimi-


nados de todo el árbol. La aplicación del siguiente resultado, que describe esta
eliminación, se hará en el algoritmo con el nombre de completa reducción.

Teorema 3.14 Si [α]λ, con λ 6= nil, es la raı́z de A, entonces A es satisfa-


cible si y solo si A[λ/⊤] es satisfacible. Además, si I es un modelo de A[λ/⊤],
entonces cualquier extensión de I tal que I(ℓ) = 1 para cada ℓ ∈ λ, es un
modelo de A

Ejemplo 3.3.1 El ∆-árbol

A= [α]rs

[β]prt [β]qst [β]pqt


es completamente reducible y por lo tanto es satisfacible si y solo si lo es el
siguiente:
A[rs/⊤] = [α]nil

[β]pt [β]pqt
No es difı́cil comprobar que la interpretación I tal que I(p) = 1 e I(q) = 0
es un modelo de A[rs/⊤], por lo que podemos extenderlo a un modelo de A
considerando I(r) = 1 e I(s) = 0.

3.4. Subreducción

El proceso denominado subreducción elimina aquellos literales en un árbol


que estén dominados por otro literal con la misma variable proposicional. De
esta forma, cada rama del árbol contiene a lo sumo un literal por cada variable.
El árbol resultante será equivalente al inicial.

Teorema 3.15 Sea A un ∆-árbol. Entonces A ≡ SubReducir(A), siendo


SubReducir(A) el ∆-árbol que se obtiene a partir de A recorriéndolo primero
en profundidad de la raı́z a las hojas y realizando en cada nodo la siguiente
transformación:

[α]λ [α]λ


A1 ... Am A1 [λ/⊤] . . . Am [λ/⊤]
[β]λ [β]λ


A1 ... Am A1 [λ/⊥] . . . Am [λ/⊥]

I. T. en Informática de Sistemas
14 Lógica Computacional

Ejemplo 3.4.1 Sobre el ∆-árbol siguiente aplicamos la transformación ante-


rior para obtener su versión subreducida.

[α]nil →
→ [α]nil →
→ [α]nil

[β]qr [β]q [β]qr [β]q [β]qr [β]q

[α]p [α]p [α]p

[β]qr [β]pr [β]r [β]pr [β]r [β]r

3.5. Literales puros

Definición 3.16 Un literal ℓ se dice puro en un ∆-árbol si en él no aparece


el literal ℓ̄.

Las variables de los literales puros pueden ser eliminadas en todo el árbol
aplicando el resultado siguiente, que es incorporado al algoritmo en el proceso
denominado reducción de literales puros.

Teorema 3.17 Si µ es la lista de literales puros de A, entonces A es satisfa-


cible si y solo si A[µ/⊤] es satisfacible. Además, si I es un modelo de A[µ/⊤],
entonces cualquier extensión del I tal que I(ℓ) = 1 para cada ℓ ∈ µ, es modelo
de A.

3.6. Algoritmo T∆S

Igual que el método de las tablas semánticas, el algoritmo T∆S es un


algoritmo de satisfacibilidad. Si estamos interesados en el estudio de la validez
de un razonamiento A1 , . . . , An |= A, usaremos el principio de refutación y
aplicaremos el algoritmo para estudiar la satisfacibilidad de A1 ∧ · · ·∧ An ∧ ¬A.

El flujo de datos del algoritmo es una lista de pares de la forma

[(B1 , µ1 ), . . . , (Bm , µm )],

en donde cada Bi es un ∆-árbol y cada µi son listas de literales. La lista inicial


para estudiar la satisfacibilidad de una fórmula A es

[(∆Árbol(A), nil)]

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 15

Figura 3.1: Algoritmo T∆S

Los nuevos elementos en esta lista se obtendrán al dividir los árboles disyun-
tivos separando los elementos de la disyunción, o bien al aplicar el proceso
de ramificación. De esta forma, si [(B1 , µ1 ), . . . , (Bm , µm )] es el flujo en un
instante cualquiera de la ejecución del algoritmo, entonces:

la fórmula inicial A es satisfacible si y solo si B1 ∨ · · · ∨ Bn es


satisfacible.

Es decir, A es insatisfacible si y solo si todos los Bi son insatisfacibles. La lista


de literales almacena la información sobre el posible modelo, de forma que

si Bi es satisfacible por un modelo I, entonces cualquier extensión


de I con I(ℓ) = 1 para cada ℓ ∈ µi es un modelo de la fórmula
inicial.

I. T. en Informática de Sistemas
16 Lógica Computacional

La lista [(B1 , µ1 ), . . . , (Bm , µm )] se denomina lista de tareas pendientes. Aten-


diendo a las observaciones remarcadas más arriba, el algoritmo terminará si

1. Todos los elementos del flujo son [α]⊥ o [β]nil, en cuyo caso la fórmula
inicial es insatisfacible.

2. Algún elemento del flujo es [α]nil o [β]⊤, en cuyo caso la fórmula inicial
es satisfacible, pudiendo además construir un modelo.

A continuación, explicamos detalladamente la progresión del algoritmo so-


bre la lista de tareas describiendo cada bloque de transformaciones y cada
transformación que aparece en el diagrama de flujo del algoritmo.

Bloque Actualizar: Después de cada simplificación las fórmulas del flujo


entran en el bloque Actualizar, en el cual se convierten los árboles a
forma restringida y se analiza si estamos en situación de finalización:

1. Si todas los elementos de la lista son [α]⊥ o [β]nil, el algoritmo


finaliza devolviendo la salida Insatisfacible.

2. Si alguno de los elementos de la lista es ([α]nil, µ) o ([β]⊤, µ),


entonces el algoritmo finaliza devolviendo la salida Satisfacible y
dando como modelo a I tal que I(ℓ) = 1 para cada ℓ ∈ µ.

Paralelizar: Si algún elemento de la lista de tareas es disyuntivo, entonces


a la lista de tareas se le aplica la siguiente transformación, con la cual
se elimina la raı́z disyuntiva y se añaden tantos árboles como elementos
tiene la disyunción.

 
[β]ℓ1 . . . ℓn
[. . . ,  , µ , . . . ] →

B1 ... Bm

→ [. . . , ([α]ℓ1 , µ), . . . , ([α]ℓn , µ), (B1 , µ), . . . , (Bm , µ), . . . ]

Obsérvese que si la raı́z no es vacı́a, los árboles hoja generados en la


lista de tareas permitirán finalizar haciendo simplemente una completa
reducción.

Reducción Completa: A continuación se analiza si alguno de los elementos


de la lista de tareas es completamente reducible, en cuyo caso se aplica

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 17

la correspondiente reducción:
 
[α]λ
[. . . ,  , µ , . . . ] →

B1 ... Bn
 
[α]nil

→ [. . . , 

, µ ∪ λ , . . . ]

B1 [λ/⊤] ... Bn [λ/⊤]

Esta es la primera etapa en la que se modifica la lista con la información


para el posible modelo, añadiendo a ella los literales de la raı́z que han
sido eliminados.

Subreducción: Si el árbol de la tarea no es completamente reducible, pasa-


mos a aplicar el operador de subreducción. Este proceso no modifica el
contenido de la lista con la información para el posible modelo.

Literales puros: Si el operador de subreducción no modifica el árbol, se halla


la lista de literales puros para su reducción. Si (B, µ) es un elemento de la
lista de tareas y π es la lista (no vacı́a) de literales puros de B, entonces:

[. . . , (B, µ), . . . ] →
→ [. . . , (B[π/⊤], µ ∪ π), . . . ]

Como vemos, esta etapa también modifica la lista de literales con la


información para el posible modelo.

Quine Las transformaciones explicadas hasta ahora no son suficientes para


la construcción de un demostrador completo, es necesario una etapa
de ramificación. Concretamente, el algoritmo utiliza el mismo proceso
de ramificación que el algoritmo de Quine. Si en la lista de tareas no
se puede aplicar ninguna de las transformaciones anteriores, entonces
elegimos una tarea cualquiera y un literal ℓ y efectuamos la siguiente
transformación en la lista de tareas.

[. . . , (B, µ), . . . ] →
→ [. . . , (B[ℓ/⊤], µ∪{ℓ}), (B[ℓ/⊥], µ∪{ℓ̄}), . . . ]

En las dos tareas se elimina completamente la variable elegida, la cual


es anotada en la lista para la construcción del posible contramodelo.

Es prácticamente imposible mostrar un ejemplo en dónde se apliquen todas


las etapas del algoritmo. En la secciones siguientes mostramos con detalle
cinco ejemplos que abarcan todas las situaciones posibles en la ejecución del
algoritmo.

I. T. en Informática de Sistemas
18 Lógica Computacional

3.7. Ejemplo 1

Estudiemos la validez de la siguiente inferenca

(p ∧ q) ∨ (p ∧ r) |= p ∧ (q ∨ r)

1. La entrada del algoritmo es

[(∆Árbol(((p ∧ q) ∨ (p ∧ r)) ∧ (¬p ∨ (¬q ∧ ¬r))), nil)] =


[α]nil
 
 
[β]nil [β]p
 
= 
  , nil


 
[α]pq [α]pr [α]qr

2. Al aplicar el operador Restringir observamos que la raı́z es actualizable


porque el nodo marcado con un cı́rculo está etiquetado con nil y sus
dos hijos contienen el literal p; por lo tanto, la salida del operador es:

[α]p
 
 
[β]nil [β]p , nil
 

 
 
[α]pq [α]pr [α]qr

3. El árbol es completamente reducible, y la sustitución [p/⊤] conduce a

[α]nil
 
 
[β]nil [β]nil, p
 

 
 
[α]q [α]r [α]qr

4. El operador Restringir sobre este árbol actúa como sigue:

(h. simples) (nil monario)


[α]nil →
→ [α]nil →
→ [α]qr

[β]nil [β]nil [β]qr [β]nil [β]qr

[α]q [α]r [α]qr [α]qr

Y por lo tanto, obtenemos el siguiente resultado


 
[α]qr
, p 
 

[β]qr

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 19

5. La completa reducción aplica la sustitución [qr/⊤] y produce el siguiente


resultado:  
 [α]nil
, pqr


[β]nil

6. El operador Restringir elimina la hoja nil devolviendo:

[([α]⊥, pqr)]

y por lo tanto, la inferencia es válida. Aunque hemos ido guardando los


literales eliminados, en este caso tal información no aporta nada.

3.8. Ejemplo 2

Queremos estudiar la validez del siguiente razonamiento:



p → s, (s → q) → (s ∧ r) |= q ∧ p → ¬ (r → ¬q) ∧ (p → r))

1. La validez es equivalente a la insatisfacibilidad de la conjunción de las


dos hipótesis y la negación de la conclusión que convertimos en ∆-árbol
para obtener la entrada del algoritmo:
[α]nil
 
 
 [β]ps [β]nil [β]q
 

 
[(∆Árbol(A1 ∧A2 ∧¬A), nil)] =  , nil
 

 [α]qs [α]rs [α]p 

 
 
[β]qr [β]pr

2. El operador Restringir detecta que la raı́z es actualizable, ya que el


nodo marcado con un cı́rculo es vacı́o y todos sus hijos contienen el
literal s; tras actualizar la raı́z, obtenemos el árbol de la izquierda. El
nodo marcado con un cı́rculo puede ser eliminado, ya que su intersección
con la raiz es distinta del vacı́o; el árbol resultante, a la derecha, es
restringido
[α]s [α]s
   
   
 [β]ps [β]nil [β]q  [β]nil [β]q
   
 
   
, nil → → , nil
   
 

 [α]qs [α]rs [α]p 
  [α]qs [α]rs [α]p
 

   
   
[β]qr [β]pr [β]qr [β]pr

I. T. en Informática de Sistemas
20 Lógica Computacional

3. El árbol es completamente reducible y la reducción lleva a


[α]s [α]nil
    
    
 [β]nil [β]q [β]nil [β]q
    
    
    
 [s/⊤], s =  , s
    

 [α]qs [α]rs [α]p    [α]q [α]r [α]p 
    
    
    
[β]qr [β]pr [β]qr [β]pr

4. El árbol obtenido no es restringido, ya que las dos hojas de la izquier-


da son simples; tras eliminar estas hojas, obtenemos el siguiente árbol
restringido:
[α]nil
 
 
 [β]qr [β]q
 

 
, s
 
 

 [α]p 

 
 
[β]qr [β]pr

5. Este árbol no es completamente reducible y pasamos a aplicar el operador


subreduce que produce el siguiente resultado:
[α]nil
 
 
 [β]qr [β]q
 

 
, s 
 


 [α]p 

 
 
[β]r [β]r

6. El árbol obtenido no está restringido; el proceso Restringir actúa como


sigue

(h. simples) (nodo ⊥) (h. simples)


[α]nil →
→ [α]nil →
→ [α]nil →
→ [α]q →
→ [α]q

[β]qr [β]q [β]qr [β]q [β]qr [β]q [β]qr

[α]p [α]⊥

[β]r [β]r

y el resultado de la tarea es [([α]q, s)].

7. La completa reducción nos lleva a la finalización:

[(([α]q)[q/⊤], qs)] = [([α]nil, qs)]

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 21

Por lo tanto, la inferencia no es válida y un contramodelo está determi-


nado por I(q) = 0, I(s) = 1.

3.9. Ejemplo 3

Vamos a estudiar la validez de la siguiente fórmula:

A = ((p∨(r → t))∧(q∨(t → s))) → ((p∧¬(q → ¬t))∨(r → ((q → (s∨r))∧s)))

1. La entrada al algoritmo es
 
[α]r
 
 
[(∆Árbol(¬A), nil)] =  [β]prt [β]qst [β]pqt [β]s , nil
 
 
 
[α]qsr

2. Restringir: El nodo marcado con un cı́rculo es eliminado, ya que tiene


literales comunes con su padre.
 
[α]r
, nil
 

[β]prt [β]qst [β]pqt [β]s

La hoja simple se elimina subiendo el literal s a la raı́z. Obtenmos el


siguiente árbol restringido.

[α]rs
 
 , nil
[β]prt [β]qst [β]pqt

3. El ∆-árbol es completamente reducible,

[α]rs
  
  [rs/⊤], rs
[β]prt [β]qst [β]pqt

y la sustitución efectiva de los literales por las constantes da como re-


sultado  
[α]nil
 , rs
[β]pt [β]qt [β]pqt

4. El arbol obtenido ya está restringido, no es completamente reducible, la


subreducción no modifica el árbol y no tiene literales puros. Aplicamos

I. T. en Informática de Sistemas
22 Lógica Computacional

entonces la etapa Quine y para ello elegimos la variable p; la lista de


tareas pasa a ser:
  
[α]nil
  [p/⊤], rsp ,
[β]pt [β]qt [β]pqt
  
[α]nil
  [p/⊥], rsp
[β]pt [β]qt [β]pqt

Las sustituciones efectivas de los literales conduce a


   
[α]nil [α]nil
 , rsp ,  , rsp
[β]qt [β]qt [β]t [β]qt

5. Nos preocupamos ahora de la primera tarea. El ∆-árbol es restringido,


no es completamente reducible y la subreducción no realiza ninguna
modificación. Sı́ tenemos un literal puro, t, por lo que la reducción de
dicho literal conduce a
    
[α]nil [α]nil
  [t/⊤], rspt ,  , rsp
[β]qt [β]qt [β]t [β]qt

La sustitución efectiva del literal da


  
[α]nil
([α]nil, rspt),  , rsp
[β]t [β]qt

6. Por lo tanto, la primera tarea es finalizable: ¬A es satisfacible y un


modelo es I(r) = 1, I(s) = 0, I(p) = 1, I(t) = 0. Obsérvese que, dado
que el resultado es satisfacible, no es necesario continuar con la tarea
pendiente.

3.10. Ejemplo 4

Estudiemos la validez de la siguiente inferencia:

A = (p ∧ (r ∨ q) ∧ (s → r)) ∨ (p ∧ r ∧ (q → s) ∧ (p → q))
B = ¬((r ∨ ¬q ∨ s) → p)

1. El ∆-árbol de la premisa y de la negación de la conclusión da la entrada

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 23

del algoritmo:
[α]nil
 
 
[β]nil [β]p
 
 
 
[(∆Árbol(A∧¬B), nil)] =  , nil
 
 [α]p [α]pr [α]qrs 
 
 
 
[β]qr [β]rs [β]qs [β]pq

2. Restringir:
(actual.)
[α]nil →

[β]nil [β]p

[α]p [α]pr [α]qrs

[β]qr [β]rs [β]qs [β]pq


(lit.comunes)
[α]p →

[β]nil [β]p

[α]p [α]pr [α]qrs

[β]qr [β]rs [β]qs [β]pq

[α]p

[β]nil

[α]p [α]pr

[β]qr [β]rs [β]qs [β]pq


Los dos nodos marcados con un cı́rculo en el primer árbol, tienen un
literal en común, p, que por la actualización suben a la raı́z; en el segundo
árbol, el nodo marcado tiene un literal en común con su padre y por lo
tanto el subárbol es eliminado; el tercer ∆-árbol es la forma restringida.

3. El ∆-árbol es completamente reducible:


[α]p [α]nil
    
    
[β]nil [β]nil
    
    
    
[p/⊤], p =  , p
    


 [α]p [α]pr  
  [α]nil
  [α]r 

    
    
[β]qr [β]rs [β]qs [β]pq [β]qr [β]rs [β]qs [β]q

I. T. en Informática de Sistemas
24 Lógica Computacional

4. Restringir:

[α]nil →
→ [α]nil →
→ [β]nil

[β]nil [β]nil [α]nil [α]qr

[α]nil [α]r [α]nil [α]qr [β]qr [β]rs [β]qs

[β]qr [β]rs [β]qs [β]q [β]qr [β]rs [β]qs

El nodo marcado en el primer árbol es una hoja simple y el literal que


contiene sube al padre; en el segundo árbol, la raı́z es vacı́a y monaria,
por lo que es eliminada; el tercer árbol es la forma restringida.

5. Paralelizar: Dado que el ∆-árbol es disyuntivo, es satisfacible si y solo


si alguno de los subárboles es satisfacible; la etapa Paralelizar es la
encargada de dividir el problema en las correspondientes subtareas:
 
[β]nil    
[α]nil [α]qr
 
  Paralelizar
 [α]nil [α]qr , p → →  , p ;  , p 
 
[β]qr [β]rs [β]qs
 
 
[β]qr [β]rs [β]qs

6. La primera tarea no es completamente reducible y la subreducción no


modifica el árbol; tiene dos literales puros
   
Lit.puros
[α]nil
→→   [qs/⊤], pqs ; . . .  = [([α]nil, pqs); . . . ]
[β]qr [β]rs

7. Por lo tanto, la primera tarea es finalizable, siendo la salida del algo-


ritmo: Satisfacible, con modelo I(p) = 1, I(q) = 1 y I(s) = 0. En
consecuencia, la inferencia no es válida e I es un contramodelo.

3.11. Ejemplo 5

Estudiemos la validez de la siguiente inferencia:

A1 = (p ∧ (¬q ∨ r)) → ((¬r → p) ∧ (¬p ∨ t))


A2 = (q ∨ ¬t) → (p ∧ r)
A3 = (t → r) → (¬q ∧ r)
A = p ∨ ¬r

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 25

1. Convertimos cada fórmula en ∆-árbol:


[β]p
∆Árbol(A1 ) = ∆Árbol(¬p∨(q∧¬r)∨((r∨p)∧(¬p∨t)) = ;
[α]qr [α]nil

[β]pr [β]pt

[β]nil [β]nil
∆Árbol(A2 ) = ; ∆Árbol(A3 ) = ;
[α]qt [α]pr [α]rt [α]qr

∆Árbol(¬A) = [α]pr
Por lo tanto, la entrada del algoritmo es:

[(∆Árbol(A1 ∧ A2 ∧ A3 ∧ ¬A), nil)] =


[α]pr
 
 
[β]p [β]nil [β]nil
 
 
 
=  , nil
 
 [α]qr [α]nil [α]qt [α]pr [α]rt [α]qr 
 
 
 
[β]pr [β]pt

2. La restricción del árbol elimina el subárbol cuya raı́z aparece marcada y


tras esto pasamos a aplicar la completa reducción sustituyendo [pr/⊤].

[α]pr
 
 
Restringir 

→ [β]nil [β]nil
 →
 →


 , nil
 
[α]qt [α]pr [α]rt [α]qr
[α]nil
 
 
Comp.Red. 

→  [β]nil [β]nil, pr 

 
 
[α]qt [α]q

3. El operador Restringir actúa sobre el árbol como sigue:

(nil monario) (nil monario)


[α]nil →
→ [α]qt →
→ [α]qt

[β]nil [β]nil [β]nil

[α]qt [α]q [α]q

y por lo tanto, el resultado de la tarea es [([α]qt, pr)]

I. T. en Informática de Sistemas
26 Lógica Computacional

4. Finalmente, la completa reducción nos lleva a [([α]nil, pqrt)] y, por lo


tanto, la inferencia no es válida y un contramodelo es I(p) = 0, I(q) = 0,
I(r) = 1, I(t) = 1.

E.T.S.I.Informática
Tema 3: Método T∆S para la Lógica Proposicional. 27

E.T.S.I. Informática
Lógica Computacional: Relación 3

1. Transforme los siguientes ∆-árboles en fórmulas; obtenga la fórmula tal


y como la devuelve el operador FNN, es decir, sin simplificar.

[α]nil [α]nil

[β]nil [β]nil [β]qr [β]q

[α]pr [α]pq [α]qr [α]qr [α]nil

[β]qr [β]pr
2. Transforme las siguientes fórmulas en ∆-árbol.

a) ¬((s ∧ p) → ((q ∧ s) ∨ (¬q → t)))


b) p ∨ ¬(q → p) ∨ (¬q ∧ (¬s → q) ∧ (¬r → p))
c) ¬((p↔(q → r)) → (p↔q))

3. Evalúe las siguientes sustituciones; en el segundo apartado, realice la dos


sustituciones simultáneamente.
 
[α]nil
[α]nil
 
 
 
  [β]qr [β]q 
 [β]nil [β]nil  [q/⊤],
   
  [qr/⊤]
   
  
 [α]nil  
[α]pr [α]pq [α]qr [α]qr  
[β]qr [β]pr
4. Obtenga la forma restringida de los siguientes ∆-árboles y escriba los
resultados como fórmulas.

[α]nil , [α]q , [α]pr , [α]nil

[β]pr [β]p [β]nil [β]qr [β]p [β]nil

[α]qr [α]p [α]pqr [α]pr [α]pq


5. Estudiar la validez de las siguientes fórmulas y razonamientos utilizando
el método T∆S.

a) ((p → r) ∧ (q → s)) → ((p ∧ q) → (r ∧ s))


b) p → q, r → s, (s ∧ q) → t |= (p ∧ r) → t

c) (s → q) → (s ∧ r), p → ¬ (r → ¬q) ∧ (p → r) → ¬q |= p ∧ ¬s
d) (p ∧ ¬q) ∨ (r ∧ q), (s ∧ ¬p) ∨ (¬s ∧ ¬r) |= s ∧ ¬p

I. T. en Informática de Sistemas
28 Lógica Computacional

E.T.S.I. Informática
Lógica Computacional: Ejercicios propuestos 3

1. Para cada una de las siguientes fórmulas, A, obtenga ∆Árbol(¬A) y


deduzca la validez de las mismas.

¬(p ∧ q) ↔ (¬p ∨ ¬q) ¬(p ∨ q) ↔ (¬p ∧ ¬q)


((p ∧ q) ∧ r) ↔ (p ∧ (q ∧ r)) ((p ∨ q) ∨ r) ↔ (p ∨ (q ∨ r)
(p ∧ (q ∨ r)) ↔ ((p ∧ q) ∨ (p ∧ r)) (p ∨ (q ∧ r)) ↔ ((p ∨ q) ∧ (p ∨ r)
(p ∧ (p ∨ q)) ↔ p (p ∨ (p ∧ q)) ↔ p
(p → q) ↔ (¬q → ¬p) (p → q) ↔ (¬p ∨ q)
¬(p → q) ↔ (p ∧ ¬q) ((p ↔ q) ↔ r) ↔ (p ↔ (q ↔ r)
(p ∧ (q ∨ r)) ↔ ((p ∧ q) ∨ (p ∧ r))

2. Estudiar la validez de las siguientes fórmulas utilizando el método T∆S.

a) (p → q) → ((p → ¬q) → ¬p)


b) (¬r ∨ (p ∧ q)) → ((r → p) ∧ (r → q))
c) ((p → r) ∧ (q → s)) → ((p ∧ q) → (r ∧ s))
d) (p → q) ↔ (q ↔ (p ∨ q))

3. Estudiar la validez de las siguientes inferencias utilizando el método


T∆S.

a) p → (q ∨ r), q → r, r → s |= p → ¬s
b) p → q, r → s, (s ∧ q) → t |= (p ∧ r) → t
c) p → (q → r), p → q, p |= r
d) p → (q ∨ r), q → r, r → s |= p → s

4. Estudiar la validez de las siguientes inferencias utilizando el método


T∆S.

p ∨ ¬(q → p) ∨ (¬q ∧ (¬s → q) ∧ (¬r → p)) |= (¬q → s) ∧ (p ∨ r)


¬p → ((r → p) ∧ (q → s) ∧ ¬(q → p)) |= p ∧ (r → q)
( ( (p → q) → (¬r → ¬s) ) → r ) → t |= (t → p) → (s → p)

E.T.S.I.Informática

You might also like