Está en la página 1de 5

/* 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.

También podría gustarte