Skip to main content

Module attacks

Module attacks 

Source
Expand description

Attack relations between ASPIC+ arguments.

Per Modgil & Prakken 2014 §3.3.1 Definition 3.10:

  • Undermining: A undermines B (on ϕ) iff A’s conclusion is the contrary of some ordinary premise ϕ used anywhere in B’s tree.
  • Undercutting: A undercuts B (on B') iff A’s conclusion expresses “the defeasible rule r does not apply,” for some defeasible rule r used in a defeasible-topped sub-argument B' ∈ Sub(B). Our encoding uses the reserved literal namespace ¬__applicable_<rule_id>; consumers should use crate::aspic::StructuredSystem::add_undercut_rule rather than constructing this literal by hand.
  • Rebutting: A rebuts B (on B') iff A’s conclusion is the contrary of some sub-argument B' ∈ Sub(B)’s conclusion, and B'’s top rule is defeasible.

All three attack kinds are recorded against the outer target B, not just against the sub-argument where the conflict lands. This matches the paper’s “A rebuts B on B’” phrasing: the Dung AF edge is (A, B). Because construct_arguments also materialises every intermediate sub-argument as its own Argument with its own id, the (attacker, target) iteration additionally yields (A, B') as a separate edge — both edges exist in the resulting framework, which is consistent with the paper’s treatment of every sub-argument as an independent argument.

Historical note: an earlier version of this module only checked the target’s top-level conclusion for rebut, which produced logically inconsistent extensions when strict rules wrapped defeasible sub-arguments (e.g. Example 4.1 Married/Bachelor from M&P 2014). The sub-argument traversal in compute_attacks’s rebut loop is the fix.

Structs§

Attack
An attack between two ASPIC+ arguments.

Enums§

AttackKind
The kind of attack.

Functions§

compute_attacks
Compute all attacks between arguments.