Exact expanded PA statement
forall n F. (exists ff_b_bfv_nonzero ff_c_bfv_nonzero. ((forall ff_i_bfv_nonzero_range. (exists ff_lt_bfv_nonzero_range_bound. ff_lt_bfv_nonzero_range_bound + S ff_i_bfv_nonzero_range = n) -> (((exists ff_h_bfv_nonzero_range_decoded. ff_h_bfv_nonzero_range_decoded + S (1 + ff_i_bfv_nonzero_range) = S ((S (ff_i_bfv_nonzero_range)) * ff_c_bfv_nonzero)) /\ exists ff_q_bfv_nonzero_range_decoded. ff_b_bfv_nonzero = ff_q_bfv_nonzero_range_decoded * S ((S (ff_i_bfv_nonzero_range)) * ff_c_bfv_nonzero) + (1 + ff_i_bfv_nonzero_range)))) /\ (exists ff_u_bfv_nonzero_product ff_v_bfv_nonzero_product. ((((exists ff_h_bfv_nonzero_product_start. ff_h_bfv_nonzero_product_start + S (1) = S ((S (0)) * ff_v_bfv_nonzero_product)) /\ exists ff_q_bfv_nonzero_product_start. ff_u_bfv_nonzero_product = ff_q_bfv_nonzero_product_start * S ((S (0)) * ff_v_bfv_nonzero_product) + (1))) /\ ((((exists ff_h_bfv_nonzero_product_terminal. ff_h_bfv_nonzero_product_terminal + S (F) = S ((S (n)) * ff_v_bfv_nonzero_product)) /\ exists ff_q_bfv_nonzero_product_terminal. ff_u_bfv_nonzero_product = ff_q_bfv_nonzero_product_terminal * S ((S (n)) * ff_v_bfv_nonzero_product) + (F))) /\ forall ff_i_bfv_nonzero_product. (exists ff_lt_bfv_nonzero_product_bound. ff_lt_bfv_nonzero_product_bound + S ff_i_bfv_nonzero_product = n) -> exists ff_p_bfv_nonzero_product ff_r_bfv_nonzero_product ff_s_bfv_nonzero_product. ((((exists ff_h_bfv_nonzero_product_factor. ff_h_bfv_nonzero_product_factor + S (ff_p_bfv_nonzero_product) = S ((S (ff_i_bfv_nonzero_product)) * ff_c_bfv_nonzero)) /\ exists ff_q_bfv_nonzero_product_factor. ff_b_bfv_nonzero = ff_q_bfv_nonzero_product_factor * S ((S (ff_i_bfv_nonzero_product)) * ff_c_bfv_nonzero) + (ff_p_bfv_nonzero_product))) /\ ((((exists ff_h_bfv_nonzero_product_partial. ff_h_bfv_nonzero_product_partial + S (ff_r_bfv_nonzero_product) = S ((S (ff_i_bfv_nonzero_product)) * ff_v_bfv_nonzero_product)) /\ exists ff_q_bfv_nonzero_product_partial. ff_u_bfv_nonzero_product = ff_q_bfv_nonzero_product_partial * S ((S (ff_i_bfv_nonzero_product)) * ff_v_bfv_nonzero_product) + (ff_r_bfv_nonzero_product))) /\ ((((exists ff_h_bfv_nonzero_product_successor. ff_h_bfv_nonzero_product_successor + S (ff_s_bfv_nonzero_product) = S ((S (S ff_i_bfv_nonzero_product)) * ff_v_bfv_nonzero_product)) /\ exists ff_q_bfv_nonzero_product_successor. ff_u_bfv_nonzero_product = ff_q_bfv_nonzero_product_successor * S ((S (S ff_i_bfv_nonzero_product)) * ff_v_bfv_nonzero_product) + (ff_s_bfv_nonzero_product))) /\ ff_s_bfv_nonzero_product = ff_r_bfv_nonzero_product * ff_p_bfv_nonzero_product)))))))) -> ~(F = 0)Structural proof guide
A relational factorial value is never zero.
Direct prerequisites: factorial_zero, factorial_succ_decompose, succ_ne_zero, mul_ne_zero. The authored body proceeds by structural induction (1), case analysis (2), intermediate claims (4).
Proof neighborhood
Direct dependencies
Direct dependents
Formal native tactic body
Dependencies are hypotheses of this body receipt. The focused endpoint audits separately check the complete empty-context certificates.
- 0001
intro n - 0002
induction n - 0003
intro F - 0004
intro hfactorial - 0005
have hvalue : F = 1 - 0006
specialize factorial_zero 0 - 0007
specialize factorial_zero F - 0008
apply factorial_zero - 0009
refl - 0010
exact hfactorial - 0011
intro hzero - 0012
specialize succ_ne_zero 0 - 0013
apply succ_ne_zero - 0014
trans F - 0015
symm - 0016
exact hvalue - 0017
exact hzero - 0018
intro F - 0019
intro hfactorial - 0020
have hdecomposition : exists R. (exists ff_b_bfv_nonzero_predecessor ff_c_bfv_nonzero_predecessor. ((forall ff_i_bfv_nonzero_predecessor_range. (exists ff_lt_bfv_nonzero_predecessor_range_bound. ff_lt_bfv_nonzero_predecessor_range_bound + S ff_i_bfv_nonzero_predecessor_range = n) -> (((exists ff_h_bfv_nonzero_predecessor_range_decoded. ff_h_bfv_nonzero_predecessor_range_decoded + S (1 + ff_i_bfv_nonzero_predecessor_range) = S ((S (ff_i_bfv_nonzero_predecessor_range)) * ff_c_bfv_nonzero_predecessor)) /\ exists ff_q_bfv_nonzero_predecessor_range_decoded. ff_b_bfv_nonzero_predecessor = ff_q_bfv_nonzero_predecessor_range_decoded * S ((S (ff_i_bfv_nonzero_predecessor_range)) * ff_c_bfv_nonzero_predecessor) + (1 + ff_i_bfv_nonzero_predecessor_range)))) /\ (exists ff_u_bfv_nonzero_predecessor_product ff_v_bfv_nonzero_predecessor_product. ((((exists ff_h_bfv_nonzero_predecessor_product_start. ff_h_bfv_nonzero_predecessor_product_start + S (1) = S ((S (0)) * ff_v_bfv_nonzero_predecessor_product)) /\ exists ff_q_bfv_nonzero_predecessor_product_start. ff_u_bfv_nonzero_predecessor_product = ff_q_bfv_nonzero_predecessor_product_start * S ((S (0)) * ff_v_bfv_nonzero_predecessor_product) + (1))) /\ ((((exists ff_h_bfv_nonzero_predecessor_product_terminal. ff_h_bfv_nonzero_predecessor_product_terminal + S (R) = S ((S (n)) * ff_v_bfv_nonzero_predecessor_product)) /\ exists ff_q_bfv_nonzero_predecessor_product_terminal. ff_u_bfv_nonzero_predecessor_product = ff_q_bfv_nonzero_predecessor_product_terminal * S ((S (n)) * ff_v_bfv_nonzero_predecessor_product) + (R))) /\ forall ff_i_bfv_nonzero_predecessor_product. (exists ff_lt_bfv_nonzero_predecessor_product_bound. ff_lt_bfv_nonzero_predecessor_product_bound + S ff_i_bfv_nonzero_predecessor_product = n) -> exists ff_p_bfv_nonzero_predecessor_product ff_r_bfv_nonzero_predecessor_product ff_s_bfv_nonzero_predecessor_product. ((((exists ff_h_bfv_nonzero_predecessor_product_factor. ff_h_bfv_nonzero_predecessor_product_factor + S (ff_p_bfv_nonzero_predecessor_product) = S ((S (ff_i_bfv_nonzero_predecessor_product)) * ff_c_bfv_nonzero_predecessor)) /\ exists ff_q_bfv_nonzero_predecessor_product_factor. ff_b_bfv_nonzero_predecessor = ff_q_bfv_nonzero_predecessor_product_factor * S ((S (ff_i_bfv_nonzero_predecessor_product)) * ff_c_bfv_nonzero_predecessor) + (ff_p_bfv_nonzero_predecessor_product))) /\ ((((exists ff_h_bfv_nonzero_predecessor_product_partial. ff_h_bfv_nonzero_predecessor_product_partial + S (ff_r_bfv_nonzero_predecessor_product) = S ((S (ff_i_bfv_nonzero_predecessor_product)) * ff_v_bfv_nonzero_predecessor_product)) /\ exists ff_q_bfv_nonzero_predecessor_product_partial. ff_u_bfv_nonzero_predecessor_product = ff_q_bfv_nonzero_predecessor_product_partial * S ((S (ff_i_bfv_nonzero_predecessor_product)) * ff_v_bfv_nonzero_predecessor_product) + (ff_r_bfv_nonzero_predecessor_product))) /\ ((((exists ff_h_bfv_nonzero_predecessor_product_successor. ff_h_bfv_nonzero_predecessor_product_successor + S (ff_s_bfv_nonzero_predecessor_product) = S ((S (S ff_i_bfv_nonzero_predecessor_product)) * ff_v_bfv_nonzero_predecessor_product)) /\ exists ff_q_bfv_nonzero_predecessor_product_successor. ff_u_bfv_nonzero_predecessor_product = ff_q_bfv_nonzero_predecessor_product_successor * S ((S (S ff_i_bfv_nonzero_predecessor_product)) * ff_v_bfv_nonzero_predecessor_product) + (ff_s_bfv_nonzero_predecessor_product))) /\ ff_s_bfv_nonzero_predecessor_product = ff_r_bfv_nonzero_predecessor_product * ff_p_bfv_nonzero_predecessor_product)))))))) /\ F = R * S n - 0021
specialize factorial_succ_decompose n - 0022
specialize factorial_succ_decompose (S n) - 0023
specialize factorial_succ_decompose F - 0024
apply factorial_succ_decompose - 0025
refl - 0026
exact hfactorial - 0027
cases hdecomposition - 0028
cases hdecomposition_witness - 0029
have hpredecessor : ~(x = 0) - 0030
intro hpredecessor_zero - 0031
specialize IH x - 0032
apply IH - 0033
exact hdecomposition_witness_left - 0034
exact hpredecessor_zero - 0035
have hsuccessor : ~(S n = 0) - 0036
specialize succ_ne_zero n - 0037
exact succ_ne_zero - 0038
intro hzero - 0039
specialize mul_ne_zero x - 0040
specialize mul_ne_zero (S n) - 0041
apply mul_ne_zero - 0042
exact hpredecessor - 0043
exact hsuccessor - 0044
trans F - 0045
symm - 0046
exact hdecomposition_witness_right - 0047
exact hzero