You are on page 1of 3

Título: Fórmulas lógicas generalizadas con semántica matricial.

Autor: Sergio M. Estrin.


Fecha: 24/08/2010.

/* Fórmulas lógico-proposicionales generalizadas, matrices


/* booleanas n-D, y algoritmos computacionales iterativos
/* evaluatorios de las mismas.

/* Programa en seudocódigo que permite obtener el valor de verdad


/* de la siguiente fórmula operando sobre la matriz lógica 3-D
/* x, la que a los efectos teóricos se supone ya cargada.

/* Sea CiCjCk x(i, j, k); donde 0<i<m+1; 0<j<n+1; 0<k<p+1.


/* m, n, p se consideran números naturales cualesquiera.

integer i, j, k
boolean Ci, Cj, Ck /* sólo en el programa, no en la fórmula
/* en la cual son operadores lógicos condicionales generalizados.
dim boolean x(1 to m, 1 to n, 1 to p)

Ci = .True. /* valor de verdad neutro


for i = 1 to m; +1
Cj = .True. /* valor de verdad neutro
for j = 1 to n; +1
Ck = .True. /* valor de verdad neutro
for k = 1 to p; +1
Ck = (Ck → x(i, j, k))
next k /* end for
Cj = (Cj → Ck)
next j /* end for
Ci = (Ci → Cj)
next i /* end for
? Ci /* displaya el valor .True./.False. que resulta de la
/* aplicación de la fórmula a los elementos de las matrices 3-D x, y, z.

/* Con criterio similar se pueden evaluar fórmulas del mismo tipo


/* combinando distintos operadores generalizados e incluso variando
/* el orden en estos últimos de los subíndices i, j, k, como por
/* ejemplo en AjKiEk x(i, j, k) donde 0<j<n+1; 0<i<m+1; 0<k<p+1.
/* Además es posible también utilizar más de una matriz, todas compatibles
/* entre sí en tipo, dimensión y magnitud, creando fórmulas bien formadas
/* "matriciales". Tal el caso de AjKiEk (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k)))
/* siendo 0<j<n+1; 0<i<m+1; 0<k<p+1, que trataremos aquí sin apelar a
/* sus valores de verdad neutros, dado que sí los tienen y son A: .False.,
/* K: .True., y E: .True. No obstante ello, y a modo de práctica, puesto
/* que existen otros operadores que no los poseen, como ocurre con X,
/* evitaremos su uso según lo dicho, y nos atendremos a nuevas técnicas
/* de trabajo que los reemplazarán aunque "complejizando" relativamente
/* la correspondiente algoritmia resolutiva.
/* Programa en seudocódigo que permite obtener el valor de verdad
/* de la siguiente fórmula operando sobre las matrices lógicas 3-D
/* x, y, z, las que a los efectos teóricos se suponen ya cargadas.

/* AjKiEk (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k))); con 0<j<n+1;


/* 0<i<m+1; 0<k<p+1.

/* m, n, p se consideran números naturales cualesquiera.


integer i, j, k
boolean Aj, Ki, Ek /* sólo en el programa, no en la fórmula
/* en la cual son operadores lógicos generalizados.
dim boolean x(1 to m, 1 to n, 1 to p), y(1 to m, 1 to n, 1 to p), z(1 to m, 1 to n, 1 to p)

for j = 1 to n; +1
for i = 1 to m; +1
for k = 1 to p; +1
if (k =1) then
Ek = (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k)))
else
Ek = (Ek ↔ (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k))))
end if
next k /* end for
if (i = 1) then
Ki = Ek
else
Ki = (Ki & Ek)
end if
next i /* end for
if (j = 1) then
Aj = Ki
else
Aj = (Aj v Ki)
end if
next j /* end for
? Aj /* displaya el valor .True./.False. que resulta de la
/* aplicación de la fórmula a los elementos de las matrices x, y, z.

/* Ambos algoritmos poseen estructuras de programación iterativas,


/* pero sólo el segundo incorpora estructuras de decisión, dado que
/* al no emplearse valores de verdad neutros en cada caso debe tomarse
/* en cuenta si se trata de la primera vez del ciclo, en cuyo caso
/* hay una mera asignación del acumulador lógico actual desde
/* el inmediato anterior, o bien el ciclo es del tipo {2, 3, ... },
/* en cuyo caso deberá producirse también una asignación, previa
/* realización de la operación booleana correspondiente al tipo de
/* variable acumulativa empleada. Estas técnicas pueden ser a su vez
/* generalizadas aún a matrices n-dimensionales siendo el diseño
/* algorítmico óptimo aquel que logra una solución de compromiso
/* entre la utilización de valores de verdad neutros, si los hay, lo que ya
/* hemos visto simplifica el diseño, y el uso del recurso ejemplificado
/* de la detección del primer valor de verdad, tratándolo de manera distinta
/* de los restantes, cuando no existe valor de verdad neutro para la
/* operación lógica considerada, lo cual implica el desarrollo de una,
/* diríamos, "técnica mixta" eficiente y sistémicamente implementable.
/* Veamos un ejemplo mutatis mutandis sobre la base del caso anterior:

/* Programa en seudocódigo que permite obtener el valor de verdad


/* de la siguiente fórmula operando sobre las matrices lógicas 3-D
/* x, y, z, las que a los efectos teóricos se suponen ya cargadas.

/* AjKiXk (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k))); con 0<j<n+1;


/* 0<i<m+1; 0<k<p+1.

/* m, n, p se consideran números naturales cualesquiera.


integer i, j, k
boolean Aj, Ki, Xk /* sólo en el programa, no en la fórmula
/* en la cual son operadores lógicos generalizados.
dim boolean x(1 to m, 1 to n, 1 to p), y(1 to m, 1 to n, 1 to p), z(1 to m, 1 to n, 1 to p)

Aj = .False. /* valor de verdad neutro


for j = 1 to n; +1
Ki = .True. /* valor de verdad neutro
for i = 1 to m; +1
for k = 1 to p; +1
if (k =1) then
Xk = (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k)))
else
Xk = (Ek w (x(i, j, k) v ((¬y(i, j, k)) & z(i, j, k))))
end if
next k /* end for
Ki = (Ki & Xk)
next i /* end for
Aj = (Aj v Ki)
next j /* end for
?Aj /* displaya el valor .True./.False. que resulta de la
/* aplicación de la fórmula a los elementos de las matrices x, y, z.

/* Nota: Al hacer referencia a n en n-D o en n-dimensionales sólo se


/* quiere indicar el concepto de múltiple-dimensionalidad, ya que
/* se trata de una forma notacional clásica y no se relaciona con el
/* n tope de la segunda dimensión recorrida por el subíndice j en
/* las matrices vistas anteriormente.

You might also like