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
∀ b. ∀ c. ∀ l. ∀ P. ∀ n. ∀ F. n = S S l → Range(b,c,2,l) → Product(b,c,l,P) → Factorial(n,F) → F = P · nEvery 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
3 occurrences
In local proof propositions
2 occurrences
Exact expanded native-PA statement
forall b c l P n F. n = S (S l) -> (forall wtp_range_index_wer_range_two. (exists wtp_range_gap_wer_range_two. wtp_range_gap_wer_range_two + S wtp_range_index_wer_range_two = l) -> (((exists ff_h_wer_range_two_decoded. ff_h_wer_range_two_decoded + S (2 + wtp_range_index_wer_range_two) = S ((S (wtp_range_index_wer_range_two)) * c)) /\ exists ff_q_wer_range_two_decoded. b = ff_q_wer_range_two_decoded * S ((S (wtp_range_index_wer_range_two)) * c) + (2 + wtp_range_index_wer_range_two)))) -> (exists ff_u_wer_range_two_product ff_v_wer_range_two_product. ((((exists ff_h_wer_range_two_product_start. ff_h_wer_range_two_product_start + S (1) = S ((S (0)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_start. ff_u_wer_range_two_product = ff_q_wer_range_two_product_start * S ((S (0)) * ff_v_wer_range_two_product) + (1))) /\ ((((exists ff_h_wer_range_two_product_terminal. ff_h_wer_range_two_product_terminal + S (P) = S ((S (l)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_terminal. ff_u_wer_range_two_product = ff_q_wer_range_two_product_terminal * S ((S (l)) * ff_v_wer_range_two_product) + (P))) /\ forall ff_i_wer_range_two_product. (exists ff_lt_wer_range_two_product_bound. ff_lt_wer_range_two_product_bound + S ff_i_wer_range_two_product = l) -> exists ff_p_wer_range_two_product ff_r_wer_range_two_product ff_s_wer_range_two_product. ((((exists ff_h_wer_range_two_product_factor. ff_h_wer_range_two_product_factor + S (ff_p_wer_range_two_product) = S ((S (ff_i_wer_range_two_product)) * c)) /\ exists ff_q_wer_range_two_product_factor. b = ff_q_wer_range_two_product_factor * S ((S (ff_i_wer_range_two_product)) * c) + (ff_p_wer_range_two_product))) /\ ((((exists ff_h_wer_range_two_product_partial. ff_h_wer_range_two_product_partial + S (ff_r_wer_range_two_product) = S ((S (ff_i_wer_range_two_product)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_partial. ff_u_wer_range_two_product = ff_q_wer_range_two_product_partial * S ((S (ff_i_wer_range_two_product)) * ff_v_wer_range_two_product) + (ff_r_wer_range_two_product))) /\ ((((exists ff_h_wer_range_two_product_successor. ff_h_wer_range_two_product_successor + S (ff_s_wer_range_two_product) = S ((S (S ff_i_wer_range_two_product)) * ff_v_wer_range_two_product)) /\ exists ff_q_wer_range_two_product_successor. ff_u_wer_range_two_product = ff_q_wer_range_two_product_successor * S ((S (S ff_i_wer_range_two_product)) * ff_v_wer_range_two_product) + (ff_s_wer_range_two_product))) /\ ff_s_wer_range_two_product = ff_r_wer_range_two_product * ff_p_wer_range_two_product)))))) -> (exists ff_b_wer_endpoint ff_c_wer_endpoint. ((forall ff_i_wer_endpoint_range. (exists ff_lt_wer_endpoint_range_bound. ff_lt_wer_endpoint_range_bound + S ff_i_wer_endpoint_range = n) -> (((exists ff_h_wer_endpoint_range_decoded. ff_h_wer_endpoint_range_decoded + S (1 + ff_i_wer_endpoint_range) = S ((S (ff_i_wer_endpoint_range)) * ff_c_wer_endpoint)) /\ exists ff_q_wer_endpoint_range_decoded. ff_b_wer_endpoint = ff_q_wer_endpoint_range_decoded * S ((S (ff_i_wer_endpoint_range)) * ff_c_wer_endpoint) + (1 + ff_i_wer_endpoint_range)))) /\ (exists ff_u_wer_endpoint_product ff_v_wer_endpoint_product. ((((exists ff_h_wer_endpoint_product_start. ff_h_wer_endpoint_product_start + S (1) = S ((S (0)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_start. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_start * S ((S (0)) * ff_v_wer_endpoint_product) + (1))) /\ ((((exists ff_h_wer_endpoint_product_terminal. ff_h_wer_endpoint_product_terminal + S (F) = S ((S (n)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_terminal. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_terminal * S ((S (n)) * ff_v_wer_endpoint_product) + (F))) /\ forall ff_i_wer_endpoint_product. (exists ff_lt_wer_endpoint_product_bound. ff_lt_wer_endpoint_product_bound + S ff_i_wer_endpoint_product = n) -> exists ff_p_wer_endpoint_product ff_r_wer_endpoint_product ff_s_wer_endpoint_product. ((((exists ff_h_wer_endpoint_product_factor. ff_h_wer_endpoint_product_factor + S (ff_p_wer_endpoint_product) = S ((S (ff_i_wer_endpoint_product)) * ff_c_wer_endpoint)) /\ exists ff_q_wer_endpoint_product_factor. ff_b_wer_endpoint = ff_q_wer_endpoint_product_factor * S ((S (ff_i_wer_endpoint_product)) * ff_c_wer_endpoint) + (ff_p_wer_endpoint_product))) /\ ((((exists ff_h_wer_endpoint_product_partial. ff_h_wer_endpoint_product_partial + S (ff_r_wer_endpoint_product) = S ((S (ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_partial. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_partial * S ((S (ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product) + (ff_r_wer_endpoint_product))) /\ ((((exists ff_h_wer_endpoint_product_successor. ff_h_wer_endpoint_product_successor + S (ff_s_wer_endpoint_product) = S ((S (S ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product)) /\ exists ff_q_wer_endpoint_product_successor. ff_u_wer_endpoint_product = ff_q_wer_endpoint_product_successor * S ((S (S ff_i_wer_endpoint_product)) * ff_v_wer_endpoint_product) + (ff_s_wer_endpoint_product))) /\ ff_s_wer_endpoint_product = ff_r_wer_endpoint_product * ff_p_wer_endpoint_product)))))))) -> F = P * nProof neighborhood
Direct theorem prerequisites
PA00BG beta_range_two_product_is_factorial_succ PA0065 factorial_succ_decompose PA006B factorial_functional PA0050 mul_congrDirect 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 (4)
01Fix variables and assumptionsL1–10
02Establish hprefix_factorialL11–18
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta range two product is factorial succ.
- L11
have hprefix_factorial : Factorial(S l,P)Definitions: Factorial(S l,P)Original native command in the exact edition - L12
specialize beta_range_two_product_is_factorial_succ l - L13
specialize beta_range_two_product_is_factorial_succ b - L14
specialize beta_range_two_product_is_factorial_succ c - L15
specialize beta_range_two_product_is_factorial_succ P - L16
apply beta_range_two_product_is_factorial_succ - L17
exact hrange - L18
exact hproduct
03Establish hdecompL19–25
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factorial succ decompose.
- L19
have hdecomp : ∃ R. Factorial(S l,R) ∧ F = R · S S lDefinitions: Factorial(S l,R)Original native command in the exact edition - L20
specialize factorial_succ_decompose (S l) - L21
specialize factorial_succ_decompose n - L22
specialize factorial_succ_decompose F - L23
apply factorial_succ_decompose - L24
exact hterminal - L25
exact hfactorial
04Separate the logical casesL26–27
05Establish hprefL28–37
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply factorial functional.
06Use earlier factsL38–38
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L38
apply mul_congr
07Calculate and transport equalitiesL39–39
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L39
symm
08Use earlier factsL40–40
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L40
exact hpref
09Calculate and transport equalitiesL41–41
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L41
refl
10Use earlier factsL42–42
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L42
apply mul_congr
11Calculate and transport equalitiesL43–44
12Use earlier factsL45–45
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L45
exact hterminal
Original defined command ledger · 45 lines
- 0001
intro b - 0002
intro c - 0003
intro l - 0004
intro P - 0005
intro n - 0006
intro F - 0007
intro hterminal - 0008
intro hrange - 0009
intro hproduct - 0010
intro hfactorial - 0011
have hprefix_factorial : Factorial(S l,P)Exact native replay line
have hprefix_factorial : exists wer_factor_code_wer_endpoint_prefix_factorial wer_factor_scale_wer_endpoint_prefix_factorial. ((forall wer_range_index_wer_endpoint_prefix_factorial_range. (exists wer_range_gap_wer_endpoint_prefix_factorial_range. wer_range_gap_wer_endpoint_prefix_factorial_range + S wer_range_index_wer_endpoint_prefix_factorial_range = S l) -> (((exists ff_h_wer_endpoint_prefix_factorial_range_decoded. ff_h_wer_endpoint_prefix_factorial_range_decoded + S (1 + wer_range_index_wer_endpoint_prefix_factorial_range) = S ((S (wer_range_index_wer_endpoint_prefix_factorial_range)) * wer_factor_scale_wer_endpoint_prefix_factorial)) /\ exists ff_q_wer_endpoint_prefix_factorial_range_decoded. wer_factor_code_wer_endpoint_prefix_factorial = ff_q_wer_endpoint_prefix_factorial_range_decoded * S ((S (wer_range_index_wer_endpoint_prefix_factorial_range)) * wer_factor_scale_wer_endpoint_prefix_factorial) + (1 + wer_range_index_wer_endpoint_prefix_factorial_range)))) /\ (exists ff_u_wer_endpoint_prefix_factorial_product ff_v_wer_endpoint_prefix_factorial_product. ((((exists ff_h_wer_endpoint_prefix_factorial_product_start. ff_h_wer_endpoint_prefix_factorial_product_start + S (1) = S ((S (0)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_start. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_start * S ((S (0)) * ff_v_wer_endpoint_prefix_factorial_product) + (1))) /\ ((((exists ff_h_wer_endpoint_prefix_factorial_product_terminal. ff_h_wer_endpoint_prefix_factorial_product_terminal + S (P) = S ((S (S l)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_terminal. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_terminal * S ((S (S l)) * ff_v_wer_endpoint_prefix_factorial_product) + (P))) /\ forall ff_i_wer_endpoint_prefix_factorial_product. (exists ff_lt_wer_endpoint_prefix_factorial_product_bound. ff_lt_wer_endpoint_prefix_factorial_product_bound + S ff_i_wer_endpoint_prefix_factorial_product = S l) -> exists ff_p_wer_endpoint_prefix_factorial_product ff_r_wer_endpoint_prefix_factorial_product ff_s_wer_endpoint_prefix_factorial_product. ((((exists ff_h_wer_endpoint_prefix_factorial_product_factor. ff_h_wer_endpoint_prefix_factorial_product_factor + S (ff_p_wer_endpoint_prefix_factorial_product) = S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * wer_factor_scale_wer_endpoint_prefix_factorial)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_factor. wer_factor_code_wer_endpoint_prefix_factorial = ff_q_wer_endpoint_prefix_factorial_product_factor * S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * wer_factor_scale_wer_endpoint_prefix_factorial) + (ff_p_wer_endpoint_prefix_factorial_product))) /\ ((((exists ff_h_wer_endpoint_prefix_factorial_product_partial. ff_h_wer_endpoint_prefix_factorial_product_partial + S (ff_r_wer_endpoint_prefix_factorial_product) = S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_partial. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_partial * S ((S (ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product) + (ff_r_wer_endpoint_prefix_factorial_product))) /\ ((((exists ff_h_wer_endpoint_prefix_factorial_product_successor. ff_h_wer_endpoint_prefix_factorial_product_successor + S (ff_s_wer_endpoint_prefix_factorial_product) = S ((S (S ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product)) /\ exists ff_q_wer_endpoint_prefix_factorial_product_successor. ff_u_wer_endpoint_prefix_factorial_product = ff_q_wer_endpoint_prefix_factorial_product_successor * S ((S (S ff_i_wer_endpoint_prefix_factorial_product)) * ff_v_wer_endpoint_prefix_factorial_product) + (ff_s_wer_endpoint_prefix_factorial_product))) /\ ff_s_wer_endpoint_prefix_factorial_product = ff_r_wer_endpoint_prefix_factorial_product * ff_p_wer_endpoint_prefix_factorial_product))))))) - 0012
specialize beta_range_two_product_is_factorial_succ l - 0013
specialize beta_range_two_product_is_factorial_succ b - 0014
specialize beta_range_two_product_is_factorial_succ c - 0015
specialize beta_range_two_product_is_factorial_succ P - 0016
apply beta_range_two_product_is_factorial_succ - 0017
exact hrange - 0018
exact hproduct - 0019
have hdecomp : ∃ R. Factorial(S l,R) ∧ F = R · S S lExact native replay line
have hdecomp : exists R. ((exists wer_factor_code_wer_endpoint_previous_factorial wer_factor_scale_wer_endpoint_previous_factorial. ((forall wer_range_index_wer_endpoint_previous_factorial_range. (exists wer_range_gap_wer_endpoint_previous_factorial_range. wer_range_gap_wer_endpoint_previous_factorial_range + S wer_range_index_wer_endpoint_previous_factorial_range = S l) -> (((exists ff_h_wer_endpoint_previous_factorial_range_decoded. ff_h_wer_endpoint_previous_factorial_range_decoded + S (1 + wer_range_index_wer_endpoint_previous_factorial_range) = S ((S (wer_range_index_wer_endpoint_previous_factorial_range)) * wer_factor_scale_wer_endpoint_previous_factorial)) /\ exists ff_q_wer_endpoint_previous_factorial_range_decoded. wer_factor_code_wer_endpoint_previous_factorial = ff_q_wer_endpoint_previous_factorial_range_decoded * S ((S (wer_range_index_wer_endpoint_previous_factorial_range)) * wer_factor_scale_wer_endpoint_previous_factorial) + (1 + wer_range_index_wer_endpoint_previous_factorial_range)))) /\ (exists ff_u_wer_endpoint_previous_factorial_product ff_v_wer_endpoint_previous_factorial_product. ((((exists ff_h_wer_endpoint_previous_factorial_product_start. ff_h_wer_endpoint_previous_factorial_product_start + S (1) = S ((S (0)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_start. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_start * S ((S (0)) * ff_v_wer_endpoint_previous_factorial_product) + (1))) /\ ((((exists ff_h_wer_endpoint_previous_factorial_product_terminal. ff_h_wer_endpoint_previous_factorial_product_terminal + S (R) = S ((S (S l)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_terminal. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_terminal * S ((S (S l)) * ff_v_wer_endpoint_previous_factorial_product) + (R))) /\ forall ff_i_wer_endpoint_previous_factorial_product. (exists ff_lt_wer_endpoint_previous_factorial_product_bound. ff_lt_wer_endpoint_previous_factorial_product_bound + S ff_i_wer_endpoint_previous_factorial_product = S l) -> exists ff_p_wer_endpoint_previous_factorial_product ff_r_wer_endpoint_previous_factorial_product ff_s_wer_endpoint_previous_factorial_product. ((((exists ff_h_wer_endpoint_previous_factorial_product_factor. ff_h_wer_endpoint_previous_factorial_product_factor + S (ff_p_wer_endpoint_previous_factorial_product) = S ((S (ff_i_wer_endpoint_previous_factorial_product)) * wer_factor_scale_wer_endpoint_previous_factorial)) /\ exists ff_q_wer_endpoint_previous_factorial_product_factor. wer_factor_code_wer_endpoint_previous_factorial = ff_q_wer_endpoint_previous_factorial_product_factor * S ((S (ff_i_wer_endpoint_previous_factorial_product)) * wer_factor_scale_wer_endpoint_previous_factorial) + (ff_p_wer_endpoint_previous_factorial_product))) /\ ((((exists ff_h_wer_endpoint_previous_factorial_product_partial. ff_h_wer_endpoint_previous_factorial_product_partial + S (ff_r_wer_endpoint_previous_factorial_product) = S ((S (ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_partial. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_partial * S ((S (ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product) + (ff_r_wer_endpoint_previous_factorial_product))) /\ ((((exists ff_h_wer_endpoint_previous_factorial_product_successor. ff_h_wer_endpoint_previous_factorial_product_successor + S (ff_s_wer_endpoint_previous_factorial_product) = S ((S (S ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product)) /\ exists ff_q_wer_endpoint_previous_factorial_product_successor. ff_u_wer_endpoint_previous_factorial_product = ff_q_wer_endpoint_previous_factorial_product_successor * S ((S (S ff_i_wer_endpoint_previous_factorial_product)) * ff_v_wer_endpoint_previous_factorial_product) + (ff_s_wer_endpoint_previous_factorial_product))) /\ ff_s_wer_endpoint_previous_factorial_product = ff_r_wer_endpoint_previous_factorial_product * ff_p_wer_endpoint_previous_factorial_product)))))))) /\ F = R * S (S l)) - 0020
specialize factorial_succ_decompose (S l) - 0021
specialize factorial_succ_decompose n - 0022
specialize factorial_succ_decompose F - 0023
apply factorial_succ_decompose - 0024
exact hterminal - 0025
exact hfactorial - 0026
cases hdecomp - 0027
cases hdecomp_witness - 0028
have hpref : P = x - 0029
specialize factorial_functional (S l) - 0030
specialize factorial_functional P - 0031
specialize factorial_functional x - 0032
apply factorial_functional - 0033
exact hprefix_factorial - 0034
exact hdecomp_witness_left - 0035
trans x * S (S l) - 0036
exact hdecomp_witness_right - 0037
trans P * S (S l) - 0038
apply mul_congr - 0039
symm - 0040
exact hpref - 0041
refl - 0042
apply mul_congr - 0043
refl - 0044
symm - 0045
exact hterminal