add ejemplos en s terling 1

26
ADD Ejemplos en Sterling 1.0 v2 Miguel Ángel Sánchez de la Rosa Borja López Pineda Métodos Formales de Ingeniería del Software

Upload: others

Post on 15-Jul-2022

2 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: ADD Ejemplos en S terling 1

ADD Ejemplos en Sterling 1.0v2

Miguel Ángel Sánchez de la RosaBorja López Pineda

Métodos Formales de Ingeniería del Software

Page 2: ADD Ejemplos en S terling 1

2

Page 3: ADD Ejemplos en S terling 1

Índice

1. Descripción de Sterling 51.1. Diferencias Sterling 1.1 y Sterling 1.0 51.2. Uso de Sterling 1.0 51.3. Futuro uso de Sterling 1.1 8

2. Enigma de Einstein 112.1. Enunciado 112.2. Signaturas 112.3. Hechos 12

3. Patos en fila 173.1. Enunciado 173.2. Signaturas 173.3. Hechos 173.4. Solución 18

4. Casados y no casados cruzan miradas 214.1. Enunciado 214.2. Signaturas 214.3. Hechos 21

5. MonoMatch 235.1. Enunciado 235.2. Signaturas 235.3. Restricciones 24

3

Page 4: ADD Ejemplos en S terling 1

4

Page 5: ADD Ejemplos en S terling 1

1. Descripción de SterlingSterling es una herramienta de representación gráfica que complementa a Alloy,

aporta un dibujo de grafos y tablas mejorado con respecto a la herramienta original.

1.1. Diferencias Sterling 1.1 y Sterling 1.0A la hora de abordar esta actividad e investigar acerca de este complemento de alloy,

hemos descubierto que la versión de Sterling más reciente es la 1.0 aunque losdesarrolladores han publicado una demo de la 1.1 con funcionalidades que extienden en granmedida las capacidades de personalización de la versión anterior. Lamentablemente la versión1.1 no está disponible actualmente y las demos, aunque permiten modificar el código dedibujado, no permiten alterar los ficheros.

Por este motivo nos hemos visto forzados a elegir entre usar Sterling 1.0 pese a suslimitaciones, en lugar de Sterling 1.1 ya que en la demo no podemos importar nuestrospropios ejemplos. Debido a esto, las representaciones gráficas presentadas no alcanzan elnivel de personalización que nos hubiera gustado.

En el caso de que hubiésemos podido trabajar con la versión 1.1, nuestro ejemplográfico de MonoMatch (véase el punto 5), se hubiese generado automáticamente en lugar dehaber realizado el proceso a mano. Ya que entendemos que en este caso la vista de nodos yrelaciones no transmite correctamente las ideas y resulta mucho más visual representar lascartas con los símbolos dentro.

1.2. Uso de Sterling 1.0Sterling se distribuye como una modificación de Alloy. El fichero jar de Sterling

presenta la misma interfaz de escritorio que la herramienta original pero despliega unservidor web dónde se pueden visualizar los ejemplos generados por Alloy.Al arrancar el programa veremos un mensaje conuna dirección para acceder a la interfaz web desdeun navegador.También podremos acceder con el botón “Web” que se ha agregado en la ventana de ejemplosde Alloy. En nuestras pruebas Sterling puede no reconocer siempre los ejemplos generados yes buena idea abrirlos desde aquí, sin embargo, perderemos el estilo que hayamos aplicado.

5

Page 6: ADD Ejemplos en S terling 1

La principal diferencia que notaremos en la visualización de Sterling es la posibilidadde mover los nodos a la posición que queramos. Alloy monta una ordenación en altura porcapas que es imposible eludir, mientras que Sterling no tiene esta limitación.

Visualmente podemos modificarnodos y aristas. Haciendo click en el primericono de la barra lateral se desplegará eleditor de nodos. Aquí podemos seleccionaruna signatura y aplicarle el estilo quedeseemos. Principalmente podremoscambiar el color de fondo, color de texto yla forma (rectángulo o círculo).

A nuestro parecer la herramientamás potente de Sterling son lasproyecciones. Al agregar una signatura a lalista de proyecciones estamos dividiendoun mismo ejemplo en tantasrepresentaciones cómo instancias haya deesa signatura. Cada representación contieneúnicamente los enlaces en los que aparezcala signatura proyectada y la instanciacoincida con la seleccionada.

El siguiente ejemploestá sacado de la Fase 2 dela segunda práctica. Lasignatura tiempo es unconcepto que encajaperfectamente con la ideade proyección. En estaprimera captura se haseleccionado Tiempo$0 porlo que todas las relacionesconectado mostradasocurren en Tiempo$0.

Visualmente la proyección reduce el número aparente de elementos en la tupla, ahoralas representaciones muestran la relación conectado como si fuera binaria en lugar de ternariaal estar filtrando por tiempo.

6

Page 7: ADD Ejemplos en S terling 1

En esta otra captura hemosseleccionado Tiempo$1. Puedeverse la conexión entre Nodo$2 yNodo$3 que ocurre en Tiempo$1pero no en Tiempo$0.

También podremoscambiar el estilo de las aristaspara cada relación. Además de loscolores de texto y flecha,podremos elegir que una relaciónse muestre como un atributo. Enese caso al primer elemento de latupla se le agrega el nombre de lainstancia con la que se relaciona.

En esta misma pestañaSterling también puede ordenarlos nodos según diferentescriterios. En nuestras pruebas eldiseño circular y por capas hansido los que han dispuesto deforma más ordenada los nodos.Aunque depende del ejemploconcreto, malla y fila podríanser útiles ejemplos de otrosmodelos.

En la pestaña Tableencontraremos una vista similar ala original de Alloy pero con unestilo modernizado. Podremoselegir qué tablas mostrar,signaturas, relaciones o ambas.Aunque podemos cambiar elorden de las tablas en pantalla,Sterling no permite ordenar lasfilas de las tablas.

7

Page 8: ADD Ejemplos en S terling 1

Por último Sterling disponede una pestaña Source que muestralos ficheros estilizados del proyecto,incluidos los del sistema comointegers.als que define los númerosenteros.

Por último, aunque Sterling intenta mostrar siempre el último ejemplo generado porAlloy también podemos avanzar en la lista de ejemplos encontrados mediante el botónsiguiente de la esquina superior derecha. Está acompañado del comando usado para elejemplo mostrado.

1.3. Futuro uso de Sterling 1.1Dado que Sterling 1.1 no ha sido lanzado no podemos asegurar qué funcionalidades

tendrá. Los siguientes datos han sido extraídos de la demo pública ya que la documentacióndisponible solo cubre la versión 1.0.

La principal adición deSterling 1.1 es la ejecución de scriptspersonalizados para dibujar sin estarlimitados por ajustes de la interfaz.

El lenguaje de programaciónen el que deberemos especificar elcódigo de dibujado es Javascript.Este código que escribimos esinterpretado desde un contexto quecontiene las entidades del ejemplo,Los nombres de las variables son losmismos que tienen en el evaluadorde Alloy.

Al no existir documentaciónaún de esta versión no sabemosdemasiado sobre el funcionamientode este código. Aunque hemospodido averiguar que se basaesencialmente en la librería D3.jsque es utilizada normalmente en elanálisis de datos.

8

Page 9: ADD Ejemplos en S terling 1

También utiliza Lodash, que agregautilidades comunes en orientación funcional, yCytoscape, una librería para el tratamiento degrafos.

En el panel lateral podemos ver laslibrerías cargadas y agregar nuevas dependenciasque se encuentren en Jsdelivr.

Convenientemente cuenta con un visor devariables similar al que encontramos en lasherramientas de depuración. Por último tenemosuna lista de variables que representan instancias deAlloy, son accesibles desde el código JavaScript.

9

Page 10: ADD Ejemplos en S terling 1

10

Page 11: ADD Ejemplos en S terling 1

2. Enigma de Einstein2.1. Enunciado

El siguiente enigma se suele atribuir a Einstein y se dice que lo usaba para librarse delos estudiantes que le pedían consejo. Independientemente de la veracidad de estos hechos, elEnigma de Einstein es un puzzle divertido con el que nos hemos divertido modelando.

Hay 5 casas dispuestas en fila, cada una es de un color diferente (Rojo, Blanco, Azul,Verde y Amarillo). Cada casa tiene un dueño de una nacionalidad distinta (Inglés, Sueco,Danés, Noruego y Alemán). Cada dueño tiene una mascota de una especie distinta (Pájaro,Gato, Perro, Pez y Caballo), bebe un tipo de bebida distinta (Cerveza, Café, Leche, Té, Agua)y fuma una marca de tabaco distinta (Blend, BlueMaster, Dunhill, PallMall y Prince).

Se proporcionan una serie de hechos, por ejemplo “El Inglés vive en una casa roja”.Mediante estos hechos se especifica una única combinación posible. La pregunta es ¿Quiéntiene un pez mascota?

2.2. SignaturasPara comenzar el modelado hemos definido los siguientes enumerados con los

nombres de los colores, mascotas, tabacos y bebidas.

enum Color {Red, White, Blue, Green, Yellow}enum Pet {Bird, Cat, Dog, Fish, Horse}enum Cigar {Blend, BlueMaster, Dunhill, PallMall, Prince}enum Beverage {Beer, Coffee, Milk, Tea, Water}

La signatura casa tiene un color, el modificador disjunto se asegura de que no existendos casas con el mismo color. Para representar la ordenación en fila de las casas hemosincluido una referencia a la casa anterior y la siguiente. Esto forma una lista doblementeenlazada, como no es circular los extremos pueden no tener siguiente o no tener anterior.

sig House {color: disj Color,prev: lone House,next: lone House

}

La signatura dueño tiene una casa, mascota, marca de tabaco y bebida todosdiferentes. Esta signatura es abstracta porque queremos que existan solo 5 dueños de un tipocada uno que represente su nacionalidad.

11

Page 12: ADD Ejemplos en S terling 1

abstract sig Owner {house: disj House,pet: disj Pet,cigar: disj Cigar,beverage: disj Beverage

}one sig Brit extends Owner {}one sig Swede extends Owner {}one sig Dane extends Owner {}one sig Norwegian extends Owner {}one sig German extends Owner {}

2.3. HechosComencemos por establecer la relación entre casa para representar una disposición en

fila. Estamos seguros de que hay 5 casas y de ellas una no tiene siguiente porque es la últimay una no tiene anterior porque es la primera.

#House = 5one h: House | #h.prev = 0one h: House | #h.next = 0

Un par de restricciones evidentes, una casa no puede tener el mismo siguiente yanterior, eso significaría que tienes delante la casa que está detrás de ti; y una casa no puedeser su propio siguiente ni anterior.

no h: House |h.next = h.prev or h.prev = h or h.next = h

Al ser una lista enlazada el siguiente de mi anterior soy yo y el anterior de misiguiente también soy yo. Dicho de otro modo, para dos casas diferentes que una casa sea lasiguiente de otra implica que dicha casa es la anterior de la primera.

all disj h1, h2: House |h1.next = h2 => h2.prev =h1

Podríamos sustituir la implicación por una coimplicación ya que al revés también es cierto,pero no es obligatorio porque Alloy comprobará todas las parejas de instancias en todos losórdenes posibles.

Por último y dado que Alloy no tiene piedad ninguna, lasrestricciones anteriores no impiden que la fila de casa estécortada. Sería posible tener dos casas en fila y las otras tres enciclo.

all h: House |House in h.^prev + h.^next + h

12

Page 13: ADD Ejemplos en S terling 1

La solución en este caso no tiene por qué ser prohibir los ciclos. El objetivo es quetodas las casas estén en la misma fila, para eso hemos especificado que partiendo desdecualquier casa el vecindario debe ser accesible. Esto es, las casas por delante y las casa pordetrás (más esa casa) deben contener todas las casas.

all h: House |House in h.^prev + h.^next + h

Con estas restricciones garantizamos que todas las casas están en una filacontinua. El orden no es relevante.Ninguna de estas definiciones se incluyen en el enunciado, se da porentendido que todo el mundo sabe cómo funcionan las filas de casas.

A partir de aquí podemos implementar las restricciones específicas delenunciado.

El inglés vive en la casa roja.

one b: Brit | b.house.color = Red

El sueco tiene un perro mascota.

one s: Swede | s.pet = Dog

El danés bebe té.

one d: Dane | d.beverage = Tea

La casa verde está a la derecha (después) de la casa blanca.

one h1, h2: House | h1.color = Green and h2.color = White and h1 =h2.prev

Es decir, hay un par de casas una de color verde y otra blanca,

El propietario de la casa verde bebe café.

one o: Owner | o.house.color = Green and o.beverage = Coffee

La persona que fuma PallMall tiene un pájaro mascota.

one o: Owner | o.cigar = PallMall and o.pet = Bird

El propietario de la casa amarilla fuma Dunhill.

one o: Owner | o.house.color = Yellow and o.cigar = Dunhill

13

Page 14: ADD Ejemplos en S terling 1

El propietario de la casa del centro bebe leche.

one o: Owner | #(o.house.prev) = #(o.house.next) and o.beverage = Milk

La casa del centro es la que tiene el mísmo número de casas a la izquierda que a la derecha.

El noruego vive en la primera casa.

one n: Norwegian | no n.house.prev

La persona que fuma Blend vive junto a la que tiene un gato mascota.

one o1, o2: Owner | o1.cigar = Blend and o2.pet = Cat and (o1.house.next = o2.house oro1.house.prev = o2.house)

Vivir al lado puede implicar que la casa esté antes o después. Expresamos que dados dospropietarios dónde uno fuma Blend y el otro tiene un gato mascota, puede que la casa delsegundo esté después de la casa del primero o puede que esté antes.

La persona que tiene un caballo mascota vive al lado del que fuma Dunhill.

one o1, o2: Owner | o1.cigar = Dunhill and o2.pet = Horse and (o1.house.next = o2.house oro1.house.prev = o2.house)

La persona que fuma BlueMaster bebe cerveza.

one o: Owner | o.cigar = BlueMaster and o.beverage = Beer

El alemán fuma Prince.

one g: German | g.cigar = Prince

El noruego vive al lado de una casa azul.

one n : Norwegian | n.house.prev.color = Blue or n.house.next.color = Blue

La casa anterior o siguiente a la del noruego debe ser azul.

La persona que fuma Blend tiene un vecino que bebe agua.

one o1, o2: Owner | o1.cigar = Blend and o2.beverage = Water and (o1.house.next = o2.house oro1.house.prev = o2.house)

Dadas estas restricciones, solo existe un ejemplo posible que las satisfaga.

14

Page 15: ADD Ejemplos en S terling 1

Respondiendo a la pregunta, es el alemán quien tiene al pez mascota.Si dibujamos una por una las conexiones que definen cada restricción al final

obtenemos el grafo de la imagen anterior, así es como debería resolverse manualmente elenigma. Cabe mencionar que las restricciones del enunciado son todas necesarias, eliminaruna de ellas hace posible más de un ejemplo; el estado no estaría completamente definido alexistir más de una posible combinación.

Estas son las cuatro primeras condiciones representadas en términos de conexionesentre instancias. Se adjunta la secuencia completa.

15

Page 16: ADD Ejemplos en S terling 1

16

Page 17: ADD Ejemplos en S terling 1

3. Patos en fila3.1. Enunciado

En este acertijo, nos encontramos con que tenemos una manada de patos, en las que secumple que:

1- Existe un pato que tiene dos patos delante.2- Hay un pato que tiene detrás dos patos.3- Hay un pato entre medias de dos patos.

La respuesta final a la que debemos responder es, ¿Cuántos patos hay en total?

3.2. Signaturas

En este acertijo sólo tenemos una signatura, que obviamente será la signatura pato.

sig Pato {siguiente: set Pato

}

Aquí declaramos una signatura Pato, de modo que el Pato, tiene un conjunto desiguiente, este puede estar vacio, o tener cualquier número de Patos.

3.3. Hechos

Como primer hecho declarado tenemos que, un pato no puede ser su propio siguiente,es decir, el siguiente de ti, no puedes ser tu mismo.

fact {no p: Pato |

p in p.siguiente}

Otro hecho que hemos declarado, es que un pato, no puede estar solo, es decir, unPato debe tener al menos, un siguiente o bien un anterior.

fact {no p: Pato |

((no anterior: Pato | p in anterior.siguiente) andp.siguiente = none)

}

El siguiente hecho que hemos propuesto es que no existe ningún pato que tenga unpato delante y luego tenga otro pato que siguiendo sus siguientes, lleguen a un pato que seasiguiente de nosotros mismos, lo que quiero decir es que, no hay bucles entre patos.

17

Page 18: ADD Ejemplos en S terling 1

fact {no p: Pato |

some delante: p.siguiente |some directo: p.siguiente |

delante in directo.^siguiente}

Dicho de otra forma, no existe ningún Pato ‘p’ tal que exista al menos algún Pato‘delante’ dentro de los siguientes de ‘p’ tal que exista al menos algún Pato ‘directo’ en lossiguientes de ‘p’ tal que ‘delante’ esté contenido en la clausura de los siguientes de ‘directo’.

Ahora, expondremos los hechos que ya de por sí sabemos, concretamente losmencionados en el apartado del enunciado.

Existe un pato que tiene dos patos delante.

fact {#{delante:Pato | some detras: Pato | delante in detras.siguiente} = 2

}

Hay un pato que tiene detrás dos patos.

fact {#{detras:Pato | some delante: Pato | delante in detras.siguiente} = 2

}

Y, como último hecho: Hay un pato entre medias de dos patos.

fact {one centro: Pato |

(one delante: Pato |delante in centro.siguiente) and

(one detras: Pato |centro in detras.siguiente)

}

3.4. SoluciónAntes de explicar la solución, para entender del todo la imagen y demostrar que en

este caso no existe trampa ninguna, podemos afirmar que al ejecutar el caso, no hemosforzado a que nos saliera simplemente 3 patos, ya que hemos puesto que se puedan generarhasta un máximo de 5 patos con una instrucción tan sencilla como la siguiente:

run {} for 5

18

Page 19: ADD Ejemplos en S terling 1

Tal y como observamos en la imagen generada por Sterling, vemos que hay una clararespuesta a la pregunta de ¿Cuántos patos hay en total?.

Y la respuesta es un total de 3 Patos, aunque puede parecer complicado de adivinar,ya que, puede dar pie a una serie de situaciones con respecto a los patos y cómo se sitúan, essencillo de razonar y entender el porque solo hay esta cantidad de patos y no más, o menos,por ello, explicaré razonadamente como se ha llegado hasta esta situación, que es la correcta:

Empecemos por el primer hecho del acertijo en el cual se dice que hay un pato quesiempre tiene dos patos delante, por tanto si nos fijamos en la imagen generada por Sterling,podemos observar que en la propia solución vemos como el Pato 1, tiene delante al Pato 0 yal Pato 2 que son sus siguientes, lo que hace que este hecho se cumpla totalmente, tal y comose muestra en la siguiente imagen:

19

Page 20: ADD Ejemplos en S terling 1

Si ahora nos vamos al siguiente hecho del acertijo, vemos como nos dice que hay dospatos que siempre están detrás de un pato, por tanto, si nos situamos en el Pato 2, que es elultimo, vemos como tiene un anterior, y a su vez su anterior vuelve a tener otro anterior, detal forma que este hecho se cumpla sin ningún problema, a continuación mostraremos laimagen con sus dos anteriores:

Hasta aquí, todo bien, pero lo que hace que se entienda la solución y confirme que eltotal de patos que hay sean de 3, es, el último hecho, el cual dice que hay un pato entre mediade dos patos, por tanto, si nos situamos en el Pato 0, estamos justo entre media de dos patos,uno arriba y otro abajo, por ello si concatenamos el Pato 0 por la izquierda, nos devolverá unconjunto con el Pato 1, y si concatenamos por la derecha, el conjunto tendría al Pato 2, tal ycomo vemos en las dos siguientes imágenes:

Por ello, es obvio que el total de patos que existen teniendo en cuenta los hechosdados en el acertijo expuesto, sea exactamente de un total de 3 patos.

20

Page 21: ADD Ejemplos en S terling 1

4. Casados y no casados cruzan miradas

4.1. EnunciadoTenemos a tres personas. Paul, Mary y Peter. Sabemos que Paul mira a Mary, Mary

mira a Peter, Paul está casado y Peter no está casado. La pregunta es ¿Hay una personacasada mirando a una persona no casada?

4.2. SignaturasNecesitamos definir la signatura Persona que puede estar mirando a una persona o a

ninguna. Además tenemos un subconjunto de personas que están Casadas y a tres Personasconcretas con los nombres del enunciado.

sig Persona {mirandoA: lone Persona

}sig Casado in Persona {}one sig Paul, Mary, Peter in Persona {}

4.3. HechosEn el enunciado se nos dan 4 propiedades.

Paul mira a Mary

Paul.mirandoA = Mary

Mary mira a Peter

Paul.mirandoA = Mary

Paul está casado

Paul in Casado

Peter no esta casado

not Peter in Casado

Adicionalmente podemos identificar algunas reglas más. El número de personas es 3,Paul, Peter y Mary son diferentes. Nadie se mira a sí mismo y Peter no está mirando a nadieya que en el enunciado no se dice nada.

21

Page 22: ADD Ejemplos en S terling 1

#Persona = 3Paul != MaryPaul != PeterMary != Peterno p: Persona |p.mirandoA = pPeter.mirandoA = none

Esta es la primera de los dos ejemplos que Alloy es capaz degenerar. Nunca nos dicen si Mary está casada o no, en este ejemplo sesupone que no. Esto hace que se cumpla la condición por la que sepregunta ya que Paul casado está mirando a Mary no casada.

Si no encontrásemos esta combinación, el analizador de Alloypuede buscarla por nosotros.

El el siguiente ejemplo generado se supone que Mary sí está casada.Aquí también podemos encontrar a una persona casada mirando a una nocasada porque Mary está mirando a Peter.

En todos los casos hay una persona casada mirando a una no casada. Si quedamos condudas podemos ejecutar un check para verificarlo.

check hayUnaPersonaCasadaMirandoUnaPersonaNoCasada {some p1: Casado, p2: Persona |

(not p2 in Casado) and p1.mirandoA = p2}

Es necesario especificar que p2 no está casada porque al ser una persona, puede estarlo o no.

Vemos que la propiedad severicfica al no encontrarcontraejemplos.

22

Page 23: ADD Ejemplos en S terling 1

5. MonoMatch5.1. Enunciado

El juego de mesa Dobbleconsiste en una baraja de cartas consímbolos. Los participantes recibencada uno un par de cartas aleatoriasboca abajo. Todos los participantes danla vuelta a las cartas a la vez e intentanencontrar el símbolo repetido en supareja de cartas.

Al principio puede parecer un simple juego de agudeza visual, pero la diversión resideen la propiedad que debe cumplir la baraja de cartas para permitir este estilo de juego. Entrecualquier combinación de dos cartas siempre habrá un y solo un símbolo repetido. Desdeahora llamaremos a esta propiedad MonoMatch.

Lógicamente hay un par de soluciones triviales sin ningún atractivo de cara a realizaruna baraja jugable. Podemos agregar un único símbolo a todas las cartas. Así siempre tienenun símbolo en común y no hay más de un símbolo. Otra opción es crear un símbolo por cadacombinación de cartas, lamentablemente la cantidad de símbolos necesarios crece con elcuadrado de las cartas. Para la baraja de Dobble con 55 cartas, necesitaríamos 2970 símbolos.La pregunta que surge entonces es ¿De qué forma podemos distribuir un determinado númerode símbolos y cartas para cumplir la propiedad MonoMatch?

Este ejemplo ha sido inspirado por el vídeo del matemático y monologuista Matt Parker.https://www.youtube.com/watch?v=VTDKqW_GLkw

5.2. SignaturasComencemos por modelar en Alloy el sistema anteriormente descrito. Necesitaremos

una signatura Símbolo.

sig Simbolo {}

Y una signatura Carta con un conjunto no vacío de símbolos.

sig Carta{simbolos: some Simbolo

}

23

Page 24: ADD Ejemplos en S terling 1

5.3. RestriccionesEl modelado de este ejercicio es bastante sencillo, se puede resumir en dos hechos. El

primero es ser fiel al diseño de Dobble y que todas las cartas tengan el mismo número desímbolos.

no disj c1, c2 : Carta |#c1.simbolos != #c2.simbolos

No existen dos cartas distintas con un número desigual de símbolos.

El segundo hecho impone la condición MonoMatch.

all disj c1, c2: Carta |#(c1.simbolos & c2.simbolos) = 1

Para todo par de cartas distintas, la cardinalidad de la intersección de sus símbolos es1. Es decir, solo coinciden en un símbolo.

Con estas restricciones es suficiente paragenerar ejemplos válidos de barajas decartas. Intentaremos obtener una baraja de7 cartas.Aunque claramente Alloy ha encontrado elprimer caso trivial donde solo existe unsímbolo que tienen todas las cartas.(El juego más aburrido posible)

Ahora obtendremos un ejemplo con 7 símbolos. Pero agregaremos una condición,todos los símbolos deben ser usados.

run {no s: Simbolo | simbolos.s = none

} for 21 but exactly 7 Carta, exactly 7 Simbolo

Aquí garantizamos que no existen símbolos que no son usados por ninguna cartabeneficiándonos de la concatenación por la derecha de la relación símbolos.

24

Page 25: ADD Ejemplos en S terling 1

Resulta imposible disponer el grafo anterior de forma clara, así que hemos realizadouna interpretación de los datos de la tabla para generar un modelo de cartas.

Esta es larepresentación quehemos hecho delprimer ejemplogenerado porAlloy.

Nos hubieseencantado trabajarcon Sterling 1.1 ysu capacidadavanzada dedibujo.

Aunque no vamos a indagar en las propiedades matemáticasdel MonoMatch, cabe destacar que en geometría proyectiva esteconcepto aparece asociado al Plano de Fano. Siendo cada línea unafigura y cada punto una carta, el Plano de Fano coincide perfectamentecon este ejemplo.

De hecho, cualquier plano proyectivo representauna baraja posible de MonoMatch. Aunque unabaraja de MonoMatch no tiene por qué encajarcon una plano proyectivo. Un ejemplo de esto espoder generar barajas de MonoMatch concualquier número de cartas, mientras que unplano proyectivo solo puede existir si la cantidadde puntos es un número primo.

25

Page 26: ADD Ejemplos en S terling 1

El concepto de plano proyectivo escapa del alcance de este trabajo, en el vídeoenlazado al comienzo de este ejemplo se definen más en detalle sus propiedades y conexióncon el juego.

Tener el modelo en Alloy tambiénnos ha servido para resolver el problema decalcular si es posible formar un MonoMatchdada la cantidad de cartas y símbolos. Porejemplo, no es posible formar unMonoMatch con 8 cartas y 8 símbolos, perosí es posible con 8 cartas y 9 símbolos.

26