Acciones

Ejemplo 1

De Lógica computacional y teoría de modelos (2019-20)

% Definimos las dimensiones del tablero:
#const n = 5.
dim(1..n).

% Para cada casilla distinta a (1,1) le asignamos un solo parent: izquierda,
% derecha, arriba o abajo.
1 {parent(X,Y, 0,-1); parent(X,Y, 1,0);
   parent(X,Y, -1,0); parent(X,Y, 0,1)} 1 :- dim(X), dim(Y), (X,Y) != (1,1).

% Definimos la propiedad alcanzable. Esta se cumple trivialmente en la casilla
% (1,1), y cualquier casilla desde la cual se haga un movimiento a una casilla
% alcanzable también será alcanzable:
alcanzable(1,1).
alcanzable(X,Y) :- parent(X,Y,DX,DY), alcanzable(X+DX,Y+DY).

% La raíz del árbol debe ser alcanzable desde cualquier casilla.
:- dim(X), dim(Y), not alcanzable(X,Y).

% Minimizamos el número de movimientos verticales:
vertical(X,Y) :- parent(X,Y,0,1).
vertical(X,Y) :- parent(X,Y,0,-1).
#minimize {X,Y: vertical(X,Y) }.

% Presentación:
#show parent/4.