No edit summary |
No edit summary |
||
Line 27: | Line 27: | ||
& | & | ||
label: ARGUMENTS --> {in,out,undec} & /* the labeling function */ | label: ARGUMENTS --> {in,out,undec} & /* the labeling function */ | ||
!(x,y).(x|->y:attacks => (label(y)=in => label(x)=out)) & | !(x,y).(x|->y:attacks => (label(y)=in => label(x)=out)) & // if an argument y is in any attacker must be out | ||
!(x).(x: | !(x,y).(x|->y:attacks => (label(x)=in => label(y)=out)) & // if an argument x is in anything it attacks must be out | ||
!( | !(y).(y:ARGUMENTS => (label(y)=out => #x.(x|->y:attacks & label(x)=in))) & //if an argument y is out it must be attacked by a valid argument | ||
!( | !(y).(y:ARGUMENTS => (label(y)=undec => #x.(x|->y:attacks & label(x)=undec))) // if an argument y is undecided it must be attacked by an undecided argument | ||
& | & |
Below we try to model some concepts of argumentation theory in B. The examples try to show that set theory can be used to model some aspects of argumentation theory quite naturally, and that ProB can solve and visualise some problems in argumentation theory. Alternative solutions are encoding arguments as normal logic programs and using answer set solvers for problem solving.
The following model was inspired by a talk given by Claudia Schulze.
The model below represents the labelling of the arguments as a total function from arguments to its status, which can either be in (the argument is accepted), out (the argument is rejected), or undec (the argument is undecided). The relation between the arguments is given in the binary attacks relation.
In case you are new to B, you probably need to know the following operators to understand the specification below (we als have a summary page about the B syntax):
MACHINE ArgumentationTotFun SETS ARGUMENTS={A,B,C,D,E}; STATUS = {in,out,undec} CONSTANTS attacks, label PROPERTIES attacks : ARGUMENTS <-> ARGUMENTS /* which argument attacks which other argument */ & label: ARGUMENTS --> {in,out,undec} & /* the labeling function */ !(x,y).(x|->y:attacks => (label(y)=in => label(x)=out)) & // if an argument y is in any attacker must be out !(x,y).(x|->y:attacks => (label(x)=in => label(y)=out)) & // if an argument x is in anything it attacks must be out !(y).(y:ARGUMENTS => (label(y)=out => #x.(x|->y:attacks & label(x)=in))) & //if an argument y is out it must be attacked by a valid argument !(y).(y:ARGUMENTS => (label(y)=undec => #x.(x|->y:attacks & label(x)=undec))) // if an argument y is undecided it must be attacked by an undecided argument & // here we model one particular argumentation graph // A = the sun will shine to day, B = we are in the UK, C = it is summer, D = there are only 10 days of sunshine per year, E = the BBC has forecast sun attacks = {B|->A, C|->B, D|->C, E |-> B, E|->D} END
Here is a screenshot of ProB Tcl/Tk after loading the model.
You can see that there is only a single solution (solving time 10 ms), as only a single SETUP_CONSTANTS line is available in the "Enabled Operations" pane. Double-click on SETUP_CONSTANTS and then INITIALISATION will give you the following result, where you can see the solution in the "State Properties" pane:
If you want to inspect the solution visually, you can select the "Current State as Graph" command in the "States" submenu of the "Visualize" menu:
This results in the following picture being displayed: