"Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced."

nuclear health · generated 2026-04-01 · v1.3.1
UNDETERMINED 2 citations
Evidence assessed across 2 verified citations.
Verified by Proof Engine — an open-source tool that verifies claims using cited sources and executable code. Reasoning transparent and auditable.
methodology · github · re-run this proof · submit your own

This is a claim that sounds settled — and in some circles is treated as fact — but the data behind it is more complicated than it first appears.

What Was Claimed?

The claim is that nuclear energy kills fewer people per unit of electricity produced than any other source — that if you rank every way we generate electricity by how deadly it is, nuclear sits at the very bottom. This matters because safety comparisons between energy sources come up constantly in debates about climate policy, energy transitions, and the risks of keeping nuclear plants running versus replacing them with renewables.

What Did We Find?

We looked at the most widely cited dataset on this topic, compiled by Our World in Data from two peer-reviewed studies. When you rank all electricity sources by deaths per terawatt-hour — including coal, oil, gas, nuclear, hydro, solar, wind, and biofuels — nuclear comes in second, not first. Biofuels from power plants (biogas and biomass electricity) register a lower death rate than nuclear by the best available estimates.

That's the first problem. The second is more fundamental: nuclear has two substantially different death-rate estimates from two credible research teams, and they disagree by nearly eight times. One study counted mainly accident deaths (Chernobyl, Fukushima, and similar events) and put nuclear at 0.0097 deaths per TWh. Another included occupational deaths and some air-pollution effects and came up with 0.074 deaths per TWh. Under that second estimate, nuclear is actually less safe than solar and wind on a straight comparison of numbers.

There's no scientific consensus on which estimate is correct, because the disagreement is methodological — researchers genuinely differ on which categories of death should count. The data source itself, Our World in Data, explicitly flags this problem. They write that comparing nuclear, solar, and wind at the low end of the chart is "misguided" because the uncertainty ranges around these values likely overlap. In other words, the world's leading reference on this question tells us not to draw the exact conclusion this claim makes.

What isn't in dispute: nuclear is dramatically safer than fossil fuels by any measure. Coal kills roughly 2,500 times more people per unit of electricity than nuclear by the lower estimate. Gas is about 290 times more lethal. The gap between nuclear and fossil fuels is so large that it holds up even under the higher nuclear death-rate estimate.

What Should You Keep In Mind?

The claim as stated — that nuclear is definitively the safest — requires a precision the evidence can't support. The question of whether nuclear, solar, wind, or biofuels sits at the very bottom of the ranking depends entirely on which methodology you use for nuclear, and no agreed standard exists. If the M&W 2007 method is correct, nuclear isn't the safest among low-carbon sources at all. If Sovacool 2016 is correct, biofuels still edges it out.

It's also worth noting that the comparison between low-carbon sources involves very small absolute numbers. The difference between nuclear at 0.0097 and solar at 0.019 deaths per TWh is tiny in practice — both are extraordinarily safe compared to anything that burns fuel. The ranking within that group is genuinely uncertain, and the researchers who compiled the data say so.

How Was This Verified?

This verdict was reached by fetching and cross-checking the underlying data from Our World in Data live, verifying all nine death-rate values against the source dataset, and running three independent adversarial checks — including one that found direct counter-evidence from the Markandya & Wilkinson (2007) nuclear estimate. You can read the full reasoning in the structured proof report, examine every source fetch and verification step in the full verification audit, or re-run the proof yourself.

What could challenge this verdict?

Search 1 — Does biofuels exclusion change the result? Searched "biofuels electricity generation death rate OWID Sovacool" and reviewed OWID methodology. Finding: OWID's "death rates from energy production" comparison includes biofuels as an electricity generation source; biofuels in this context covers biogas and biomass power plants. Even if biofuels were excluded, the uncertainty_override still applies because OWID explicitly warns that comparing nuclear/solar/wind is "misguided." Result: does not break the UNDETERMINED verdict.

Search 2 — Markandya & Wilkinson (2007) estimate for nuclear. Reviewed the OWID all-sources Wikimedia Commons dataset, which lists both nuclear estimates (0.074 M&W 2007 and 0.0097 Sovacool 2016). Under M&W 2007, nuclear (0.074 deaths/TWh) is less safe than solar (0.019) and wind (0.035) on a point-estimate basis. This directly contradicts the claim. The 7.6× discrepancy between estimates reflects genuine methodological disagreement. This counter-evidence breaks the proof (breaks_proof: True).

Search 3 — Consensus source for nuclear as definitively lowest. Searched "nuclear lowest death rate electricity all sources 2024 definitive" and "safest energy source peer reviewed 2023." Finding: no authoritative source makes the unqualified claim that nuclear has the definitively lowest death rate per TWh across all electricity sources. Our World in Data — the most widely cited source on this topic — explicitly cautions against this ranking. Most sources describe nuclear as "among the safest" or "comparable to solar and wind."


Sources

SourceIDTypeVerified
Our World in Data — 'What are the safest and cleanest sources of energy?' (Hannah Ritchie, 2020; updated July 2022) B1 Reference Yes
Our World in Data via Wikimedia Commons — deaths per TWh all sources (Markandya & Wilkinson 2007 + Sovacool et al. 2016) B2 Unclassified Yes
Nuclear rank by Sovacool 2016 death rate among all electricity sources (1 = lowest/safest) A1 Computed
Coal-to-nuclear death rate ratio (coal M&W 2007 / nuclear Sovacool 2016): shows nuclear is dramatically safer than fossil fuels even if it is not THE lowest A2 Computed

detailed evidence

Detailed Evidence

Evidence Summary

ID Fact Verified
B1 OWID 'What are the safest and cleanest sources of energy?' — uncertainty caveat: comparing nuclear/solar/wind is 'misguided' because uncertainties are likely to overlap Yes (fragment, 81.2%)
B2 Our World in Data via Wikimedia Commons — death rates per TWh for all electricity sources (Markandya & Wilkinson 2007 + Sovacool et al. 2016) Yes
A1 Nuclear rank by Sovacool 2016 death rate among all electricity sources (1 = lowest/safest) Computed: Rank 2 of 8 (biofuels ranks 1st at 0.0048 deaths/TWh; nuclear is 0.0097 deaths/TWh)
A2 Coal-to-nuclear death rate ratio (coal M&W 2007 / nuclear Sovacool 2016): shows nuclear is dramatically safer than fossil fuels even if it is not THE lowest Computed: 2538.1× (coal is 2,538 times more lethal per TWh than nuclear by these estimates)

Note: B2 (wikimedia.org) has credibility tier 2 (unclassified domain). However, the content is the official Our World in Data dataset published on Wikimedia Commons — a standard OWID data publication channel. See Source Credibility Assessment in the audit trail.

Source: proof.py JSON summary


Proof Logic

The claim is a superlative: nuclear must rank first (lowest death rate per TWh) among all electricity generation sources.

Step 1 — Construct the full ranking (B2, A1). Using the OWID composite dataset (Sovacool et al. 2016 for low-carbon; Markandya & Wilkinson 2007 for fossil fuels), all electricity sources rank as follows:

Rank Source Deaths/TWh
1 Biofuels 0.0048
2 Nuclear (Sovacool 2016) 0.0097
3 Solar 0.019
4 Hydro 0.0235
5 Wind 0.035
6 Gas 2.821
7 Oil 18.43
8 Coal 24.62

By point estimates, biofuels (0.0048 deaths/TWh) ranks lower than nuclear (0.0097 deaths/TWh), so nuclear is not rank 1 (A1: rank 2 of 8).

Step 2 — Methodological disagreement for the nuclear estimate (A2). A second independent estimate for nuclear — Markandya & Wilkinson (2007) — gives 0.074 deaths/TWh, approximately 7.6× higher than the Sovacool estimate. Under this estimate, nuclear (0.074) has a higher death rate than solar (0.019) and wind (0.035). The ratio of the two nuclear estimates (0.074 ÷ 0.0097 ≈ 7.6×) reflects genuine methodological disagreement, not rounding: M&W includes occupational deaths and some air-pollution mortality; Sovacool focuses on accident deaths. No consensus determines which is correct.

Step 3 — Source-acknowledged uncertainty (B1). Our World in Data, the primary source for this comparison, explicitly states: "People often focus on the marginal differences at the bottom of the chart — between nuclear, solar, and wind. This comparison is misguided: the uncertainties around these values are likely to overlap." This directly invokes the proof-engine rule for superlative claims with source-acknowledged uncertainty: uncertainty_override = True.

Step 4 — What is robustly established. Across both nuclear estimates (0.0097 and 0.074), nuclear is dramatically safer than fossil fuels. Coal (24.62 deaths/TWh) is roughly 2,538× more lethal than nuclear by Sovacool 2016 and ~332× more lethal by M&W 2007. Gas (2.821 deaths/TWh) is ~291× and ~38× more lethal respectively. This sub-result is not in dispute.


Conclusion

Verdict: UNDETERMINED

The claim that "nuclear power is the safest form of electricity generation with the lowest death rate per TWh" cannot be established for three independent reasons:

  1. Nuclear is not the point-estimate minimum. By the OWID composite dataset, biofuels rank first (0.0048 deaths/TWh) while nuclear ranks second (0.0097 deaths/TWh) by the Sovacool 2016 estimate.

  2. Source-acknowledged uncertainty makes the comparison unresolvable. Our World in Data (B1, verified) explicitly states the comparison between nuclear, solar, and wind is "misguided" because the uncertainty ranges are likely to overlap.

  3. Methodological counter-evidence. The Markandya & Wilkinson (2007) nuclear estimate (0.074 deaths/TWh, B2, verified) places nuclear as less safe than solar and wind by point estimates — directly contradicting the claim.

To resolve this claim, the following evidence would be needed: - A peer-reviewed consensus establishing which nuclear mortality methodology is correct (accident-deaths-only vs. including occupational/air-pollution deaths). - Confidence intervals for all electricity sources from a single consistent methodology, demonstrating that nuclear's interval does not overlap with the next-safest source. - A standardized decision on whether biofuels-for-electricity count as an electricity generation comparator.

What this proof does establish: Nuclear power is dramatically safer than fossil fuels (coal, oil, gas) by any available estimate. This sub-result is robust across methodologies. The ambiguity is limited to whether nuclear, solar, wind, and biofuels can be definitively ranked among themselves.

Note: B2 (wikimedia.org) is classified as Tier 2 (unclassified domain) by the credibility assessor. This reflects the assessor's treatment of wikimedia.org rather than the source's actual authority: B2 is the official OWID dataset, published on Wikimedia Commons as a standard data-sharing channel. The OWID data is the primary reference for this topic and is widely cited in peer-reviewed literature.

audit trail

Citation Verification 1/2 unflagged 1 flagged

1/2 citations unflagged. 1 flagged for review:

  • verified via fragment match (81%)
Original audit log

B1 — OWID safest sources page - Status: verified - Method: fragment (coverage 81.2% — above the 80% threshold for verified) - Fetch mode: live - Note: OWID pages are partially JavaScript-rendered. The key quote was found at 81.2% fragment coverage in the live-fetched HTML, exceeding the 80% threshold for verified status.

B2 — Wikimedia Commons OWID data table - Status: verified - Method: full_quote - Fetch mode: live - Note: The Wikimedia Commons .tab page returns raw tab-separated data in the Data: namespace. The quote describing the dataset ("Death rates from energy production is measured...") was found verbatim. All nine data values (biofuels, nuclear_sovacool, nuclear_mw2007, solar, wind, hydro, coal, oil, gas) were independently verified via verify_data_values() — all found on the live page.

Source: proof.py JSON summary


Claim Specification
Field Value
Subject nuclear power
Property death rate per TWh (deaths from accidents and air pollution) — rank among all electricity generation sources (1 = lowest/safest)
Operator ==
Threshold 1 (nuclear must achieve rank 1, i.e., the minimum death rate)
Operator note 'Safest with the lowest death rate per TWh' is operationalized as nuclear holding rank 1 (minimum death rate) among all electricity generation sources — coal, oil, gas, nuclear, hydro, solar, wind, and biofuels. Data from Our World in Data (OWID) combining Markandya & Wilkinson (2007) for fossil fuels and Sovacool et al. (2016) for low-carbon sources. Two independent nuclear estimates differ by ~8×: 0.0097 (Sovacool 2016) and 0.074 (M&W 2007). OWID explicitly cautions the comparison between nuclear/solar/wind is 'misguided' due to overlapping uncertainty. uncertainty_override=True per proof-engine rules.

Source: proof.py JSON summary


Claim Interpretation

Natural language claim: "Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced."

Formal interpretation: "Safest with the lowest death rate per TWh" is operationalized as nuclear holding rank 1 (minimum death rate) among all electricity generation sources — coal, oil, gas, nuclear, hydro, solar, wind, and biofuels.

The metric is deaths per terawatt-hour (TWh), counting deaths from accidents and air pollution (as used by Our World in Data). Data comes from Markandya & Wilkinson (2007) for fossil fuels and Sovacool et al. (2016) for low-carbon sources.

Operator choice: The claim requires nuclear to be strictly first (lowest), not merely low or comparable. Two independent nuclear estimates exist and differ substantially: there is no consensus on which estimate is "correct," and the primary source explicitly flags that the differences between nuclear, solar, and wind are within overlapping uncertainty ranges. Per proof-engine rules for superlative claims with source-acknowledged uncertainty, uncertainty_override = True and the verdict is UNDETERMINED.


Source Credibility Assessment
Fact ID Domain Type Tier Note
B1 ourworldindata.org reference 3 Established reference source — widely cited in peer-reviewed literature for energy safety statistics
B2 wikimedia.org unknown 2 Unclassified domain — the credibility assessor does not classify wikimedia.org specifically. However, B2 is the official Our World in Data dataset published on Wikimedia Commons (OWID's standard data-sharing channel). The underlying data is sourced from peer-reviewed studies (Markandya & Wilkinson 2007, Lancet; Sovacool et al. 2016, Journal of Cleaner Production). The proof does not depend solely on B2: the uncertainty caveat (B1, Tier 3) is independently verified from ourworldindata.org.

Source: proof.py JSON summary


Computation Traces

Reproduced verbatim from proof.py execution:

--- Death rates per TWh, ranked lowest to highest ---
    (Sovacool 2016 for low-carbon sources; M&W 2007 for fossil fuels)
  Rank  1: biofuels     0.0048 deaths/TWh
  Rank  2: nuclear      0.0097 deaths/TWh  <-- NUCLEAR
  Rank  3: solar        0.0190 deaths/TWh
  Rank  4: hydro        0.0235 deaths/TWh
  Rank  5: wind         0.0350 deaths/TWh
  Rank  6: gas          2.8210 deaths/TWh
  Rank  7: oil          18.4300 deaths/TWh
  Rank  8: coal         24.6200 deaths/TWh

Nuclear rank (Sovacool 2016): 2 of 8
  Nuclear rank == 1 (lowest death rate across all electricity sources): 2 == 1 = False
  Biofuels (0.0048) < Nuclear/Sovacool (0.0097): biofuels has lower rate than nuclear: 0.0048 < 0.0097 = True
  A2: Coal / Nuclear (Sovacool 2016) death-rate ratio: coal / nuclear_sovacool = 24.62 / 0.0097 = 2538.1443
  Nuclear (M&W 2007) / Solar ratio [>1 means nuclear LESS safe than solar by M&W]: nuclear_mw2007 / solar = 0.074 / 0.019 = 3.8947

Source: proof.py inline output (execution trace)


Independent Source Agreement
Cross-check Values Compared Agreement Note
Two independent nuclear death-rate estimates (methodological cross-check) Sovacool 2016: 0.0097; M&W 2007: 0.074 No — differ by 7.6× These are two methodologically distinct estimates, not two independent measurements of the same quantity. M&W 2007 includes occupational and air-pollution deaths; Sovacool 2016 focuses on accidents. The disagreement reflects genuine methodological controversy.

Data value verification (Rule 6 — confirming B2 numbers appear on source):

All nine data values from B2 were found on the live Wikimedia Commons page:

Key Value Found
biofuels 0.0048 ✓ live
nuclear_sovacool 0.0097 ✓ live
nuclear_mw2007 0.074 ✓ live
solar 0.019 ✓ live
wind 0.035 ✓ live
hydro 0.0235 ✓ live
coal 24.62 ✓ live
oil 18.43 ✓ live
gas 2.821 ✓ live

Source: proof.py JSON summary


Adversarial Checks

Check 1 — Does biofuels exclusion change the result? - Question: If biofuels are excluded from 'electricity generation' sources, does nuclear then have the lowest death rate? - Search performed: Reviewed OWID methodology and Sovacool et al. 2016: 'biofuels' in the dataset covers biogas and biomass power plants used for electricity generation. OWID's 'death rates from energy production' chart includes biofuels as an electricity generation source. Searched 'biofuels electricity generation death rate OWID Sovacool' to confirm scope. - Finding: Even if biofuels were excluded, the uncertainty_override=True verdict applies regardless: OWID explicitly warns that comparing nuclear, solar, and wind is 'misguided' because 'the uncertainties around these values are likely to overlap.' Nuclear (0.0097) < solar (0.019) and wind (0.035) by Sovacool 2016 point estimates, but OWID's caveat prevents a definitive superlative ranking. - Breaks proof: No

Check 2 — M&W 2007 nuclear estimate contradicts the claim - Question: Does the Markandya & Wilkinson (2007) nuclear estimate (0.074 deaths/TWh) contradict the claim that nuclear has the lowest death rate? - Search performed: Reviewed the OWID all-sources Wikimedia Commons dataset: it contains two entries for nuclear — 0.074 (M&W 2007) and 0.0097 (Sovacool 2016). These differ by ~8×. M&W 2007 includes occupational deaths and some air-pollution effects; Sovacool 2016 focuses on accident deaths (Chernobyl, Fukushima, other accidents). Searched 'nuclear death rate Markandya Wilkinson 2007 vs Sovacool 2016 comparison' to confirm methodological basis of each estimate. - Finding: The M&W 2007 nuclear estimate (0.074 deaths/TWh) directly contradicts the claim: nuclear would be LESS safe than solar (0.019) and wind (0.035) by point estimates. The 8× discrepancy reflects fundamental methodological disagreement about what death categories to include; no consensus exists on which is 'correct.' Under M&W 2007, nuclear is not only not the safest — it is less safe than two major renewable sources. This counter-evidence breaks the proof. - Breaks proof: Yes → verdict forced to UNDETERMINED

Check 3 — No consensus source establishes nuclear as definitively lowest - Question: Is there a consensus source that definitively establishes nuclear as having the single lowest death rate across all electricity generation sources? - Search performed: Searched 'nuclear lowest death rate electricity all sources 2024 definitive', 'safest energy source peer reviewed 2023', and 'nuclear solar wind death rate definitive ranking'. Reviewed Our World in Data, Sovacool et al. 2016, Markandya & Wilkinson 2007, and WHO energy data. - Finding: No authoritative source makes the unqualified claim that nuclear has the definitively lowest death rate per TWh across all electricity sources. OWID — the most widely cited source on this topic — explicitly cautions against making this comparison. Most sources describe nuclear as 'among the safest' or 'comparable to solar and wind,' not as definitively the lowest. - Breaks proof: No

Source: proof.py JSON summary


Quality Checks
  • Rule 1 ✓ Every empirical value parsed from data_values strings via parse_number_from_quote(), not hand-typed in proof logic.
  • Rule 2 ✓ Both citation URLs fetched live; quotes verified: B1 fragment (81.2%), B2 full. All nine data_values confirmed via verify_data_values().
  • Rule 3date.today() used for generated_at field. Proof logic is not time-dependent (mortality data is from 2014 studies), so no date-dependent computation required.
  • Rule 4CLAIM_FORMAL dict with explicit operator_note documenting the superlative interpretation, both nuclear estimates, the uncertainty caveat, and the basis for uncertainty_override=True.
  • Rule 5 ✓ Three adversarial checks performed via web search and source review, including one (breaks_proof: True) finding that the M&W 2007 nuclear estimate directly contradicts the claim. Each check is structurally independent from the ranking computation.
  • Rule 6 ✓ Two distinct sources in empirical_facts (B1: ourworldindata.org; B2: wikimedia.org). Data values verified against the live B2 page. Methodological cross-check documents the 7.6× discrepancy between the two nuclear estimates.
  • Rule 7 ✓ All computations use compare() and explain_calc() from scripts/computations.py. No hard-coded constants or inline formulas.
  • validate_proof.py result: PASS — 15/15 checks passed, 0 issues, 0 warnings.
Source Data

All values were parsed from data_values strings using parse_number_from_quote(), which extracts the floating-point value via regex. No verify_extraction() calls are needed for data_values (per template — they are verified via verify_data_values() instead).

Fact ID Extracted Value Found in data_values Snippet
B2_nuclear_sovacool 0.0097 Yes data_values['nuclear_sovacool'] = '0.0097'
B2_nuclear_mw2007 0.074 Yes data_values['nuclear_mw2007'] = '0.074'
B2_biofuels 0.0048 Yes data_values['biofuels'] = '0.0048'
B2_solar 0.019 Yes data_values['solar'] = '0.019'
B2_wind 0.035 Yes data_values['wind'] = '0.035'
B2_coal 24.62 Yes data_values['coal'] = '24.62'
B2_gas 2.821 Yes data_values['gas'] = '2.821'

Extraction method: parse_number_from_quote(data_values[key], r"([\d.]+)", fact_id) — standard floating-point extraction, no Unicode normalization needed (all values are ASCII numerics).

Source: proof.py JSON summary; extraction method: author analysis


Cite this proof
Proof Engine. (2026). Claim Verification: “Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced.” — Undetermined. https://doi.org/10.5281/zenodo.19455641
Proof Engine. "Claim Verification: “Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced.” — Undetermined." 2026. https://doi.org/10.5281/zenodo.19455641.
@misc{proofengine_nuclear_power_is_the_safest_form_of_electricity_generation_with_the_lowest,
  title   = {Claim Verification: “Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced.” — Undetermined},
  author  = {{Proof Engine}},
  year    = {2026},
  url     = {https://proofengine.info/proofs/nuclear-power-is-the-safest-form-of-electricity-generation-with-the-lowest/},
  note    = {Verdict: UNDETERMINED. Generated by proof-engine v1.3.1},
  doi     = {10.5281/zenodo.19455641},
}
TY  - DATA
TI  - Claim Verification: “Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced.” — Undetermined
AU  - Proof Engine
PY  - 2026
UR  - https://proofengine.info/proofs/nuclear-power-is-the-safest-form-of-electricity-generation-with-the-lowest/
N1  - Verdict: UNDETERMINED. Generated by proof-engine v1.3.1
DO  - 10.5281/zenodo.19455641
ER  -
View proof source 460 lines · 19.5 KB

This is the exact proof.py that was deposited to Zenodo and runs when you re-execute via Binder. Every fact in the verdict above traces to code below.

"""
Proof: Nuclear power is the safest form of electricity generation with the lowest death rate per TWh produced.
Generated: 2026-04-01

Strategy: This is a superlative comparative claim. The primary data source (Our World in Data, OWID)
explicitly states that comparing nuclear, solar, and wind death rates is "misguided" because the
uncertainties are likely to overlap. Additionally, two independent nuclear death-rate estimates differ
by ~8x (Markandya & Wilkinson 2007: 0.074 deaths/TWh; Sovacool et al. 2016: 0.0097 deaths/TWh),
and even by the most favorable estimate, biofuels (0.0048 deaths/TWh) ranks lower than nuclear (0.0097).
Per proof-engine rules for comparative/superlative claims with source-acknowledged uncertainty,
uncertainty_override=True and the verdict is UNDETERMINED.
"""
import json
import os
import sys

PROOF_ENGINE_ROOT = os.environ.get("PROOF_ENGINE_ROOT")
if not PROOF_ENGINE_ROOT:
    _d = os.path.dirname(os.path.abspath(__file__))
    while _d != os.path.dirname(_d):
        if os.path.isdir(os.path.join(_d, "proof-engine", "skills", "proof-engine", "scripts")):
            PROOF_ENGINE_ROOT = os.path.join(_d, "proof-engine", "skills", "proof-engine")
            break
        _d = os.path.dirname(_d)
    if not PROOF_ENGINE_ROOT:
        raise RuntimeError("PROOF_ENGINE_ROOT not set and skill dir not found via walk-up from proof.py")
sys.path.insert(0, PROOF_ENGINE_ROOT)
from datetime import date

from scripts.verify_citations import verify_all_citations, build_citation_detail, verify_data_values
from scripts.extract_values import parse_number_from_quote
from scripts.computations import compare, explain_calc

# ---------------------------------------------------------------------------
# 1. CLAIM INTERPRETATION (Rule 4)
# ---------------------------------------------------------------------------
CLAIM_NATURAL = (
    "Nuclear power is the safest form of electricity generation with the lowest "
    "death rate per TWh produced."
)
CLAIM_FORMAL = {
    "subject": "nuclear power",
    "property": (
        "death rate per TWh (deaths from accidents and air pollution) — "
        "rank among all electricity generation sources (1 = lowest/safest)"
    ),
    "operator": "==",
    "operator_note": (
        "'Safest with the lowest death rate per TWh' is operationalized as nuclear holding rank 1 "
        "(minimum death rate) among all electricity generation sources — coal, oil, gas, nuclear, "
        "hydro, solar, wind, and biofuels. "
        "Data from Our World in Data (OWID) is used, combining Markandya & Wilkinson (2007) for "
        "fossil fuels and Sovacool et al. (2016) for low-carbon sources. "
        "Two independent nuclear death-rate estimates exist and differ by ~8x: "
        "0.0097 deaths/TWh (Sovacool 2016, accidents only) and 0.074 deaths/TWh "
        "(Markandya & Wilkinson 2007, including some air-pollution effects). "
        "OWID explicitly cautions: 'the uncertainties around these values [nuclear/solar/wind] "
        "are likely to overlap' and calls comparing them 'misguided.' "
        "Per proof-engine rules for comparative/superlative claims with source-acknowledged "
        "overlapping uncertainty, uncertainty_override=True is set and the verdict is UNDETERMINED."
    ),
    "threshold": 1,  # nuclear must achieve rank 1 (lowest death rate) to prove the claim
}

# ---------------------------------------------------------------------------
# 2. FACT REGISTRY
# ---------------------------------------------------------------------------
FACT_REGISTRY = {
    "B1": {
        "key": "owid_safest",
        "label": (
            "OWID 'What are the safest and cleanest sources of energy?' — "
            "uncertainty caveat: comparing nuclear/solar/wind is 'misguided' "
            "because uncertainties are likely to overlap"
        ),
    },
    "B2": {
        "key": "owid_data_table",
        "label": (
            "Our World in Data via Wikimedia Commons — death rates per TWh for all "
            "electricity sources (Markandya & Wilkinson 2007 + Sovacool et al. 2016)"
        ),
    },
    "A1": {
        "label": (
            "Nuclear rank by Sovacool 2016 death rate among all electricity sources "
            "(1 = lowest/safest)"
        ),
        "method": None,
        "result": None,
    },
    "A2": {
        "label": (
            "Coal-to-nuclear death rate ratio (coal M&W 2007 / nuclear Sovacool 2016): "
            "shows nuclear is dramatically safer than fossil fuels even if it is not THE lowest"
        ),
        "method": None,
        "result": None,
    },
}

# ---------------------------------------------------------------------------
# 3. EMPIRICAL FACTS
# ---------------------------------------------------------------------------
empirical_facts = {
    "owid_safest": {
        "quote": (
            "People often focus on the marginal differences at the bottom of the chart "
            "\u2014 between nuclear, solar, and wind. This comparison is misguided: the "
            "uncertainties around these values are likely to overlap."
        ),
        "url": "https://ourworldindata.org/safest-sources-of-energy",
        "source_name": (
            "Our World in Data \u2014 'What are the safest and cleanest sources of energy?' "
            "(Hannah Ritchie, 2020; updated July 2022)"
        ),
    },
    "owid_data_table": {
        "quote": (
            "Death rates from energy production is measured as the number of deaths by energy "
            "source per terawatt-hour (TWh) of production."
        ),
        "url": (
            "https://commons.wikimedia.org/wiki/Data:Deaths_per_TWh_energy_production,"
            "_all_sources_(Markandya_and_Wilkinson;_Sovacool_et_al.)_(OWID_4888).tab"
        ),
        "source_name": (
            "Our World in Data via Wikimedia Commons \u2014 deaths per TWh all sources "
            "(Markandya & Wilkinson 2007 + Sovacool et al. 2016)"
        ),
        "data_values": {
            "biofuels":         "0.0048",
            "nuclear_sovacool": "0.0097",
            "nuclear_mw2007":   "0.074",
            "solar":            "0.019",
            "wind":             "0.035",
            "hydro":            "0.0235",
            "coal":             "24.62",
            "oil":              "18.43",
            "gas":              "2.821",
        },
    },
}

# ---------------------------------------------------------------------------
# 4. CITATION VERIFICATION (Rule 2)
# ---------------------------------------------------------------------------
citation_results = verify_all_citations(empirical_facts, wayback_fallback=True)

# ---------------------------------------------------------------------------
# 5. DATA VALUE VERIFICATION — confirm numbers appear on source page
# ---------------------------------------------------------------------------
dv_results = verify_data_values(
    empirical_facts["owid_data_table"]["url"],
    empirical_facts["owid_data_table"]["data_values"],
    "B2",
)

# ---------------------------------------------------------------------------
# 6. VALUE EXTRACTION — parse from data_values strings (Rule 1 via data_values)
# ---------------------------------------------------------------------------
nuclear_sovacool = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["nuclear_sovacool"],
    r"([\d.]+)", "B2_nuclear_sovacool"
)
nuclear_mw2007 = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["nuclear_mw2007"],
    r"([\d.]+)", "B2_nuclear_mw2007"
)
biofuels = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["biofuels"],
    r"([\d.]+)", "B2_biofuels"
)
solar = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["solar"],
    r"([\d.]+)", "B2_solar"
)
wind = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["wind"],
    r"([\d.]+)", "B2_wind"
)
hydro = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["hydro"],
    r"([\d.]+)", "B2_hydro"
)
coal = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["coal"],
    r"([\d.]+)", "B2_coal"
)
oil = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["oil"],
    r"([\d.]+)", "B2_oil"
)
gas = parse_number_from_quote(
    empirical_facts["owid_data_table"]["data_values"]["gas"],
    r"([\d.]+)", "B2_gas"
)

# ---------------------------------------------------------------------------
# 7. COMPUTATIONS (Rule 7)
# ---------------------------------------------------------------------------

# All electricity sources with death rates — using Sovacool 2016 for low-carbon,
# M&W 2007 for fossil fuels (the OWID composite dataset).
all_sources = {
    "biofuels":  biofuels,
    "nuclear":   nuclear_sovacool,
    "solar":     solar,
    "hydro":     hydro,
    "wind":      wind,
    "gas":       gas,
    "oil":       oil,
    "coal":      coal,
}

# Rank sources by death rate (ascending = safest first)
sorted_sources = sorted(all_sources.items(), key=lambda x: x[1])

print("\n--- Death rates per TWh, ranked lowest to highest ---")
print("    (Sovacool 2016 for low-carbon sources; M&W 2007 for fossil fuels)")
for rank, (src, rate) in enumerate(sorted_sources, 1):
    marker = "  <-- NUCLEAR" if src == "nuclear" else ""
    print(f"  Rank {rank:2d}: {src:<12s} {rate:.4f} deaths/TWh{marker}")

nuclear_rank = next(
    i + 1 for i, (src, _) in enumerate(sorted_sources) if src == "nuclear"
)
print(f"\nNuclear rank (Sovacool 2016): {nuclear_rank} of {len(sorted_sources)}")

# Is nuclear rank 1 (lowest = safest)?  — claim evaluation
claim_holds = compare(
    nuclear_rank, "==", CLAIM_FORMAL["threshold"],
    label="Nuclear rank == 1 (lowest death rate across all electricity sources)"
)

# Biofuels clearly below nuclear (confirming nuclear is not the global minimum)
compare(
    biofuels, "<", nuclear_sovacool,
    label="Biofuels (0.0048) < Nuclear/Sovacool (0.0097): biofuels has lower rate than nuclear"
)

# Coal-to-nuclear ratio (A2): nuclear is dramatically safer than fossil fuels
nuclear_vs_coal_ratio = explain_calc(
    "coal / nuclear_sovacool", locals(),
    label="A2: Coal / Nuclear (Sovacool 2016) death-rate ratio"
)

# Methodological comparison: M&W 2007 nuclear vs solar/wind (shows contradiction)
mw_nuclear_vs_solar = explain_calc(
    "nuclear_mw2007 / solar", locals(),
    label="Nuclear (M&W 2007) / Solar ratio [>1 means nuclear LESS safe than solar by M&W]"
)

# ---------------------------------------------------------------------------
# 8. ADVERSARIAL CHECKS (Rule 5)
# ---------------------------------------------------------------------------
adversarial_checks = [
    {
        "question": (
            "If biofuels are excluded from 'electricity generation' sources, "
            "does nuclear then have the lowest death rate?"
        ),
        "verification_performed": (
            "Reviewed OWID methodology and Sovacool et al. 2016: 'biofuels' in the dataset "
            "covers biogas and biomass power plants used for electricity generation. OWID's "
            "'death rates from energy production' chart includes biofuels as an electricity "
            "generation source. Searched 'biofuels electricity generation death rate OWID "
            "Sovacool' to confirm scope."
        ),
        "finding": (
            "Even if biofuels were excluded, the uncertainty_override=True verdict applies "
            "regardless: OWID explicitly warns that comparing nuclear, solar, and wind is "
            "'misguided' because 'the uncertainties around these values are likely to overlap.' "
            "Nuclear (0.0097) < solar (0.019) and wind (0.035) by Sovacool 2016 point estimates, "
            "but OWID's caveat prevents a definitive superlative ranking."
        ),
        "breaks_proof": False,
    },
    {
        "question": (
            "Does the Markandya & Wilkinson (2007) nuclear estimate (0.074 deaths/TWh) "
            "contradict the claim that nuclear has the lowest death rate?"
        ),
        "verification_performed": (
            "Reviewed the OWID all-sources Wikimedia Commons dataset: it contains two entries "
            "for nuclear — 0.074 (M&W 2007) and 0.0097 (Sovacool 2016). These differ by ~8x. "
            "M&W 2007 includes occupational deaths and some air-pollution effects; Sovacool 2016 "
            "focuses on accident deaths (Chernobyl, Fukushima, other accidents). Searched "
            "'nuclear death rate Markandya Wilkinson 2007 vs Sovacool 2016 comparison' to confirm "
            "methodological basis of each estimate."
        ),
        "finding": (
            "The M&W 2007 nuclear estimate (0.074 deaths/TWh) directly contradicts the claim: "
            "nuclear would be LESS safe than solar (0.019) and wind (0.035) by point estimates. "
            "The 8x discrepancy between estimates reflects a fundamental methodological disagreement "
            "about what death categories to include; no consensus exists on which is 'correct.' "
            "Under M&W 2007, nuclear is not only not the safest — it is less safe than two major "
            "renewable sources. This counter-evidence breaks the proof."
        ),
        "breaks_proof": True,
    },
    {
        "question": (
            "Is there a consensus source that definitively establishes nuclear as "
            "having the single lowest death rate across all electricity generation sources?"
        ),
        "verification_performed": (
            "Searched 'nuclear lowest death rate electricity all sources 2024 definitive', "
            "'safest energy source peer reviewed 2023', and 'nuclear solar wind death rate "
            "definitive ranking'. Reviewed Our World in Data, Sovacool et al. 2016, "
            "Markandya & Wilkinson 2007, and WHO energy data."
        ),
        "finding": (
            "No authoritative source makes the unqualified claim that nuclear has the definitively "
            "lowest death rate per TWh across all electricity sources. OWID — the most widely cited "
            "source on this topic — explicitly cautions against making this comparison. "
            "Most sources describe nuclear as 'among the safest' or 'comparable to solar and wind,' "
            "not as definitively the lowest."
        ),
        "breaks_proof": False,
    },
]

# ---------------------------------------------------------------------------
# 9. VERDICT AND STRUCTURED OUTPUT
# ---------------------------------------------------------------------------
if __name__ == "__main__":
    any_unverified = any(
        cr["status"] != "verified" for cr in citation_results.values()
    )
    any_breaks = any(ac.get("breaks_proof") for ac in adversarial_checks)

    # uncertainty_override: OWID explicitly states the comparison between nuclear, solar,
    # and wind is "misguided" because "the uncertainties around these values are likely to
    # overlap." Per proof-engine rules, this triggers UNDETERMINED for superlative claims.
    uncertainty_override = True  # source: OWID safest-sources page (B1)

    if any_breaks:
        verdict = "UNDETERMINED"
    elif uncertainty_override:
        verdict = "UNDETERMINED"
    elif claim_holds and not any_unverified:
        verdict = "PROVED"
    elif claim_holds and any_unverified:
        verdict = "PROVED (with unverified citations)"
    elif not claim_holds and not any_unverified:
        verdict = "DISPROVED"
    elif not claim_holds and any_unverified:
        verdict = "DISPROVED (with unverified citations)"
    else:
        verdict = "UNDETERMINED"

    # Populate A-type fact results
    FACT_REGISTRY["A1"]["method"] = (
        f"sort(all_sources by death_rate)[nuclear] → rank {nuclear_rank}"
    )
    FACT_REGISTRY["A1"]["result"] = str(nuclear_rank)

    FACT_REGISTRY["A2"]["method"] = "coal / nuclear_sovacool"
    FACT_REGISTRY["A2"]["result"] = f"{nuclear_vs_coal_ratio:.1f}x"

    citation_detail = build_citation_detail(FACT_REGISTRY, citation_results, empirical_facts)

    # Extractions: data_values parsed directly (no verify_extraction needed per template)
    extractions = {
        "B2_nuclear_sovacool": {
            "value": str(nuclear_sovacool),
            "value_in_quote": True,
            "quote_snippet": "data_values['nuclear_sovacool'] = '0.0097'",
        },
        "B2_nuclear_mw2007": {
            "value": str(nuclear_mw2007),
            "value_in_quote": True,
            "quote_snippet": "data_values['nuclear_mw2007'] = '0.074'",
        },
        "B2_biofuels": {
            "value": str(biofuels),
            "value_in_quote": True,
            "quote_snippet": "data_values['biofuels'] = '0.0048'",
        },
        "B2_solar": {
            "value": str(solar),
            "value_in_quote": True,
            "quote_snippet": "data_values['solar'] = '0.019'",
        },
        "B2_wind": {
            "value": str(wind),
            "value_in_quote": True,
            "quote_snippet": "data_values['wind'] = '0.035'",
        },
        "B2_coal": {
            "value": str(coal),
            "value_in_quote": True,
            "quote_snippet": "data_values['coal'] = '24.62'",
        },
        "B2_gas": {
            "value": str(gas),
            "value_in_quote": True,
            "quote_snippet": "data_values['gas'] = '2.821'",
        },
    }

    data_value_verification = {
        "B2": {k: v for k, v in dv_results.items()},
    }

    summary = {
        "fact_registry": {
            fid: {k: v for k, v in info.items()}
            for fid, info in FACT_REGISTRY.items()
        },
        "claim_formal": CLAIM_FORMAL,
        "claim_natural": CLAIM_NATURAL,
        "citations": citation_detail,
        "extractions": extractions,
        "data_value_verification": data_value_verification,
        "cross_checks": [
            {
                "description": (
                    "Two independent nuclear death-rate estimates (methodological cross-check)"
                ),
                "values_compared": [str(nuclear_sovacool), str(nuclear_mw2007)],
                "agreement": False,
                "tolerance": "N/A — these are independent methodological estimates, not "
                             "independent measurements of the same quantity",
                "note": (
                    f"Sovacool 2016 (accidents only): {nuclear_sovacool} deaths/TWh; "
                    f"M&W 2007 (accidents + some air pollution): {nuclear_mw2007} deaths/TWh. "
                    f"Ratio: {nuclear_mw2007/nuclear_sovacool:.1f}x. "
                    "Disagreement reflects genuine methodological controversy, not measurement error."
                ),
            },
        ],
        "adversarial_checks": adversarial_checks,
        "verdict": verdict,
        "key_results": {
            "nuclear_rank_sovacool_2016": nuclear_rank,
            "nuclear_rate_sovacool_2016": nuclear_sovacool,
            "nuclear_rate_mw2007": nuclear_mw2007,
            "biofuels_rate_sovacool_2016": biofuels,
            "solar_rate_sovacool_2016": solar,
            "wind_rate_sovacool_2016": wind,
            "coal_rate_mw2007": coal,
            "coal_to_nuclear_ratio": round(nuclear_vs_coal_ratio, 1),
            "threshold": CLAIM_FORMAL["threshold"],
            "claim_holds": claim_holds,
            "uncertainty_override": uncertainty_override,
            "breaks_proof_triggered": any_breaks,
        },
        "generator": {
            "name": "proof-engine",
            "version": open(os.path.join(PROOF_ENGINE_ROOT, "VERSION")).read().strip(),
            "repo": "https://github.com/yaniv-golan/proof-engine",
            "generated_at": date.today().isoformat(),
        },
    }

    print("\n=== PROOF SUMMARY (JSON) ===")
    print(json.dumps(summary, indent=2, default=str))

↓ download proof.py · view on Zenodo (immutable)

Re-execute this proof

The verdict above is cached from when this proof was minted. To re-run the exact proof.py shown in "View proof source" and see the verdict recomputed live, launch it in your browser — no install required.

Re-execute the exact bytes deposited at Zenodo.

Re-execute in Binder runs in your browser · ~60s · no install

First run takes longer while Binder builds the container image; subsequent runs are cached.

machine-readable formats

Jupyter Notebook interactive re-verification W3C PROV-JSON provenance trace RO-Crate 1.1 research object package
Downloads & raw data

found this useful? ★ star on github