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.
Exact theorem in conservative defined notation
∀ a. ∀ b. ¬a = 0 → ¬b = 0 → ∃ x. ContinuedFraction(a,b,x) ∧ ¬x = 0
Every linked abbreviation expands hygienically to the identical original native formula.
Definition DAG
Actual proof prerequisites
Complete unchanged native tactic proof
All 39 lines are the exact independently kernel-checked original script.
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 (1)
01Fix variables and assumptionsL1–4
02Establish hsucc_bL5–7
03Establish ha_positiveL8–10
04Separate the logical casesL11–11
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L11
cases ha_positive
05Use earlier factsL12–12
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L12
specialize hsucc_b b
06Establish hb_positiveL13–15
07Separate the logical casesL16–16
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L16
cases hb_positive
08Use earlier factsL17–18
09Establish htraceL19–21
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply continued fraction nonzero divisor exists.
- L19
have htrace : ∃ s. ∃ h. ∃ e. ∃ k. ¬s = 0 ∧ ContinuedFractionTrace(a,b,s,h,e,S k)Definitions: ContinuedFractionTraceOriginal native command in the exact edition - L20
apply continued_fraction_nonzero_divisor_exists - L21
exact hb
10Separate the logical casesL22–26
11Construct an explicit witnessL27–27
Supply the displayed value, then prove that it has the required property.
- L27
exists x2
12Separate the logical casesL28–28
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L28
split
13Construct an explicit witnessL29–33
14Separate the logical casesL34–34
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L34
split
15Use earlier factsL35–35
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L35
exact ha_positive_witness
16Separate the logical casesL36–36
Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.
- L36
split
Original defined command ledger · 39 lines
- 0001
intro a - 0002
intro b - 0003
intro ha - 0004
intro hb - 0005
have hsucc_b : forall n. ~(n = 0) -> exists p. n = S p - 0006
exact nonzero_is_succ - 0007
specialize nonzero_is_succ a - 0008
have ha_positive : exists p. a = S p - 0009
apply nonzero_is_succ - 0010
exact ha - 0011
cases ha_positive - 0012
specialize hsucc_b b - 0013
have hb_positive : exists p. b = S p - 0014
apply hsucc_b - 0015
exact hb - 0016
cases hb_positive - 0017
specialize continued_fraction_nonzero_divisor_exists a - 0018
specialize continued_fraction_nonzero_divisor_exists b - 0019
have htrace : exists s h e k. (~(s = 0) /\ (exists cf_gcd_nonzero_result. ((((exists ff_h_cf_nonzero_result_initial_state. ff_h_cf_nonzero_result_initial_state + S (((cf_gcd_nonzero_result) + (((0) + (0)) * S ((0) + (0)) + ((0) + (0)))) * S ((cf_gcd_nonzero_result) + (((0) + (0)) * S ((0) + (0)) + ((0) + (0)))) + ((((0) + (0)) * S ((0) + (0)) + ((0) + (0))) + (((0) + (0)) * S ((0) + (0)) + ((0) + (0))))) = S ((S (0)) * e)) /\ exists ff_q_cf_nonzero_result_initial_state. h = ff_q_cf_nonzero_result_initial_state * S ((S (0)) * e) + (((cf_gcd_nonzero_result) + (((0) + (0)) * S ((0) + (0)) + ((0) + (0)))) * S ((cf_gcd_nonzero_result) + (((0) + (0)) * S ((0) + (0)) + ((0) + (0)))) + ((((0) + (0)) * S ((0) + (0)) + ((0) + (0))) + (((0) + (0)) * S ((0) + (0)) + ((0) + (0))))))) /\ ((((exists ff_h_cf_nonzero_result_terminal_state. ff_h_cf_nonzero_result_terminal_state + S (((a) + (((b) + (s)) * S ((b) + (s)) + ((s) + (s)))) * S ((a) + (((b) + (s)) * S ((b) + (s)) + ((s) + (s)))) + ((((b) + (s)) * S ((b) + (s)) + ((s) + (s))) + (((b) + (s)) * S ((b) + (s)) + ((s) + (s))))) = S ((S (S k)) * e)) /\ exists ff_q_cf_nonzero_result_terminal_state. h = ff_q_cf_nonzero_result_terminal_state * S ((S (S k)) * e) + (((a) + (((b) + (s)) * S ((b) + (s)) + ((s) + (s)))) * S ((a) + (((b) + (s)) * S ((b) + (s)) + ((s) + (s)))) + ((((b) + (s)) * S ((b) + (s)) + ((s) + (s))) + (((b) + (s)) * S ((b) + (s)) + ((s) + (s))))))) /\ forall cf_index_nonzero_result. (exists ff_lt_cf_nonzero_result_index. ff_lt_cf_nonzero_result_index + S cf_index_nonzero_result = S k) -> exists cf_old_a_nonzero_result cf_old_b_nonzero_result cf_tail_nonzero_result cf_new_a_nonzero_result cf_new_b_nonzero_result cf_head_nonzero_result cf_quotient_nonzero_result. ((((exists ff_h_cf_nonzero_result_previous_state. ff_h_cf_nonzero_result_previous_state + S (((cf_old_a_nonzero_result) + (((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result)))) * S ((cf_old_a_nonzero_result) + (((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result)))) + ((((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result))) + (((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result))))) = S ((S (cf_index_nonzero_result)) * e)) /\ exists ff_q_cf_nonzero_result_previous_state. h = ff_q_cf_nonzero_result_previous_state * S ((S (cf_index_nonzero_result)) * e) + (((cf_old_a_nonzero_result) + (((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result)))) * S ((cf_old_a_nonzero_result) + (((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result)))) + ((((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result))) + (((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) * S ((cf_old_b_nonzero_result) + (cf_tail_nonzero_result)) + ((cf_tail_nonzero_result) + (cf_tail_nonzero_result))))))) /\ ((((exists ff_h_cf_nonzero_result_following_state. ff_h_cf_nonzero_result_following_state + S (((cf_new_a_nonzero_result) + (((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result)))) * S ((cf_new_a_nonzero_result) + (((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result)))) + ((((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result))) + (((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result))))) = S ((S (S cf_index_nonzero_result)) * e)) /\ exists ff_q_cf_nonzero_result_following_state. h = ff_q_cf_nonzero_result_following_state * S ((S (S cf_index_nonzero_result)) * e) + (((cf_new_a_nonzero_result) + (((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result)))) * S ((cf_new_a_nonzero_result) + (((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result)))) + ((((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result))) + (((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) * S ((cf_new_b_nonzero_result) + (cf_head_nonzero_result)) + ((cf_head_nonzero_result) + (cf_head_nonzero_result))))))) /\ (cf_new_b_nonzero_result = cf_old_a_nonzero_result /\ (cf_new_a_nonzero_result = cf_new_b_nonzero_result * cf_quotient_nonzero_result + cf_old_b_nonzero_result /\ ((exists ff_lt_cf_nonzero_result_remainder. ff_lt_cf_nonzero_result_remainder + S cf_old_b_nonzero_result = cf_new_b_nonzero_result) /\ (cf_head_nonzero_result = S ((cf_quotient_nonzero_result + cf_tail_nonzero_result) * S (cf_quotient_nonzero_result + cf_tail_nonzero_result) + (cf_tail_nonzero_result + cf_tail_nonzero_result)))))))))))) - 0020
apply continued_fraction_nonzero_divisor_exists - 0021
exact hb - 0022
cases htrace - 0023
cases htrace_witness - 0024
cases htrace_witness_witness - 0025
cases htrace_witness_witness_witness - 0026
cases htrace_witness_witness_witness_witness - 0027
exists x2 - 0028
split - 0029
exists x - 0030
exists x1 - 0031
exists x3 - 0032
exists x4 - 0033
exists x5 - 0034
split - 0035
exact ha_positive_witness - 0036
split - 0037
exact hb_positive_witness - 0038
exact htrace_witness_witness_witness_witness_right - 0039
exact htrace_witness_witness_witness_witness_left