Otros han descrito el marco general para el diseño (plano proyectivo finito) y han mostrado cómo generar planos proyectivos finitos de primer orden. Solo me gustaría llenar algunos vacíos.
Se pueden generar planos proyectivos finitos para muchos órdenes diferentes, pero son más directos en el caso del orden primario p
. Luego, el módulo de números enteros p
forma un campo finito que puede usarse para describir coordenadas para los puntos y líneas en el plano. Hay 3 tipos diferentes de coordenadas de puntos: (1,x,y)
, (0,1,x)
y (0,0,1)
, donde x
y y
pueden tomar valores de 0
a p-1
. Los 3 tipos diferentes de puntos explican la fórmula p^2+p+1
para el número de puntos en el sistema. También podemos describir líneas con las mismas 3 diferentes tipos de coordenadas: [1,x,y]
, [0,1,x]
, y [0,0,1]
.
Calculamos si un punto y una línea son incidentes si el producto escalar de sus coordenadas es igual a 0 mod p
. Entonces, por ejemplo, el punto (1,2,5)
y la línea [0,1,1]
son incidentes cuando p=7
desde entonces 1*0+2*1+5*1 = 7 == 0 mod 7
, pero el punto (1,3,3)
y la línea [1,2,6]
no son incidentes desde entonces 1*1+3*2+3*6 = 25 != 0 mod 7
.
Traduciendo al lenguaje de tarjetas e imágenes, eso significa que la tarjeta con coordenadas (1,2,5)
contiene la imagen con coordenadas [0,1,1]
, pero la tarjeta con coordenadas (1,3,3)
no contiene la imagen con coordenadas [1,2,6]
. Podemos utilizar este procedimiento para desarrollar una lista completa de tarjetas y las imágenes que contienen.
Por cierto, creo que es más fácil pensar en las imágenes como puntos y tarjetas como líneas, pero hay una dualidad en la geometría proyectiva entre puntos y líneas, por lo que realmente no importa. Sin embargo, en lo que sigue usaré puntos para imágenes y líneas para tarjetas.
La misma construcción funciona para cualquier campo finito. Sabemos que hay un campo finito de orden q
si y solo si q=p^k
, una potencia principal. El campo se llama GF(p^k)
que significa "campo de Galois". Los campos no son tan fáciles de construir en el primer caso de poder como en el primer caso.
Afortunadamente, el trabajo duro ya se ha realizado e implementado en software libre, a saber, Sage . Para obtener un diseño de plano proyectivo de orden 4, por ejemplo, simplemente escriba
print designs.ProjectiveGeometryDesign(2,1,GF(4,'z'))
y obtendrás una salida que se parece a
ProjectiveGeometryDesign<points=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20], blocks=[[0, 1, 2, 3, 20], [0,
4, 8, 12, 16], [0, 5, 10, 15, 19], [0, 6, 11, 13, 17], [0, 7, 9, 14,
18], [1, 4, 11, 14, 19], [1, 5, 9, 13, 16], [1, 6, 8, 15, 18], [1, 7,
10, 12, 17], [2, 4, 9, 15, 17], [2, 5, 11, 12, 18], [2, 6, 10, 14, 16],
[2, 7, 8, 13, 19], [3, 4, 10, 13, 18], [3, 5, 8, 14, 17], [3, 6, 9, 12,
19], [3, 7, 11, 15, 16], [4, 5, 6, 7, 20], [8, 9, 10, 11, 20], [12, 13,
14, 15, 20], [16, 17, 18, 19, 20]]>
Interpreto lo anterior de la siguiente manera: hay 21 imágenes etiquetadas de 0 a 20. Cada uno de los bloques (línea en geometría proyectiva) me dice qué imágenes aparecen en una tarjeta. Por ejemplo, la primera tarjeta tendrá imágenes 0, 1, 2, 3 y 20; la segunda tarjeta tendrá imágenes 0, 4, 8, 12 y 16; y así.
El sistema de orden 7 puede ser generado por
print designs.ProjectiveGeometryDesign(2,1,GF(7))
que genera la salida
ProjectiveGeometryDesign<points=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28,
29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46,
47, 48, 49, 50, 51, 52, 53, 54, 55, 56], blocks=[[0, 1, 2, 3, 4, 5, 6,
56], [0, 7, 14, 21, 28, 35, 42, 49], [0, 8, 16, 24, 32, 40, 48, 50], [0,
9, 18, 27, 29, 38, 47, 51], [0, 10, 20, 23, 33, 36, 46, 52], [0, 11, 15,
26, 30, 41, 45, 53], [0, 12, 17, 22, 34, 39, 44, 54], [0, 13, 19, 25,
31, 37, 43, 55], [1, 7, 20, 26, 32, 38, 44, 55], [1, 8, 15, 22, 29, 36,
43, 49], [1, 9, 17, 25, 33, 41, 42, 50], [1, 10, 19, 21, 30, 39, 48,
51], [1, 11, 14, 24, 34, 37, 47, 52], [1, 12, 16, 27, 31, 35, 46, 53],
[1, 13, 18, 23, 28, 40, 45, 54], [2, 7, 19, 24, 29, 41, 46, 54], [2, 8,
14, 27, 33, 39, 45, 55], [2, 9, 16, 23, 30, 37, 44, 49], [2, 10, 18, 26,
34, 35, 43, 50], [2, 11, 20, 22, 31, 40, 42, 51], [2, 12, 15, 25, 28,
38, 48, 52], [2, 13, 17, 21, 32, 36, 47, 53], [3, 7, 18, 22, 33, 37, 48,
53], [3, 8, 20, 25, 30, 35, 47, 54], [3, 9, 15, 21, 34, 40, 46, 55], [3,
10, 17, 24, 31, 38, 45, 49], [3, 11, 19, 27, 28, 36, 44, 50], [3, 12,
14, 23, 32, 41, 43, 51], [3, 13, 16, 26, 29, 39, 42, 52], [4, 7, 17, 27,
30, 40, 43, 52], [4, 8, 19, 23, 34, 38, 42, 53], [4, 9, 14, 26, 31, 36,
48, 54], [4, 10, 16, 22, 28, 41, 47, 55], [4, 11, 18, 25, 32, 39, 46,
49], [4, 12, 20, 21, 29, 37, 45, 50], [4, 13, 15, 24, 33, 35, 44, 51],
[5, 7, 16, 25, 34, 36, 45, 51], [5, 8, 18, 21, 31, 41, 44, 52], [5, 9,
20, 24, 28, 39, 43, 53], [5, 10, 15, 27, 32, 37, 42, 54], [5, 11, 17,
23, 29, 35, 48, 55], [5, 12, 19, 26, 33, 40, 47, 49], [5, 13, 14, 22,
30, 38, 46, 50], [6, 7, 15, 23, 31, 39, 47, 50], [6, 8, 17, 26, 28, 37,
46, 51], [6, 9, 19, 22, 32, 35, 45, 52], [6, 10, 14, 25, 29, 40, 44,
53], [6, 11, 16, 21, 33, 38, 43, 54], [6, 12, 18, 24, 30, 36, 42, 55],
[6, 13, 20, 27, 34, 41, 48, 49], [7, 8, 9, 10, 11, 12, 13, 56], [14, 15,
16, 17, 18, 19, 20, 56], [21, 22, 23, 24, 25, 26, 27, 56], [28, 29, 30,
31, 32, 33, 34, 56], [35, 36, 37, 38, 39, 40, 41, 56], [42, 43, 44, 45,
46, 47, 48, 56], [49, 50, 51, 52, 53, 54, 55, 56]]>