defeasible arguments

on this page

definition

a defeasible argument provides rational support for a conclusion that can be overturned (defeated) by additional information. unlike deductive arguments, which maintain their validity regardless of new premises, defeasible arguments are inherently non-monotonic - adding new information can invalidate previously reasonable conclusions.

defeasible reasoning captures how we naturally reason with generalizations, defaults, and presumptions that admit exceptions in specific circumstances.

key characteristics

non-monotonic reasoning

the hallmark of defeasible arguments is non-monotonicity - conclusions can be withdrawn when new information emerges:

original reasoning:
birds typically fly
tweety is a bird
∴ tweety probably flies

after learning new information:
birds typically fly
tweety is a bird
tweety is a penguin
∴ tweety probably does not fly (conclusion defeated)

adding the premise “tweety is a penguin” defeats the original conclusion.

presumptive conclusions

defeasible arguments establish presumptions rather than certainties:

it's 3:00 pm and mail usually arrives by 2:00 pm
∴ the mail has probably already arrived

this conclusion is reasonable given normal circumstances
but can be defeated by learning today is a postal holiday

based on generalizations

most defeasible reasoning relies on general rules with exceptions:

generalization: students who attend class regularly tend to perform better
application: maria attends class regularly
presumption: maria will probably perform well

potential defeaters:
- maria has severe test anxiety
- maria doesn't understand the material despite attendance
- maria is dealing with personal crises affecting concentration

types of defeaters

rebutting defeaters

provide evidence directly contradicting the conclusion:

default argument:
academic conferences are usually valuable for research
this is an academic conference
∴ this conference is probably valuable

rebutting defeater:
this conference has been identified as predatory
∴ this conference is probably not valuable

the defeater directly opposes the original conclusion

undercutting defeaters

attack the inferential link between premises and conclusion:

default argument:
the witness identified the suspect
∴ the suspect is probably guilty

undercutting defeater:
the identification occurred under poor lighting conditions
∴ the identification is unreliable (breaks inference link)

the defeater doesn't claim innocence directly,
but undermines the reliability of the identification

exceptional circumstances

situations where normal patterns don’t apply:

default reasoning:
restaurants are typically open during dinner hours
it's 7:00 pm (dinner time)
∴ the restaurant is probably open

exceptional defeater:
today is christmas day
∴ normal operating hours may not apply

the exception doesn't contradict the general rule,
but identifies a context where it doesn't hold

formal approaches

default logic (reiter)

represents defeasible reasoning using default rules:

general form: P(x) : M Q(x) / Q(x)

reads as: "if P(x) is known and Q(x) is consistent
          with current beliefs, then conclude Q(x)"

example:
Bird(x) : M Flies(x) / Flies(x)
"if x is a bird and it's consistent to believe x flies,
 then conclude x flies"

argumentation frameworks (dung)

model defeasible reasoning as abstract argumentation:

class Argument:
    def __init__(self, premises, conclusion):
        self.premises = premises
        self.conclusion = conclusion

class ArgumentationFramework:
    def __init__(self):
        self.arguments = []
        self.attack_relations = []  # (attacker, attacked)

    def add_attack(self, attacker, attacked):
        self.attack_relations.append((attacker, attacked))

    def compute_extensions(self):
        # find sets of arguments that can stand together
        # considering attack relations
        pass

probabilistic defeasibility

use probability updates to model defeat:

P(conclusion | evidence) = high initially

new evidence arrives:
P(conclusion | evidence, defeater) = low

bayesian updating naturally handles defeasibility
through conditional probability revision

nonmonotonic logics

circumscription, autoepistemic logic, and other formal systems:

circumscription example:
minimize abnormal cases

Flies(x) ← Bird(x) ∧ ¬Abnormal(x)
Abnormal(x) ← Penguin(x)
Bird(tweety)
Penguin(tweety)

conclusion: ¬Flies(tweety)

practical examples

burden of proof and presumptions:

legal presumption: defendants are innocent until proven guilty
evidence: defendant had motive and opportunity
presumption: defendant is probably innocent (default)

prosecution evidence:
- dna at crime scene
- witness testimony
- incriminating communications
result: presumption of innocence defeated

defense evidence:
- alibi witnesses
- evidence tampering claims
- alternative suspect theory
result: attempt to defeat prosecution case

medical reasoning

diagnostic defaults and exceptions:

default rule: chest pain in older adults suggests cardiac cause
patient: 65-year-old with chest pain
presumption: probably cardiac-related

additional information:
- pain occurs only when lying down
- relieved by antacids
- no cardiac risk factors
result: cardiac presumption defeated, gerd more likely

further information:
- abnormal ekg discovered
- elevated cardiac enzymes
result: gerd explanation defeated, back to cardiac cause

everyday reasoning

social expectations and norms:

default: people keep their appointments
expectation: friend will meet me at arranged time
presumption: friend will probably show up

potential defeaters:
- friend calls to cancel → direct cancellation
- severe weather conditions → exceptional circumstances
- friend has history of unreliability → undermines trust
- emergency situation → exceptional circumstances

software engineering

system behavior and error handling:

default assumption: network requests succeed
program logic: send request, process response
presumption: response will arrive successfully

exception handling:
try:
    response = send_request()
    process_response(response)
except NetworkError:
    # default assumption defeated
    handle_failure()
except TimeoutError:
    # another type of defeat
    retry_or_fail()

evaluation criteria

reasonableness

is the conclusion rational given current information?

reasoning: most meetings scheduled for today will occur as planned
conclusion: 10 am meeting will probably happen
evaluation: reasonable given normal circumstances

new information: building evacuation due to fire alarm
revised evaluation: conclusion no longer reasonable

defeasibility conditions

what evidence would overturn the conclusion?

argument: this medication usually helps with anxiety
conclusion: patient will probably benefit from medication

defeat conditions:
- patient has allergy to medication (safety defeater)
- patient has condition contraindicated for drug (medical defeater)
- patient already taking incompatible medication (interaction defeater)
- patient prefers non-pharmaceutical treatment (preference defeater)

strength of presumption

how robust is the default against potential defeaters?

strong presumption:
gravity causes objects to fall downward
very few potential defeaters (magnetic forces, etc.)

weak presumption:
traffic will be light during rush hour
many potential defeaters (accidents, weather, events, etc.)

contextual appropriateness

does the reasoning fit the domain and circumstances?

appropriate context:
default: restaurants serve food
application: planning dinner at restaurant
context match: fits normal dining expectations

inappropriate context:
default: restaurants serve food
application: expecting food at restaurant museum exhibit
context mismatch: museum context changes expectations

implementation patterns

rule-based systems with exceptions

class DefeasibleRule:
    def __init__(self, condition, conclusion, exceptions):
        self.condition = condition
        self.conclusion = conclusion
        self.exceptions = exceptions

    def applies(self, facts, beliefs):
        # check if condition holds
        if not self.condition.satisfied(facts):
            return False

        # check for exceptions (defeaters)
        for exception in self.exceptions:
            if exception.satisfied(facts, beliefs):
                return False

        return True

# example usage
bird_flies_rule = DefeasibleRule(
    condition=lambda facts: 'bird' in facts,
    conclusion='flies',
    exceptions=[
        lambda facts, beliefs: 'penguin' in facts,
        lambda facts, beliefs: 'injured_wing' in facts,
        lambda facts, beliefs: 'in_cage' in facts
    ]
)

priority-based reasoning

class PrioritizedArgument:
    def __init__(self, premises, conclusion, priority):
        self.premises = premises
        self.conclusion = conclusion
        self.priority = priority

def resolve_conflicts(arguments):
    # when arguments conflict, use priority to decide
    active_args = []
    for arg in arguments:
        defeated = False
        for other_arg in arguments:
            if (conflicts(arg, other_arg) and
                other_arg.priority > arg.priority):
                defeated = True
                break
        if not defeated:
            active_args.append(arg)
    return active_args

probabilistic defeat

import numpy as np
from scipy.stats import beta

class ProbabilisticDefeasibleReasoning:
    def __init__(self):
        self.beliefs = {}  # conclusion -> probability

    def add_evidence(self, evidence, conclusion, strength):
        # update beliefs using bayesian updating
        prior = self.beliefs.get(conclusion, 0.5)

        # simple beta-binomial updating
        # (real implementations would be more sophisticated)
        likelihood = strength if evidence else 1 - strength
        posterior = (prior * likelihood) / (
            prior * likelihood + (1 - prior) * (1 - likelihood)
        )

        self.beliefs[conclusion] = posterior

    def is_defeated(self, conclusion, threshold=0.5):
        return self.beliefs.get(conclusion, 0.5) < threshold

argumentation frameworks

class ArgumentationSystem:
    def __init__(self):
        self.arguments = {}
        self.attacks = []

    def add_argument(self, arg_id, premises, conclusion):
        self.arguments[arg_id] = {
            'premises': premises,
            'conclusion': conclusion,
            'status': 'undecided'
        }

    def add_attack(self, attacker_id, attacked_id):
        self.attacks.append((attacker_id, attacked_id))

    def compute_grounded_extension(self):
        # compute grounded extension (unique minimal fixed point)
        in_set = set()
        out_set = set()

        changed = True
        while changed:
            changed = False

            # add unattacked arguments
            for arg_id in self.arguments:
                if arg_id not in in_set and arg_id not in out_set:
                    attackers = [att for att, def_ in self.attacks if def_ == arg_id]
                    if all(att in out_set for att in attackers):
                        in_set.add(arg_id)
                        changed = True

            # remove arguments attacked by accepted arguments
            for arg_id in self.arguments:
                if arg_id not in out_set:
                    attackers = [att for att, def_ in self.attacks if def_ == arg_id]
                    if any(att in in_set for att in attackers):
                        out_set.add(arg_id)
                        changed = True

        return in_set

applications in ai

expert systems

rule-based reasoning with exceptions:

medical expert system:
rule: if patient has fever and cough, then probably viral infection
exception: if white blood cell count is very high, then probably bacterial

implementation handles conflicting evidence through
defeasible reasoning rather than absolute rules

natural language understanding

default interpretations with contextual override:

sentence: "the bank is closed"

default interpretation: financial institution
context: "we're going fishing" → riverbank interpretation
contextual defeat: fishing context overrides financial default

robotic planning

default assumptions about environment:

default: doors are unlocked during business hours
plan: walk through door to reach destination
assumption: door will open when pushed

exception handling:
if door doesn't open:
- try pulling instead of pushing
- check if door is locked
- find alternative route
- ask for assistance

machine learning

default predictions with uncertainty:

class DefeasibleClassifier:
    def __init__(self, base_model, confidence_threshold=0.7):
        self.model = base_model
        self.threshold = confidence_threshold
        self.exceptions = []

    def predict_defeasible(self, x):
        prediction = self.model.predict(x)
        confidence = self.model.predict_proba(x).max()

        # check for known exceptions
        for exception_pattern, override in self.exceptions:
            if exception_pattern.matches(x):
                return override, "exception"

        if confidence < self.threshold:
            return prediction, "uncertain"
        else:
            return prediction, "confident"

advantages and limitations

advantages

natural reasoning: captures how humans actually reason with generalizations and exceptions

flexible: can handle incomplete information and update conclusions as new evidence arrives

practical: works well for real-world domains where strict rules have exceptions

robust: graceful degradation when assumptions are violated

expressive: can represent nuanced reasoning patterns not captured by monotonic logic

limitations

computational complexity: determining what to believe can be intractable

non-deterministic: multiple reasonable conclusions may be possible

context-dependent: same information may lead to different conclusions in different contexts

defeat propagation: changes can have cascading effects throughout the reasoning system

validation challenges: difficult to verify correctness of defeasible reasoning systems

comparison with other argument types

aspectdefeasibledeductiveinductiveabductive
certaintypresumptivenecessaryprobableplausible
monotonicitynon-monotonicmonotonicmonotonicnon-monotonic
defeatexplicitly handlednot applicablerarebuilt-in
exceptionscentral featurenot allowedstatisticalexpected
revisionfrequentnevergradualcommon
applicationspractical reasoningformal proofsempirical scienceexplanation

common errors

treating defaults as absolutes

incorrectly applying generalizations without considering exceptions:

problematic reasoning:
birds fly
penguins are birds
∴ penguins fly (ignores exceptions)

better defeasible reasoning:
birds typically fly
penguins are birds
but penguins are a known exception
∴ penguins probably do not fly

ignoring defeat conditions

failing to update conclusions when defeaters emerge:

initial reasoning: meeting is scheduled for 2 pm, so it will probably occur
new information: building fire alarm requires evacuation
error: continuing to believe meeting will occur as scheduled
correction: meeting presumption is defeated by emergency circumstances

inappropriate defeat

allowing irrelevant information to defeat reasonable conclusions:

reasonable conclusion: this medication helps with depression
irrelevant defeater: some people don't like taking pills
error: letting preference defeat medical effectiveness
correction: distinguish between efficacy and acceptability

circular defeat

creating self-defeating reasoning patterns:

problematic:
rule a: if p then q, unless r
rule b: if q then r, unless p
result: neither conclusion can be established

better: establish priority or context for rule application

further study

foundational texts

  • reiter: “a logic for default reasoning” (default logic formalization)
  • dung: “on the acceptability of arguments and its fundamental role in nonmonotonic reasoning” (argumentation frameworks)
  • pollock: “cognitive carpentry” (philosophical foundations)
  • nute: “defeasible logic” (practical implementations)

computational approaches

  • brewka, dix & konolige: “nonmonotonic reasoning: an overview”
  • antoniou, billington & maher: “on the analysis of regulations using defeasible rules”
  • prakken & vreeswijk: “logics for defeasible argumentation”

philosophical perspectives

  • pollock: “defeasible reasoning” (epistemological foundations)
  • nute & cross: “conditional logic” (logical foundations)
  • horty: “reasons as defaults” (practical reasoning applications)

ai implementations

  • antoniou & bikakis: “dr-prolog: a system for defeasible reasoning with rules and ontologies”
  • governatori: “representing business contracts in ruleml”
  • bench-capon & dunne: “argumentation in artificial intelligence”

practice exercises

  1. identify defeasible reasoning patterns in everyday situations
  2. implement simple default logic systems
  3. analyze legal reasoning for presumptions and defeaters
  4. design exception handling in software systems
  5. study medical diagnostic reasoning as defeasible inference
on this page