"The integer 1 is a prime number."
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?
-
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.
-
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.
-
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
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
| 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
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.
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)
| # | 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
- Rule 1: N/A — pure computation, no empirical facts
- Rule 2: N/A — pure computation, no empirical facts
- Rule 3:
date.today()used forgenerated_attimestamp - 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()andexplain_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
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))
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.
First run takes longer while Binder builds the container image; subsequent runs are cached.
machine-readable formats
Downloads & raw data
found this useful? ★ star on github