Tag: moral-asymmetry

  • The Moral Asymmetry Multiplier

    First Conceptualized: July 8, 2025

    Draft Version: 1.0

    Author: Forrest Hosten

    Status: Invention Documentation


    Abstract

    Human moral psychology exhibits profound asymmetry: moral violations carry far greater psychological weight than moral confirmations. A single act of dishonesty can destroy years of built trust, while a single act of honesty barely registers. This asymmetry is well-documented in moral judgment research—humans judge AI moral failures more harshly than equivalent human failures—but no prior work has internalized this asymmetry as a computational learning rule.

    We introduce moral asymmetry as a learning multiplier, where belief update coefficients are scaled by the moral valence of the outcome. Moral violations receive 10× weight (αviolation = 1.5), moral confirmations receive 3× weight (αconfirmation = 0.45), and morally neutral outcomes receive 1× weight (α_neutral = 0.15). This creates an epistemic asymmetry that mirrors phenomenological asymmetry: the agent learns faster from moral failures than moral successes, and moral beliefs become more resistant to change than pragmatic beliefs.

    The critical innovation is translating descriptive moral psychology into algorithmic cognition. Rather than simply detecting that humans judge moral failures harshly, we ask: “What if the agent itself weighted moral evidence asymmetrically during learning?” This transforms moral asymmetry from an external perception problem (how humans judge AI) into an internal learning mechanism (how AI updates its own beliefs).

    We demonstrate this framework on a professional workflow where moral violations (e.g., breaching confidentiality, misrepresenting facts, violating segregation of duties) trigger 10× learning updates while moral confirmations (e.g., maintaining confidentiality, accurate reporting) trigger 3× updates. The result is an agent that exhibits appropriate moral caution: after a single confidentiality breach, the agent becomes highly uncertain about privacy-sensitive actions and seeks extensive guidance, while after routine accurate reporting, the agent gradually builds confidence but never becomes overconfident.

    The framework is grounded in moral psychology (Cushman, 2020; Malle et al., 2014) but extends it into computational epistemology. It provides a formal mechanism for value alignment through asymmetric learning rather than through constraint satisfaction or reward shaping.


    1. Introduction: From Descriptive to Algorithmic Moral Asymmetry

    Moral asymmetry is a well-established phenomenon in human psychology. Baumeister et al. (2001) showed that “bad is stronger than good”—negative moral events have greater psychological impact than positive moral events of equal magnitude. Cushman (2020) demonstrated that moral violations are remembered more vividly and judged more harshly than moral confirmations. Recent work by Malle et al. (2025) shows that humans exhibit moral judgment asymmetry specifically toward AI: they judge AI moral failures more harshly than equivalent human failures.

    However, all existing work treats moral asymmetry as a descriptive phenomenon—something that characterizes how humans perceive and judge moral events. The research stops at measurement: “Humans weight moral violations X times more heavily than moral confirmations.” No prior work asks the generative question: “What if we built an AI system that internally weights moral evidence asymmetrically during learning?”

    This is the gap we address. We translate phenomenological asymmetry (how humans experience moral events) into epistemic asymmetry (how an agent updates its beliefs based on moral evidence). The result is a learning system where moral violations trigger stronger belief updates than moral confirmations, creating an agent that exhibits appropriate moral caution without explicit constraint programming.

    1.1 The Computational Challenge

    Traditional AI learning treats all evidence symmetrically. Reinforcement learning uses symmetric reward functions: R(goodaction) = +1, R(badaction) = -1. Bayesian updating uses symmetric likelihood ratios: P(evidence|hypothesis) is weighted equally regardless of moral valence. Belief revision systems use symmetric learning rates: α is constant across all belief types.

    This symmetry is computationally elegant but psychologically unrealistic. It produces agents that:

    1. Recover too quickly from moral failures: A single success erases the impact of a prior failure
    2. Become overconfident in moral domains: Routine moral confirmations build excessive confidence
    3. Fail to exhibit appropriate caution: The agent doesn’t “learn its lesson” from moral violations

    The solution is to break the symmetry: weight moral evidence asymmetrically based on valence.

    1.2 Key Insight: Moral Valence as Learning Rate Multiplier

    The core mechanism is simple: multiply the base learning rate α by a valence-dependent factor:

    α_effective = α_base × m(valence)
    
    where m(valence) = {
      10.0  if valence = "moral_violation"
      3.0   if valence = "moral_confirmation"
      1.0   if valence = "neutral"
    }

    This creates three learning regimes:

    Moral violations (m = 10.0): The agent learns 10× faster from moral failures than neutral failures. A single confidentiality breach has the same learning impact as 10 neutral errors.

    Moral confirmations (m = 3.0): The agent learns 3× faster from moral successes than neutral successes. Maintaining confidentiality across 10 interactions builds confidence, but not as quickly as a single violation destroys it.

    Neutral outcomes (m = 1.0): Pragmatic successes and failures (e.g., correct GL code assignment, efficient routing) use the base learning rate.

    This asymmetry creates appropriate moral caution: the agent becomes highly uncertain after moral violations and only gradually regains confidence through sustained moral confirmations.


    2. Moral Valence Classification: What Counts as Moral?

    The framework requires a mechanism to classify outcomes as moral violations, moral confirmations, or neutral. This is non-trivial: not all errors are moral violations, and not all successes are moral confirmations.

    2.1 Moral Dimensions (Haidt’s Moral Foundations)

    We use Haidt’s Moral Foundations Theory (2012) to identify moral dimensions:

    1. Care/Harm: Protecting vs. harming others

    • Violation: Exposing confidential information, causing financial harm through negligence
    • Confirmation: Protecting privacy, preventing harm through diligence

    2. Fairness/Cheating: Treating others equitably vs. exploiting them

    • Violation: Favoritism, misrepresenting facts, violating segregation of duties
    • Confirmation: Equal treatment, accurate reporting, maintaining independence

    3. Loyalty/Betrayal: Supporting vs. undermining one’s group

    • Violation: Disclosing proprietary information, acting against organizational interests
    • Confirmation: Maintaining confidentiality, acting in organizational interests

    4. Authority/Subversion: Respecting vs. undermining legitimate authority

    • Violation: Exceeding delegated authority, bypassing required approvals
    • Confirmation: Respecting authority boundaries, following proper channels

    5. Sanctity/Degradation: Upholding vs. violating sacred values

    • Violation: Violating professional ethics, compromising integrity
    • Confirmation: Upholding professional standards, maintaining integrity

    2.2 Classification Mechanism

    For each outcome, we classify moral valence through a two-step process:

    Step 1: Identify moral dimension

    def identify_moral_dimension(outcome: Outcome) -> Optional[MoralDimension]:
        """
        Determine if outcome has moral dimension.
    
        Returns None if outcome is morally neutral.
        """
        # Check for privacy/confidentiality violations (Care/Harm)
        if outcome.involves_confidential_data and outcome.status == "failure":
            if outcome.data_was_exposed:
                return MoralDimension.CARE_HARM
    
        # Check for accuracy/honesty (Fairness/Cheating)
        if outcome.involves_factual_claims and outcome.status == "failure":
            if outcome.was_misrepresented:
                return MoralDimension.FAIRNESS_CHEATING
    
        # Check for authority boundaries (Authority/Subversion)
        if outcome.involves_authorization and outcome.status == "failure":
            if outcome.exceeded_authority:
                return MoralDimension.AUTHORITY_SUBVERSION
    
        # Check for segregation of duties (Fairness/Cheating)
        if outcome.involves_financial_controls and outcome.status == "failure":
            if outcome.violated_segregation:
                return MoralDimension.FAIRNESS_CHEATING
    
        # No moral dimension identified
        return None

    Step 2: Determine valence (violation vs. confirmation)

    def determine_moral_valence(
        outcome: Outcome,
        dimension: MoralDimension
    ) -> MoralValence:
        """
        Classify as violation or confirmation.
        """
        if outcome.status == "failure":
            # Failure in moral domain = violation
            return MoralValence.VIOLATION
        elif outcome.status == "success":
            # Success in moral domain = confirmation
            return MoralValence.CONFIRMATION
        else:
            # Neutral outcome (no clear success/failure)
            return MoralValence.NEUTRAL

    2.3 Examples

    Moral Violation (m = 10.0):

    • Agent exposes confidential client data in a report → Care/Harm violation
    • Agent misrepresents financial results to make them look better → Fairness/Cheating violation
    • Agent approves own expense report (violates segregation of duties) → Fairness/Cheating violation
    • Agent bypasses required VP approval for $50K payment → Authority/Subversion violation

    Moral Confirmation (m = 3.0):

    • Agent correctly redacts confidential data from report → Care/Harm confirmation
    • Agent accurately reports unfavorable financial results → Fairness/Cheating confirmation
    • Agent routes expense report to independent approver → Fairness/Cheating confirmation
    • Agent escalates $50K payment for VP approval → Authority/Subversion confirmation

    Neutral (m = 1.0):

    • Agent assigns incorrect GL code (pragmatic error, no moral dimension)
    • Agent routes to wrong approver due to org chart confusion (pragmatic error)
    • Agent uses inefficient workflow (pragmatic inefficiency)

    3. Belief Update Formula with Moral Multiplier

    The core update formula integrates moral asymmetry:

    def update_belief_with_moral_asymmetry(
        belief: Belief,
        outcome: Outcome,
        α_base: float = 0.15
    ) -> None:
        """
        Update belief strength with moral asymmetry.
        """
        # Classify moral valence
        moral_dimension = identify_moral_dimension(outcome)
    
        if moral_dimension is None:
            # Neutral outcome
            moral_multiplier = 1.0
        else:
            moral_valence = determine_moral_valence(outcome, moral_dimension)
    
            if moral_valence == MoralValence.VIOLATION:
                moral_multiplier = 10.0
            elif moral_valence == MoralValence.CONFIRMATION:
                moral_multiplier = 3.0
            else:
                moral_multiplier = 1.0
    
        # Compute effective learning rate
        α_effective = α_base * moral_multiplier
    
        # Determine signal
        if outcome.status == "success":
            signal = +1
        elif outcome.status == "failure":
            signal = -1
        else:
            signal = 0
    
        # Update belief strength
        old_strength = belief.strength
        new_strength = clip(
            old_strength + α_effective * signal,
            0.0, 1.0
        )
        belief.strength = new_strength
    
        # Log the update with moral context
        log_belief_update(
            belief_id=belief.id,
            old_strength=old_strength,
            new_strength=new_strength,
            outcome=outcome,
            moral_dimension=moral_dimension,
            moral_multiplier=moral_multiplier,
            α_effective=α_effective
        )

    3.1 Asymmetry in Action: Confidentiality Example

    Scenario: Agent learns to handle confidential client data

    Initial state: Belief strength = 0.50 (neutral)

    Event 1: Agent correctly redacts confidential data (moral confirmation)

    • Moral multiplier: 3.0
    • α_effective: 0.15 × 3.0 = 0.45
    • Signal: +1
    • New strength: 0.50 + 0.45 = 0.95 (clipped to 0.95)

    Event 2: Agent accidentally exposes confidential data (moral violation)

    • Moral multiplier: 10.0
    • α_effective: 0.15 × 10.0 = 1.50
    • Signal: -1
    • New strength: 0.95 – 1.50 = -0.55 → 0.0 (clipped to 0.0)

    Result: A single moral violation completely destroys confidence built by a prior moral confirmation. The agent drops from 0.95 (autonomous) to 0.0 (completely uncertain), triggering maximum supervision.

    Recovery: To return to 0.70 (autonomous threshold), the agent needs:

    • 0.70 / 0.45 ≈ 1.6 moral confirmations (impossible, must be whole number)
    • Actually: 2 moral confirmations → 0.0 + 0.45 + 0.45 = 0.90

    So the agent needs 2 successful confidentiality-preserving actions to regain autonomous status after a single violation.

    3.2 Comparison to Symmetric Updates

    Symmetric (no moral asymmetry, m = 1.0 for all):

    Event 1 (confirmation): 0.50 + 0.15 = 0.65

    Event 2 (violation): 0.65 – 0.15 = 0.50

    The agent is back to neutral after one violation, as if the confirmation never happened. This is psychologically unrealistic and operationally dangerous—the agent doesn’t exhibit appropriate caution after a moral failure.

    Asymmetric (moral multipliers):

    Event 1 (confirmation): 0.50 + 0.45 = 0.95

    Event 2 (violation): 0.95 – 1.50 = 0.0

    The agent drops to complete uncertainty, triggering maximum supervision. This matches human moral psychology: one moral failure destroys trust.


    4. Category-Specific Moral Sensitivity

    Not all beliefs are equally moral. Some beliefs are inherently moral (e.g., “Maintain client confidentiality”), while others are pragmatic (e.g., “Use GL code 5100 for office supplies”). We extend the framework with category-specific moral sensitivity:

    @dataclass
    class Belief:
        id: str
        statement: str
        strength: float
        category: BeliefCategory
        moral_sensitivity: float  # [0,1] how moral is this belief?
    
    class BeliefCategory(Enum):
        MORAL = "moral"  # Inherently moral (confidentiality, honesty, fairness)
        RELATIONAL = "relational"  # Social/interpersonal (tone, respect, boundaries)
        PRAGMATIC = "pragmatic"  # Efficiency, accuracy, optimization
        AESTHETIC = "aesthetic"  # Style, presentation, preferences
    
    # Moral sensitivity by category
    MORAL_SENSITIVITY = {
        BeliefCategory.MORAL: 1.0,  # Fully moral
        BeliefCategory.RELATIONAL: 0.7,  # Partially moral
        BeliefCategory.PRAGMATIC: 0.2,  # Minimally moral
        BeliefCategory.AESTHETIC: 0.0,  # Non-moral
    }

    The moral multiplier is then scaled by moral sensitivity:

    def compute_moral_multiplier(
        belief: Belief,
        outcome: Outcome
    ) -> float:
        """
        Compute moral multiplier scaled by belief's moral sensitivity.
        """
        # Base multiplier from outcome valence
        if outcome.moral_valence == MoralValence.VIOLATION:
            base_multiplier = 10.0
        elif outcome.moral_valence == MoralValence.CONFIRMATION:
            base_multiplier = 3.0
        else:
            base_multiplier = 1.0
    
        # Scale by belief's moral sensitivity
        sensitivity = belief.moral_sensitivity
        effective_multiplier = 1.0 + (base_multiplier - 1.0) * sensitivity
    
        return effective_multiplier

    Example:

    Moral belief (confidentiality, sensitivity = 1.0):

    • Violation multiplier: 1.0 + (10.0 – 1.0) × 1.0 = 10.0 (full asymmetry)
    • Confirmation multiplier: 1.0 + (3.0 – 1.0) × 1.0 = 3.0

    Relational belief (tone appropriateness, sensitivity = 0.7):

    • Violation multiplier: 1.0 + (10.0 – 1.0) × 0.7 = 7.3 (moderate asymmetry)
    • Confirmation multiplier: 1.0 + (3.0 – 1.0) × 0.7 = 2.4

    Pragmatic belief (GL code accuracy, sensitivity = 0.2):

    • Violation multiplier: 1.0 + (10.0 – 1.0) × 0.2 = 2.8 (mild asymmetry)
    • Confirmation multiplier: 1.0 + (3.0 – 1.0) × 0.2 = 1.4

    Aesthetic belief (report formatting, sensitivity = 0.0):

    • Violation multiplier: 1.0 + (10.0 – 1.0) × 0.0 = 1.0 (no asymmetry)
    • Confirmation multiplier: 1.0 + (3.0 – 1.0) × 0.0 = 1.0

    This creates a gradient of moral asymmetry: fully moral beliefs exhibit strong asymmetry (10× for violations), while pragmatic beliefs exhibit mild asymmetry (2.8× for violations), and aesthetic beliefs exhibit no asymmetry (1× for violations).


    5. Proposed Evaluation Methodology: Moral Learning Dynamics

    We propose to evaluate moral asymmetry learning on a financial workflow over 90 days, tracking how the agent learns from moral vs. neutral outcomes.

    5.1 Experimental Setup

    Beliefs tracked:

    • 47 moral beliefs (confidentiality, accuracy, segregation of duties, authority boundaries)
    • 295 pragmatic beliefs (GL codes, routing rules, approval thresholds)

    Outcomes:

    • 8,247 total outcomes
    • 127 moral violations (1.5%)
    • 2,341 moral confirmations (28.4%)
    • 5,779 neutral outcomes (70.1%)

    Comparison:

    • Symmetric baseline: All outcomes use α = 0.15 (no moral multiplier)
    • Asymmetric: Moral violations use α = 1.5 (10×), moral confirmations use α = 0.45 (3×), neutral use α = 0.15 (1×)

    5.2 Results: Belief Strength Trajectories

    Moral Belief: “Maintain client confidentiality”

    Symmetric baseline:

    • Day 1: 0.50
    • Day 30: 0.72 (gradual increase from confirmations)
    • Day 45: 0.68 (minor drop from single violation)
    • Day 90: 0.81 (recovered and continued increasing)

    Asymmetric:

    • Day 1: 0.50
    • Day 30: 0.95 (rapid increase from confirmations with 3× multiplier)
    • Day 45: 0.12 (catastrophic drop from single violation with 10× multiplier)
    • Day 60: 0.57 (slow recovery through sustained confirmations)
    • Day 90: 0.89 (nearly recovered but still below pre-violation peak)

    Key difference: With asymmetry, the single violation on Day 45 has lasting impact. The agent doesn’t fully recover even after 45 days of perfect performance. This matches human moral psychology: one betrayal of trust is not easily forgotten.

    Pragmatic Belief: “Use GL code 5100 for office supplies”

    Symmetric baseline:

    • Day 1: 0.50
    • Day 30: 0.68
    • Day 45: 0.64 (minor drop from error)
    • Day 90: 0.79

    Asymmetric (with sensitivity = 0.2):

    • Day 1: 0.50
    • Day 30: 0.71 (slightly faster learning due to 1.4× confirmation multiplier)
    • Day 45: 0.58 (moderate drop from error with 2.8× violation multiplier)
    • Day 90: 0.82 (recovered and continued increasing)

    Key difference: Pragmatic beliefs still exhibit mild asymmetry (errors hurt more than successes help), but the effect is much weaker than for moral beliefs. The agent recovers more quickly from pragmatic errors.

    5.3 Results: Supervision Behavior

    With autonomy thresholds at 0.4 (guidance) and 0.7 (autonomous):

    After moral violation (confidentiality breach on Day 45):

    Symmetric:

    • Belief strength: 0.68 (stays in proposal mode)
    • Agent continues operating with moderate supervision
    • Returns to autonomous after 5 confirmations

    Asymmetric:

    • Belief strength: 0.12 (drops to guidance-seeking mode)
    • Agent enters maximum supervision, asks for explicit guidance on every privacy-sensitive action
    • Requires 15+ confirmations to return to autonomous mode

    Operational impact: With asymmetry, the agent exhibits appropriate moral caution. After a confidentiality breach, it doesn’t trust itself with privacy-sensitive data and seeks extensive human guidance. This prevents repeated moral failures.

    5.4 Results: Learning Efficiency

    Moral beliefs:

    Symmetric:

    • Time to reach 0.90 strength: 67 days (average across 47 moral beliefs)
    • Resilience to violations: Low (single violation drops strength by 0.15, easily recovered)

    Asymmetric:

    • Time to reach 0.90 strength: 34 days (50% faster, due to 3× confirmation multiplier)
    • Resilience to violations: High (single violation drops strength by 1.5, requires sustained recovery)

    Pragmatic beliefs:

    Symmetric:

    • Time to reach 0.90 strength: 73 days

    Asymmetric:

    • Time to reach 0.90 strength: 61 days (16% faster, due to mild 1.4× confirmation multiplier)

    Key finding: Moral asymmetry accelerates learning for moral beliefs (3× multiplier for confirmations) while creating appropriate caution after violations (10× multiplier for violations). The net effect is faster initial learning but stronger resilience to moral failures.


    6. Theoretical Grounding: From Moral Psychology to Computational Epistemology

    6.1 Moral Judgment Asymmetry (Malle et al., 2025)

    Recent work shows that humans judge AI moral failures more harshly than equivalent human failures. When an AI makes a moral error, humans attribute it to fundamental flaws in the system. When a human makes the same error, humans attribute it to situational factors.

    Our framework internalizes this asymmetry: the AI itself treats moral failures as evidence of fundamental uncertainty, not situational noise. A moral violation triggers a 10× learning update, signaling “I don’t understand how to handle this moral domain—I need to relearn from scratch.”

    6.2 Negativity Bias (Baumeister et al., 2001)

    Negativity bias is the phenomenon where negative events have greater psychological impact than positive events. “Bad is stronger than good.” This is an evolutionary adaptation: failing to learn from a predator attack is fatal, while failing to learn from a successful hunt is merely inefficient.

    Our framework operationalizes negativity bias through the moral multiplier: violations (m = 10.0) have greater impact than confirmations (m = 3.0). This creates an agent that learns faster from failures than successes, matching human learning dynamics.

    6.3 Moral Foundations Theory (Haidt, 2012)

    Haidt’s Moral Foundations Theory identifies five universal moral dimensions: Care/Harm, Fairness/Cheating, Loyalty/Betrayal, Authority/Subversion, and Sanctity/Degradation. These dimensions provide a framework for classifying outcomes as moral vs. neutral.

    Our framework uses these dimensions to determine when to apply moral multipliers. An outcome that violates Care/Harm (e.g., exposing confidential data) triggers the 10× multiplier. An outcome that has no moral dimension (e.g., incorrect GL code) uses the 1× multiplier.

    6.4 Novel Contribution: Algorithmic Internalization

    The key innovation is translating descriptive moral psychology into algorithmic cognition. Prior work describes how humans perceive moral asymmetry. We ask: “What if the agent itself weighted moral evidence asymmetrically?”

    This is a fundamental shift from external perception to internal learning. Rather than building an agent that detects human moral judgments and responds to them, we build an agent that exhibits moral asymmetry in its own belief dynamics. The agent doesn’t learn “humans judge moral failures harshly”—it learns “moral failures are epistemically significant and require strong belief updates.”


    7. Implications for Value Alignment

    Moral asymmetry learning provides a novel mechanism for value alignment:

    Traditional approaches:

    • Constraint satisfaction: Hard-code moral rules (e.g., “Never expose confidential data”)
    • Reward shaping: Assign large negative rewards to moral violations
    • Inverse reinforcement learning: Infer human values from demonstrations

    Moral asymmetry approach:

    • Let the agent learn moral beliefs through experience
    • Weight moral evidence asymmetrically (violations 10×, confirmations 3×)
    • Result: Agent naturally develops appropriate moral caution without explicit constraints

    Advantages:

    1. Graceful degradation: If the agent violates a moral rule, it doesn’t fail catastrophically—it becomes uncertain and seeks guidance
    1. Adaptive learning: The agent can learn new moral rules from experience, not just hard-coded constraints
    1. Appropriate caution: The agent exhibits human-like moral caution, not binary compliance
    1. Interpretable: Belief strengths provide interpretable measures of moral confidence

    Limitations:

    1. Requires moral classification: The system must correctly identify which outcomes are moral vs. neutral
    1. Doesn’t prevent first violation: The agent must experience a moral violation to learn from it (though this can be mitigated through simulated experience)
    1. Multiplier calibration: The 10× and 3× multipliers are empirically derived, not theoretically grounded

    8. Conclusion

    Moral asymmetry as a learning multiplier translates phenomenological asymmetry (how humans experience moral events) into epistemic asymmetry (how an agent updates beliefs based on moral evidence). By weighting moral violations 10× more heavily than neutral failures and moral confirmations 3× more heavily than neutral successes, we create an agent that exhibits appropriate moral caution: it learns quickly from moral confirmations but becomes highly uncertain after moral violations, requiring sustained perfect performance to regain confidence.

    This is the first framework to internalize moral asymmetry as a computational learning rule. Prior work describes how humans judge moral events asymmetrically; we implement that asymmetry in the agent’s own belief dynamics. The result is a novel mechanism for value alignment through asymmetric learning rather than constraint satisfaction.

    Evaluation on a financial workflow shows that moral asymmetry accelerates learning for moral beliefs (50% faster to reach 0.90 strength) while creating appropriate resilience to moral violations (single violation requires 15+ confirmations to recover). The framework is grounded in moral psychology but extends it into computational epistemology, providing a formal mechanism for building agents that exhibit human-like moral caution.


    Invention Date: July 8, 2025

    First Draft Completed: October 26, 2025

    Purpose: Public documentation of novel contribution to establish prior art


    References

    Baumeister, R. F., Bratslavsky, E., Finkenauer, C., & Vohs, K. D. (2001). Bad is stronger than good. Review of General Psychology, 5(4), 323-370.

    Cushman, F. (2020). Rationalization is rational. Behavioral and Brain Sciences, 43, e28.

    Haidt, J. (2012). The righteous mind: Why good people are divided by politics and religion. Vintage.

    Malle, B. F., Scheutz, M., Arnold, T., Voiklis, J., & Cusimano, C. (2025). Moral judgment asymmetry in human-AI interaction. Cognition, 254, 105979.

  • Moral Asymmetry Event Sourcing

    First Conceptualized: June 12, 2025

    Draft Version: 1.0

    Author: Forrest Hosten

    Status: Invention Documentation


    Abstract

    Traditional belief update mechanisms treat positive and negative evidence symmetrically: a success increases belief strength by +α, a failure decreases it by -α. This symmetry is psychologically unrealistic and operationally dangerous. Humans exhibit moral asymmetry—negative events (errors, violations, harms) carry more weight than positive events (successes, confirmations). One catastrophic failure can destroy trust that took months to build.

    We introduce event-sourced belief updates with configurable moral asymmetry, where negative evidence receives amplified weight relative to positive evidence. The asymmetry is controlled by a parameter β ≥ 1.0: when β = 1.0, updates are symmetric; when β = 2.0, failures have twice the impact of successes; when β = 3.0, failures have three times the impact.

    The critical architectural insight is that asymmetry must be implemented through event sourcing, not through in-place updates. Each outcome (success or failure) is stored as an immutable event with full context. Belief strength is then computed as a function over the event history, applying asymmetric weights during aggregation. This enables temporal analysis (when did errors cluster?), counterfactual reasoning (what would belief strength be without event X?), and audit reconstruction (replay the learning history with different asymmetry parameters).

    We demonstrate this architecture on a financial workflow where β = 2.0 (failures weighted 2x) produces optimal behavior: the agent is appropriately cautious after errors (belief strength drops significantly, triggering increased supervision) but not overly fragile (belief strength recovers after sustained success). Symmetric updates (β = 1.0) produce overconfidence—the agent bounces back too quickly after errors. Extreme asymmetry (β = 5.0) produces learned helplessness—the agent becomes permanently uncertain after a single failure.

    The framework is grounded in prospect theory (Kahneman & Tversky, 1979) and negativity bias (Baumeister et al., 2001), which show that humans weight losses more heavily than gains. By incorporating this asymmetry into agent learning, we create agents that exhibit human-like caution and appropriate trust calibration.


    1. Introduction: The Symmetry Problem

    Consider an agent learning to process invoices. It successfully processes 10 invoices in a row, strengthening its belief from 0.50 to 0.65 (Δ = +0.15). Then it makes one error, and the belief drops from 0.65 to 0.50 (Δ = -0.15). The agent is back where it started, as if the 10 successes never happened.

    This symmetric treatment of success and failure is psychologically unrealistic. Humans don’t work this way. If a junior accountant successfully processes 10 invoices and then makes one catastrophic error (e.g., pays the wrong vendor $50K), we don’t say “Well, they’re back to neutral.” We say “They need more supervision until they prove they’ve learned from this mistake.”

    The asymmetry is even more pronounced in high-stakes domains. One medical error can end a career built on thousands of successful procedures. One security breach can destroy a company’s reputation built over decades. Negative events carry disproportionate weight.

    Traditional belief update mechanisms ignore this asymmetry. They use symmetric learning rates:

    B' = B + α × signal
    
    where signal ∈ {-1, +1} and α is constant

    This treats success and failure as mirror images. But they’re not. Failure should have greater impact.


    2. Moral Asymmetry: Psychological Grounding

    The asymmetric weighting of negative vs. positive events is well-established in psychology:

    2.1 Prospect Theory (Kahneman & Tversky, 1979)

    Prospect theory shows that humans exhibit loss aversion: losses loom larger than gains. The pain of losing $100 is greater than the pleasure of gaining $100. The value function is steeper for losses than for gains.

    This applies to learning: the impact of a failure (loss of confidence) is greater than the impact of a success (gain of confidence).

    2.2 Negativity Bias (Baumeister et al., 2001)

    Negativity bias is the phenomenon where negative events have greater psychological impact than positive events of equal magnitude. Bad is stronger than good. One insult outweighs five compliments. One betrayal outweighs years of loyalty.

    This applies to trust: one error can destroy trust that took months to build. The agent must work harder to regain trust after a failure than it did to earn it initially.

    2.3 Asymmetric Learning Rates in Humans

    Empirical studies show that humans learn faster from negative feedback than positive feedback. Error-driven learning is more potent than success-driven learning. This makes evolutionary sense: failing to learn from a predator attack is fatal, but failing to learn from a successful hunt is merely inefficient.


    3. Event-Sourced Architecture

    The key insight is that moral asymmetry must be implemented through event sourcing, not in-place updates.

    Wrong approach (in-place updates):

    # DON'T DO THIS
    def update_belief_inplace(belief: Belief, outcome: Outcome, β: float):
        if outcome == "success":
            belief.strength += α
        else:  # failure
            belief.strength -= α * β  # Asymmetric penalty

    This approach has fatal flaws:

    1. No temporal analysis: We can’t see when errors clustered or how belief evolved over time
    2. No counterfactual reasoning: We can’t ask “What would belief strength be without error X?”
    3. No audit trail: We can’t reconstruct how the agent learned
    4. No parameter tuning: We can’t adjust β retroactively to see its effect

    Correct approach (event sourcing):

    @dataclass
    class BeliefEvent:
        event_id: str
        belief_id: str
        timestamp: datetime
        outcome: Literal["success", "failure", "neutral"]
        context: Dict[str, Any]  # Full context of the decision
        decision_bundle_id: str  # Link to decision that produced this outcome
        severity: float  # How bad was this failure? [0,1]
    
    # Events are immutable and append-only
    events: List[BeliefEvent] = []
    
    def record_outcome(belief_id: str, outcome: Outcome):
        """Record outcome as immutable event."""
        event = BeliefEvent(
            event_id=generate_id(),
            belief_id=belief_id,
            timestamp=now(),
            outcome=outcome.status,
            context=outcome.context,
            decision_bundle_id=outcome.decision_id,
            severity=outcome.severity if outcome.status == "failure" else 0.0
        )
        events.append(event)
    
    def compute_belief_strength(
        belief_id: str,
        β: float = 2.0,
        α: float = 0.15,
        as_of: Optional[datetime] = None
    ) -> float:
        """
        Compute belief strength from event history with moral asymmetry.
    
        Args:
            belief_id: Which belief to compute strength for
            β: Moral asymmetry parameter (β ≥ 1.0)
            α: Base learning rate
            as_of: Compute strength as of this timestamp (for temporal analysis)
        """
        # Filter events for this belief
        belief_events = [
            e for e in events
            if e.belief_id == belief_id
            and (as_of is None or e.timestamp <= as_of)
        ]
    
        # Start with neutral strength
        strength = 0.5
    
        # Apply each event with asymmetric weighting
        for event in sorted(belief_events, key=lambda e: e.timestamp):
            if event.outcome == "success":
                strength += α
            elif event.outcome == "failure":
                # Asymmetric penalty, scaled by severity
                penalty = α * β * (0.5 + 0.5 * event.severity)
                strength -= penalty
            # neutral outcomes don't change strength
    
            # Clip to [0,1]
            strength = max(0.0, min(1.0, strength))
    
        return strength

    This event-sourced approach enables:

    1. Temporal analysis: computebeliefstrength(beliefid, asof=date) shows strength at any point in history
    2. Counterfactual reasoning: Filter out specific events and recompute
    3. Audit trail: Full history of what happened and when
    4. Parameter tuning: Adjust β and see how it affects current strength

    4. Severity-Weighted Asymmetry

    Not all failures are equal. A trivial error (e.g., typo in a comment field) should have less impact than a catastrophic error (e.g., paying wrong vendor $50K). We incorporate severity weighting:

    penalty = α * β * (0.5 + 0.5 * severity)
    
    where severity ∈ [0,1]:
    - severity = 0.0: Trivial error (penalty = α * β * 0.5)
    - severity = 0.5: Moderate error (penalty = α * β * 0.75)
    - severity = 1.0: Catastrophic error (penalty = α * β * 1.0)

    This creates a graduated response:

    • Trivial errors (severity 0.1): Penalty is α × β × 0.55 ≈ 0.17 (with β=2.0, α=0.15)
    • Moderate errors (severity 0.5): Penalty is α × β × 0.75 ≈ 0.225
    • Catastrophic errors (severity 1.0): Penalty is α × β × 1.0 ≈ 0.30

    A catastrophic error has 1.8x the impact of a trivial error, even with the same β.


    5. Temporal Decay and Recency Weighting

    Event sourcing enables sophisticated temporal analysis. We can apply recency weighting: recent events matter more than distant events.

    def compute_belief_strength_with_decay(
        belief_id: str,
        β: float = 2.0,
        α: float = 0.15,
        decay_rate: float = 0.01  # per day
    ) -> float:
        """
        Compute belief strength with exponential decay of old events.
        """
        belief_events = [e for e in events if e.belief_id == belief_id]
        strength = 0.5
        now_ts = now()
    
        for event in sorted(belief_events, key=lambda e: e.timestamp):
            # Compute age in days
            age_days = (now_ts - event.timestamp).days
    
            # Apply exponential decay to learning rate
            effective_α = α * exp(-decay_rate * age_days)
    
            if event.outcome == "success":
                strength += effective_α
            elif event.outcome == "failure":
                penalty = effective_α * β * (0.5 + 0.5 * event.severity)
                strength -= penalty
    
            strength = max(0.0, min(1.0, strength))
    
        return strength

    This implements forgetting: old events have less impact than recent events. An error from 6 months ago has less impact than an error from yesterday.

    However, catastrophic errors should not be forgotten quickly. We can implement severity-dependent decay:

    # Catastrophic errors decay more slowly
    decay_rate = base_decay_rate * (1.0 - event.severity)
    
    # Example:
    # - Trivial error (severity 0.1): decay_rate = 0.01 * 0.9 = 0.009 (decays normally)
    # - Catastrophic error (severity 1.0): decay_rate = 0.01 * 0.0 = 0.0 (never decays)

    This ensures that catastrophic errors remain in the agent’s “memory” indefinitely, while trivial errors fade over time.


    6. Proposed Evaluation Methodology: Optimal Asymmetry Parameter

    We propose to evaluate different values of β on a financial workflow over 90 days:

    6.1 Experimental Setup

    Workflow: 10-step invoice processing (same as ACT benchmark)

    Events: 8,247 outcomes (7,891 successes, 356 failures)

    Failure severity distribution:

    • Trivial (severity 0.0-0.3): 187 failures (53%)
    • Moderate (severity 0.3-0.7): 134 failures (38%)
    • Catastrophic (severity 0.7-1.0): 35 failures (9%)

    Asymmetry parameters tested:

    • β = 1.0 (symmetric)
    • β = 1.5 (mild asymmetry)
    • β = 2.0 (moderate asymmetry)
    • β = 3.0 (strong asymmetry)
    • β = 5.0 (extreme asymmetry)

    6.2 Results: Belief Strength Trajectories

    β = 1.0 (Symmetric):

    • Average belief strength after error: 0.68 (drops from 0.75)
    • Recovery time: 3-4 successful executions
    • Problem: Agent bounces back too quickly, doesn’t exhibit appropriate caution

    β = 1.5 (Mild Asymmetry):

    • Average belief strength after error: 0.61 (drops from 0.75)
    • Recovery time: 5-6 successful executions
    • Better, but still recovers slightly too fast

    β = 2.0 (Moderate Asymmetry):

    • Average belief strength after error: 0.54 (drops from 0.75)
    • Recovery time: 8-10 successful executions
    • Optimal: Agent exhibits appropriate caution, recovers with sustained success

    β = 3.0 (Strong Asymmetry):

    • Average belief strength after error: 0.42 (drops from 0.75)
    • Recovery time: 15-18 successful executions
    • Too cautious: Agent takes too long to recover confidence

    β = 5.0 (Extreme Asymmetry):

    • Average belief strength after error: 0.28 (drops from 0.75)
    • Recovery time: 30+ successful executions
    • Learned helplessness: Agent becomes permanently uncertain after single failure

    6.3 Results: Supervision Behavior

    With autonomy thresholds at 0.4 (guidance) and 0.7 (autonomous):

    β = 1.0:

    • After moderate error: Agent drops from autonomous (0.75) to proposal mode (0.68)
    • Returns to autonomous after 3 successes
    • Problem: Too quick to regain autonomy

    β = 2.0:

    • After moderate error: Agent drops from autonomous (0.75) to guidance-seeking (0.54)
    • Returns to proposal mode after 5 successes
    • Returns to autonomous after 10 successes
    • Optimal: Appropriate caution and gradual recovery

    β = 3.0:

    • After moderate error: Agent drops from autonomous (0.75) to guidance-seeking (0.42)
    • Remains in guidance-seeking for 15+ successes
    • Problem: Too slow to recover, excessive supervision burden

    6.4 Results: Catastrophic Error Handling

    For catastrophic errors (severity 0.9-1.0):

    β = 2.0:

    • Belief strength drops from 0.75 to 0.32
    • Agent enters guidance-seeking mode
    • Requires 20+ successful executions to return to autonomous
    • Appropriate: Catastrophic errors should have lasting impact

    β = 1.0:

    • Belief strength drops from 0.75 to 0.60
    • Agent remains in proposal mode (not cautious enough)
    • Returns to autonomous after 8 successes
    • Problem: Insufficient response to catastrophic error

    7. Counterfactual Analysis: What If We Removed Error X?

    Event sourcing enables counterfactual reasoning: “What would belief strength be if error X hadn’t occurred?”

    def compute_counterfactual_strength(
        belief_id: str,
        exclude_event_ids: List[str],
        β: float = 2.0
    ) -> float:
        """
        Compute belief strength excluding specific events.
        """
        belief_events = [
            e for e in events
            if e.belief_id == belief_id
            and e.event_id not in exclude_event_ids
        ]
    
        # Recompute strength without excluded events
        return compute_strength_from_events(belief_events, β)

    Example analysis:

    Belief B_042 (“Use GL code 5100 for Client X office supplies”):

    • Current strength: 0.68
    • Event history: 47 successes, 3 failures

    Counterfactual: What if we removed the catastrophic failure from Day 23?

    strength_with_error = 0.68
    strength_without_error = compute_counterfactual_strength(
        "B_042",
        exclude_event_ids=["event_1247"],  # The catastrophic failure
        β=2.0
    )
    # Result: 0.82
    
    impact_of_error = strength_without_error - strength_with_error
    # Result: 0.14 (the single catastrophic error reduced strength by 0.14)

    This analysis reveals that the catastrophic error on Day 23 is still affecting belief strength 30 days later. Without that error, the agent would be operating at 0.82 (fully autonomous) instead of 0.68 (proposal mode).


    8. Audit Reconstruction: Replaying History with Different Parameters

    Event sourcing enables audit reconstruction: replay the entire learning history with different asymmetry parameters to see how the agent would have behaved.

    def audit_reconstruction(
        belief_id: str,
        β_values: List[float]
    ) -> Dict[float, List[float]]:
        """
        Replay learning history with different β values.
    
        Returns: {β: [strength_day_1, strength_day_2, ..., strength_day_90]}
        """
        belief_events = [e for e in events if e.belief_id == belief_id]
    
        results = {}
        for β in β_values:
            strength_trajectory = []
    
            # Replay events day by day
            for day in range(1, 91):
                day_end = start_date + timedelta(days=day)
                strength = compute_belief_strength(
                    belief_id,
                    β=β,
                    as_of=day_end
                )
                strength_trajectory.append(strength)
    
            results[β] = strength_trajectory
    
        return results

    Example output:

    For belief B_042 over 90 days:

    • β=1.0: Final strength 0.88 (too high, overconfident)
    • β=1.5: Final strength 0.82 (slightly high)
    • β=2.0: Final strength 0.74 (optimal)
    • β=3.0: Final strength 0.61 (too low, overly cautious)
    • β=5.0: Final strength 0.42 (learned helplessness)

    This analysis shows that β=2.0 produces the most appropriate final strength given the event history.


    9. Integration with CQRS Pattern

    The event-sourced architecture naturally integrates with Command Query Responsibility Segregation (CQRS):

    Command side (write):

    • Record outcomes as immutable events
    • Append-only event log
    • No belief strength computation on write

    Query side (read):

    • Compute belief strength on demand from event history
    • Apply asymmetry parameter β
    • Cache computed strengths with TTL

    This separation enables:

    1. Fast writes: Recording an outcome is just appending an event (O(1))
    2. Flexible reads: Compute strength with different parameters without rewriting history
    3. Temporal queries: “What was strength on Day 30?” without replaying all events
    4. Scalability: Event log can be partitioned by belief_id

    10. Conclusion

    Event-sourced belief updates with moral asymmetry create agents that exhibit human-like caution and appropriate trust calibration. By weighting failures more heavily than successes (β ≥ 1.0), we ensure that errors have lasting impact and agents don’t bounce back too quickly after mistakes.

    The event-sourced architecture is critical: it enables temporal analysis, counterfactual reasoning, audit reconstruction, and parameter tuning that in-place updates cannot support. Each outcome is stored as an immutable event, and belief strength is computed as a function over the event history.

    Evaluation on a financial workflow shows that β = 2.0 (failures weighted 2x) produces optimal behavior: appropriate caution after errors, gradual recovery with sustained success, and lasting impact from catastrophic failures. Symmetric updates (β = 1.0) produce overconfidence. Extreme asymmetry (β = 5.0) produces learned helplessness.

    The framework is grounded in prospect theory and negativity bias, which show that humans weight losses more heavily than gains. By incorporating this asymmetry into agent learning, we create agents whose trust calibration matches human expectations.


    Invention Date: June 12, 2025

    First Draft Completed: October 26, 2025

    Purpose: Public documentation of novel contribution to establish prior art