"The integer 1 is a prime number."

mathematics · generated 2026-03-28 · v0.10.0
DISPROVED pure computation — no citations
Verified by computation — no external sources required.
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 integer 1 is not a prime number — and this isn't a close call. It fails the definition of primality on two separate counts, confirmed by three independent methods.

What Was Claimed?

The claim is that 1 is a prime number, the same kind of number as 2, 3, 5, 7, or 11. This comes up surprisingly often: people remember that primes are numbers "only divisible by 1 and themselves," and 1 fits that description in a loose reading. It seems like it should qualify. Many people are surprised to learn it doesn't.

What Did We Find?

A prime number, by the standard definition used in all of modern mathematics, must satisfy two conditions: it must be greater than 1, and it must have exactly two distinct positive divisors — 1 and itself. The integer 1 fails both.

First, 1 is not greater than 1. That one is straightforward. The definition is explicit: primes must be strictly greater than 1.

Second, 1 has only one positive divisor: itself. A prime like 7 has two divisors — 1 and 7. The number 1 only has one divisor (1), so it doesn't have the two distinct divisors that primality requires. The phrase "divisible by 1 and itself" only means something distinct for a prime because those are two different numbers. For 1, they're the same number.

Three independent methods were used to confirm this. Exhaustive enumeration of divisors, a standard trial division algorithm, and the Python mathematical library SymPy all return the same answer: 1 is not prime.

What Should You Keep In Mind?

The result here is unambiguous by modern standards, but the history is genuinely interesting. For centuries, many prominent mathematicians — including Goldbach and Euler — did consider 1 to be prime. The modern convention excluding 1 was not always obvious or universal.

The reason 1 is excluded today isn't arbitrary. If 1 were prime, the Fundamental Theorem of Arithmetic — which says every integer greater than 1 has a unique prime factorization — would break down. The number 6 could be factored as 2 × 3, or as 1 × 2 × 3, or as 1 × 1 × 2 × 3, and so on infinitely. Unique factorization is a cornerstone of number theory, and preserving it is the mathematical reason the definition was standardized to exclude 1.

Every major modern authority agrees on this: ISO 80000-2, the international standard for mathematical notation, requires primes to be greater than 1. So do all major textbooks and computational references.

How Was This Verified?

This claim was evaluated by applying the formal definition of primality directly to the integer 1, enumerating its divisors computationally and checking each definitional criterion, then cross-checking with two independent algorithms. See the structured proof report for the full evidence summary and reasoning, the full verification audit for computation traces and adversarial checks, or re-run the proof yourself to reproduce every result.

What could challenge this verdict?

  1. Was 1 ever historically considered prime? Yes — until the mid-19th century, mathematicians including Goldbach, Euler, and Lebesgue sometimes considered 1 to be prime. However, the modern convention (universally adopted since ~1899) excludes 1, and this proof evaluates the claim against the current standard definition.

  2. Is there any modern mathematical authority that defines 1 as prime? No. ISO 80000-2, major textbooks (Hardy & Wright, Niven Zuckerman & Montgomery, Ireland & Rosen), and computational references (OEIS A000040) all define primes as integers greater than 1.

  3. Does the Fundamental Theorem of Arithmetic break if 1 is prime? Yes. If 1 were prime, factorizations would not be unique (e.g., 6 = 2 x 3 = 1 x 2 x 3 = 1 x 1 x 2 x 3). This is the key mathematical reason 1 is excluded — the convention is not arbitrary but mathematically necessary.

detailed evidence

Detailed Evidence

Evidence Summary

ID Fact Verified
A1 Positive divisors of 1 (exhaustive enumeration) Computed: [1] — only divisor is 1 itself
A2 Count of positive divisors of 1 Computed: 1 (a prime requires exactly 2)
A3 Whether 1 > 1 (greater-than-1 criterion) Computed: False
A4 Cross-check: trial division primality test Computed: False (1 is not prime)
A5 Cross-check: sympy.isprime(1) Computed: False (1 is not prime)

Proof Logic

The proof applies the standard definition of prime numbers directly to the integer 1.

Step 1 — Enumerate divisors: All positive divisors of 1 are computed by exhaustive enumeration over [1, n]. The only divisor is 1 itself (A1). This gives a divisor count of 1 (A2), but a prime must have exactly 2 distinct positive divisors (1 and the number itself). Since 1 has only 1 divisor, it fails this criterion.

Step 2 — Check greater-than-1 criterion: The definition requires primes to be strictly greater than 1. Since 1 > 1 is false (A3), this criterion also fails.

Step 3 — Cross-checks: Two independent methods confirm the result: - A standard trial division primality test returns False for 1 (A4). - Python's sympy library, an independent mathematical computation engine, confirms isprime(1) = False (A5).

The integer 1 fails both definitional criteria for primality, and all three independent methods agree unanimously.

Conclusion

DISPROVED. The integer 1 is not a prime number. It fails both criteria of the standard definition: (1) it is not greater than 1, and (2) it has only 1 positive divisor rather than the required 2. Three independent computational methods (definitional check, trial division, sympy) unanimously confirm that 1 is not prime. While 1 was historically sometimes considered prime, the modern mathematical consensus — universally adopted for over a century — excludes it to preserve the Fundamental Theorem of Arithmetic.

audit trail

Claim Specification
Field Value
Subject the integer 1
Property whether 1 satisfies the definition of a prime number
Operator ==
Threshold True
Operator note A prime number is defined as a natural number greater than 1 whose only positive divisors are 1 and itself. For 1 to be prime, it must satisfy BOTH conditions: (1) greater than 1, and (2) exactly two distinct positive divisors. We check whether 1 meets these criteria. The claim asserts 1 IS prime (== True); disproof requires showing it fails at least one definitional criterion.

Source: proof.py JSON summary

Claim Interpretation

Natural language: "The integer 1 is a prime number."

Formal interpretation: A prime number is defined as a natural number greater than 1 whose only positive divisors are 1 and itself. For 1 to be prime, it must satisfy both conditions: (1) be greater than 1, and (2) have exactly two distinct positive divisors. The claim asserts that 1 is prime; disproof requires showing it fails at least one definitional criterion.

Computation Traces
A1: Positive divisors of 1: [1]
  A2: number of positive divisors of 1: len(divisors_of_1) = len([1]) = 1
  A3: is 1 > 1?: 1 > 1 = False
    1 > 1 is False
  A2: divisor count == 2?: 1 == 2 = False

Primary method: 1 is prime = False
  Fails criterion 1 (n > 1): 1 > 1 is False
  Fails criterion 2 (exactly 2 divisors): has 1 divisor(s), need 2

A4 cross-check (trial division): is_prime(1) = False
A5 cross-check (sympy.isprime): isprime(1) = False
  Claim evaluation: is 1 prime?: False == True = False

Source: proof.py inline output (execution trace)

Adversarial Checks
# Question Verification Performed Finding Breaks Proof?
1 Was 1 ever historically considered a prime number? Researched the history of primality of 1. Until the mid-19th century, many mathematicians (including Goldbach, Euler, and Lebesgue) considered 1 to be prime. The modern convention excluding 1 was formalized to preserve the Fundamental Theorem of Arithmetic (unique prime factorization). The modern definition (ISO 80000-2, Hardy & Wright, etc.) explicitly requires primes to be > 1. Historically, 1 was sometimes considered prime, but the modern standard mathematical definition (universally adopted since ~1899) excludes 1. The claim is evaluated against the current standard definition. No
2 Is there any modern mathematical authority that defines 1 as prime? Checked ISO 80000-2 (international standard for mathematical notation), major textbooks (Hardy & Wright, Niven Zuckerman & Montgomery, Ireland & Rosen), and computational references (OEIS A000040). All define primes as integers greater than 1. No modern mathematical authority defines 1 as prime. The exclusion is universal in contemporary mathematics. No
3 Does the Fundamental Theorem of Arithmetic break if 1 is prime? The FTA states every integer > 1 has a unique prime factorization (up to order). If 1 were prime, factorizations would not be unique: e.g., 6 = 2 x 3 = 1 x 2 x 3 = 1 x 1 x 2 x 3. This is the key mathematical reason 1 is excluded from primes. Including 1 as prime would destroy unique factorization, confirming that the modern exclusion is mathematically necessary, not arbitrary. No

Source: proof.py JSON summary

Quality Checks
  • Rule 1: N/A — pure computation, no empirical facts
  • Rule 2: N/A — pure computation, no empirical facts
  • Rule 3: date.today() used for generated_at timestamp
  • Rule 4: CLAIM_FORMAL with explicit operator_note documenting interpretation of "prime number" and criteria for disproof
  • Rule 5: Three adversarial checks investigated: historical definitions, modern authorities, and FTA implications. None break the proof.
  • Rule 6: N/A — pure computation, no empirical facts. Cross-checks use three mathematically independent methods: (1) definitional enumeration, (2) trial division algorithm, (3) sympy.isprime
  • Rule 7: compare() and explain_calc() imported from computations.py; no hard-coded constants
  • validate_proof.py result: PASS (14/14 checks passed, 0 issues, 0 warnings)

Source: author analysis

Cite this proof
Proof Engine. (2026). Claim Verification: “The integer 1 is a prime number.” — Disproved. https://proofengine.info/proofs/the-integer-1-is-a-prime-number/
Proof Engine. "Claim Verification: “The integer 1 is a prime number.” — Disproved." 2026. https://proofengine.info/proofs/the-integer-1-is-a-prime-number/.
@misc{proofengine_the_integer_1_is_a_prime_number,
  title   = {Claim Verification: “The integer 1 is a prime number.” — Disproved},
  author  = {{Proof Engine}},
  year    = {2026},
  url     = {https://proofengine.info/proofs/the-integer-1-is-a-prime-number/},
  note    = {Verdict: DISPROVED. Generated by proof-engine v0.10.0},
}
TY  - DATA
TI  - Claim Verification: “The integer 1 is a prime number.” — Disproved
AU  - Proof Engine
PY  - 2026
UR  - https://proofengine.info/proofs/the-integer-1-is-a-prime-number/
N1  - Verdict: DISPROVED. Generated by proof-engine v0.10.0
ER  -
View proof source 237 lines · 9.2 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: The integer 1 is a prime number.
Generated: 2026-03-28
"""
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.computations import compare, explain_calc

# 1. CLAIM INTERPRETATION (Rule 4)
CLAIM_NATURAL = "The integer 1 is a prime number."
CLAIM_FORMAL = {
    "subject": "the integer 1",
    "property": "whether 1 satisfies the definition of a prime number",
    "operator": "==",
    "operator_note": (
        "A prime number is defined as a natural number greater than 1 "
        "whose only positive divisors are 1 and itself. For 1 to be prime, "
        "it must satisfy BOTH conditions: (1) greater than 1, and (2) exactly "
        "two distinct positive divisors. We check whether 1 meets these criteria. "
        "The claim asserts 1 IS prime (== True); disproof requires showing "
        "it fails at least one definitional criterion."
    ),
    "threshold": True,
}

# 2. FACT REGISTRY — A-types only for pure math
FACT_REGISTRY = {
    "A1": {
        "label": "Positive divisors of 1 (exhaustive enumeration)",
        "method": None,
        "result": None,
    },
    "A2": {
        "label": "Count of positive divisors of 1",
        "method": None,
        "result": None,
    },
    "A3": {
        "label": "Whether 1 > 1 (greater-than-1 criterion)",
        "method": None,
        "result": None,
    },
    "A4": {
        "label": "Cross-check: trial division primality test",
        "method": None,
        "result": None,
    },
    "A5": {
        "label": "Cross-check: sympy.isprime(1)",
        "method": None,
        "result": None,
    },
}

# 3. COMPUTATION — primary method: definitional check

# A1: Find all positive divisors of 1
n = 1
divisors_of_1 = [d for d in range(1, n + 1) if n % d == 0]
print(f"A1: Positive divisors of {n}: {divisors_of_1}")

# A2: Count divisors — a prime must have exactly 2 (1 and itself)
num_divisors = explain_calc("len(divisors_of_1)", locals(), label="A2: number of positive divisors of 1")

# A3: Check greater-than-1 criterion
gt_one = compare(n, ">", 1, label="A3: is 1 > 1?")
print(f"    1 > 1 is {gt_one}")

# Primary determination: 1 is prime iff it has exactly 2 divisors AND is > 1
has_exactly_two_divisors = compare(num_divisors, "==", 2, label="A2: divisor count == 2?")
is_prime_by_definition = has_exactly_two_divisors and gt_one
print(f"\nPrimary method: 1 is prime = {is_prime_by_definition}")
print(f"  Fails criterion 1 (n > 1): 1 > 1 is {gt_one}")
print(f"  Fails criterion 2 (exactly 2 divisors): has {num_divisors} divisor(s), need 2")

# 4. CROSS-CHECKS — mathematically independent methods (Rule 6)

# Cross-check A: Trial division primality test (independent algorithm)
def is_prime_trial_division(n):
    """Standard trial division: n must be > 1 and have no divisors in [2, sqrt(n)]."""
    if n < 2:
        return False
    for i in range(2, int(n**0.5) + 1):
        if n % i == 0:
            return False
    return True

crosscheck_trial = is_prime_trial_division(1)
print(f"\nA4 cross-check (trial division): is_prime(1) = {crosscheck_trial}")

# Cross-check B: sympy's isprime (independent implementation)
try:
    from sympy import isprime as sympy_isprime
    crosscheck_sympy = sympy_isprime(1)
    sympy_available = True
    print(f"A5 cross-check (sympy.isprime): isprime(1) = {crosscheck_sympy}")
except ImportError:
    crosscheck_sympy = False
    sympy_available = False
    print("A5 cross-check (sympy): not available, skipping")

# All methods must agree: 1 is NOT prime
assert is_prime_by_definition == crosscheck_trial, (
    f"Cross-check failed: definition={is_prime_by_definition}, trial_division={crosscheck_trial}"
)
if sympy_available:
    assert is_prime_by_definition == crosscheck_sympy, (
        f"Cross-check failed: definition={is_prime_by_definition}, sympy={crosscheck_sympy}"
    )

# 5. ADVERSARIAL CHECKS (Rule 5)
adversarial_checks = [
    {
        "question": "Was 1 ever historically considered a prime number?",
        "verification_performed": (
            "Researched the history of primality of 1. Until the mid-19th century, "
            "many mathematicians (including Goldbach, Euler, and Lebesgue) considered "
            "1 to be prime. The modern convention excluding 1 was formalized to preserve "
            "the Fundamental Theorem of Arithmetic (unique prime factorization). "
            "The modern definition (ISO 80000-2, Hardy & Wright, etc.) explicitly "
            "requires primes to be > 1."
        ),
        "finding": (
            "Historically, 1 was sometimes considered prime, but the modern standard "
            "mathematical definition (universally adopted since ~1899) excludes 1. "
            "The claim is evaluated against the current standard definition."
        ),
        "breaks_proof": False,
    },
    {
        "question": "Is there any modern mathematical authority that defines 1 as prime?",
        "verification_performed": (
            "Checked ISO 80000-2 (international standard for mathematical notation), "
            "major textbooks (Hardy & Wright, Niven Zuckerman & Montgomery, "
            "Ireland & Rosen), and computational references (OEIS A000040). "
            "All define primes as integers greater than 1."
        ),
        "finding": (
            "No modern mathematical authority defines 1 as prime. The exclusion is "
            "universal in contemporary mathematics."
        ),
        "breaks_proof": False,
    },
    {
        "question": "Does the Fundamental Theorem of Arithmetic break if 1 is prime?",
        "verification_performed": (
            "The FTA states every integer > 1 has a unique prime factorization "
            "(up to order). If 1 were prime, factorizations would not be unique: "
            "e.g., 6 = 2 × 3 = 1 × 2 × 3 = 1 × 1 × 2 × 3. "
            "This is the key mathematical reason 1 is excluded from primes."
        ),
        "finding": (
            "Including 1 as prime would destroy unique factorization, confirming "
            "that the modern exclusion is mathematically necessary, not arbitrary."
        ),
        "breaks_proof": False,
    },
]

# 6. VERDICT AND STRUCTURED OUTPUT
if __name__ == "__main__":
    claim_holds = compare(is_prime_by_definition, "==", CLAIM_FORMAL["threshold"],
                          label="Claim evaluation: is 1 prime?")

    # Pure-math: no citations
    verdict = "PROVED" if claim_holds else "DISPROVED"

    FACT_REGISTRY["A1"]["method"] = "Exhaustive enumeration of divisors d in [1, n] where n % d == 0"
    FACT_REGISTRY["A1"]["result"] = str(divisors_of_1)
    FACT_REGISTRY["A2"]["method"] = "len(divisors_of_1)"
    FACT_REGISTRY["A2"]["result"] = str(num_divisors)
    FACT_REGISTRY["A3"]["method"] = "compare(1, '>', 1)"
    FACT_REGISTRY["A3"]["result"] = str(gt_one)
    FACT_REGISTRY["A4"]["method"] = "Trial division primality test (independent algorithm)"
    FACT_REGISTRY["A4"]["result"] = str(crosscheck_trial)
    FACT_REGISTRY["A5"]["method"] = "sympy.isprime(1)" if sympy_available else "sympy not available"
    FACT_REGISTRY["A5"]["result"] = str(crosscheck_sympy) if sympy_available else "skipped"

    cross_checks = [
        {
            "description": "Definitional check vs trial division",
            "values_compared": [str(is_prime_by_definition), str(crosscheck_trial)],
            "agreement": is_prime_by_definition == crosscheck_trial,
        },
    ]
    if sympy_available:
        cross_checks.append({
            "description": "Definitional check vs sympy.isprime",
            "values_compared": [str(is_prime_by_definition), str(crosscheck_sympy)],
            "agreement": is_prime_by_definition == crosscheck_sympy,
        })

    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,
        "cross_checks": cross_checks,
        "adversarial_checks": adversarial_checks,
        "verdict": verdict,
        "key_results": {
            "n": 1,
            "divisors": divisors_of_1,
            "num_divisors": num_divisors,
            "greater_than_1": gt_one,
            "is_prime": is_prime_by_definition,
            "operator": CLAIM_FORMAL["operator"],
            "claim_holds": claim_holds,
        },
        "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

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