Documentation

Linglib.Phenomena.Causation.Studies.NadathurLauer2020

Structural Causation Tests #

@cite{nadathur-lauer-2020} @cite{pearl-2000}

Verification that Core.StructuralEquationModel correctly models classic causal structures from the philosophy and linguistics literature. Each section sets up a concrete CausalDynamics, states the expected causal profile, and proves the predictions match via native_decide.

Scenarios #

ScenarioStructureKey prediction
PreemptionA→C, B→C, A fires firstA sufficient+necessary, B sufficient but not necessary
PreventionA→C, B blocks AB necessary for ¬C
EnablingA background, B→(A∧B→C)B sufficient given A, not without A
Double preventionA prevents B, B prevents CA enables C indirectly
Symmetric overdeterminationA→C, B→C, both presentNeither necessary

1. Early preemption #

Billy and Suzy both throw rocks at a bottle. Suzy's rock arrives first and shatters the bottle. Billy's rock would have shattered it otherwise.

Model: two independent laws, both causes present. This is structurally identical to overdetermination in the Causation API (both sufficient, neither necessary). The API does not distinguish temporal preemption from symmetric overdetermination — both reduce to disjunctive causation.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    Equations
    • One or more equations did not get rendered due to their size.
    Instances For

      "Suzy made the bottle shatter" is true; "Suzy caused the bottle to shatter" is false — matching Nadathur & Lauer's prediction for overdetermination.

      When Suzy is the sole thrower, she both "made" and "caused" the shattering. Under @cite{nadathur-2024} Def 10b, the background encodes Billy's absence rather than Suzy's presence.

      2. Prevention #

      A surgeon operates (S), which prevents the patient from dying (D). Without surgery the disease (B) would kill the patient.

      Model: B → D (disease causes death), S ∧ B → ¬D is modeled by making surgery block the disease law. We model this as: B → D is the only law, and surgery removes B from the situation (counterfactual intervention).

      Without surgery: disease → death.

      Equations
      • One or more equations did not get rendered due to their size.
      Instances For

        Background: disease present, no surgery (no_surgery = true).

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For

          3. Enabling conditions #

          Oxygen is present (background). Striking a match (M) causes fire (F) only when oxygen (O) is present: O ∧ M → F.

          The match is an agent cause; oxygen is an enabling condition. Nadathur & Lauer predict "make" is appropriate for the match (sufficient given oxygen) while "cause" requires necessity.

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For

            4. Causal chain with bypass #

            A → B → C, but also A → C directly. B is an intermediate that is not necessary because A has a direct path to C.

            Model: two laws: A → B, A → C.

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

              5. Causal profiles summary #

              Verify the full CausalProfile for each scenario.

              Preemption (both present): sufficient, not necessary, direct.

              Enabling: match is sufficient, necessary, direct (given oxygen). Under @cite{nadathur-2024} Def 10b, bg excludes the cause.

              Chain bypass: B has no causal power over C. B is not sufficient (no B→C law), but IS necessary under Def 10b: the only way to achieve C is through A→C, which also fires A→B, so every path to C entails B.

              6. Intervention (Pearl's do-operator) #

              Verify that intervene correctly cuts incoming laws and that manipulates detects interventionist causation.

              Intervening on the effect of a simple law cuts the law. do(bottleShatters = false) in preemption removes both laws targeting bottleShatters.

              After do(bottleShatters = false), the bottle doesn't shatter even with Suzy throwing — the intervention overrides the dynamics.

              7. Actual causation #

              Retrospective causal judgments: "did X actually cause Y in this situation?" actuallyCaused tests whether the cause occurred AND was causally necessary (under @cite{nadathur-2024} Def 10b).

              In preemption (both throwers), Suzy did NOT actually cause the shattering — Billy's backup blocks necessity.

              In the enabling scenario, the match actually caused the flame (given oxygen as background).