Emania

TAP

Dec 20th, 2017
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.65 KB | None | 0 0
  1. prove(Fin,UnExp,Lits,FreeV,VarLim, Proof) :- !,
  2.     prove((top,Fin),UnExp,Lits,FreeV,VarLim, Proof, 1, _).
  3.  
  4. % prove(+Fml,+UnExp,+Lits,+FreeV,+VarLim)
  5. prove((Idp,(A,B)),UnExp,Lits,FreeV,VarLim, [N], Id, Up) :- !,
  6.     N=node(Id, A, and_rule(Idp), Nup), Id1 is Id + 1,
  7.     prove((Id,A),[(and_rule(Idp),B)|UnExp],Lits,FreeV,VarLim, Nup, Id1, Up).
  8.  
  9. prove((Idp,(A;B)),UnExp,Lits,FreeV,VarLim, [N1, N2], Id, Up) :- !,
  10.     N1=node(Id, A, or_rule(Idp), N1up),
  11.     N2=node(Up1, B, or_rule(Idp), N2up), Id1 is Id + 1,
  12.     prove((Id,A),UnExp,Lits,FreeV,VarLim, N1up, Id1, Up1), Id2 is Up1 + 1,
  13.     prove((Up1,B),UnExp,Lits,FreeV,VarLim, N2up, Id2, Up).
  14.  
  15. prove((Idp, all(X,Fml)),UnExp,Lits,FreeV,VarLim, [N], Id, Up) :- !,
  16.     N=node(Id, Fml1, all_rule(Idp), Nup), Id1 is Id + 1,
  17.     \+ length(FreeV,VarLim),
  18.     copy_term((X,Fml,FreeV),(X1,Fml1,FreeV)),
  19.     append(UnExp,[(all_rule(Idp),all(X,Fml))],UnExp1),
  20.     prove((Id, Fml1),UnExp1,Lits,[X1|FreeV],VarLim, Nup, Id1, Up).
  21.  
  22. prove((Idp, Lit),_,[(LId, L)|Lits],_,_, [N], Id, Up) :-
  23.     ( Lit = -Neg; -Lit = Neg ) ->
  24.         (((unify_with_occurs_check(Neg,L), N=node(Id, false, closed_by(Idp, LId), [])), Up is Id + 1 );
  25.         prove((Idp, Lit),[],Lits,_,_, [N], Id, Up)).
  26.  
  27. prove((Idp, Lit),[(and_rule(Idr), Next)|UnExp],Lits,FreeV,VarLim, [N], Id, Up) :-
  28.     N = node(Id, Next, and_rule(Idr), Nup), Id1 is Id + 1,
  29.     prove((Id, Next),UnExp,[(Idp, Lit)|Lits],FreeV,VarLim, Nup, Id1, Up).
  30.  
  31. prove((Idp, Lit),[(all_rule(Idr), Next)|UnExp],Lits,FreeV,VarLim, N, Id, Up) :-  %write('stack all '), write('Lit = '), write(Lit), write('\n'),
  32.     prove((Idr, Next),UnExp,[(Idp, Lit)|Lits],FreeV,VarLim, N, Id, Up).
Advertisement
Add Comment
Please, Sign In to add comment