Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved. Exact original first-admission records.
Statement with defined notation
∀ p. Prime(p) → p = 2 ∨ (∃ x. p = S S S (x + x))Every purple notation token opens its conservative definition. This is a reading surface; the compiler expands the statement before the unchanged kernel checks it.
Definitions used by this theorem
In the theorem statement
1 occurrences
In local proof propositions
2 occurrences
Exact expanded native-PA statement
forall p. ((~(p = 1) /\ forall wip_prime_left_wer_shape_prime wip_prime_right_wer_shape_prime. p = wip_prime_left_wer_shape_prime * wip_prime_right_wer_shape_prime -> wip_prime_left_wer_shape_prime = 1 \/ wip_prime_right_wer_shape_prime = 1)) -> p = 2 \/ exists m. p = S (S (S (m + m)))Proof neighborhood
Direct theorem prerequisites
PA004G eq_decidable PA0064 prime_ne_two_is_odd PA001V nonzero_is_succ PA000G mul_succ_left PA000D mul_zero_left PA0001 zero_add PA000E add_succ_left PA0009 add_assoc PA000F add_commDirect theorem dependents
Definition-aware tactic body
Only local propositions introduced by have or suffices are compacted. The untrusted compiler re-expands each one before the original tactic script is replayed; defined notation is never accepted by the kernel. Open the exact replay line beneath every changed command.
Read the argument
Proof checkpoints
This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.
Named ingredients (3)
01Fix variables and assumptionsL1–2
02Establish hcasesL3–6
03Separate the logical casesL7–8
04Use earlier factsL9–9
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L9
exact hcases_left
05Separate the logical casesL10–10
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L10
right
06Establish hoddL11–15
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply prime ne two is odd.
07Separate the logical casesL16–16
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L16
cases hodd
08Establish hpartsL17–18
Establish this local claim before using it. It is not an additional assumption.
09Separate the logical casesL19–19
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L19
cases hparts
10Establish hhL20–26
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hparts left.
11Establish hsuccL27–30
12Separate the logical casesL31–31
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L31
cases hsucc
13Construct an explicit witnessL32–32
Supply the displayed value, then prove that it has the required property.
- L32
exists x1
14Calculate and transport equalitiesL33–34
15Use earlier factsL35–35
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L35
exact hodd_witness
16Calculate and transport equalitiesL36–36
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L36
simp [mul_succ_left, mul_zero_left, zero_add, add_succ_left, add_assoc, add_comm]
Original defined command ledger · 36 lines
- 0001
intro p - 0002
intro hp - 0003
have hcases : p = 2 \/ ~(p = 2) - 0004
specialize eq_decidable p - 0005
specialize eq_decidable 2 - 0006
exact eq_decidable - 0007
cases hcases - 0008
left - 0009
exact hcases_left - 0010
right - 0011
have hodd : Odd(p)Exact native replay line
have hodd : exists h. p = 2 * h + 1 - 0012
specialize prime_ne_two_is_odd p - 0013
apply prime_ne_two_is_odd - 0014
exact hp - 0015
exact hcases_right - 0016
cases hodd - 0017
have hparts : Prime(p)Exact native replay line
have hparts : (~(p = 1) /\ forall wip_prime_left_wer_shape_prime wip_prime_right_wer_shape_prime. p = wip_prime_left_wer_shape_prime * wip_prime_right_wer_shape_prime -> wip_prime_left_wer_shape_prime = 1 \/ wip_prime_right_wer_shape_prime = 1) - 0018
exact hp - 0019
cases hparts - 0020
have hh : ~(x = 0) - 0021
intro hxzero - 0022
apply hparts_left - 0023
trans 2 * x + 1 - 0024
exact hodd_witness - 0025
rewrite hxzero - 0026
simp [mul_succ_left, mul_zero_left, zero_add, add_succ_left] - 0027
have hsucc : exists m. x = S m - 0028
specialize nonzero_is_succ x - 0029
apply nonzero_is_succ - 0030
exact hh - 0031
cases hsucc - 0032
exists x1 - 0033
trans 2 * S x1 + 1 - 0034
rewrite <- hsucc_witness - 0035
exact hodd_witness - 0036
simp [mul_succ_left, mul_zero_left, zero_add, add_succ_left, add_assoc, add_comm]