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. ∀ f. ∀ g. ∀ n. ∀ Q. ∀ F. BoundedPrefix(b,c,n) → InjectivePrefix(b,c,n) → (∀ x. ∀ y. Lt(x,n) → BetaAt(b,c,x,y) → BetaAt(f,g,x,S y)) → Product(f,g,n,Q) → Factorial(n,F) → Q = FEvery 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
7 occurrences
In local proof propositions
8 occurrences
Exact expanded native-PA statement
forall b c f g n Q F. (forall fom_index_enr_generic_bounded. (exists fom_gap_enr_generic_bounded_index_bound. fom_gap_enr_generic_bounded_index_bound + S (fom_index_enr_generic_bounded) = n) -> exists fom_value_enr_generic_bounded. ((((exists fom_beta_height_enr_generic_bounded_entry. fom_beta_height_enr_generic_bounded_entry + S (fom_value_enr_generic_bounded) = S ((S (fom_index_enr_generic_bounded)) * c)) /\ exists fom_beta_quotient_enr_generic_bounded_entry. b = fom_beta_quotient_enr_generic_bounded_entry * S ((S (fom_index_enr_generic_bounded)) * c) + (fom_value_enr_generic_bounded))) /\ (exists fom_gap_enr_generic_bounded_value_bound. fom_gap_enr_generic_bounded_value_bound + S (fom_value_enr_generic_bounded) = n))) -> (forall wpo_injective_left_enr_generic_injective wpo_injective_right_enr_generic_injective wpo_injective_value_enr_generic_injective. (exists wpo_gap_enr_generic_injective_left_bound. wpo_gap_enr_generic_injective_left_bound + S (wpo_injective_left_enr_generic_injective) = n) -> (exists wpo_gap_enr_generic_injective_right_bound. wpo_gap_enr_generic_injective_right_bound + S (wpo_injective_right_enr_generic_injective) = n) -> (((exists wpo_beta_height_enr_generic_injective_left_entry. wpo_beta_height_enr_generic_injective_left_entry + S (wpo_injective_value_enr_generic_injective) = S ((S (wpo_injective_left_enr_generic_injective)) * c)) /\ exists wpo_beta_quotient_enr_generic_injective_left_entry. b = wpo_beta_quotient_enr_generic_injective_left_entry * S ((S (wpo_injective_left_enr_generic_injective)) * c) + (wpo_injective_value_enr_generic_injective))) -> (((exists wpo_beta_height_enr_generic_injective_right_entry. wpo_beta_height_enr_generic_injective_right_entry + S (wpo_injective_value_enr_generic_injective) = S ((S (wpo_injective_right_enr_generic_injective)) * c)) /\ exists wpo_beta_quotient_enr_generic_injective_right_entry. b = wpo_beta_quotient_enr_generic_injective_right_entry * S ((S (wpo_injective_right_enr_generic_injective)) * c) + (wpo_injective_value_enr_generic_injective))) -> wpo_injective_left_enr_generic_injective = wpo_injective_right_enr_generic_injective) -> (forall wsl_index_enr_generic_lift wsl_value_enr_generic_lift. (exists wpo_gap_enr_generic_lift_bound. wpo_gap_enr_generic_lift_bound + S (wsl_index_enr_generic_lift) = n) -> (((exists wpo_beta_height_enr_generic_lift_source. wpo_beta_height_enr_generic_lift_source + S (wsl_value_enr_generic_lift) = S ((S (wsl_index_enr_generic_lift)) * c)) /\ exists wpo_beta_quotient_enr_generic_lift_source. b = wpo_beta_quotient_enr_generic_lift_source * S ((S (wsl_index_enr_generic_lift)) * c) + (wsl_value_enr_generic_lift))) -> (((exists wpo_beta_height_enr_generic_lift_target. wpo_beta_height_enr_generic_lift_target + S (S wsl_value_enr_generic_lift) = S ((S (wsl_index_enr_generic_lift)) * g)) /\ exists wpo_beta_quotient_enr_generic_lift_target. f = wpo_beta_quotient_enr_generic_lift_target * S ((S (wsl_index_enr_generic_lift)) * g) + (S wsl_value_enr_generic_lift)))) -> (exists ff_u_enr_lifted_product ff_v_enr_lifted_product. ((((exists ff_h_enr_lifted_product_start. ff_h_enr_lifted_product_start + S (1) = S ((S (0)) * ff_v_enr_lifted_product)) /\ exists ff_q_enr_lifted_product_start. ff_u_enr_lifted_product = ff_q_enr_lifted_product_start * S ((S (0)) * ff_v_enr_lifted_product) + (1))) /\ ((((exists ff_h_enr_lifted_product_terminal. ff_h_enr_lifted_product_terminal + S (Q) = S ((S (n)) * ff_v_enr_lifted_product)) /\ exists ff_q_enr_lifted_product_terminal. ff_u_enr_lifted_product = ff_q_enr_lifted_product_terminal * S ((S (n)) * ff_v_enr_lifted_product) + (Q))) /\ forall ff_i_enr_lifted_product. (exists ff_lt_enr_lifted_product_bound. ff_lt_enr_lifted_product_bound + S ff_i_enr_lifted_product = n) -> exists ff_p_enr_lifted_product ff_r_enr_lifted_product ff_s_enr_lifted_product. ((((exists ff_h_enr_lifted_product_factor. ff_h_enr_lifted_product_factor + S (ff_p_enr_lifted_product) = S ((S (ff_i_enr_lifted_product)) * g)) /\ exists ff_q_enr_lifted_product_factor. f = ff_q_enr_lifted_product_factor * S ((S (ff_i_enr_lifted_product)) * g) + (ff_p_enr_lifted_product))) /\ ((((exists ff_h_enr_lifted_product_partial. ff_h_enr_lifted_product_partial + S (ff_r_enr_lifted_product) = S ((S (ff_i_enr_lifted_product)) * ff_v_enr_lifted_product)) /\ exists ff_q_enr_lifted_product_partial. ff_u_enr_lifted_product = ff_q_enr_lifted_product_partial * S ((S (ff_i_enr_lifted_product)) * ff_v_enr_lifted_product) + (ff_r_enr_lifted_product))) /\ ((((exists ff_h_enr_lifted_product_successor. ff_h_enr_lifted_product_successor + S (ff_s_enr_lifted_product) = S ((S (S ff_i_enr_lifted_product)) * ff_v_enr_lifted_product)) /\ exists ff_q_enr_lifted_product_successor. ff_u_enr_lifted_product = ff_q_enr_lifted_product_successor * S ((S (S ff_i_enr_lifted_product)) * ff_v_enr_lifted_product) + (ff_s_enr_lifted_product))) /\ ff_s_enr_lifted_product = ff_r_enr_lifted_product * ff_p_enr_lifted_product)))))) -> (exists ff_b_enr_factorial ff_c_enr_factorial. ((forall ff_i_enr_factorial_range. (exists ff_lt_enr_factorial_range_bound. ff_lt_enr_factorial_range_bound + S ff_i_enr_factorial_range = n) -> (((exists ff_h_enr_factorial_range_decoded. ff_h_enr_factorial_range_decoded + S (1 + ff_i_enr_factorial_range) = S ((S (ff_i_enr_factorial_range)) * ff_c_enr_factorial)) /\ exists ff_q_enr_factorial_range_decoded. ff_b_enr_factorial = ff_q_enr_factorial_range_decoded * S ((S (ff_i_enr_factorial_range)) * ff_c_enr_factorial) + (1 + ff_i_enr_factorial_range)))) /\ (exists ff_u_enr_factorial_product ff_v_enr_factorial_product. ((((exists ff_h_enr_factorial_product_start. ff_h_enr_factorial_product_start + S (1) = S ((S (0)) * ff_v_enr_factorial_product)) /\ exists ff_q_enr_factorial_product_start. ff_u_enr_factorial_product = ff_q_enr_factorial_product_start * S ((S (0)) * ff_v_enr_factorial_product) + (1))) /\ ((((exists ff_h_enr_factorial_product_terminal. ff_h_enr_factorial_product_terminal + S (F) = S ((S (n)) * ff_v_enr_factorial_product)) /\ exists ff_q_enr_factorial_product_terminal. ff_u_enr_factorial_product = ff_q_enr_factorial_product_terminal * S ((S (n)) * ff_v_enr_factorial_product) + (F))) /\ forall ff_i_enr_factorial_product. (exists ff_lt_enr_factorial_product_bound. ff_lt_enr_factorial_product_bound + S ff_i_enr_factorial_product = n) -> exists ff_p_enr_factorial_product ff_r_enr_factorial_product ff_s_enr_factorial_product. ((((exists ff_h_enr_factorial_product_factor. ff_h_enr_factorial_product_factor + S (ff_p_enr_factorial_product) = S ((S (ff_i_enr_factorial_product)) * ff_c_enr_factorial)) /\ exists ff_q_enr_factorial_product_factor. ff_b_enr_factorial = ff_q_enr_factorial_product_factor * S ((S (ff_i_enr_factorial_product)) * ff_c_enr_factorial) + (ff_p_enr_factorial_product))) /\ ((((exists ff_h_enr_factorial_product_partial. ff_h_enr_factorial_product_partial + S (ff_r_enr_factorial_product) = S ((S (ff_i_enr_factorial_product)) * ff_v_enr_factorial_product)) /\ exists ff_q_enr_factorial_product_partial. ff_u_enr_factorial_product = ff_q_enr_factorial_product_partial * S ((S (ff_i_enr_factorial_product)) * ff_v_enr_factorial_product) + (ff_r_enr_factorial_product))) /\ ((((exists ff_h_enr_factorial_product_successor. ff_h_enr_factorial_product_successor + S (ff_s_enr_factorial_product) = S ((S (S ff_i_enr_factorial_product)) * ff_v_enr_factorial_product)) /\ exists ff_q_enr_factorial_product_successor. ff_u_enr_factorial_product = ff_q_enr_factorial_product_successor * S ((S (S ff_i_enr_factorial_product)) * ff_v_enr_factorial_product) + (ff_s_enr_factorial_product))) /\ ff_s_enr_factorial_product = ff_r_enr_factorial_product * ff_p_enr_factorial_product)))))))) -> Q = FProof neighborhood
Direct theorem prerequisites
PA002F beta_at_unique PA0032 beta_range_entry_eq PA007X beta_product_permutation_invariant PA000E add_succ_left PA0001 zero_addDirect 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–10
02Fix variables and assumptionsL11–12
03Separate the logical casesL13–15
04Establish halignedL16–22
Establish this local claim before using it. It is not an additional assumption.
- L16
have haligned : ∀ fpr_i_enr_alignment_x. ∀ fpr_j_enr_alignment_x. ∀ fpr_x_enr_alignment_x. Lt(fpr_i_enr_alignment_x,n) → BetaAt(b,c,fpr_i_enr_alignment_x,fpr_j_enr_alignment_x) → BetaAt(x,x1,fpr_j_enr_alignment_x,fpr_x_enr_alignment_x) → BetaAt(f,g,fpr_i_enr_alignment_x,fpr_x_enr_alignment_x)Definitions: Lt(fpr_i_enr_alignment_x,n)BetaAt(b,c,fpr_i_enr_alignment_x,fpr_j_enr_alignment_x)BetaAt(x,x1,fpr_j_enr_alignment_x,fpr_x_enr_alignment_x)BetaAt(f,g,fpr_i_enr_alignment_x,fpr_x_enr_alignment_x)Original native command in the exact edition - L17
intro i - L18
intro j - L19
intro y - L20
intro hi - L21
intro hmap - L22
intro hsource
05Establish hbounded_dataL23–26
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hbounded.
- L23
have hbounded_data : ∃ w. BetaAt(b,c,i,w) ∧ Lt(w,n)Definitions: BetaAt(b,c,i,w)Lt(w,n)Original native command in the exact edition - L24
specialize hbounded i - L25
apply hbounded - L26
exact hi
06Separate the logical casesL27–28
07Establish hj_eqL29–37
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta at unique.
08Establish hj_boundL38–40
Establish this local claim before using it. It is not an additional assumption.
09Establish hy_eqL41–50
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply beta range entry eq.
- L41
have hy_eq : y = 1 + j - L42
specialize beta_range_entry_eq x - L43
specialize beta_range_entry_eq x1 - L44
specialize beta_range_entry_eq 1 - L45
specialize beta_range_entry_eq n - L46
specialize beta_range_entry_eq j - L47
specialize beta_range_entry_eq y - L48
apply beta_range_entry_eq - L49
exact hfactorial_witness_witness_left - L50
exact hj_bound
10Use earlier factsL51–51
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L51
exact hsource
11Establish hliftedL52–57
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hlift.
- L52
have hlifted : BetaAt(f,g,i,S j)Definitions: BetaAt(f,g,i,S j)Original native command in the exact edition - L53
specialize hlift i - L54
specialize hlift j - L55
apply hlift - L56
exact hi - L57
exact hmap
12Establish honeL58–64
13Establish hfactorial_eqL65–74
Establish this local claim before using it. It is not an additional assumption.
- L65
have hfactorial_eq : F = Q - L66
specialize beta_product_permutation_invariant n - L67
specialize beta_product_permutation_invariant b - L68
specialize beta_product_permutation_invariant c - L69
specialize beta_product_permutation_invariant x - L70
specialize beta_product_permutation_invariant x1 - L71
specialize beta_product_permutation_invariant f - L72
specialize beta_product_permutation_invariant g - L73
specialize beta_product_permutation_invariant F - L74
specialize beta_product_permutation_invariant Q
14Use earlier factsL75–80
15Calculate and transport equalitiesL81–81
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L81
symm
16Use earlier factsL82–82
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L82
exact hfactorial_eq
Original defined command ledger · 82 lines
- 0001
intro b - 0002
intro c - 0003
intro f - 0004
intro g - 0005
intro n - 0006
intro Q - 0007
intro F - 0008
intro hbounded - 0009
intro hinjective - 0010
intro hlift - 0011
intro hproduct - 0012
intro hfactorial - 0013
cases hfactorial - 0014
cases hfactorial_witness - 0015
cases hfactorial_witness_witness - 0016
have haligned : ∀ fpr_i_enr_alignment_x. ∀ fpr_j_enr_alignment_x. ∀ fpr_x_enr_alignment_x. Lt(fpr_i_enr_alignment_x,n) → BetaAt(b,c,fpr_i_enr_alignment_x,fpr_j_enr_alignment_x) → BetaAt(x,x1,fpr_j_enr_alignment_x,fpr_x_enr_alignment_x) → BetaAt(f,g,fpr_i_enr_alignment_x,fpr_x_enr_alignment_x)Exact native replay line
have haligned : forall fpr_i_enr_alignment_x fpr_j_enr_alignment_x fpr_x_enr_alignment_x. (exists fpr_h_enr_alignment_x. fpr_h_enr_alignment_x + S fpr_i_enr_alignment_x = n) -> (((exists ff_h_enr_alignment_x_map. ff_h_enr_alignment_x_map + S (fpr_j_enr_alignment_x) = S ((S (fpr_i_enr_alignment_x)) * c)) /\ exists ff_q_enr_alignment_x_map. b = ff_q_enr_alignment_x_map * S ((S (fpr_i_enr_alignment_x)) * c) + (fpr_j_enr_alignment_x))) -> (((exists ff_h_enr_alignment_x_source. ff_h_enr_alignment_x_source + S (fpr_x_enr_alignment_x) = S ((S (fpr_j_enr_alignment_x)) * x1)) /\ exists ff_q_enr_alignment_x_source. x = ff_q_enr_alignment_x_source * S ((S (fpr_j_enr_alignment_x)) * x1) + (fpr_x_enr_alignment_x))) -> (((exists ff_h_enr_alignment_x_target. ff_h_enr_alignment_x_target + S (fpr_x_enr_alignment_x) = S ((S (fpr_i_enr_alignment_x)) * g)) /\ exists ff_q_enr_alignment_x_target. f = ff_q_enr_alignment_x_target * S ((S (fpr_i_enr_alignment_x)) * g) + (fpr_x_enr_alignment_x))) - 0017
intro i - 0018
intro j - 0019
intro y - 0020
intro hi - 0021
intro hmap - 0022
intro hsource - 0023
have hbounded_data : ∃ w. BetaAt(b,c,i,w) ∧ Lt(w,n)Exact native replay line
have hbounded_data : exists w. (((exists ff_h_enr_generic_bounded_entry. ff_h_enr_generic_bounded_entry + S (w) = S ((S (i)) * c)) /\ exists ff_q_enr_generic_bounded_entry. b = ff_q_enr_generic_bounded_entry * S ((S (i)) * c) + (w))) /\ (exists wpo_gap_enr_generic_bounded_value. wpo_gap_enr_generic_bounded_value + S (w) = n) - 0024
specialize hbounded i - 0025
apply hbounded - 0026
exact hi - 0027
cases hbounded_data - 0028
cases hbounded_data_witness - 0029
have hj_eq : j = x2 - 0030
specialize beta_at_unique b - 0031
specialize beta_at_unique c - 0032
specialize beta_at_unique i - 0033
specialize beta_at_unique j - 0034
specialize beta_at_unique x2 - 0035
apply beta_at_unique - 0036
exact hmap - 0037
exact hbounded_data_witness_left - 0038
have hj_bound : Lt(j,n)Exact native replay line
have hj_bound : exists gap. gap + S j = n - 0039
rewrite hj_eq - 0040
exact hbounded_data_witness_right - 0041
have hy_eq : y = 1 + j - 0042
specialize beta_range_entry_eq x - 0043
specialize beta_range_entry_eq x1 - 0044
specialize beta_range_entry_eq 1 - 0045
specialize beta_range_entry_eq n - 0046
specialize beta_range_entry_eq j - 0047
specialize beta_range_entry_eq y - 0048
apply beta_range_entry_eq - 0049
exact hfactorial_witness_witness_left - 0050
exact hj_bound - 0051
exact hsource - 0052
have hlifted : BetaAt(f,g,i,S j)Exact native replay line
have hlifted : ((exists ff_h_enr_generic_lifted_at_i. ff_h_enr_generic_lifted_at_i + S (S j) = S ((S (i)) * g)) /\ exists ff_q_enr_generic_lifted_at_i. f = ff_q_enr_generic_lifted_at_i * S ((S (i)) * g) + (S j)) - 0053
specialize hlift i - 0054
specialize hlift j - 0055
apply hlift - 0056
exact hi - 0057
exact hmap - 0058
have hone : 1 + j = S j - 0059
simp [add_succ_left, zero_add] - 0060
rewrite hy_eq - 0061
rewrite hy_eq - 0062
rewrite hone - 0063
rewrite hone - 0064
exact hlifted - 0065
have hfactorial_eq : F = Q - 0066
specialize beta_product_permutation_invariant n - 0067
specialize beta_product_permutation_invariant b - 0068
specialize beta_product_permutation_invariant c - 0069
specialize beta_product_permutation_invariant x - 0070
specialize beta_product_permutation_invariant x1 - 0071
specialize beta_product_permutation_invariant f - 0072
specialize beta_product_permutation_invariant g - 0073
specialize beta_product_permutation_invariant F - 0074
specialize beta_product_permutation_invariant Q - 0075
apply beta_product_permutation_invariant - 0076
exact hbounded - 0077
exact hinjective - 0078
exact haligned - 0079
exact hfactorial_witness_witness_right - 0080
exact hproduct - 0081
symm - 0082
exact hfactorial_eq