dawrehxyz icon

SSLELE

dawrehxyz | PRO | 12/11/16 06:48:29 PM UTC | 0 ⭐ | 7184 👁️ | Never ⏰ | []
Prolog |

1.72 KB

|

None

|

0 👍

/

0 👎

verify(Input) :-
  see(Input), read(T), read(L), read(S), read(F), seen,
  check(T, L, S, [], F).
 
check(T, L, S, U, F) :-
  verifyState(F, S, L), ! ;
  (
    (neg(_) = F , neg(T, L, S, U, F)) ;
    (or(_) = F , or(T, L, S, U, F)) ;
    (and(_) = F , and(T, L, S, U, F)) ;
    (ax(_) = F , ax(T, L, S, U, F)) ;
    (ag(_) = F , ag(T, L, S, U, F)) ;
    (af(_) = F , af(T, L, S, U, F)) ;
    (ex(_) = F , ex(T, L, S, U, F)) ;
    (eg(_) = F , eg(T, L, S, U, F)) ;
    (ef(_) = F , ef(T, L, S, U, F))
  ), !.
 
af(T, L, S, U, F) :-
  not(member(S, U)),
  af(NewF) = F,
  (
    member([S, Nodes], T), !,
    nextState(S, T, SS),
  )
 
 
ef(T, L, S, U, F) :-
  not(member(S, U)),
  ef(NewF) = F,
  nextState(S, T, NextS),
  check(T, L, NextS, [S|U], NewF), !.
 
%For all paths, the next state must contain a valid formula
ax(T, L, S, U, F) :-
  not(member(S, U)),
  ax(NewF) = F,
  (
    member([S, Nodes], T), !,
    nextState(S, T, SS),
    setof(SS, checkFormula(L, SS, NewF), Nodes), !
  ),
  nextState(S, T, NextS),
  check(T, L, NextS, [S|U], NewF), !.
 
neg(T, L, S, U, F) :-
  neg(NewF) = F,
  not(check(T, L, S, U, NewF)).
 
and(T, L, S, U, F) :- 
  and(X, Y) = F,
  (
    check(T, L, S, U, X),
    check(T, L, S, U, Y)
  ), !.
 
or(T, L, S, U, F) :-
  or(X, Y) = F,
  (
    check(T, L, S, U, X);
    check(T, L, S, U, Y)
  ), !.
 
verifyState(F, S, L) :-
  member([S, A], L),
  member(F, A).
 
nextState(S, T, NextS) :-
  member([S, A], T),
  member(NextS, A).
 
checkFormula(L, S, F) :-
  verifyState(F, S, L), ! ;
  (
    neg(_) = F ;
    or(_)  = F ;
    and(_) = F ;
    ax(_)  = F ;
    ag(_)  = F ;
    af(_)  = F ;
    ex(_)  = F ;
    eg(_)  = F ;
    ef(_)  = F
  ), !.

Comments

  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎

    
        
  •  icon
    01/01/70 12:00:00 AM UTC
    Plain Text |

    0 B

    |

    👍

    /

    👎