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
∀ m. ∀ a. ∀ b. ∀ e. ∀ x. ∀ y. ModEq(m,a,b) → Pow(a,e,x) → Pow(b,e,y) → ModEq(m,x,y)Every 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
4 occurrences
In local proof propositions
4 occurrences
Exact expanded native-PA statement
forall m a b e x y. (exists qr_u_base qr_v_base. a + m * qr_u_base = b + m * qr_v_base) -> (exists ff_b_left ff_c_left. ((forall ff_i_left_repeat. (exists ff_lt_left_repeat_bound. ff_lt_left_repeat_bound + S ff_i_left_repeat = e) -> (((exists ff_h_left_repeat_decoded. ff_h_left_repeat_decoded + S (a) = S ((S (ff_i_left_repeat)) * ff_c_left)) /\ exists ff_q_left_repeat_decoded. ff_b_left = ff_q_left_repeat_decoded * S ((S (ff_i_left_repeat)) * ff_c_left) + (a)))) /\ (exists ff_u_left_product ff_v_left_product. ((((exists ff_h_left_product_start. ff_h_left_product_start + S (1) = S ((S (0)) * ff_v_left_product)) /\ exists ff_q_left_product_start. ff_u_left_product = ff_q_left_product_start * S ((S (0)) * ff_v_left_product) + (1))) /\ ((((exists ff_h_left_product_terminal. ff_h_left_product_terminal + S (x) = S ((S (e)) * ff_v_left_product)) /\ exists ff_q_left_product_terminal. ff_u_left_product = ff_q_left_product_terminal * S ((S (e)) * ff_v_left_product) + (x))) /\ forall ff_i_left_product. (exists ff_lt_left_product_bound. ff_lt_left_product_bound + S ff_i_left_product = e) -> exists ff_p_left_product ff_r_left_product ff_s_left_product. ((((exists ff_h_left_product_factor. ff_h_left_product_factor + S (ff_p_left_product) = S ((S (ff_i_left_product)) * ff_c_left)) /\ exists ff_q_left_product_factor. ff_b_left = ff_q_left_product_factor * S ((S (ff_i_left_product)) * ff_c_left) + (ff_p_left_product))) /\ ((((exists ff_h_left_product_partial. ff_h_left_product_partial + S (ff_r_left_product) = S ((S (ff_i_left_product)) * ff_v_left_product)) /\ exists ff_q_left_product_partial. ff_u_left_product = ff_q_left_product_partial * S ((S (ff_i_left_product)) * ff_v_left_product) + (ff_r_left_product))) /\ ((((exists ff_h_left_product_successor. ff_h_left_product_successor + S (ff_s_left_product) = S ((S (S ff_i_left_product)) * ff_v_left_product)) /\ exists ff_q_left_product_successor. ff_u_left_product = ff_q_left_product_successor * S ((S (S ff_i_left_product)) * ff_v_left_product) + (ff_s_left_product))) /\ ff_s_left_product = ff_r_left_product * ff_p_left_product)))))))) -> (exists ff_b_right ff_c_right. ((forall ff_i_right_repeat. (exists ff_lt_right_repeat_bound. ff_lt_right_repeat_bound + S ff_i_right_repeat = e) -> (((exists ff_h_right_repeat_decoded. ff_h_right_repeat_decoded + S (b) = S ((S (ff_i_right_repeat)) * ff_c_right)) /\ exists ff_q_right_repeat_decoded. ff_b_right = ff_q_right_repeat_decoded * S ((S (ff_i_right_repeat)) * ff_c_right) + (b)))) /\ (exists ff_u_right_product ff_v_right_product. ((((exists ff_h_right_product_start. ff_h_right_product_start + S (1) = S ((S (0)) * ff_v_right_product)) /\ exists ff_q_right_product_start. ff_u_right_product = ff_q_right_product_start * S ((S (0)) * ff_v_right_product) + (1))) /\ ((((exists ff_h_right_product_terminal. ff_h_right_product_terminal + S (y) = S ((S (e)) * ff_v_right_product)) /\ exists ff_q_right_product_terminal. ff_u_right_product = ff_q_right_product_terminal * S ((S (e)) * ff_v_right_product) + (y))) /\ forall ff_i_right_product. (exists ff_lt_right_product_bound. ff_lt_right_product_bound + S ff_i_right_product = e) -> exists ff_p_right_product ff_r_right_product ff_s_right_product. ((((exists ff_h_right_product_factor. ff_h_right_product_factor + S (ff_p_right_product) = S ((S (ff_i_right_product)) * ff_c_right)) /\ exists ff_q_right_product_factor. ff_b_right = ff_q_right_product_factor * S ((S (ff_i_right_product)) * ff_c_right) + (ff_p_right_product))) /\ ((((exists ff_h_right_product_partial. ff_h_right_product_partial + S (ff_r_right_product) = S ((S (ff_i_right_product)) * ff_v_right_product)) /\ exists ff_q_right_product_partial. ff_u_right_product = ff_q_right_product_partial * S ((S (ff_i_right_product)) * ff_v_right_product) + (ff_r_right_product))) /\ ((((exists ff_h_right_product_successor. ff_h_right_product_successor + S (ff_s_right_product) = S ((S (S ff_i_right_product)) * ff_v_right_product)) /\ exists ff_q_right_product_successor. ff_u_right_product = ff_q_right_product_successor * S ((S (S ff_i_right_product)) * ff_v_right_product) + (ff_s_right_product))) /\ ff_s_right_product = ff_r_right_product * ff_p_right_product)))))))) -> (exists qr_u_result qr_v_result. x + m * qr_u_result = y + m * qr_v_result)Proof neighborhood
Direct theorem prerequisites
PA004B pow_zero PA004D pow_successor_decompose PA005H pow_successor_pair_mul PA0023 mod_eq_refl PA004E mod_eq_mulDirect 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 (5)
01Fix variables and assumptionsL1–3
02Induction on eL4–9
03Establish hx1L10–16
04Establish hy1L17–26
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow zero.
05Use earlier factsL27–28
06Fix variables and assumptionsL29–33
07Establish hleftL34–41
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor decompose.
- L34
have hleft : ∃ r. Pow(a,e,r) ∧ x = r · aDefinitions: Pow(a,e,r)Original native command in the exact edition - L35
specialize pow_successor_decompose a - L36
specialize pow_successor_decompose e - L37
specialize pow_successor_decompose (S e) - L38
specialize pow_successor_decompose x - L39
apply pow_successor_decompose - L40
refl - L41
exact hx
08Separate the logical casesL42–43
09Establish hrightL44–51
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor decompose.
- L44
have hright : ∃ r. Pow(b,e,r) ∧ y = r · bDefinitions: Pow(b,e,r)Original native command in the exact edition - L45
specialize pow_successor_decompose b - L46
specialize pow_successor_decompose e - L47
specialize pow_successor_decompose (S e) - L48
specialize pow_successor_decompose y - L49
apply pow_successor_decompose - L50
refl - L51
exact hy
10Separate the logical casesL52–53
11Establish hxmulL54–63
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor pair mul.
12Establish hymulL64–73
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply pow successor pair mul.
13Establish hpreL74–80
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply IH.
14Establish hmulL81–90
Establish this local claim before using it. It is not an additional assumption. The following proof commands apply mod eq mul.
- L81
have hmul : ModEq(m,x1 · a,x2 · b)Definitions: ModEq(m,x1 · a,x2 · b)Original native command in the exact edition - L82
specialize mod_eq_mul m - L83
specialize mod_eq_mul x1 - L84
specialize mod_eq_mul x2 - L85
specialize mod_eq_mul a - L86
specialize mod_eq_mul b - L87
apply mod_eq_mul - L88
exact hpre - L89
exact hab - L90
rewrite hxmul
15Calculate and transport equalitiesL91–91
Carry out the recorded arithmetic or equality steps; inspect the exact commands for their direction and premises.
- L91
rewrite hymul
16Use earlier factsL92–92
Instantiate or apply named facts and discharge the corresponding proof obligations.
- L92
exact hmul
Original defined command ledger · 92 lines
- 0001
intro m - 0002
intro a - 0003
intro b - 0004
induction e - 0005
intro x - 0006
intro y - 0007
intro hab - 0008
intro hx - 0009
intro hy - 0010
have hx1 : x = 1 - 0011
specialize pow_zero a - 0012
specialize pow_zero 0 - 0013
specialize pow_zero x - 0014
apply pow_zero - 0015
refl - 0016
exact hx - 0017
have hy1 : y = 1 - 0018
specialize pow_zero b - 0019
specialize pow_zero 0 - 0020
specialize pow_zero y - 0021
apply pow_zero - 0022
refl - 0023
exact hy - 0024
rewrite hx1 - 0025
rewrite hy1 - 0026
specialize mod_eq_refl m - 0027
specialize mod_eq_refl 1 - 0028
exact mod_eq_refl - 0029
intro x - 0030
intro y - 0031
intro hab - 0032
intro hx - 0033
intro hy - 0034
have hleft : ∃ r. Pow(a,e,r) ∧ x = r · aExact native replay line
have hleft : exists r. (exists ff_b_left_step ff_c_left_step. ((forall ff_i_left_step_repeat. (exists ff_lt_left_step_repeat_bound. ff_lt_left_step_repeat_bound + S ff_i_left_step_repeat = e) -> (((exists ff_h_left_step_repeat_decoded. ff_h_left_step_repeat_decoded + S (a) = S ((S (ff_i_left_step_repeat)) * ff_c_left_step)) /\ exists ff_q_left_step_repeat_decoded. ff_b_left_step = ff_q_left_step_repeat_decoded * S ((S (ff_i_left_step_repeat)) * ff_c_left_step) + (a)))) /\ (exists ff_u_left_step_product ff_v_left_step_product. ((((exists ff_h_left_step_product_start. ff_h_left_step_product_start + S (1) = S ((S (0)) * ff_v_left_step_product)) /\ exists ff_q_left_step_product_start. ff_u_left_step_product = ff_q_left_step_product_start * S ((S (0)) * ff_v_left_step_product) + (1))) /\ ((((exists ff_h_left_step_product_terminal. ff_h_left_step_product_terminal + S (r) = S ((S (e)) * ff_v_left_step_product)) /\ exists ff_q_left_step_product_terminal. ff_u_left_step_product = ff_q_left_step_product_terminal * S ((S (e)) * ff_v_left_step_product) + (r))) /\ forall ff_i_left_step_product. (exists ff_lt_left_step_product_bound. ff_lt_left_step_product_bound + S ff_i_left_step_product = e) -> exists ff_p_left_step_product ff_r_left_step_product ff_s_left_step_product. ((((exists ff_h_left_step_product_factor. ff_h_left_step_product_factor + S (ff_p_left_step_product) = S ((S (ff_i_left_step_product)) * ff_c_left_step)) /\ exists ff_q_left_step_product_factor. ff_b_left_step = ff_q_left_step_product_factor * S ((S (ff_i_left_step_product)) * ff_c_left_step) + (ff_p_left_step_product))) /\ ((((exists ff_h_left_step_product_partial. ff_h_left_step_product_partial + S (ff_r_left_step_product) = S ((S (ff_i_left_step_product)) * ff_v_left_step_product)) /\ exists ff_q_left_step_product_partial. ff_u_left_step_product = ff_q_left_step_product_partial * S ((S (ff_i_left_step_product)) * ff_v_left_step_product) + (ff_r_left_step_product))) /\ ((((exists ff_h_left_step_product_successor. ff_h_left_step_product_successor + S (ff_s_left_step_product) = S ((S (S ff_i_left_step_product)) * ff_v_left_step_product)) /\ exists ff_q_left_step_product_successor. ff_u_left_step_product = ff_q_left_step_product_successor * S ((S (S ff_i_left_step_product)) * ff_v_left_step_product) + (ff_s_left_step_product))) /\ ff_s_left_step_product = ff_r_left_step_product * ff_p_left_step_product)))))))) /\ x = r * a - 0035
specialize pow_successor_decompose a - 0036
specialize pow_successor_decompose e - 0037
specialize pow_successor_decompose (S e) - 0038
specialize pow_successor_decompose x - 0039
apply pow_successor_decompose - 0040
refl - 0041
exact hx - 0042
cases hleft - 0043
cases hleft_witness - 0044
have hright : ∃ r. Pow(b,e,r) ∧ y = r · bExact native replay line
have hright : exists r. (exists ff_b_right_step ff_c_right_step. ((forall ff_i_right_step_repeat. (exists ff_lt_right_step_repeat_bound. ff_lt_right_step_repeat_bound + S ff_i_right_step_repeat = e) -> (((exists ff_h_right_step_repeat_decoded. ff_h_right_step_repeat_decoded + S (b) = S ((S (ff_i_right_step_repeat)) * ff_c_right_step)) /\ exists ff_q_right_step_repeat_decoded. ff_b_right_step = ff_q_right_step_repeat_decoded * S ((S (ff_i_right_step_repeat)) * ff_c_right_step) + (b)))) /\ (exists ff_u_right_step_product ff_v_right_step_product. ((((exists ff_h_right_step_product_start. ff_h_right_step_product_start + S (1) = S ((S (0)) * ff_v_right_step_product)) /\ exists ff_q_right_step_product_start. ff_u_right_step_product = ff_q_right_step_product_start * S ((S (0)) * ff_v_right_step_product) + (1))) /\ ((((exists ff_h_right_step_product_terminal. ff_h_right_step_product_terminal + S (r) = S ((S (e)) * ff_v_right_step_product)) /\ exists ff_q_right_step_product_terminal. ff_u_right_step_product = ff_q_right_step_product_terminal * S ((S (e)) * ff_v_right_step_product) + (r))) /\ forall ff_i_right_step_product. (exists ff_lt_right_step_product_bound. ff_lt_right_step_product_bound + S ff_i_right_step_product = e) -> exists ff_p_right_step_product ff_r_right_step_product ff_s_right_step_product. ((((exists ff_h_right_step_product_factor. ff_h_right_step_product_factor + S (ff_p_right_step_product) = S ((S (ff_i_right_step_product)) * ff_c_right_step)) /\ exists ff_q_right_step_product_factor. ff_b_right_step = ff_q_right_step_product_factor * S ((S (ff_i_right_step_product)) * ff_c_right_step) + (ff_p_right_step_product))) /\ ((((exists ff_h_right_step_product_partial. ff_h_right_step_product_partial + S (ff_r_right_step_product) = S ((S (ff_i_right_step_product)) * ff_v_right_step_product)) /\ exists ff_q_right_step_product_partial. ff_u_right_step_product = ff_q_right_step_product_partial * S ((S (ff_i_right_step_product)) * ff_v_right_step_product) + (ff_r_right_step_product))) /\ ((((exists ff_h_right_step_product_successor. ff_h_right_step_product_successor + S (ff_s_right_step_product) = S ((S (S ff_i_right_step_product)) * ff_v_right_step_product)) /\ exists ff_q_right_step_product_successor. ff_u_right_step_product = ff_q_right_step_product_successor * S ((S (S ff_i_right_step_product)) * ff_v_right_step_product) + (ff_s_right_step_product))) /\ ff_s_right_step_product = ff_r_right_step_product * ff_p_right_step_product)))))))) /\ y = r * b - 0045
specialize pow_successor_decompose b - 0046
specialize pow_successor_decompose e - 0047
specialize pow_successor_decompose (S e) - 0048
specialize pow_successor_decompose y - 0049
apply pow_successor_decompose - 0050
refl - 0051
exact hy - 0052
cases hright - 0053
cases hright_witness - 0054
have hxmul : x = x1 * a - 0055
specialize pow_successor_pair_mul a - 0056
specialize pow_successor_pair_mul e - 0057
specialize pow_successor_pair_mul (S e) - 0058
specialize pow_successor_pair_mul x1 - 0059
specialize pow_successor_pair_mul x - 0060
apply pow_successor_pair_mul - 0061
refl - 0062
exact hleft_witness_left - 0063
exact hx - 0064
have hymul : y = x2 * b - 0065
specialize pow_successor_pair_mul b - 0066
specialize pow_successor_pair_mul e - 0067
specialize pow_successor_pair_mul (S e) - 0068
specialize pow_successor_pair_mul x2 - 0069
specialize pow_successor_pair_mul y - 0070
apply pow_successor_pair_mul - 0071
refl - 0072
exact hright_witness_left - 0073
exact hy - 0074
have hpre : ModEq(m,x1,x2)Exact native replay line
have hpre : exists qr_u_predecessors qr_v_predecessors. x1 + m * qr_u_predecessors = x2 + m * qr_v_predecessors - 0075
specialize IH x1 - 0076
specialize IH x2 - 0077
apply IH - 0078
exact hab - 0079
exact hleft_witness_left - 0080
exact hright_witness_left - 0081
have hmul : ModEq(m,x1 · a,x2 · b)Exact native replay line
have hmul : exists pc_u_products pc_v_products. (x1 * a) + m * pc_u_products = (x2 * b) + m * pc_v_products - 0082
specialize mod_eq_mul m - 0083
specialize mod_eq_mul x1 - 0084
specialize mod_eq_mul x2 - 0085
specialize mod_eq_mul a - 0086
specialize mod_eq_mul b - 0087
apply mod_eq_mul - 0088
exact hpre - 0089
exact hab - 0090
rewrite hxmul - 0091
rewrite hymul - 0092
exact hmul