Aprendiendo Prólogo: resolviendo un esquema de crucigramas

Estoy tratando de aprenderProlog siguiendo los tutoriales sobreesta sitio y no puedo encontrar una solución para un ejercicio (y no hay ninguna solución en el sitio).

Esto es lo que tengo que hacer:

Aquí hay seis palabras italianas:

astante, astoria, baratto, cobalto, pistola, statale.

Se ordenarán, a modo de crucigrama, en la siguiente tabla:

La siguiente base de conocimiento representa un léxico que contiene estas palabras:

palabra (astante, a, s, t, a, n, t, e).palabra (astoria, a, s, t, o, r, i, a).palabra (baratto, b, a, r, a, t, t, o).palabra (cobalto, c, o, b, a, l, t, o).palabra (pistola, p, i, s, t, o, l, a).palabra (statale, s, t, a, t, a, l, e).

Escriba un crucigrama de predicado / 6 que nos diga cómo rellenar la cuadrícula. Los primeros tres argumentos deben ser las palabras verticales de izquierda a derecha, y los tres últimos argumentos deben ser las palabras horizontales de arriba a abajo.

Ahora, la misma pregunta ha sido hechaahí pero cada solución dada usa cosas que no sé (y se supone que no debo saber para resolver esto).

Para aclarar, mientras que las cosas en la pregunta vinculada seguramente funcionan, usan cosas que aún no se han explicado en la guía que estoy siguiendo, y esto significa que necesito resolver el ejercicio.sin usando ese tipo de cosas, así que nomaplist y cosas asi.

Mi idea fue llenar el tablero con las letras de las palabras dadas, con algunas restricciones:

la palabra en V1 debe tener, como segundo carácter, el segundo carácter de la palabra en H1la palabra en V1 debe tener, como su cuarto carácter, el segundo carácter de la palabra en H2la palabra en V1 debe tener, como su sexto carácter, el segundo carácter de la palabra en H3

y así..

Así que aquí está mi código:

word(astante,  a,s,t,a,n,t,e).
word(astoria,  a,s,t,o,r,i,a).
word(baratto,  b,a,r,a,t,t,o).
word(cobalto,  c,o,b,a,l,t,o).
word(pistola,  p,i,s,t,o,l,a).
word(statale,  s,t,a,t,a,l,e). 

crossword(V1,V2,V3,H1,H2,H3):- word(V1, V11,V12,V13,V14,V15,V16,V17),
                               word(H1, H11,V12,H13,H14,H15,H16,H17),
                               word(H2, H21,V14,H23,H24,H25,H26,H27),
                               word(H3, H31,V16,H33,H34,H35,H36,H37),

                               word(V2, V21,V22,V23,V24,V25,V26,V27),
                               word(H1, H11,H12,H13,V22,H15,H16,H17),
                               word(H2, H21,H22,H23,V24,H25,H26,H27),
                               word(H3, H31,H32,H33,V26,H35,H36,H37),

                               word(V3, V31,V32,V33,V34,V35,V36,V37),
                               word(H1, H11,H12,H13,H14,H15,V32,H17),
                               word(H2, H21,H22,H23,H24,H25,V34,H27),
                               word(H3, H31,H23,H33,H34,H35,V36,H37). 

(Lo siento si este no está bien formateado pero aún no sé cuál es el estilo de sangría correcto paraProlog).

Por supuesto, si mi idea me parece correcta (al menos para mí), este código devuelveNo y no se por que

¿Alguna pista sobre esto?

EDITAR:

Siguiendo el comentario de @mbratch, he intentado usar el código que se encuentra enesta solución.

Aquí está el código:

crossword(V1, V2, V3, H1, H2, H3) :-
   word(V1, V1a, V1bH1b, V1c, V1dH2b, V1e, V1fH3b, V1g), 
   word(V2, V2a, V2bH1d, V2c, V2dH2d, V2e, V2fH3d, V2g), 
   word(V3, V3a, V3bH1f, V3c, V3dH2f, V3e, V3fH3f, V3g), 
   word(H1, H1a, V1bH1b, H1c, V2bH1d, H1e, V3bH1f, H1g), 
   word(H2, H2a, V1dH2b, H2c, V2dH2d, H2e, V3dH2f, H2g), 
   word(H3, H3a, V1fH3b, H3c, V2fH3d, H3e, V3fH3f, H3g).

El código funciona, pero tiene un problema con los duplicados que no me importa.

Lo que me gustaría entender espor qué éste funciona mientras el mío regresaNo.

Respuestas a la pregunta(2)

Su respuesta a la pregunta