Coverage Summary for Class: ArgumentModule (it.unibo.tuprolog.argumentation.core.modules.data)
| Class |
Class, %
|
Method, %
|
Branch, %
|
Line, %
|
Instruction, %
|
| ArgumentModule |
100%
(1/1)
|
100%
(4/4)
|
|
100%
(4/4)
|
100%
(12/12)
|
package it.unibo.tuprolog.argumentation.core.modules.data
import it.unibo.tuprolog.argumentation.core.model.terms.ArgumentTerm
import it.unibo.tuprolog.argumentation.core.modules.PrologModule
import it.unibo.tuprolog.argumentation.core.primitives.data.RulesAndInfo
import it.unibo.tuprolog.solve.Signature
import it.unibo.tuprolog.solve.primitive.Primitive
/**
* The term of an argument (module `argument`), read and built through it rather than by the positions of its parts.
*
* An argument is the list `[Rules, TopRule, Conclusion, Body, Info]`:
* - Rules: the identifiers of the rules and premises it is made of;
* - TopRule: the identifier of its last rule, `none` for an argument made of a premise alone;
* - Conclusion: the statement it concludes, `[Claim]`;
* - Body: the premises of its top rule;
* - Info: `[LastDefeasibleRules, DefeasibleRules, DefeasiblePremises]`, what the preferences between arguments weigh.
*
* Each accessor is a fact relating an argument to one of its parts, so it works both ways: given an argument it
* reads the part, given a part it builds the template of the arguments with it, to look them up in the context
* (`argument::claim(A, sup(X, Y)), context_check(argument(A))`). Kotlin reads and builds the terms through [ArgumentTerm.parts] and
* [ArgumentTerm.info], written after the same layout.
*/
object ArgumentModule : PrologModule("prolog.argumentation.data.argument", "argument") {
override val primitives: Map<Signature, Primitive>
get() = mapOf(RulesAndInfo.signature to RulesAndInfo)
override val prologRawTheory: String =
// language=Prolog
"""
%! new(?Rules, ?TopRule, ?Conclusion, ?Body, ?Info, ?Argument)
% Argument is made of its parts.
new(Rules, TopRule, Conclusion, Body, Info, [Rules, TopRule, Conclusion, Body, Info]).
%! rules(?Argument, ?Rules)
% Rules are the identifiers of the rules and premises of Argument.
rules([Rules, _, _, _, _], Rules).
%! withRules(?Argument, ?Rules, ?Changed)
% Changed is Argument with the rules Rules.
withRules([_, TopRule, Conclusion, Body, Info], Rules, [Rules, TopRule, Conclusion, Body, Info]).
%! topRule(?Argument, ?TopRule)
% TopRule is the last rule of Argument, none for an argument made of a premise alone.
topRule([_, TopRule, _, _, _], TopRule).
%! conclusion(?Argument, ?Conclusion)
% Conclusion is the statement Argument concludes, [Claim].
conclusion([_, _, Conclusion, _, _], Conclusion).
%! claim(?Argument, ?Claim)
% Claim is the term Argument concludes.
claim([_, _, [Claim], _, _], Claim).
%! body(?Argument, ?Body)
% Body are the premises of the top rule of Argument.
body([_, _, _, Body, _], Body).
%! info(?Argument, ?Info)
% Info is what the preferences weigh of Argument: [LastDefeasibleRules, DefeasibleRules, DefeasiblePremises].
info([_, _, _, _, Info], Info).
%! lastDefeasibleRules(?Argument, ?Rules)
% Rules are the last defeasible rules of Argument.
lastDefeasibleRules([_, _, _, _, [Rules, _, _]], Rules).
%! defeasibleRules(?Argument, ?Rules)
% Rules are the defeasible rules of Argument.
defeasibleRules([_, _, _, _, [_, Rules, _]], Rules).
%! defeasiblePremises(?Argument, ?Premises)
% Premises are the defeasible premises of Argument.
defeasiblePremises([_, _, _, _, [_, _, Premises]], Premises).
%! infoParts(?Info, ?LastDefeasibleRules, ?DefeasibleRules, ?DefeasiblePremises)
% Info is made of its parts.
infoParts([LastDefeasibleRules, DefeasibleRules, DefeasiblePremises], LastDefeasibleRules, DefeasibleRules, DefeasiblePremises).
%! isPremise(+Argument)
% Argument is made of a premise alone.
isPremise([_, TopRule, _, _, _]) :- TopRule == none.
%! rulesAndInfo(+RuleId, +Strict, +Supports, -Rules, -Info)
% The rules and the info of the argument built from the rule RuleId (strict if Strict is strict) on sub-arguments
% with the rules, last defeasible rules, defeasible rules and defeasible premises in Supports (see RulesAndInfo);
% native.
%! isDefeasible(+Argument)
% Argument has defeasible rules or premises.
isDefeasible([_, _, _, _, Info]) :- Info \== [[], [], []].
""".trimIndent()
}