Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell98 |
This module implements Dung's argumentation frameworks.
- data DungAF arg = AF [arg] [(arg, arg)]
- setAttacks :: Eq arg => DungAF arg -> [arg] -> arg -> Bool
- aplus :: Eq arg => DungAF arg -> arg -> [arg]
- amin :: Eq arg => DungAF arg -> arg -> [arg]
- argplus :: Ord arg => DungAF arg -> [arg] -> [arg]
- argmin :: Ord arg => DungAF arg -> [arg] -> [arg]
- conflictFree :: Eq arg => DungAF arg -> [arg] -> Bool
- acceptable :: Eq arg => DungAF arg -> arg -> [arg] -> Bool
- f :: Eq arg => DungAF arg -> [arg] -> [arg]
- admissible :: Ord arg => DungAF arg -> [arg] -> Bool
- groundedF :: Eq arg => ([arg] -> [arg]) -> [arg]
- groundedF' :: Eq arg => ([arg] -> [arg]) -> [arg]
- completeF :: Ord arg => DungAF arg -> [[arg]]
- preferredF :: Ord arg => DungAF arg -> [[arg]]
- stableF :: Ord arg => DungAF arg -> [[arg]]
- isPreferredExt :: Ord arg => DungAF arg -> [[arg]] -> [arg] -> Bool
- isStableExt :: Ord arg => DungAF arg -> [arg] -> Bool
- data Status
- type Labelling arg = [(arg, Status)]
- inLab :: Labelling arg -> [arg]
- outLab :: Labelling arg -> [arg]
- undecLab :: Labelling arg -> [arg]
- allIn :: [arg] -> Labelling arg
- allOut :: [arg] -> Labelling arg
- allUndec :: [arg] -> Labelling arg
- powerLabel :: [arg] -> [Labelling arg]
- unattacked :: Ord arg => [arg] -> DungAF arg -> arg -> Bool
- attacked :: Ord arg => [arg] -> DungAF arg -> arg -> Bool
- labAttackers :: Eq arg => DungAF arg -> arg -> Labelling arg -> Labelling arg
- illegallyIn :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- illegallyOut :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- illegallyUndec :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- legallyIn :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- legallyOut :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- legallyUndec :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- isAdmissible :: Eq arg => DungAF arg -> Labelling arg -> Bool
- isComplete :: Eq arg => DungAF arg -> Labelling arg -> Bool
- isPreferred :: Ord arg => DungAF arg -> [Labelling arg] -> Labelling arg -> Bool
- isStable :: Eq arg => DungAF arg -> [Labelling arg] -> Labelling arg -> Bool
- isSemiStable :: Ord arg => DungAF arg -> [Labelling arg] -> Labelling arg -> Bool
- transitionStep :: Eq arg => DungAF arg -> Labelling arg -> arg -> Labelling arg
- terminatedTransition :: Eq arg => DungAF arg -> Labelling arg -> Bool
- superIllegallyIn :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool
- grounded :: Ord arg => DungAF arg -> Labelling arg
- groundedExt :: Ord arg => DungAF arg -> [arg]
- complete :: Ord arg => DungAF arg -> [Labelling arg]
- preferred :: Ord arg => DungAF arg -> [Labelling arg]
- stable :: Ord arg => DungAF arg -> [Labelling arg]
- semiStable :: Ord arg => DungAF arg -> [Labelling arg]
- completeExt :: Ord arg => DungAF arg -> [[arg]]
- preferredExt :: Ord arg => DungAF arg -> [[arg]]
- stableExt :: Ord arg => DungAF arg -> [[arg]]
- semiStableExt :: Ord arg => DungAF arg -> [[arg]]
Basic definitions
An abstract argumentation framework is a set of arguments (represented as a list) and an attack relation on these arguments.
AF [arg] [(arg, arg)] |
setAttacks :: Eq arg => DungAF arg -> [arg] -> arg -> Bool Source
Given an argumentation framework, determines whether args (subset of the arguments in the AF), attacks an argument arg (in the AF).
aplus :: Eq arg => DungAF arg -> arg -> [arg] Source
Given an argumentation framework, determines the set of arguments that are attacked by an argument (in the AF).
amin :: Eq arg => DungAF arg -> arg -> [arg] Source
Given an argumentation framework, determines the set of arguments attacking an argument (in the AF).
argplus :: Ord arg => DungAF arg -> [arg] -> [arg] Source
Given an argumentation framework, determines the set of arguments that are attacked by the given subset of arguments (in the AF).
argmin :: Ord arg => DungAF arg -> [arg] -> [arg] Source
Given an argumentation framework, determines the set of arguments that attack a given subset of arguments (in the AF).
conflictFree :: Eq arg => DungAF arg -> [arg] -> Bool Source
Given an argumentation framework, determines whether args (subset of the arguments in the AF) is conflict-free.
acceptable :: Eq arg => DungAF arg -> arg -> [arg] -> Bool Source
Given an argumentation framework, determines whether an
argument is acceptable with respect to a list of args
(subset of the arguments in the AF).
f :: Eq arg => DungAF arg -> [arg] -> [arg] Source
Given an argumentation framework, returns the set of arguments
that are acceptable with respect to args
(subset of the arguments in the AF).
admissible :: Ord arg => DungAF arg -> [arg] -> Bool Source
Given an argumentation framework, determines whether
the set of arguments args
(subset of the arguments in the AF) is admissible,
i.e. if args
is conflictFree
and args is a subset of f af args
Grounded, complete, preferred and stable semantics through fixpoints
groundedF :: Eq arg => ([arg] -> [arg]) -> [arg] Source
Given a characteristic function f, computes the grounded extension by iterating on the empty set (list) until it reaches a fixpoint.
groundedF' :: Eq arg => ([arg] -> [arg]) -> [arg] Source
Given a characteristic function f, computes the grounded extension by iterating on the empty set (list) until it reaches a fixpoint. Strict version.
completeF :: Ord arg => DungAF arg -> [[arg]] Source
Given an argumentation framework, computes all complete extension,
by taking all sets of arguments of the powerset of arguments of that AF,
given that they are admissible and f af == f
.
preferredF :: Ord arg => DungAF arg -> [[arg]] Source
Given an argumentation framework, computes all preferred extensions, by applying a filter on the complete extensions. Note that this, naive definition is faster than the current algorithm implementation.
stableF :: Ord arg => DungAF arg -> [[arg]] Source
Given an argumentation framework, computes all stable extensions, by applying a filter on the complete extensions. Note that this, naive definition is faster than the current algorithm implementation.
Definitions of a preferred and stable extension
isPreferredExt :: Ord arg => DungAF arg -> [[arg]] -> [arg] -> Bool Source
A complete extension is also a preferred extension if it is not a subset of one of the other extensions.
isStableExt :: Ord arg => DungAF arg -> [arg] -> Bool Source
S is a stable extension is an extension iff it is equal to the set of arguments not attacked by S.
Basic labelling definitions
The following functions are implementations of the definitions in "An algorithm for Computing Semi-Stable Semantics" in "Symbolic and Quantitative Approaches to Reasoning with Uncertainty", pages 222--234, Springer, 2007.
inLab :: Labelling arg -> [arg] Source
Given a labelling of arguments, give back the arguments labelled In
.
outLab :: Labelling arg -> [arg] Source
Given a labelling of arguments, give back the arguments labelled Out
.
undecLab :: Labelling arg -> [arg] Source
Given a labelling of arguments, give back the arguments labelled
Undecided
.
powerLabel :: [arg] -> [Labelling arg] Source
Computes a list with all possible labellings.
unattacked :: Ord arg => [arg] -> DungAF arg -> arg -> Bool Source
Given a list of arguments that are Out
in an argumentation framework af,
an argument arg
is unattacked if the list of its attackers, ignoring the outs, is empty.
labAttackers :: Eq arg => DungAF arg -> arg -> Labelling arg -> Labelling arg Source
Given an argumentation framework, determines the list of attackers of an argument, from a given labelling, returning the labelled attackers.
legallyIn :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool Source
Given an AF and Labelling
,
an argument a (in the AF) is legally In
iff a is labelled In
and it's not illegallyIn
.
legallyOut :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool Source
Given an AF and Labelling
,
an argument a (in the AF) is legally Out
iff a is labelled Out
and it's not illegallyOut
.
legallyUndec :: Eq arg => DungAF arg -> Labelling arg -> (arg, Status) -> Bool Source
Given an AF and Labelling
,
an argument a (in the AF) is legally Undecided
iff a is labelled Undecided
and it's not illegallyUndec
.
isAdmissible :: Eq arg => DungAF arg -> Labelling arg -> Bool Source
Given an AF, an admissible labelling is a Labelling
without arguments
that are illegallyIn
and without arguments that are illegallyOut
.
isComplete :: Eq arg => DungAF arg -> Labelling arg -> Bool Source
Given an AF, a complete labelling is a labelling without arguments
that are illegallyIn
, without arguments that are illegallyOut
and
without arguments that are illegallyUndec
.
isPreferred :: Ord arg => DungAF arg -> [Labelling arg] -> Labelling arg -> Bool Source
Let labs
be a complete labelling, i.e. isComplete af labs
, we say that
labs is a preferred labelling iff inLab labs
is maximal
(w.r.t. set inclusion).
isStable :: Eq arg => DungAF arg -> [Labelling arg] -> Labelling arg -> Bool Source
Let labs
be a complete labelling, i.e. 'isComplete af labs', we say that
labs is a preferred labelling iff undecLab(labs) == []
isSemiStable :: Ord arg => DungAF arg -> [Labelling arg] -> Labelling arg -> Bool Source
Let labs
be a complete labelling, i.e. isComplete af labs
, we say that
labs is a semi-stable labelling iff undecLab labs
is minimal
(w.r.t. set inclusion).
transitionStep :: Eq arg => DungAF arg -> Labelling arg -> arg -> Labelling arg Source
Given an AF, a labelling labs and an illegally in argument a in the af,
(i.e. illegallyIn af a labs
=> True),
a transition step on a in labs consists of the following:
1. the label of a is changed from In
to Out
2. for every b in {a} cup a+, if b is illegally out,
then change the label from b from Out
to Undecided
terminatedTransition :: Eq arg => DungAF arg -> Labelling arg -> Bool Source
Given an AF, a labelling, labs, is terminated iff labs does not contain any argument that is
illegally in, i.e. not (illegallyIn af lab arg)
for all arg in labs.
Grounded, preferred, semi-stable and stable labellings
The following functions are implementations of the definitions in "An algorithm for Computing Semi-Stable Semantics" in "Symbolic and Quantitative Approaches to Reasoning with Uncertainty", pages 222--234, Springer, 2007 and Section 4.1 of Proof Theories and Algorithms for Abstract Argumentation Frameworks by Modgil and Caminada.
grounded :: Ord arg => DungAF arg -> Labelling arg Source
Computes the grounded labelling for a Dung argumentation framework, returning a (unique) list of arguments with statuses.
Based on section 4.1 of Proof Theories and Algorithms for Abstract Argumentation Frameworks by Modgil and Caminada.
groundedExt :: Ord arg => DungAF arg -> [arg] Source
The grounded extension of an argumentation framework is just the grounded labelling,
keeping only those arguments that were labelled In
.
complete :: Ord arg => DungAF arg -> [Labelling arg] Source
Computes maximal and minimal complete labellings for a Dung argumentation framework. This is based on Caminada's algorithm for computing semi-stable labellings, with all checks removed.
preferred :: Ord arg => DungAF arg -> [Labelling arg] Source
Computes all preferred labellings for a Dung argumentation framework, by taking the maximally in complete labellings.
stable :: Ord arg => DungAF arg -> [Labelling arg] Source
Computes all stable labellings for a Dung argumentation framework, by
keeping only those labellings with no Undecided
labels.
semiStable :: Ord arg => DungAF arg -> [Labelling arg] Source
Computes all semi-stable labellings for a Dung argumentation framework, by taking the minimally undecided complete labellings.
completeExt :: Ord arg => DungAF arg -> [[arg]] Source
The complete extension of an argumentation framework is just the complete labelling,
keeping only those arguments that were labelled In
.
preferredExt :: Ord arg => DungAF arg -> [[arg]] Source
The preferred extension of an argumentation framework is just the preferred labelling,
keeping only those arguments that were labelled In
.
stableExt :: Ord arg => DungAF arg -> [[arg]] Source
The stable extension of an argumentation framework is just the stable labelling,
keeping only those arguments that were labelled In
.
semiStableExt :: Ord arg => DungAF arg -> [[arg]] Source
The semi-stable extension of an argumentation framework is just the semi-stable labelling,
keeping only those arguments that were labelled In
.