Práctica 2 Grupo 4

41
Práctica 2 Grupo 4 Chaimae Tayebi Taybi Miguel Ángel Sánchez de la Rosa David Nieto Dabrio Borja López Pineda Métodos Formales de Ingeniería del Software 1

Transcript of Práctica 2 Grupo 4

Page 1: Práctica 2 Grupo 4

Práctica 2 Grupo 4

Chaimae Tayebi TaybiMiguel Ángel Sánchez de la Rosa

David Nieto DabrioBorja López Pineda

Métodos Formales de Ingeniería del Software

1

Page 2: Práctica 2 Grupo 4

2

Page 3: Práctica 2 Grupo 4

Índice

1. Fase 1 51.1. Signaturas 5

1.1.1. Dirección 51.1.2. Nodo 51.1.3. Red 5

1.2. Hechos 71.2.2. Cada nodo está en una y solo en una red 91.2.3. Ningún nodo está conectado consigo mismo 101.2.5. Hay conectividad completa dentro de una red 131.2.6. En cada red hay un nodo que conecta con un nodo de unared diferente 15

2. Fase 2 172.1. Cambios en signaturas 17

2.1.1. Tiempo 172.1.2. Nodo 17

2.2. Cambios en hechos 172.2.1. No existen dos nodos con la misma dirección 172.2.2. Cada nodo está en una y solo en una red 172.2.3. Ningún nodo está conectado consigo mismo 182.2.4. La relación conectado es simétrica 192.2.5. Hay conectividad completa dentro de una red 202.2.6. En cada red hay un nodo que conecta con un nodo de unared diferente 22

2.3. Consideraciones en el cálculo de conexiones transitivas 252.4. Predicado inicio 292.5. Predicado conectar 302.6. Predicado desconectar 31

3. Fase 3 333.1. Obligar a que las redes tengan topología en estrella 333.2. Obligar a que las redes tengan topología en anillo 363.3. Obligar a que las redes tengan topología de malla completa 383.4. Conectividad total en una red de forma autocontenida 403.5. Conectividad total entre redes 41

3

Page 4: Práctica 2 Grupo 4

4

Page 5: Práctica 2 Grupo 4

1. Fase 11.1. Signaturas

1.1.1. Dirección

sig Direccion {}

1.1.2. NodoLa relación dirección tiene una multiplicidad 1.

Conectado tiene multiplicidad al menos 1 ya que todos los nodos deben estarconectados como mínimo a otro nodo.

sig Nodo {direccion: one Direccion,conectado: some Nodo

}

1.1.3. Red

La relación nodos puede tener cualquier multiplicidad. Una redpuede no tener nodos, al menos por la definición de su signatura.

sig Red {nodos: set Nodo

}

5

Page 6: Práctica 2 Grupo 4

6

Page 7: Práctica 2 Grupo 4

1.2. HechosSe aportarán dos soluciones distintas para cada restricción. Primero se describe de

forma cercana al lenguaje formal y luego se realiza una descripción más natural del mismoenunciado.

Ya que debíamos aportar dos soluciones, en el fichero als hay un hecho y un assert porcada restricción. En todos los casos se cumple que existen instancias posibles con el hecho yno hay contraejemplos para el assert. También se ha probado cambiando los papeles entre elhecho y el assert.

Los ejemplos han sido generados secuencialmente, agregando las restricciones de unaen una. Es por esto que los primeros ejemplos pueden incumplir más de una restricción. Encada apartado se proporciona un contraejemplo y una instancia que cumple la restricción.

1.2.1. No existen dos nodos con la misma dirección

Para todo par de nodos ‘n1’, ‘n2’. Que ‘n1’ y ‘n2’ sean distintos implica que ladirección de ‘n1’ es distinta a la dirección de ‘n2’.

all n1, n2: Nodo |n1 != n2 implies

n1.direccion != n2.direccion

Todo par de nodos, que no sean el mismo, tienen direcciones diferentes.

No existe un par de nodos distintos ‘n1’, ‘n2’. Tal que la dirección de ‘n1’ sea igualque la dirección de ‘n2’.

no disj n1, n2: Nodo |n1.direccion = n2.direccion

No existen dos nodos distintos con la misma dirección.

Nótese que nada impide que existan direcciones que no correspondan a ningún nodo.

En este ejemplo no se cumple lacondición. Podemos observar queNodo0 y Nodo1 comparten laDireccion0.

7

Page 8: Práctica 2 Grupo 4

En este segundo ejemplo cada nodotiene una dirección diferente. Nodo1 serelaciona con Direccion0 y Nodo1 conDireccion1.

8

Page 9: Práctica 2 Grupo 4

1.2.2. Cada nodo está en una y solo en una red

Para todo nodo ‘n’ existe una red ‘r’ tal que ‘n’ esté incluido en los nodos de ‘r’.

all n: Nodo |one r: Red |

n in r.nodos

Siempre existe una y solo una red que contiene a cada nodo.

Para todo par de redes ‘r1’, ‘r2’. Que ‘r1’ sea distinto de ‘r2’ implica que laintersección de los nodos de ‘r1’ y los nodos de ‘r2’ está vacía.

No existe ningún nodo ‘n’ tal que no exista una red ‘r’ tal que ‘n’ no esté incluido enlos nodos de ‘r’.

all r1, r2: Red |r1 != r2 implies

no r1.nodos & r2.nodosno n: Nodo |

no r: Red |n in r.nodos

Redes distintas no tienen nodos en común. No hay nodos que no pertenecen a ningunared.

En este ejemplo no se cumple lacondición ya que Nodo0pertenece a tres redes, mientrasque Nodo1 no pertenece aninguna.

En cambio, en este ejemplo sí secumple. Nodo0 pertenece a Red1y Nodo1 a Red0. Todos los nodosestán conectados a una y solo unared.

9

Page 10: Práctica 2 Grupo 4

1.2.3. Ningún nodo está conectado consigo mismo

Un nodo puede estar conectado a sí mismo transitivamente pero no de forma directa.

No existe ningún nodo ‘n’ tal que ‘n’ esté incluido en los conectados a ‘n’.

no n: Nodo |n in n.conectado

Ningún nodo está en su propio conjunto de nodos a los que está conectado.

Para todo nodo ‘n’ se cumple que el conjunto de nodos a los que ‘n’ está conectadosustrayendo ‘n’ es el mismo que el conjunto de nodos a los que está conectados ‘n’.

all n: Nodo |n.conectado - n = n.conectado

El conjunto de nodos a los que un nodo concreto está conectado no cambia sieliminamos del conjunto a dicho nodo concreto. Es decir, un nodo nunca forma parte de suconjunto de nodos conectados.

En este ejemplo Nodo0 está conectado a sí mismo.

Mientras que en este ejemplo Nodo0 está conectadoa Nodo1 y Nodo1 a Nodo0. Ningún nodo estáconectado a sí mismo.

10

Page 11: Práctica 2 Grupo 4

1.2.4. La relación conectado es simétrica

Para todo nodo ‘n1’ se cumple que todo nodo ‘n2’ perteneciente al conjunto de nodosa los que ‘n1’ está conectado, ‘n2’ contiene a ‘n1’ en su conjunto de nodos a los que estáconectados.

all n1: Nodo |all n2: n1.conectado |

n1 in n2.conectado

Todos los nodos a los que se conecta un nodo concreto están también conectados adicho nodo concreto.

Para todo par de nodos ‘n1’, ‘n2’ que ‘n1’ esté en el conjunto de nodos a los que seconecta ‘n2’ implica que ‘n2’ está en la lista de nodos a los que se conecta ‘n1’.Cabe aclarar que el efecto de esta restricción es equivalente si se intercambia el implies de lasegunda línea por un iff. Desde un punto de vista lógico que ‘n1’ esté conectado a ‘n2’implica que ‘n2’ está conectado a ‘n1’ y que ‘n2’ esté conectado a ‘n1’ implica que ‘n1’ estáconectado a n1. Ya que el efecto se da siempre que está presente la condición y siempre queel efecto solo puede darse si está presente la condición, estamos frente a una dobleimplicación y tendría sentido definir la restricción con un iff (si y sólo si). Pero, cómo Alloyprobará la misma combinación de n1 y n2 intercambiado el orden, estamos seguro que lacomprobación se realizará en ambos sentidos. Prueba de ello consiste en tomar nuestrasegunda propuesta como un hecho, definir la primera propuesta o como una aserción ycomprobar que Alloy no encuentra ningún contraejemplo.

all disj n1, n2: Nodo |n1 in n2.conectado implies

n2 in n1.conectado

Dos nodos que están conectados en un sentido, también están conectados en el otro.

En este ejemplo la condición se incumple variasveces. Nodo0 está conectado a Nodo1 peroNodo1 no está conectado a Nodo0, lo mismoocurre entre Nodo1 y Nodo2, entra Nodo2 yNodo0.

11

Page 12: Práctica 2 Grupo 4

En este otro ejemplo sí se cumple la condición ya queNodo0 está conectado a Nodo1 y Nodo1 está conectado aNodo0.

12

Page 13: Práctica 2 Grupo 4

1.2.5. Hay conectividad completa dentro de una red

Para toda Red ‘r’, todas las combinación de dos nodos ‘n1’, ‘n2’. que ‘n1’ y ‘n2’están incluidos en el conjunto de nodos de ‘r’ implica que ‘n1’ está en la clausura transitivapositiva de los nodos conectados de ‘n2’.

all r: Red |all disj n1, n2: r.nodos |

n1 in n2.^conectado

Todo par de nodos que pertenecen a la misma red el primero debe estar en el conjuntode nodos accesibles del segundo.

Para toda Red ‘r’, todo nodo ‘n’ perteneciente a los nodos de ‘r’ debe cumplir que lalista de nodos de ‘r’ debe estar contenida en el conjunto de nodos accesibles desde ‘n’agregando ‘n’.

Si todas las redes tuvieran al menos dos nodos, no sería necesario agregar a ‘n’ alconjunto de nodos accesibles desde ‘n’ ya que un nodo accesible desde ‘n’ con un solo saltotambién tendría a ‘n’ en su conjunto de nodos conectados. Pero si una red tuviera un úniconodo ‘n’, la red siempre tendría conectividad total pero el conjunto de nodos accesibles desde‘n’ no se contendría a ‘n’ porque un nodo no puede aparecer en su lista de nodos conectados.También es posible sustituir la clausura transitiva no reflexiva ^, por una reflexiva *.

all r: Red |all n: r.nodos |

r.nodos in n.^conectado + n

El conjunto de nodos que pertenecen a una red debe estar contenido en el conjunto denodos accesibles a partir de cualquier nodo de la red.

Asumiendo la implementación de la regla anterior, la relación conectado es simétrica,no hemos especificado en las descripciones que la relación de accesibilidad debe ser mutua.

En este ejemplo la Red0 tiene 4 Nodos. Estánconectados dos a dos, Nodo1 con Nodo2 yNodo0 con Nodo3. Pero entre Nodo1 y Nodo2no hay conexión con Nodo0 y Nodo3. No hayconectividad completa en la red. Este es elejemplo más pequeño posible ya que cadanodo debe estar conectado a al menos unnodo.

13

Page 14: Práctica 2 Grupo 4

En este ejemplo se dispone de 3 Nodosen una sola Red. Nodo1 y Nodo2 estándirectamente conectados, al igual queNodo2 y Nodo0. Pero entre Nodo1 yNodo0 no existe una conexión directa.Sin embargo, sigue habiendoconectividad completa dentro de la Redporque Nodo0 es accesible desde Nodo1de forma transitiva por Nodo2.

14

Page 15: Práctica 2 Grupo 4

1.2.6. En cada red hay un nodo que conecta con un nodo deuna red diferente

Para toda red ‘r1’ existe al menos un nodo ‘n1’ que pertenece a ‘r1’ tal que existe almenos una red ‘r2’ que es distinta a ‘r1’ y existe al menos un nodo ‘n2’ perteneciente a ‘r2’tal que ‘n2’ esté en la clausura transitiva positiva de los nodos conectados a ‘n1’.

all r1: Red |some n1: r1.nodos |

some r2: Red |r1 != r2 and some n2: r2.nodos |

n2 in n1.^conectado

Todas las redes tienen un nodo que está conectado a un otro nodo que pertenece a unared distinta a la suya.

No existe ninguna red ‘r’ tal que para todos sus nodos ‘n’ el conjunto de nodosconectados a ‘n’ agregando ‘n’ están contenidos en el conjunto de nodos en ‘r’.

no r: Red |all n: r.nodos |

n.^conectado in r.nodos

No hay ninguna red cuyos nodos están conectados únicamente a nodos dicha red.

Si los nodos a los que está conectado un nodo de una red están contenidos en losnodos de esa red, significa que ese nodo no conecta con los nodos de ninguna otra red. Nopuede haber ninguna red así.

En este ejemplo podemos observar como Red0 y Red1 tienen conectividad completacada una. Pero no hay conectividad entre la Red0 y la Red1. La restricción se incumpleporque cada red debe estar conectada con al menos otra red.

15

Page 16: Práctica 2 Grupo 4

En este otro ejemplo sí, se cumple la restricción. Tenemos dosredes y hay una conexión entre Nodo0 perteneceiente a Red1 yNodo1 pertenece a Red0. Al conectar Nodo0 con Nodo1, laRed0 y Red1 están interconectadas.

16

Page 17: Práctica 2 Grupo 4

2. Fase 22.1. Cambios en signaturas

2.1.1. Tiempo

sig Tiempo {}

2.1.2. Nodo

sig Nodo {direccion: one Direccion,conectado: Tiempo -> set Nodo

}

2.2. Cambios en hechos

Las siguientes modificaciones reparan el nuevo carácter temporal de las conexiones.Se tiene en cuenta que las restricciones que involucran conexiones deben aplicarse de maneraindependiente en todos los instantes de tiempo.

2.2.1. No existen dos nodos con la misma dirección

No requiere modificación ya que el factor tiempo no interviene en la pertenencia deun nodo en una dirección.

2.2.2. Cada nodo está en una y solo en una red

Idem 2.2.1

17

Page 18: Práctica 2 Grupo 4

2.2.3. Ningún nodo está conectado consigo mismo

Al modificar la relación conectado de Nodo, el hecho de la Fase 1 no essintácticamente correcto. En esta revisión se tiene en cuenta el factor tiempo. Ningún nodoestará conectado consigo mismo en ningún instante de tiempo.

No existe ningún Nodo ‘n’ tal que exista al menos un Tiempo ‘t’ tal que ‘n’ estécontenido en los nodos conectados a ‘n’ en el tiempo ‘t’.

Fase 2 Fase 1

no n: Nodo |some t: Tiempo |

n in n.conectado[t]

no n: Nodo |n in n.conectado

La modificación consiste en agregar que la conexión a sí mismo no puede ocurrir enningún instante de tiempo. Al ajustar la multiplicidad de t en some, los Nodos para los que noexiste ningún instante de tiempo en que estén conectados a sí mismo no cumplen que haya almenos un valor posible para ‘t’.

Para toda combinación de Nodo ‘n’ y Tiempo ‘t’, los Nodos a los que estádirectamente conectado ‘n’ en el Tiempo ‘t’ deben ser iguales tanto si se les sustrae ‘n’ comosi no.

Fase 2 Fase 1

all n: Nodo, t: Tiempo |t.(n.conectado) - n = t.(n.conectado)

all n: Nodo |n.conectado - n = n.conectado

El principio de funcionamiento no ha variado, solo se diferencia en la inclusión deltiempo. La condición debe cumplirse para todos los nodos en todos los instantes de tiempo.

18

Page 19: Práctica 2 Grupo 4

2.2.4. La relación conectado es simétrica

Para toda combinación de Nodo ‘n1’ y Tiempo ‘t’, todo Nodo ‘n2’ perteneciente aconectados de ‘n1’ en el instante ‘t’ debe cumplir que ‘n1’ pertenece a conectados de ‘n2’ en‘t’.

Fase 2 Fase 1

all n1: Nodo, t: Tiempo |all n2: n1.conectado[t] |

n1 in n2.conectado[t]

all n1: Nodo |all n2: n1.conectado |

n1 in n2.conectado

El funcionamiento no ha variado, solo cambia en la inclusión del tiempo.

Para toda combinación de Nodo ‘n1’, ‘n2’ y Tiempo ‘t’, que ‘n1’ esté en conectadosde ‘n2’ en ‘t’ implica que ‘n2’ está en conectados de ‘n1’ en ‘t’.

Fase 2 Fase 1

all disj n1, n2: Nodo, t: Tiempo |n1 in n2.conectado[t] implies

n2 in n1.conectado[t]

all disj n1, n2: Nodo |n1 in n2.conectado implies

n2 in n1.conectado

Hemos aplicado la misma modificación que en el método anterior.

19

Page 20: Práctica 2 Grupo 4

2.2.5. Hay conectividad completa dentro de una red

Nótese que el tiempo solo influye en las conexiones. Un nodo pertenece a la mismared independientemente del tiempo. Para realizar esta restricción y la siguiente, nos hemosapoyado en la definición de una función y un predicado.

La siguiente función devuelve los nodos que están conectados, tanto directa comotransitivamente, a un nodo dado en un determinado instante de tiempo. Su funcionamiento yproceso de obtención se describen en detalle en el apartado 2.3

fun nodosConectados(n: Nodo, t: Tiempo) : Nodo {n.^{x1, x2: Nodo | x1 in t.(x2.conectado)}

}

Este predicado comprueba si existe una conexión entre dos nodos en un determinadoinstante de tiempo, hace uso de la función anterior. Se trata de una pequeña ayuda parasimplificar las siguientes restricciones.

pred hayConexion(n1, n2: Nodo, t: Tiempo){n1 in nodosConectados[n2, t]

}

Para toda combinación de Red ‘r’ y Tiempo ‘t’, todos los conjuntos de Nodos ‘n1’,‘n2’ que sean distintos deben estar conectados en ‘t’.

Fase 2 Fase 1

all r: Red, t: Tiempo |all disj n1, n2: r.nodos |

hayConexion[n1, n2, t]

all r: Red |all disj n1, n2: r.nodos |

n1 in n2.^conectado

El funcionamiento no ha variado, solo cambia en la inclusión del tiempo.

Para toda combinación de Red ‘r’ y Tiempo ‘t’, se debe cumplir que para todos losNodos ‘n’ pertenecientes a la Red ‘r’, todos los nodos de la Red ‘r’ estén contenidos en losNodos accesibles desde el Nodo ‘n’ en ‘t’ agregando ‘n’.

Fase 2

all r: Red, t: Tiempo |all n: r.nodos |

r.nodos in nodosConectados[n, t] + n

Fase 1

20

Page 21: Práctica 2 Grupo 4

all r: Red |all n: r.nodos |

r.nodos in n.^conectado + n

Hemos aplicado la misma modificación que en el método anterior.

En este ejemplo hay conectividad totalen Tiempo0 porque Nodo0 estáconectado a Nodo1 y Nodo3 y Nodo3está conectado a Nodo2.Pero en Tiempo1 no hay conectividadtotal porque Nodo0 está conectado conNodo1 y Nodo2 está conectado conNodo3 pero no hay conexión entreestos dos pares de nodos.

21

Page 22: Práctica 2 Grupo 4

2.2.6. En cada red hay un nodo que conecta con un nodo deuna red diferente

Para toda combinación de Red ‘r1’ y Tiempo ‘t’, al menos un Nodo ‘n1’ de la red ‘r1’debe existir tal que exista una Red ‘r2’ para que se satisfaga que ‘r1’ y ‘r2’ sean distintas yque exista un Nodo ‘n2’ tal que ‘n2’ esté contenido en los Nodos directamente conectados de‘n1’.

Fase 2

all r1: Red, t: Tiempo |some n1: r1.nodos |

some r2: Red |r1 != r2 and some n2: r2.nodos |

hayConexion[n1, n2, t]

Fase 1

all r1: Red |some n1: r1.nodos |

some r2: Red |r1 != r2 and some n2: r2.nodos |

n2 in n1.^conectado

El funcionamiento no ha variado, solo cambia en la inclusión del tiempo.

No existirá ninguna combinación de Red ‘r’ y Tiempo ‘t’, tal que para todos losNodos ‘n’ de ‘r’ los nodos conectados a ‘n’ sean un subconjunto de los nodos de ‘r’.

Fase 2

no r: Red, t: Tiempo |all n: r.nodos |

nodosConectados[n, t] in r.nodos

Fase 1

no r: Red |all n: r.nodos |

n.^conectado in r.nodos

Hemos aplicado la misma modificación que en el método anterior.

22

Page 23: Práctica 2 Grupo 4

En este ejemplo La Red0 tienea Nodo0 y Nodo1, la Red1tiene Nodo2 y Nodo3.

En Tiempo0 existe unaconexión entre Red0 y Red1

porque Nodo0 está conectado con Nodo3 t Nodo1con Nodo2. Se cumple la condición paraTiempo0. Pero en Tiempo1 existe conectividadtotal dentro de cada red, pero no hay conexionesentre nodos de Red0 y Red1, no se cumple lacondición para Tiempo1.

Al haber un Tiempo en el que existen Redes sinconexión con otra Red la restricción no se cumpleen este ejemplo.

23

Page 24: Práctica 2 Grupo 4

24

Page 25: Práctica 2 Grupo 4

2.3. Consideraciones en el cálculo de conexiones transitivas

Agregar el factor tiempo a las conexiones entre nodos ha resultado más complejo delo previsto, aunque obligado a profundizar más en el funcionamiento y las matemáticas detrásde Alloy.

La primera aproximación que realizamos consistía en sustituir la relación conectadode Nodo por una binaria entre Tiempo y Nodo.

sig Nodo {direccion: one Direccion,conectado: Tiempo -> some Nodo -- Modificado FASE 2 --

}

De este modo, conectado es una tripla de Nodo->Tiempo->Nodo. Dónde el primernodo es el origen, tiempo es el instante durante el que existe la conexión y el último nodo esel destino de la conexión. Pero, debido al carácter simétrico de conectado, el primer y últimonodo pueden ser usados indistintamente.De ahora en adelante nos referiremos a las triplas de la forma Nodo-> Tiempo-> Nodo comoN->T->N.

El problema se presenta al intentar obtener las conexiones transitivas de un nodo, yaque el operador clausura solo puede ser aplicado a una relación binaria, no podemos usarlocon la relación conectado actual.

Nos dimos cuenta que pensar en signaturas como clases de OOP y en las asociacionescomo listas de referencias pertenecientes a una clase lleva inevitablemente a un callejón sinsalida. Por ejemplo, suponiendo que conectado es un atributo de Nodo, tiene sentido realizarn.conectado para obtener los nodos directamente conectados a la instancia n. Pero no tendríasentido escribir conectado.n. Sin embargo, ya que conectado no es un atributo de Nodo, sinouna relación N->T->N y el operador . no accede a un atributo, si no que une tuplas; laexpresión conectado.n cobra sentido y corresponde a obtener las conexiones que llegan alNodo n, en lugar de las salientes.

Este cambio de mentalidad y las operaciones entre tipos fue lo que nos permitióresolver el problema. Un ejemplo de operación de tipos puede ser N.N->T->N. Al concatenarN con N obtenemos T->N. Es decir, al concatenar un Nodo por la izquierda con una tupla deltipo N->T->N se obtiene una tupla del tipo T->N. Si realizamos la concatenación por laderecha obtendremos N->T. Concatenar por ambos lados genera un conjunto de tipo T, esdecir, Tiempo.

Para lograr el objetivo inicial, obtener la lista de Nodos conectados a un Nodo dado enun instante de tiempo concreto, necesitamos obtener una expresión de la siguiente forma

25

Page 26: Práctica 2 Grupo 4

N.^N->N. Obtener la primera N es sencillo ya que se trata del punto de partida. Lacomplejidad reside en la relación N->N, dado que partimos de N->T->N.Como ya hemos visto, concatenar por la izquierda o por la derecha no nos conduce a unasolución porque necesitamos ambas enes. Necesitaríamos cambiar el orden de la relación,pero al ser palíndroma y simétrica una transposición no tendría efecto. Tampoco es posibleconcatenar un t con la T central ya que la teoría de conjuntos sólo permite concatenar tuplaspor su primer elemento o el último y no hay forma de cambiar el orden.

La solución resulta evidente una vez dada, formar una nueva relación N->N a partirdel N->T->N. En matemáticas es posible definir elementos dado su nombre y restricciones.

{x1, x2: Nodo | x1 in t.(x2.conectado)}

Esta expresión genera todas las tuplas de dos Nodos tal que el primero esté en la listade nodos directamente conectados al segundo. La restricción consiste de una expresiónT.(N.(N->T->N)) que resulta en N.

Esta es solo un conjunto de conexiones directas en un instante de tiempo determinado,pero al estar formado de tuplas N->N podemos realizar la clausura para obtener lasconexiones transitivas. Así hemos definido la siguiente función.

fun nodosConectados(n: Nodo, t: Tiempo) : Nodo {n.^{x1, x2: Nodo | x1 in t.(x2.conectado)}

}

Esta función devuelve todos los Nodos conectados al Nodo n en el Tiempo t,permitiendo resolver el problema surgido con la incorporación del factor tiempo.

Aunque, antes de llegar a esta solución, realizamos distintas aproximaciones, no todasexitosas. Nuestra primera idea consistió en calcular manualmente la clausura mediante unpredicado recursivo.

pred estaConectado[n1, n2 : Nodo, t : Tiempo, visitados : Nodo] {n1 = n2 orsome n3: (n2.conectado[t] - visitados) | estaConectado[n1, n3, t, visitados + n2]

}

Este predicado es verdadero si los dos nodos pasados son iguales o si el predicado secumple aplicado para el primer nodo y cualquier nodo conectado al segundo nodo en elinstante de tiempo dado. Incorporamos un conjunto de control para evitar revisar el mismonodo más de una vez con la finalidad de evitar bucles, pero no logramos que funcionara.Este intento corresponde con el fichero Fase2Pred.als.

26

Page 27: Práctica 2 Grupo 4

El segundo intento consistió en representar las conexiones entre Nodos como unatributo de Tiempo en lugar de Nodo.

sig Tiempo {conexiones: Nodo -> some Nodo

}

De este modo, la relación conexiones es del tipo T->N->N. Eso permite concatenar unt por la izquierda para obtener T.T->N->N que resulta en N->N, precisamente lo quenecesitábamos.

Para obtener las conexiones transitivas de un Nodo n en el Tiempo t bastaría con lasiguiente expresión.

n.^(t.conexiones)

El único problema encontrado en esta aproximación es la falta de legibilidad de losdiagramas.

Puesto que las conexiones entre Nodos en realidad sonentre un Tiempo con una binaria entre Nodos, larepresentación no conecta Nodos con Nodos sino Nodoscon Tiempo y agrega el atributo del nodo de destinoentre corchetes.Aunque resulte sencillo identificar las conexiones,seguimos buscando una mejor solución.

Este intento corresponde con el fichero Fase2Alt.als.

27

Page 28: Práctica 2 Grupo 4

Nuestro siguiente intento, y último antes de llegar a la aproximación actual, consisteen intercambiar el orden en la relación conectado de Nodo.

sig Nodo {direccion: one Direccion,conectado: Nodo -> set Tiempo -- Modificado FASE 2 --

}

Así, la relación conectado pasa a ser N->N->T en lugar de N->T->N y podemosobtener una relación N->N concatenando un t por la derecha, de forma similar al intentoanterior cuando teníamos T->N->T. La forma de obtener las conexiones de un nodo en uninstante de tiempo es idéntica a la anterior pero concatenando t por la derecha.

n.conectado.t

Este intento corresponde con el fichero Fase2Encore.als.

28

Page 29: Práctica 2 Grupo 4

2.4. Predicado inicio

Dado un Tiempo ‘t’, para todo Nodo ‘n’, la cantidad de nodos a los que ‘n’ estaráconectado en ‘t’ es exactamente 1.

pred inicio(t: Tiempo) {all n: Nodo |

#(n.conectado[t]) = 1}

Todos los nodos deben estar directamente conectados a un solo nodo en el instante detiempo pasado por parámetro.

Hemos evaluado el predicado inicio con las dos instancias de Tiempode diagrama.

En Tiempo0 todos los nodos tienen una sola conexión, el predicado secumple. Pero en Tiempo1 no todos los nodos tienen una sola conexión,el predicado no se cumple.

29

Page 30: Práctica 2 Grupo 4

2.5. Predicado conectar

Dados los Nodos ‘n1’, ‘n2’ y los Tiempos ‘t1’, ‘t2’. ‘n1’ no estará en la lista de Nodosconectados de ‘n2’ en ‘t1’ y sí lo estará en ‘t2’.

pred conectar(n1, n2: Nodo, t1, t2: Tiempo) {not n1 in n2.conectado[t1]n1 in n2.conectado[t2]

}

En el primer instante de tiempo no existe conexión entre ellos pero en el segundo sí.Como estar conectado es simétrico, el segundo nodo tampoco está conectado al primero en elprimer instante y sí lo está en el segundo.

30

Page 31: Práctica 2 Grupo 4

2.6. Predicado desconectar

Dados los Nodos ‘n1’, ‘n2’ y los Tiempos ‘t1’, ‘t2’. ‘n1’ no estará en la lista de Nodosconectados de ‘n2’ en ‘t1’ y sí lo estará en ‘t2’.

pred desconectar(n1, n2: Nodo, t1, t2: Tiempo) {n1 in n2.conectado[t1]not n1 in n2.conectado[t2]

}

El funcionamiento de este predicado es similar al anterior. La única diferencia es lanegación de la segunda condición en lugar de la primera.

En este ejemplo probaremos los predicados conectar y desconectar.

El Nodo0 pasa de estar desconectado del Nodo1en Tiempo0 a estar conectado en Tiempo1.

Mientras que el Nodo1 está conectado a Nodo2 enTiempo0 pero deja de estarlo en Tiempo1.

Si invertimos el orden del tiempo, podemosaplicar los predicados anteriores a la inversa.

Los siguientes predicados son claramente erróneos. Porejemplo, en el último Nodo0 y Nodo2 están conectadostanto en Tiempo0 como en Tiempo1.

31

Page 32: Práctica 2 Grupo 4

32

Page 33: Práctica 2 Grupo 4

3. Fase 33.1. Obligar a que las redes tengan topología en estrella

La Red ‘r’ tiene topología en anillo si existe un único Nodo ‘centro’ dentro de losNodos de ‘r’ tal que, siendo ‘puntas’ los Nodos de ‘r’ excepto ‘centro’, para toda ‘punta’contenida en ‘puntas’ y tiempo ‘t’; ‘punta’ está conectada con ‘centro’ y no existe ‘otraPunta’en ‘puntas’ a la que esté conectada ‘punta’.

pred topologiaEstrella(r: Red) {one centro: r.nodos |

let puntas = (r.nodos - centro) |all punta: puntas |

all t: Tiempo |punta in centro.conectado[t] and

no otraPunta: puntas |punta in otraPunta.conectado[t]

}

Para que una red tenga topología en anillo debe tarse durante todos los instantes detiempo, ya que hay un único nodo al que se conectan el resto de nodos y el resto de nodos nose conecta entre sí, sólo con el centro.

Este es un claro ejemplo detopología en estrella. Nodo1 es elcentro y Nodo0, Nodo2, Nodo3 yNodo4 son las puntas. En los 2instantes de tiempo de estaconfiguración no se produce ningúncambio en las conexiones ya que larestricción impone que el nodocentral no puede cambiar a lo largodel tiempo.

Pero no fuerza a que un nodoespecífico sea el centro. Este otroejemplo es igualmente válido.Cualquier nodo puede ser el centro,

pero dentro de una misma red no puede cambiar en eltiempo.

33

Page 34: Práctica 2 Grupo 4

Otra situación que puede podría darse es que una red mirada de forma independientedel resto de nodos de otras redes parezca cumplir la condición para ser estrella, pero tengapuntas conectadas a nodos de otras redes. Usando el predicado original podemos obtener:

Red0 no tiene topología en estrella pero Red1sí. En Red1, Nodo2 y Nodo4 están conectadosa Nodo3. Aunque Nodo2 y Nodo4 se conectena Nodo0, esto es ignorado por el predicado quesolo comprueba con los nodos de la mismared.

Esta versión estricta comprueba que las puntas no se conecten con ningún otro nodomás que el centro, incluidos los de otras redes.

pred topologiaEstrellaExtricta(r: Red) {one centro: r.nodos |

let puntas = (r.nodos - centro) |all punta: puntas |

all t: Tiempo |punta in centro.conectado[t] and

no otraPunta: (Nodo - centro) |punta in otraPunta.conectado[t]

}

Al aplicar el predicado sobre Red1 del ejemploanterior observamos que no se considera estricta.Una topología en anillo estricta solo permitiría lainterconexión con el nodo central.

34

Page 35: Práctica 2 Grupo 4

Hemos encontrado interesante que el método original no considera que una redformada por los nodos tenga topología en anillo. Ya que los dos nodos podrían ser centrales.Cambiar el primer one por some haría que una red de dos Nodos fuera reconocida comoestrella. Aunque, como una Red de dos ordenadores es un Punto a Punto en lugar de unaEstrella, decidimos no realizar este cambio.

35

Page 36: Práctica 2 Grupo 4

3.2. Obligar a que las redes tengan topología en anillo

Para que una Red ‘r’ tenga topología en anillo, durante todos los Tiempos ‘t’, paratodos los Nodos ‘n’ de ‘r’, la cantidad de nodos pertenecientes a ‘r’ a los que ‘n’ estáconectado es 2.

pred topologiaAnillo(r: Red) {all t: Tiempo |

all n: r.nodos |#{conexosEnRed: r.nodos | conexosEnRed in n.conectado[t]} = 2

}

La condición del anillo consiste en que, durante todos los instantes de tiempo, cadaNodo de la Red estará conectado a exactamente 2 nodos de la Red.

En este claro ejemplo vemos presentadala estructura en anillo.

Este predicado es tan breve porque no hay otra forma de disponer los nodos de unared de forma que todos tengan dos conexiones dentro de la red y que no sea en anillo.Cualquier intento de conectar los nodos de forma diferente provoca que algún nodo tengamás de 2 para mantener el mínimo. Esto también asegura, por sí solo, conectividad completaen la red sin depender de interconexiones con otras redes.

36

Page 37: Práctica 2 Grupo 4

Las conexiones con nodos de otras redes no debentomarse en cuenta ya que cualquier Nodo del anillose podrá interconectar sin afectar a la topologíainterna.

37

Page 38: Práctica 2 Grupo 4

3.3. Obligar a que las redes tengan topología de malla completa

Una Red ‘r’ tendrá topología malla completa si para todos los Tiempos ‘t’, se cumpleque para todo Nodo ‘n’ de ‘r’ los nodos de ‘r’ están contenidos en los nodos conectados a ‘n’más ‘n’.

pred topologiaMallaCompleta(r: Red){all t: Tiempo |

all n: r.nodos |r.nodos in (n.conectado[t] + n)

}

En una malla completa debe existir una conexión directa entre todos los nodos de lamisma red en todos los instantes de tiempo.

En el siguiente ejemplo podemos observar cómo todos los nodos están conectados atodos los nodos de la red, excepto a ellos mismos.

En el siguiente ejemplo sólo una de las redes en malla completa.

38

Page 39: Práctica 2 Grupo 4

Red0 consta de Nodo1, Nodo3 y Nodo4. ComoNodo1 no está conectado a Nodo4, la malla nopuede ser completa.En cambio, Red1 consta de Nodo0 y Nodo2. Nodo0está conectado a Nodo2. La malla es completa.

Igual que en el resto de topologías, podrías incluiruna restricción para forzar que la red tuviera más dedos nodos para evitar que puedan confundirse conredes punto a punto.

39

Page 40: Práctica 2 Grupo 4

3.4. Conectividad total en una red de forma autocontenida

Nótese que la conectividad completa de una Red no está limitada a conseguirsemediante Nodos de la misma Red. (4.5) Es posible que limitándose únicamente a los nodosde una misma Red no exista conectividad total, pero al incluir las conexiones con Nodos deotras Redes sí.

Hemos hecho uso de este aserto para que Alloy busque un contraejemplo parademostrar que habiendo conectividad completa en una red, esa conectividad se puede darcontando sólo con los nodos de la misma red.

check NoConectividadCompletaLocalSinInterconexion {all r: Red, t: Tiempo |

all disj n1, n2: r.nodos |n1 in n2.^{x1, x2: r.nodos | x1 in t.(x2.conectado)}

} for 10

En el siguiente ejemplo encontrado por Alloy podemos ver cómo no existe conexiónentre Nodo1 y Nodo2 de Red1 y sin embargo hay conectividad completa en Red1 porque esposible acceder a Nodo2 desde Nodo1 pasando por Nodo0 de Red0.

40

Page 41: Práctica 2 Grupo 4

3.5. Conectividad total entre redes

Cabe destacar que la restricción descrita en 4.6 no implica que todas las redes estáninterconectadas. Podemos pedirle a Alloy que busque un caso en el que no ocurra yencontrará un ejemplo con 4 redes conectadas dos a dos pero no entre pares.

check NoConectividadCompleta {all disj r1, r2: Red |

no n1: r1.nodos, n2: r2.nodos |no n1.^conectado & n2.^conectado

} for 10

Este es un posible caso de la situación descritaarriba. Nodo0 pertenece a Red1 y Nodo2 ARed2. Nodo0 y Nodo2 están conectados. Estasdos redes están interconectadas, cumplen larestricción.Pero Nodo1 en Red0 y Nodo3 en Red3 estánconectados haciendo que estas dos redes tambiéncumplan la condición.Sin embargo, no hay conexión entre Red1 yRed2 con Red0 y Red3.

41