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 expanded PA statement
forall n c d q r. (exists bcf_le_gap_bcbsus_source. bcf_le_gap_bcbsus_source + (2 * c) = q) -> S n * d = (2 * S (n + n)) * c -> r = q * 4 -> (exists bcf_le_gap_bcbsus_result. bcf_le_gap_bcbsus_result + (2 * d) = r)Structural proof guide
The weighted recurrence preserves the strong factor-two bound.
Direct prerequisites: zero_add, add_succ_left, add_assoc, mul_comm, mul_assoc, two_mul_eq_add_self, mul_le_mul_left, mul_le_mul_right, le_trans, succ_ne_zero, mul_le_cancel_left_nonzero. The authored body proceeds by intermediate claims (11), equality transport (13), closed numeral normalization (1).
Proof neighborhood
Direct dependencies
BT0000 zero_add BT0001 add_succ_left BT0003 add_assoc BT0006 mul_comm BT0008 mul_assoc BT00QU two_mul_eq_add_self BT001L mul_le_mul_left BT001M mul_le_mul_right BT000F le_trans BT000C succ_ne_zero BT00RD mul_le_cancel_left_nonzeroDirect dependents
Formal native tactic body
Dependencies are hypotheses of the historical Alpha-v12 body receipt. The complete historical Alpha-v18 proof bundle independently checks every dependency; current Alpha v25 preserves that checked theorem use without changing Stable membership.
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 (11)
01Fix variables and assumptionsL1–8
02Establish hsource_scaledL9–14
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul le mul left.
03Establish hcombinedL15–24
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply le trans.
- L15
have hcombined : exists k. k + S (n + n) * (2 * c) = (2 * S n) * q - L16
specialize le_trans (S (n + n) * (2 * c)) - L17
specialize le_trans (S (n + n) * q) - L18
specialize le_trans ((2 * S n) * q) - L19
apply le_trans - L20
exact hsource_scaled - L21
specialize mul_le_mul_right (S (n + n)) - L22
specialize mul_le_mul_right (2 * S n) - L23
specialize mul_le_mul_right q - L24
apply mul_le_mul_right
04Construct an explicit witnessL25–25
Supply the displayed value, then prove that it has the required property.
- L25
exists 1
05Use earlier factsL26–26
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L26
specialize two_mul_eq_add_self (S n)
06Calculate and transport equalitiesL27–29
07Use earlier factsL30–32
08Calculate and transport equalitiesL33–33
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L33
rewrite <- add_assoc
09Use earlier factsL34–35
10Calculate and transport equalitiesL36–36
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L36
rewrite add_succ_left
11Use earlier factsL37–37
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L37
specialize zero_add n
12Calculate and transport equalitiesL38–39
13Establish hleft_alignL40–46
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul assoc.
14Establish hcomm_c_twoL47–50
15Establish hrecurrence_alignedL51–54
16Establish hright_alignL55–61
17Establish hcomm_q_twoL62–67
18Establish hhalfL68–75
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul le cancel left nonzero.
19Establish hdoubleL76–81
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mul le mul left.
20Establish hfourL82–86
Original exact command ledger · 94 lines
- 0001
intro n - 0002
intro c - 0003
intro d - 0004
intro q - 0005
intro r - 0006
intro hsource - 0007
intro hrecurrence - 0008
intro hpower_step - 0009
have hsource_scaled : exists k. k + S (n + n) * (2 * c) = S (n + n) * q - 0010
specialize mul_le_mul_left (2 * c) - 0011
specialize mul_le_mul_left q - 0012
specialize mul_le_mul_left (S (n + n)) - 0013
apply mul_le_mul_left - 0014
exact hsource - 0015
have hcombined : exists k. k + S (n + n) * (2 * c) = (2 * S n) * q - 0016
specialize le_trans (S (n + n) * (2 * c)) - 0017
specialize le_trans (S (n + n) * q) - 0018
specialize le_trans ((2 * S n) * q) - 0019
apply le_trans - 0020
exact hsource_scaled - 0021
specialize mul_le_mul_right (S (n + n)) - 0022
specialize mul_le_mul_right (2 * S n) - 0023
specialize mul_le_mul_right q - 0024
apply mul_le_mul_right - 0025
exists 1 - 0026
specialize two_mul_eq_add_self (S n) - 0027
rewrite two_mul_eq_add_self - 0028
rewrite PA4 - 0029
rewrite PA4 - 0030
specialize add_assoc 1 - 0031
specialize add_assoc n - 0032
specialize add_assoc n - 0033
rewrite <- add_assoc - 0034
specialize add_succ_left 0 - 0035
specialize add_succ_left n - 0036
rewrite add_succ_left - 0037
specialize zero_add n - 0038
rewrite zero_add - 0039
refl - 0040
have hleft_align : (2 * S (n + n)) * c = S (n + n) * (2 * c) - 0041
trans 2 * (S (n + n) * c) - 0042
apply mul_assoc - 0043
trans (S (n + n) * c) * 2 - 0044
apply mul_comm - 0045
trans S (n + n) * (c * 2) - 0046
apply mul_assoc - 0047
have hcomm_c_two : c * 2 = 2 * c - 0048
apply mul_comm - 0049
rewrite hcomm_c_two - 0050
refl - 0051
have hrecurrence_aligned : S n * d = S (n + n) * (2 * c) - 0052
trans (2 * S (n + n)) * c - 0053
exact hrecurrence - 0054
exact hleft_align - 0055
have hright_align : (2 * S n) * q = S n * (2 * q) - 0056
trans 2 * (S n * q) - 0057
apply mul_assoc - 0058
trans (S n * q) * 2 - 0059
apply mul_comm - 0060
trans S n * (q * 2) - 0061
apply mul_assoc - 0062
have hcomm_q_two : q * 2 = 2 * q - 0063
apply mul_comm - 0064
rewrite hcomm_q_two - 0065
refl - 0066
rewrite <- hrecurrence_aligned at hcombined - 0067
rewrite hright_align at hcombined - 0068
have hhalf : exists k. k + d = 2 * q - 0069
specialize mul_le_cancel_left_nonzero (S n) - 0070
specialize mul_le_cancel_left_nonzero d - 0071
specialize mul_le_cancel_left_nonzero (2 * q) - 0072
apply mul_le_cancel_left_nonzero - 0073
specialize succ_ne_zero n - 0074
exact succ_ne_zero - 0075
exact hcombined - 0076
have hdouble : exists k. k + 2 * d = 2 * (2 * q) - 0077
specialize mul_le_mul_left d - 0078
specialize mul_le_mul_left (2 * q) - 0079
specialize mul_le_mul_left 2 - 0080
apply mul_le_mul_left - 0081
exact hhalf - 0082
have hfour : 2 * (2 * q) = q * 4 - 0083
trans (2 * 2) * q - 0084
symm - 0085
apply mul_assoc - 0086
trans 4 * q - 0087
have htwo_two : 2 * 2 = 4 - 0088
norm_num - 0089
rewrite htwo_two - 0090
refl - 0091
apply mul_comm - 0092
rewrite hfour at hdouble - 0093
rewrite hpower_step - 0094
exact hdouble