"COVID-19 vaccines killed 20,000 to 60,000 people in Germany (as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony and amplified by Elon Musk on April 12)."

health politics · generated 2026-04-19 · v1.24.0
DISPROVED 3 citations
Evidence assessed across 3 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

The claim that COVID-19 vaccines killed tens of thousands of people in Germany is not supported by scientific evidence — and is actively contradicted by the very data source it relies on.

What Was Claimed?

In March 2026, Dr. Helmut Sterz — a retired toxicologist who last worked for Pfizer in 2007 — told the German parliament that COVID-19 vaccines may have killed between 20,000 and 60,000 people in Germany. On April 12, Elon Musk amplified these claims to tens of millions of followers on X, sharing his own account of feeling severely ill after vaccination. The claims went viral, reigniting public debate about vaccine safety.

What Did We Find?

First, the events themselves are well-documented. Three independent news sources confirm that Sterz did testify before the Bundestag on March 19, 2026, and that Musk amplified the claims on April 12. There is no dispute that these events occurred.

The critical question is whether the claim itself is true — whether vaccines actually caused 20,000 to 60,000 deaths in Germany. Here, the evidence decisively says no.

Sterz arrived at his figures through a simple multiplication: he took 2,133 death reports filed with Germany's Paul Ehrlich Institute (PEI) after Pfizer vaccination and multiplied by 30 — an "underreporting factor" he borrowed from U.S. adverse event reporting practices. This produced his headline number of roughly 60,000.

The problems with this arithmetic are fundamental. The 2,133 reports document deaths that occurred after vaccination, not deaths caused by vaccination. When PEI conducted its own causal review of these reports, it assessed only 28 as having a "possible or probable" causal relationship with Pfizer vaccination — and 74 across all COVID vaccines combined. That is roughly 350 to 800 times fewer than the claimed figure.

Multiple independent experts rejected the methodology. Epidemiologist Mahmoud Zureik noted it is "not valid to presume the 2000 reported deaths were caused by vaccines, much less to presume that there were 30x this number." Biostatistician Jeffrey Morris pointed out that applying a fixed underreporting factor "ignores the possibility of reporting inflation." And the U.S. system that inspired the multiplier — VAERS — explicitly warns on its own website that its reports cannot establish causation.

Large-scale studies tell a consistent story in the opposite direction. A French study of 28 million adults found vaccinated people were less likely to die. Data published in The Lancet showed high vaccination rates correlated with lower mortality across Western Europe.

What Should You Keep In Mind?

This proof evaluates the specific claim of 20,000–60,000 vaccine-caused deaths in Germany. It does not claim vaccines have zero risks — all medical interventions carry some risk, and rare serious adverse events from COVID vaccines are documented. The PEI's own assessment of 28–74 possibly-related deaths reflects this reality. The issue is the orders-of-magnitude gap between documented evidence and the claimed figure.

The ecological correlation between vaccination rates and excess mortality found in one German study deserves further investigation, but that study's own authors explicitly disclaimed causal inference and did not support the specific death count claimed by Sterz.

How Was This Verified?

This analysis used a structured proof methodology that decomposes the claim into independently verifiable parts, verifies every cited source by fetching its content, and conducts adversarial searches for counter-evidence. The full reasoning chain is available in the structured proof report, detailed verification records in the full verification audit, and the underlying code can be inspected or re-run via the proof script.

What could challenge this verdict?

Four adversarial checks were conducted, all searching for evidence that could support the claim:

The methodology of multiplying passive surveillance reports by a fixed underreporting factor is rejected by pharmacovigilance experts including Dr. Mahmoud Zureik and Jeffrey Morris. The VAERS FAQ explicitly warns against using such data to establish causation.

The Paul Ehrlich Institute — the very source Sterz cited — assessed only 28 Pfizer-related deaths as possibly/probably causal (74 across all COVID vaccines), orders of magnitude below the claimed 20,000–60,000.

Large-scale epidemiological studies, including a French study of 28 million adults, consistently find COVID vaccines reduced mortality. No peer-reviewed study supports the specific death count claimed.

The strongest evidence in the direction of the claim is one ecological study noting a correlation between German vaccination rates and excess mortality — but that study explicitly disclaims causal inference and does not support the specific 20,000–60,000 figure.

Sources

SourceIDTypeVerified
FactCheck.org B1 Unclassified Yes
NewsBytes B2 Unclassified Yes
BusinessToday India B3 Unclassified Yes
SC1 verified source count A1 Computed
SC2 verified source count A2 Computed

detailed evidence

Detailed Evidence

Evidence Summary

ID Fact Verified
B1 SC1: FactCheck.org confirms Sterz testimony and Musk amplification Yes
B2 SC1: NewsBytes confirms Sterz Bundestag testimony on March 19, 2026 Yes
B3 SC1: BusinessToday confirms Musk's April 12 comments Yes
A1 SC1 verified source count Computed: 3 independent sources confirmed provenance
A2 SC2 verified source count Computed: 0 independent scientific sources support the causal claim

Note: 3 citation(s) come from unclassified (tier 2) sources. These are established news and fact-checking outlets whose credibility tier was not pre-classified in the automated system. See Source Credibility Assessment in the audit trail.

Proof Logic

This claim was decomposed into two sub-claims using the contested qualifier pattern, because the word "killed" asserts a causal relationship that requires independent scientific support.

SC1: Provenance — Was the claim made and amplified as described?

Three independent sources confirm the provenance. FactCheck.org reports that Sterz "baselessly claimed that the Pfizer/BioNTech vaccine killed 60,000 people in Germany" (B1). NewsBytes confirms the testimony occurred "before Germany's Bundestag's Corona Enquete Commission on March 19, 2026" (B2). BusinessToday confirms Musk's April 12, 2026 amplification, quoting him saying "my second vaccine shot almost sent me to the hospital. Felt like I was dying" (B3). SC1 holds with 3/3 sources verified.

SC2: Scientific Support — Did vaccines actually kill 20,000–60,000 people in Germany?

No independent scientific source supports this claim. The SC2 threshold requires at least 3 independent scientific sources confirming a causal link between COVID-19 vaccination and 20,000–60,000 deaths in Germany. Zero such sources exist.

The 20,000–60,000 figure was derived by taking 2,133 death reports from Germany's Paul Ehrlich Institute (PEI) — which are reports of deaths after vaccination, not deaths caused by vaccination — and multiplying by an "underreporting factor" of 30. This methodology has three fundamental flaws: it assumes all reported post-vaccination deaths were caused by the vaccine (conflating temporal association with causation); it applies an underreporting multiplier designed for minor adverse events to deaths (which are more thoroughly reported); and it ignores that PEI's own causal assessment found only 28 deaths "possibly or probably" related to Pfizer vaccination (74 across all COVID vaccines).

Conclusion

Verdict: DISPROVED

The claim that COVID-19 vaccines killed 20,000 to 60,000 people in Germany is DISPROVED under the contested qualifier analysis:

SC1 (provenance) holds: Dr. Helmut Sterz did make this claim before the German Bundestag on March 19, 2026, and Elon Musk did amplify it on April 12, 2026. This is confirmed by 3 independently verified sources.

SC2 (scientific support) fails: Zero independent scientific sources confirm that COVID-19 vaccines caused 20,000–60,000 deaths in Germany. The methodology used to generate the figure — multiplying passive surveillance death reports by an arbitrary underreporting factor — is rejected by pharmacovigilance experts, contradicted by the cited source's own causal assessment (28–74 deaths, not 20,000–60,000), and inconsistent with large-scale epidemiological evidence showing vaccines reduced mortality.

The assertion exists, but the causal qualifier "killed" is not scientifically warranted.

audit trail

Citation Verification 3/3 verified

All 3 citations verified.

Original audit log

B1 — FactCheck.org: - Status: verified - Method: full_quote - Fetch mode: live - Verbatim status: verbatim (default)

B2 — NewsBytes: - Status: verified - Method: full_quote - Fetch mode: live - Verbatim status: verbatim: False — this quote is a close paraphrase. Evidentiary weight reduced, but the provenance fact (Sterz testified on March 19, 2026) is independently confirmed by B1 and B3.

B3 — BusinessToday India: - Status: verified - Method: full_quote - Fetch mode: live - Verbatim status: verbatim (default)

Source: proof.py JSON summary

Claim Specification
Field Value
Subject COVID-19 vaccine deaths in Germany
SC1 Provenance: Sterz made the claim, Musk amplified it
SC1 operator >= 3 verified sources
SC2 Scientific support: vaccines killed 20k-60k in Germany
SC2 operator >= 3 independent scientific sources
Compound operator AND
Contested qualifier "killed" (causal language)

Source: proof.py JSON summary

Claim Interpretation

The natural-language claim asserts that COVID-19 vaccines caused ("killed") between 20,000 and 60,000 deaths in Germany, attributing this claim to Dr. Helmut Sterz's March 19, 2026 testimony before the German Bundestag and noting its amplification by Elon Musk on April 12, 2026.

The claim uses the causal language "killed," which asserts a direct causal relationship between vaccination and deaths. This is operationalized as a contested qualifier compound claim: SC1 verifies that the assertion was made and amplified as described (provenance), while SC2 tests whether the causal claim has independent scientific support (epistemic warrant).

Formalization scope: The natural-language claim bundles a factual event (the testimony and amplification) with a causal assertion (vaccines killed people). The formal interpretation faithfully captures both dimensions. The phrase "as claimed in" is interpreted as attributing the claim's origin, not as endorsing its truth — the proof evaluates both the provenance and the truth of the underlying causal assertion.

Source: proof.py JSON summary

Source Credibility Assessment
Fact ID Domain Type Note
B1 factcheck.org Unclassified FactCheck.org is a project of the Annenberg Public Policy Center at the University of Pennsylvania; widely recognized as a reputable fact-checking organization
B2 newsbytesapp.com Unclassified NewsBytes is a news aggregator/fact-check site
B3 businesstoday.in Unclassified BusinessToday is a major Indian business news publication owned by the India Today Group

All three sources are classified as "unclassified" (tier 2) by the automated credibility system. However, FactCheck.org is an IFCN-certified fact-checking organization affiliated with the University of Pennsylvania. The tier 2 classification reflects the automated system's coverage limitations, not actual source quality concerns.

Source: proof.py JSON summary + author analysis

Computation Traces
SC1: Provenance — Sterz made the claim and Musk amplified it: 3 >= 3 = True
SC2: Scientific support — vaccines killed 20k-60k in Germany: 0 >= 3 = False
compound: all sub-claims hold: 1 == 2 = False

Source: proof.py inline output (execution trace)

Independent Source Agreement

SC1 (Provenance)

Three independent publications confirm the provenance: FactCheck.org (Annenberg Public Policy Center), NewsBytes, and BusinessToday India. These are editorially independent organizations with no organizational overlap.

COI assessment: No conflicts of interest identified. None of these sources have a stake in whether the testimony occurred or not.

SC2 (Scientific Support)

Zero sources consulted. No independent scientific source could be identified that confirms vaccines caused 20,000–60,000 deaths in Germany. This is the expected outcome under the contested qualifier pattern — the absence of supporting evidence for SC2 is what produces the DISPROVED verdict.

Source: proof.py JSON summary

Adversarial Checks

Check 1: Does Sterz's methodology have scientific basis? - Searched: FactCheck.org, VAERS FAQ, Science Feedback, NewsGuard Reality Check - Finding: No credible pharmacovigilance authority endorses multiplying passive surveillance death reports by a fixed underreporting factor to estimate causal deaths. Multiple independent experts explicitly reject the methodology. - Breaks proof: No — this counter-evidence reinforces the DISPROVED verdict for SC2.

Check 2: Did PEI attribute 20,000-60,000 deaths to vaccines? - Searched: PEI official pharmacovigilance report (March 2025) - Finding: PEI assessed only 28 deaths as "possibly or probably" related to Pfizer vaccination (74 across all COVID vaccines). PEI explicitly states passive reports cannot determine causation. - Breaks proof: No — the official regulator's own data contradicts the claimed figure by orders of magnitude.

Check 3: Do epidemiological studies show vaccines increased mortality? - Searched: Peer-reviewed literature on COVID vaccine mortality - Finding: Large studies consistently find vaccines reduced mortality. No peer-reviewed study supports the 20,000–60,000 figure. - Breaks proof: No — the weight of epidemiological evidence runs counter to the claim.

Check 4: Is there any credible evidence supporting the claim? - Searched: Studies on vaccine-caused excess mortality in Germany - Finding: One ecological study noted a vaccination-rate/excess-mortality correlation but explicitly disclaimed causal inference and did not support the specific death count. - Breaks proof: No — the strongest available evidence in the claim's direction explicitly disclaims the causal inference the claim requires.

Source: proof.py JSON summary

Quality Checks
  • Rule 1: N/A — qualitative proof, no numeric extraction from quotes
  • Rule 2: All 3 citations verified by fetching (all full_quote matches)
  • Rule 3: N/A — no time-sensitive computation
  • Rule 4: CLAIM_FORMAL with operator_note present; contested qualifier decomposition documented
  • Rule 5: 4 adversarial checks conducted, searching for evidence supporting the claim (appropriate adversarial direction for a DISPROVED verdict)
  • Rule 6: 3 independent sources for SC1 from separate publications; COI assessed (none found)
  • Rule 7: Uses compare() from computations.py; no hard-coded constants
  • validate_proof.py result: PASS — 20/21 checks passed, 0 issues, 1 warning (non-verbatim quote on B2)

Source: author analysis

Source Data
Fact ID Extracted Value Value in Quote
B1 verified Yes
B2 verified Yes
B3 verified Yes

For this qualitative/consensus proof, extractions record citation verification status rather than numeric values.

Source: proof.py JSON summary

Cite this proof
Proof Engine. (2026). Claim Verification: “COVID-19 vaccines killed 20,000 to 60,000 people in Germany (as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony and amplified by Elon Musk on April 12).” — Disproved. https://proofengine.info/proofs/covid-19-vaccines-killed-20-000-to-60-000-people-in-germany-as-claimed-in-dr/
Proof Engine. "Claim Verification: “COVID-19 vaccines killed 20,000 to 60,000 people in Germany (as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony and amplified by Elon Musk on April 12).” — Disproved." 2026. https://proofengine.info/proofs/covid-19-vaccines-killed-20-000-to-60-000-people-in-germany-as-claimed-in-dr/.
@misc{proofengine_covid_19_vaccines_killed_20_000_to_60_000_people_in_germany_as_claimed_in_dr,
  title   = {Claim Verification: “COVID-19 vaccines killed 20,000 to 60,000 people in Germany (as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony and amplified by Elon Musk on April 12).” — Disproved},
  author  = {{Proof Engine}},
  year    = {2026},
  url     = {https://proofengine.info/proofs/covid-19-vaccines-killed-20-000-to-60-000-people-in-germany-as-claimed-in-dr/},
  note    = {Verdict: DISPROVED. Generated by proof-engine v1.24.0},
}
TY  - DATA
TI  - Claim Verification: “COVID-19 vaccines killed 20,000 to 60,000 people in Germany (as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony and amplified by Elon Musk on April 12).” — Disproved
AU  - Proof Engine
PY  - 2026
UR  - https://proofengine.info/proofs/covid-19-vaccines-killed-20-000-to-60-000-people-in-germany-as-claimed-in-dr/
N1  - Verdict: DISPROVED. Generated by proof-engine v1.24.0
ER  -
View proof source 387 lines · 17.3 KB

This is the proof.py that produced the verdict above. Every fact traces to code below. (This proof has not yet been minted to Zenodo; the source here is the working copy from this repository.)

"""
Proof: COVID-19 vaccines killed 20,000 to 60,000 people in Germany
(as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony
and amplified by Elon Musk on April 12).
Generated: 2026-04-19
"""
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
from scripts.computations import compare, apply_verdict_qualifier
from scripts.proof_summary import ProofSummaryBuilder

# ---
# 1. CLAIM INTERPRETATION (Rule 4)
# ---
CLAIM_NATURAL = (
    "COVID-19 vaccines killed 20,000 to 60,000 people in Germany "
    "(as claimed in Dr. Helmut Sterz's March 19, 2026 parliamentary testimony "
    "and amplified by Elon Musk on April 12)."
)

CLAIM_FORMAL = {
    "subject": "COVID-19 vaccine deaths in Germany",
    "sub_claims": [
        {
            "id": "SC1",
            "property": "Dr. Helmut Sterz made the 20,000-60,000 death claim in German parliamentary testimony on March 19, 2026, and Elon Musk amplified it on April 12, 2026",
            "operator": ">=",
            "threshold": 3,
            "operator_note": (
                "SC1 checks provenance — did Sterz make this claim and did Musk amplify it? "
                "This is a factual question about whether the events occurred, not whether the claim is true."
            ),
        },
        {
            "id": "SC2",
            "property": "The claim that COVID-19 vaccines killed 20,000-60,000 people in Germany is scientifically supported",
            "operator": ">=",
            "threshold": 3,
            "operator_note": (
                "SC2 checks the epistemic qualifier — 'killed' asserts a causal relationship. "
                "For the compound claim to be PROVED, it must be the case that vaccines actually caused "
                "20,000-60,000 deaths. SC2 requires independent scientific sources confirming this causation. "
                "Sources rejecting the methodology or finding no causal link belong in adversarial_checks."
            ),
        },
    ],
    "compound_operator": "AND",
    "operator_note": (
        "The claim uses the contested qualifier 'killed' (causal language). "
        "SC1 checks provenance (the assertion was made and amplified as described). "
        "SC2 checks the epistemic qualifier (the causal claim is scientifically warranted). "
        "Both must hold for the compound claim to be PROVED. "
        "If SC1 holds but SC2 fails, the verdict is DISPROVED — the assertion exists but "
        "the causal claim is not scientifically supported."
    ),
}

# ---
# 2. FACT REGISTRY
# ---
FACT_REGISTRY = {
    "B1": {"key": "sc1_factcheck_org", "label": "SC1: FactCheck.org confirms Sterz testimony and Musk amplification"},
    "B2": {"key": "sc1_newsbytes", "label": "SC1: NewsBytes confirms Sterz Bundestag testimony on March 19, 2026"},
    "B3": {"key": "sc1_businesstoday", "label": "SC1: BusinessToday confirms Musk's April 12 comments"},
    # Note: SC2 has no empirical_facts entries because no independent scientific
    # sources confirm 20,000-60,000 vaccine deaths in Germany. This is expected
    # per the contested qualifier pattern — empty SC2 means the qualifier is unwarranted.
    "A1": {"label": "SC1 verified source count", "method": None, "result": None},
    "A2": {"label": "SC2 verified source count", "method": None, "result": None},
}

# ---
# 3. EMPIRICAL FACTS — grouped by sub-claim
# ---
empirical_facts = {
    # SC1: Provenance — the claim was made and amplified
    "sc1_factcheck_org": {
        "quote": "baselessly claimed that the Pfizer/BioNTech vaccine killed 60,000 people in Germany",
        "url": "https://www.factcheck.org/2026/04/elon-musk-amplifies-baseless-claim-about-covid-19-vaccine/",
        "source_name": "FactCheck.org",
    },
    "sc1_newsbytes": {
        "quote": "before Germany's Bundestag's Corona Enquete Commission on March 19, 2026",
        "url": "https://www.newsbytesapp.com/news/world/fact-check-did-60-000-die-in-germany-from-covid-vaccine/story",
        "source_name": "NewsBytes",
        "verbatim": False,  # Summarized from article; exact phrasing may differ
    },
    "sc1_businesstoday": {
        "quote": "my second vaccine shot almost sent me to the hospital. Felt like I was dying",
        "url": "https://www.businesstoday.in/latest/trends/story/covid-19-vaccine-scrutiny-back-in-focus-after-elon-musks-comments-heres-what-he-said-525275-2026-04-12",
        "source_name": "BusinessToday India",
    },
    # SC2: Scientific support for the causal claim
    # No independent scientific sources confirm 20,000-60,000 vaccine deaths in Germany.
    # The methodology (multiplying passive surveillance reports by an underreporting factor)
    # is rejected by pharmacovigilance experts. Sources rejecting the claim are in adversarial_checks.
}

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

# ---
# 5. COUNT VERIFIED SOURCES PER SUB-CLAIM
# ---
COUNTABLE_STATUSES = ("verified", "partial")
sc1_keys = [k for k in empirical_facts if k.startswith("sc1_")]
sc2_keys = [k for k in empirical_facts if k.startswith("sc2_")]

n_sc1 = sum(1 for k in sc1_keys if citation_results[k]["status"] in COUNTABLE_STATUSES)
n_sc2 = sum(1 for k in sc2_keys if citation_results[k]["status"] in COUNTABLE_STATUSES)

# ---
# 6. PER-SUB-CLAIM EVALUATION
# ---
sc1_holds = compare(
    n_sc1, ">=", CLAIM_FORMAL["sub_claims"][0]["threshold"],
    label="SC1: Provenance — Sterz made the claim and Musk amplified it",
)
sc2_holds = compare(
    n_sc2, ">=", CLAIM_FORMAL["sub_claims"][1]["threshold"],
    label="SC2: Scientific support — vaccines killed 20k-60k in Germany",
)

# ---
# 7. COMPOUND EVALUATION
# ---
n_holding = sum([sc1_holds, sc2_holds])
n_total = len(CLAIM_FORMAL["sub_claims"])
claim_holds = compare(n_holding, "==", n_total, label="compound: all sub-claims hold")

# ---
# 8. COI FLAGS
# ---
sc1_coi_flags = []  # Provenance: COI does not invalidate "assertion was made"
sc2_coi_flags = []  # No SC2 sources exist

# ---
# 9. ADVERSARIAL CHECKS (Rule 5)
# ---
adversarial_checks = [
    {
        "question": "Does Sterz's methodology — multiplying PEI death reports by an underreporting factor of 30 — have any scientific basis?",
        "verification_performed": (
            "Searched FactCheck.org, VAERS FAQ (vaers.hhs.gov), Science Feedback, and NewsGuard Reality Check. "
            "Dr. Mahmoud Zureik (Versailles epidemiologist) stated: 'It is not valid to presume the 2000 reported "
            "deaths were caused by vaccines, much less to presume that there were 30x this number.' "
            "Jeffrey Morris noted that 'applying a fixed underreporting factor is not only unsupported but also "
            "ignores the possibility of reporting inflation.' "
            "The VAERS FAQ states: 'VAERS reports alone cannot be used to determine if a vaccine caused or "
            "contributed to an adverse event or illness.' "
            "An arXiv paper (2202.04204) specifically analyzed the absurdity of death estimates based on VAERS "
            "underreporting factors."
        ),
        "finding": (
            "No credible pharmacovigilance authority endorses multiplying passive surveillance death "
            "reports by a fixed underreporting factor to estimate causal deaths. The methodology conflates "
            "temporal association with causation and misapplies underreporting factors designed for non-serious "
            "events to deaths (which are more thoroughly reported). Multiple independent experts reject it."
        ),
        "breaks_proof": False,
    },
    {
        "question": "Did the Paul Ehrlich Institute itself attribute 20,000-60,000 deaths to COVID vaccines?",
        "verification_performed": (
            "Checked PEI's official pharmacovigilance report (March 2025, covering data through Dec 2024). "
            "PEI received 2,133 reports of deaths following Pfizer/BioNTech vaccination. Of these, PEI assessed "
            "only 28 as having a 'possible or probable' causal relationship. NewsGuard reported the figure as 74 "
            "deaths across all COVID vaccines where causality was 'possible or probable.' "
            "PEI explicitly states: 'spontaneous reports are not suitable for determining if the reported adverse "
            "reaction was caused by vaccination.'"
        ),
        "finding": (
            "PEI's own assessment found 28 deaths possibly/probably related to Pfizer vaccination specifically "
            "(74 across all COVID vaccines) — orders of magnitude below the 20,000-60,000 claimed. "
            "The official regulator's causal assessment directly contradicts the claimed figure."
        ),
        "breaks_proof": False,
    },
    {
        "question": "Do large-scale epidemiological studies find that COVID vaccines increased mortality?",
        "verification_performed": (
            "Searched for peer-reviewed studies on COVID vaccine mortality. A French study of 28 million adults "
            "(cited by FactCheck.org) found vaccinated people were less likely to die. The Lancet published data "
            "showing high vaccination rates correlated with lower mortality in Western Europe. "
            "Science Feedback analyzed and debunked a claim that vaccines killed 17 million people globally, "
            "noting the analysis was 'highly flawed' and 'doesn't account for COVID-19 mortality surges.'"
        ),
        "finding": (
            "Large epidemiological studies consistently find COVID vaccines reduced mortality rather than "
            "increasing it. No peer-reviewed study supports the 20,000-60,000 death figure for Germany."
        ),
        "breaks_proof": False,
    },
    {
        "question": "Is there any credible evidence supporting the claim that might make SC2 hold?",
        "verification_performed": (
            "Searched for studies supporting vaccine-caused excess mortality in Germany. Found one ecological "
            "study noting a correlation between vaccination rates and excess mortality in Germany's third "
            "pandemic year. However, Science Feedback noted this was an ecological correlation that 'provides "
            "moderate-strength evidence of an unexpected, statistically robust association' WITHOUT establishing "
            "causality. The study does not claim 20,000-60,000 deaths and explicitly states it cannot determine "
            "causation. No peer-reviewed source supports the specific 20,000-60,000 figure."
        ),
        "finding": (
            "The strongest evidence in the direction of the claim is an ecological correlation study that "
            "explicitly disclaims causal inference and does not support the specific death count. This does not "
            "meet the threshold for SC2. The adversarial search confirms no credible source supports the claim."
        ),
        "breaks_proof": False,
    },
]

# ---
# 10. VERDICT
# ---
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)

    # Per-sub-claim COI gate (Rule 6)
    sc1_coi_override = False  # Provenance: COI does not invalidate "assertion was made"

    sc2_confirmed_keys = {k for k in sc2_keys
                          if citation_results[k]["status"] in COUNTABLE_STATUSES}
    sc2_coi_favorable = {f["source_key"] for f in sc2_coi_flags
                         if f["direction"] == "favorable_to_subject"
                         and f["source_key"] in sc2_confirmed_keys}
    sc2_coi_unfavorable = {f["source_key"] for f in sc2_coi_flags
                           if f["direction"] == "unfavorable_to_subject"
                           and f["source_key"] in sc2_confirmed_keys}
    sc2_coi_majority = max(len(sc2_coi_favorable), len(sc2_coi_unfavorable)) if sc2_coi_flags else 0
    sc2_threshold = CLAIM_FORMAL["sub_claims"][1]["threshold"]
    sc2_coi_override = n_sc2 >= sc2_threshold and sc2_coi_majority > n_sc2 / 2

    any_coi_override = sc1_coi_override or sc2_coi_override

    # Contested qualifier: "killed" is the qualifier being tested
    is_contested_qualifier = "qualifier" in CLAIM_FORMAL.get("operator_note", "").lower()

    if any_breaks:
        base_verdict = "UNDETERMINED"
    elif any_coi_override:
        base_verdict = "UNDETERMINED"
    elif is_contested_qualifier and sc1_holds and not sc2_holds:
        base_verdict = "DISPROVED"
    elif not claim_holds and n_holding > 0:
        base_verdict = "PARTIALLY VERIFIED"
    elif claim_holds:
        base_verdict = "PROVED"
    elif not claim_holds and n_holding == 0:
        base_verdict = "UNDETERMINED"
    else:
        base_verdict = "UNDETERMINED"
    verdict = apply_verdict_qualifier(base_verdict, any_unverified)

    print(f"\n{'='*60}")
    print(f"VERDICT: {verdict}")
    print(f"{'='*60}")
    print(f"SC1 (provenance): {n_sc1} verified sources, holds={sc1_holds}")
    print(f"SC2 (scientific support): {n_sc2} verified sources, holds={sc2_holds}")
    print(f"Compound: {n_holding}/{n_total} sub-claims hold")
    print(f"Contested qualifier detected: {is_contested_qualifier}")
    print(f"Any unverified citations: {any_unverified}")
    print()

    # --- Build JSON summary ---
    builder = ProofSummaryBuilder(CLAIM_NATURAL, CLAIM_FORMAL)

    for fid, info in FACT_REGISTRY.items():
        if not fid.startswith("B"):
            continue
        ef_key = info["key"]
        if ef_key not in empirical_facts:
            continue  # B4 is a placeholder for empty SC2
        ef = empirical_facts[ef_key]
        cr = citation_results.get(ef_key, {})
        sub_claim = "SC1" if ef_key in sc1_keys else "SC2"
        builder.add_empirical_fact(
            fid,
            label=info["label"],
            source_name=ef["source_name"],
            source_url=ef["url"],
            source_quote=ef["quote"],
            sub_claim=sub_claim,
        )
        builder.set_verification(
            fid,
            status=cr.get("status", "unknown"),
            method=cr.get("method", "full_quote"),
            coverage_pct=cr.get("coverage_pct"),
            fetch_mode=cr.get("fetch_mode", "live"),
            credibility=cr.get("credibility", {}),
        )
        builder.set_extraction(
            fid,
            value=cr.get("status", "unknown"),
            value_in_quote=cr.get("status") in COUNTABLE_STATUSES,
            quote_snippet=ef["quote"][:80],
        )

    sc1_fact_ids = [fid for fid, info in FACT_REGISTRY.items()
                    if fid.startswith("B") and info["key"] in sc1_keys]
    sc2_fact_ids = [fid for fid, info in FACT_REGISTRY.items()
                    if fid.startswith("B") and info["key"] in sc2_keys]

    builder.add_computed_fact(
        "A1",
        label="SC1 verified source count",
        method=f"count(verified sc1 citations) = {n_sc1}",
        result=n_sc1,
        depends_on=sc1_fact_ids,
        sub_claim="SC1",
    )
    builder.add_computed_fact(
        "A2",
        label="SC2 verified source count",
        method=f"count(verified sc2 citations) = {n_sc2}",
        result=n_sc2,
        depends_on=sc2_fact_ids,
        sub_claim="SC2",
    )

    builder.add_cross_check(
        description="SC1: independent sources on provenance of Sterz testimony and Musk amplification",
        fact_ids=sc1_fact_ids,
        n_sources_consulted=len(sc1_keys),
        n_sources_verified=n_sc1,
        sources={k: citation_results[k]["status"] for k in sc1_keys},
        independence_note="FactCheck.org (Annenberg), NewsBytes, BusinessToday — independent publications",
        coi_flags=sc1_coi_flags,
        agreement=sc1_holds,
    )
    builder.add_cross_check(
        description="SC2: independent scientific sources confirming 20k-60k vaccine deaths in Germany",
        fact_ids=sc2_fact_ids,
        n_sources_consulted=len(sc2_keys),
        n_sources_verified=n_sc2,
        sources={k: citation_results[k]["status"] for k in sc2_keys},
        independence_note="No independent scientific sources confirm the claim",
        coi_flags=sc2_coi_flags,
        agreement=sc2_holds,
    )

    builder.add_sub_claim_result(
        id="SC1", n_confirming=n_sc1,
        threshold=CLAIM_FORMAL["sub_claims"][0]["threshold"], holds=sc1_holds,
    )
    builder.add_sub_claim_result(
        id="SC2", n_confirming=n_sc2,
        threshold=CLAIM_FORMAL["sub_claims"][1]["threshold"], holds=sc2_holds,
    )

    for ac in adversarial_checks:
        builder.add_adversarial_check(
            question=ac["question"],
            verification_performed=ac["verification_performed"],
            finding=ac["finding"],
            breaks_proof=ac["breaks_proof"],
        )

    builder.set_verdict(base_verdict, any_unverified=any_unverified)
    builder.set_key_results(
        n_holding=n_holding,
        n_total=n_total,
        claim_holds=claim_holds,
    )
    builder.emit()

↓ download proof.py

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 from GitHub commit 1ba3732 — same bytes shown above.

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