welcome: please sign in
location: attachment:Abstract-Dialectical-Frameworks-Well-founded-Model-ENCODING.txt of OfficialProblemSuite

Attachment 'Abstract-Dialectical-Frameworks-Well-founded-Model-ENCODING.txt'

Download

   1 % splitting a formula into its subformulas
   2 subformula2(X,F) :- ac(X,F),statement(X).
   3 subformula2(X,F) :- subformula2(X,and(F,_)).
   4 subformula2(X,F) :- subformula2(X,and(_,F)).
   5 subformula2(X,F) :- subformula2(X,or(_,F)).
   6 subformula2(X,F) :- subformula2(X,or(F,_)).
   7 subformula2(X,F) :- subformula2(X,neg(F)).
   8 subformula2(X,F) :- subformula2(X,xor(F,_)).
   9 subformula2(X,F) :- subformula2(X,xor(_,F)).
  10 subformula2(X,F) :- subformula2(X,imp(F,_)).
  11 subformula2(X,F) :- subformula2(X,imp(_,F)).
  12 subformula2(X,F) :- subformula2(X,iff(F,_)).
  13 subformula2(X,F) :- subformula2(X,iff(_,F)).
  14 subformula(F) :- subformula2(_,F).
  15 
  16 % decide whether a subformula is an atom or not
  17 noatom(F) :- subformula(F), subformula(F1), subformula(F2), F=and(F1,F2).
  18 noatom(F) :- subformula(F), subformula(F1), subformula(F2), F=or(F1,F2).
  19 noatom(F) :- subformula(F), subformula(F1), F=neg(F1).
  20 noatom(F) :- subformula(F), subformula(F1), subformula(F2), F=xor(F1,F2).
  21 noatom(F) :- subformula(F), subformula(F1), subformula(F2), F=imp(F1,F2).
  22 noatom(F) :- subformula(F), subformula(F1), subformula(F2), F=iff(F1,F2).
  23 
  24 atom(X) :- subformula(X), not noatom(X).
  25 atom(X) :- subformula(X), X=c(v).
  26 atom(X) :- subformula(X), X=c(f).
  27 
  28 % check whether an interpretation is a model or not at a specific iteration
  29 ismodel(X,I) :- atom(X), in(X,I).
  30 ismodel(X,I) :- atom(X), X=c(v), iteration(I).
  31 ismodel(F,I) :- subformula(F), subformula(F1), F=neg(F1), nomodel(F1,I).
  32 ismodel(F,I) :- subformula(F), F=and(F1,F2), ismodel(F1,I), ismodel(F2,I).
  33 ismodel(F,I) :- subformula(F), subformula(F1), subformula(F2), F=or(F1,F2), ismodel(F1,I).
  34 ismodel(F,I) :- subformula(F), subformula(F1), subformula(F2), F=or(F1,F2), ismodel(F2,I).
  35 ismodel(F,I) :- subformula(F), F=xor(F1,F2), ismodel(F1,I), nomodel(F2,I).
  36 ismodel(F,I) :- subformula(F), F=xor(F1,F2), ismodel(F2,I), nomodel(F1,I).
  37 ismodel(F,I) :- subformula(F), subformula(F1), subformula(F2), F=imp(F1,F2), nomodel(F1,I).
  38 ismodel(F,I) :- subformula(F), F=imp(F1,F2), ismodel(F1,I), ismodel(F2,I).
  39 ismodel(F,I) :- subformula(F), F=iff(F1,F2), ismodel(F1,I), ismodel(F2,I).
  40 ismodel(F,I) :- subformula(F), F=iff(F1,F2), nomodel(F1,I), nomodel(F2,I).
  41 
  42 nomodel(X,I) :- atom(X), out(X,I).
  43 nomodel(X,I) :- atom(X), X=c(f), iteration(I).
  44 nomodel(F,I) :- subformula(F), subformula(F1), F=neg(F1), ismodel(F1,I).
  45 nomodel(F,I) :- subformula(F), subformula(F1), subformula(F2), F=and(F1,F2), nomodel(F1,I).
  46 nomodel(F,I) :- subformula(F), subformula(F1), subformula(F2), F=and(F1,F2), nomodel(F2,I).
  47 nomodel(F,I) :- subformula(F), F=or(F1,F2), nomodel(F1,I), nomodel(F2,I).
  48 nomodel(F,I) :- subformula(F), F=xor(F1,F2), ismodel(F1,I), ismodel(F2,I).
  49 nomodel(F,I) :- subformula(F), F=xor(F1,F2), nomodel(F1,I), nomodel(F2,I).
  50 nomodel(F,I) :- subformula(F), F=imp(F1,F2), ismodel(F1,I), nomodel(F2,I).
  51 nomodel(F,I) :- subformula(F), F=iff(F1,F2), nomodel(F1,I), ismodel(F2,I).
  52 nomodel(F,I) :- subformula(F), F=iff(F1,F2), nomodel(F2,I), ismodel(F1,I).
  53 
  54 % get the number of statements and create an ordering
  55 snum(I) :- I = #count{Y : statement(Y)}.
  56 iteration(I) :- snum(J), I=J-1.
  57 iteration(I) :- iteration(J), I=J-1, I>=0.
  58 
  59 % create undecided set of variables at the starting point of the function
  60 undec(X,I) :- snum(I), statement(X).
  61 
  62 % iterate the function one step further, and guess an additional element for A or R
  63 inA(X,I) :- inA(X,J), J=I+1, iteration(I).
  64 inR(X,I) :- inR(X,J), J=I+1, iteration(I).
  65 select(X,I) :- not deselect(X,I), statement(X), iteration(I), undec(X,J), J=I+1.
  66 deselect(X,I) :- not select(X,I), statement(X), iteration(I), undec(X,J), J=I+1.
  67 :- A=#count { I : select(_,I)}, iteration(I), A>1.
  68 undec(X,I) :- iteration(I), undec(X,J), J=I+1, deselect(X,I).
  69 % check whether the selected element is in A or not.
  70 in(X,I) | out(X,I) :- undec(X,J), J=I+1, iteration(I).
  71 in(X,I) :- iteration(I), J=I+1, inA(X,J).
  72 out(X,I) :- iteration(I), J=I+1, inR(X,J).
  73 
  74 okA(I) :- select(X,I), ac(X,F), ismodel(F,I).
  75 okA(I) :- A= #count{I : select(_,I)}, iteration(I), A=0.
  76 inA(X,I) :- okA(I), select(X,I).
  77 
  78 in(X,I) :- okA(I), undec(X,J), J=I+1, iteration(I).
  79 out(X,I) :- okA(I), undec(X,J), J=I+1, iteration(I).
  80 
  81 
  82 % check whether the selected element is in R or not.
  83 okR(I) :- select(X,I), ac(X,F), nomodel(F,I), not okA(I).
  84 in(X,I) :- okR(I), undec(X,J), J=I+1, iteration(I).
  85 out(X,I) :- okR(I), undec(X,J), J=I+1, iteration(I).
  86 inR(X,I) :- okR(I), select(X,I).
  87 
  88 ok(I) :- okA(I).
  89 ok(I) :- okR(I).
  90 
  91 :- not ok(I), iteration(I).
  92 
  93 accept(X) :- inA(X,0).
  94 reject(X) :- inR(X,0).
  95 
  96 :~ statement(X), not accept(X). [X@2]
  97 :~ statement(X), not reject(X). [X@1]
  98 %#maximize [accept(X)@2].
  99 %#maximize [reject(X)@1].

Attached Files

You are not allowed to attach a file to this page.