Emania

Tseytin

Dec 10th, 2017
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Prolog 1.51 KB | None | 0 0
  1. :-op(450,fy,~). % Negation
  2. :-(system_mode(true),op(502,xfy,|),system_mode(false)). % Disjunction
  3. :-op(503,xfy,&). % Conjunction
  4. :-op(504,xfx,=>). % Implication
  5. :-op(505,xfx,<=>). % Equivalence
  6.  
  7. cnf(F, [(X) | CNF]) :- tseytin(F, X, [CNF]).
  8.  
  9. % Negation
  10. tseytin(~ F, X, CNF) :- tseytin(F, X1, CNF1),
  11.     CNF0=[(X , X1), (-X , -X1)],
  12.     my_append(CNF0, CNF1, CNF).
  13.  
  14. % Disjunction
  15. tseytin((F1 | F2), X, CNF) :- write('disjunction'), tseytin(F1, X1, CNF1), tseytin(F2, X2, CNF2),
  16.     CNF0=[(-X , X1 , X2), (X , -X1), (X , -X2)],
  17.     my_append(CNF0, CNF1, CNF2, CNF).
  18.  
  19. % Conjunction
  20. tseytin((F1 & F2), X, CNF) :- tseytin(F1, X1, CNF1), tseytin(F2, X2, CNF2),
  21.     CNF0=[(-X , X1), (-X , X2), (X , -X1 , -X2)],
  22.     my_append(CNF0, CNF1, CNF2, CNF).
  23.  
  24. % Implication
  25. tseytin((F1 => F2), X, CNF) :- write('implication \n'), tseytin(F1, X1, CNF1), tseytin(F2, X2, CNF2),
  26.     CNF0=[(-X , -X1 , X2), (X1, X), (-X2, X)],
  27.     my_append(CNF0, CNF1, CNF2, CNF).
  28.  
  29. % Equivalence
  30. tseytin((F1 <=> F2), X, CNF) :- tseytin(F1, X1, CNF1), tseytin(F2, X2, CNF2),
  31.     CNF0=[(-X , X2), (X , X1), (X1 , -X2)],
  32.     my_append(CNF0, CNF1, CNF2, CNF).
  33.  
  34. tseytin(A, A, []) :- !.
  35.  
  36.  
  37.  
  38. my_append(A, B, C, [D]) :- append_(A, B, C, T), flatten2(T, D).
  39. my_append(A, B, [D]) :- append_(A, B, T), flatten2(T, D).
  40.  
  41.  
  42. append_(A, B, C, [A, B, C]).
  43. append_([A], [B], [A, B]).
  44. append_([],L,L).
  45. append_(L,[],L).
  46.  
  47. flatten2([], []) :- !.
  48. flatten2([L|Ls], FlatL) :-
  49.     !,
  50.     flatten2(L, NewL),
  51.     flatten2(Ls, NewLs),
  52.     append(NewL, NewLs, FlatL).
  53. flatten2(L, [L]).
Advertisement
Add Comment
Please, Sign In to add comment