El teorema sobre la existencia en el que estás interesado probablemente sea el siguiente resultado integral para grafos simples (sin bucles ni aristas múltiples): https://es.wikipedia.org/wiki/Teorema_de_Erd%C5%91s%E2%80%93Gallai. También hay un enfoque algorítmico, al que se hace referencia en otra respuesta, pero si lo que buscas es una verificación antes de intentar realizar la secuencia de grados con un grafo, entonces Erdos-Gallai debería ayudarte. Yo simplemente escribiría un programa simple para usar el teorema como verificador para una secuencia dada. (Una posible implementación en Python se da al final)
Pero también podemos verificar a mano, por supuesto. En tu caso, las condiciones dadas determinan que tu secuencia de grados sea: $$(4,4,4,3,3,3,3,2,2,2,2,2,2,x,y)$$ donde $x \geq y$ y $x,y \in \{0,1\}$. Como puedes ver en tu propio trabajo, $(x,y)$ podría ser $(1,1)$ o $(0,0)$. Pero el lema del apretón de manos muestra que $(1,0)$ no es posible (la suma de la secuencia de grados debe ser par).
Trabajemos con tu secuencia, $$(4,4,4,3,3,3,3,2,2,2,2,2,2,1,1)$$. En primer lugar, el lema del apretón de manos sale bien porque la suma de la secuencia de grados es par.
Las sumas parciales de tu secuencia de grados son $$(4,8,12,15,18,21,24,26,28,30,32,34,36,37,38)$$ La secuencia $(k(k-1))$ para $k=1\ldots n$ es $$(0,2,6,12,20,30,42,56,72,90,110,132,156,182,210)$$ La suma de $\sum\limits_{i=k+1}^{n}\min(d_i,k)$ arroja la secuencia: $$(14, 24, 26, 23, 20, 17, 14, 12, 10, 8, 6, 4, 2, 1, 0)$$ Sumando las dos secuencias anteriores vemos que la secuencia de la parte derecha de la igualdad del teorema es $$(14, 26, 32, 35, 40, 47, 56, 68, 82, 98, 116, 136, 158, 183, 210)$$ Lo cual es en todos los casos mayor que la secuencia de la suma parcial de la secuencia de grados $$(4,8,12,15,18,21,24,26,28,30,32,34,36,37,38)$$ Esto verifica que existe un grafo que satisface tu secuencia de grados, ¡lo cual ahora sabes porque has construido justo ese grafo!
Posible implementación en Python del código: def erdos_gallai(ds): n = len(ds) lhs = reduce(lambda c, x: c + [c[-1] + x], ds, [0])[1:] rhs1 = [k*(k-1) for k in range (1, n+1)] rhs2 = [sum([min(ds[i], k+1) for i in range (k+1, n)]) for k in range (0,n)] for i in range (n): if lhs[i] > rhs1[i] + rhs2[i]: return False return True