¿Cómo escribir tipo de planificación condicional en Prolog?

Intenté escribir un código de prólogo que pueda entender el programa del estudiante escrito en C #. Ahora estoy estancado en el proceso de reconocer la declaración "si" en el programa del estudiante. Por ejemplo: El siguiente es el código que espero del estudiante.

int d = int.Parse(Console.ReadLine());  // value d is inputted by user
int s = 0;

if (d>0)
    s = 2;
else if (d==0)
    s = 1;
else
    s = 0;

Definí el objetivo de este código esperado como:

goal:- 
   hasVarName(Vid_s, s),
   hasVarName(Vid_d, d),
   hasVarValue(Vid_d, Vd),
   ((not(gt(Vd,0)); hasVarValue(Vid_s, 2)),           %eq: [Vd>0] -> [val_s = 2]
   ((gt(Vd,0); not(eq(Vd,0)); hasVarValue(Vid_s, 1)), %eq: [~(Vd>0)^(Vd=0)] -> [val_s = 1]
   ((gt(Vd,0); eq(Vd,0); hasVarValue(Vid_s, 0).       %eq: [~(Vd>0)^~(Vd=0)] -> [val_s = 0]

El problema es cómo puedo representar el código de estudiante anterior en hechos y reglas de prólogo, para descubrir que el objetivo se cumple para cualquier posible condición.

Intenté cambiar la primera parte del código del estudiante para que se convierta en hechos como los siguientes, pero realmente no sé cómo representar la afirmación del "si" del estudiante como hechos / reglas en el prólogo (supongo que no debería cambiarlo por prólogo 'si', ¿verdad?)

hasVarName(varID_d, d)
hasVarValue(varID_d, val_d)   %it is unknown, so I represent it as symbol 'val_d'

hasVarName(varID_s, s)
hasVarValue(varID_s, 0)

Y otro, en mi meta, cuando tengo comparaciones comogt(Vd,0) Creo que no puedo usar el prólogo mayor que el operador, tampocoVd> 0 niVd @> 0 porque el valor en Vd es en realidad un cierto valor ingresado por el usuario, pero se representa como un valor simbólico (en este caso es:val_d).

Nota: utilizando el objetivo anterior, creo que el objetivo definido se cumplirá si el código del estudiante se cambia al siguiente código.

int d = int.Parse(Console.ReadLine());  // value d is inputted by user
int s = 0;

if (d>0)
    s = 2;
else if (d==0)
    s = 1;

o

int d = int.Parse(Console.ReadLine());  // value d is inputted by user
int s = 10;           // any random initialization

if (d>0)
{
    int x = 2;       // unnecessary step, but still Ok.
    s = x;
}
else if (d==0)
    s = 1;
else
    s = 0;

Pero nuevamente, necesito ayuda / idea de cómo este código se puede representar en prólogo como acción / regla / hecho para cumplir la meta.

Cualquier ayuda es muy apreciada.

Muchas gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta