Exact expanded PA statement
forall b c d e f g l n m q. (exists ff_u_pointadd_left ff_v_pointadd_left. ((((exists ff_h_pointadd_left_start. ff_h_pointadd_left_start + S (0) = S ((S (0)) * ff_v_pointadd_left)) /\ exists ff_q_pointadd_left_start. ff_u_pointadd_left = ff_q_pointadd_left_start * S ((S (0)) * ff_v_pointadd_left) + (0))) /\ ((((exists ff_h_pointadd_left_terminal. ff_h_pointadd_left_terminal + S (n) = S ((S (l)) * ff_v_pointadd_left)) /\ exists ff_q_pointadd_left_terminal. ff_u_pointadd_left = ff_q_pointadd_left_terminal * S ((S (l)) * ff_v_pointadd_left) + (n))) /\ forall ff_i_pointadd_left. (exists ff_lt_pointadd_left_bound. ff_lt_pointadd_left_bound + S ff_i_pointadd_left = l) -> exists ff_a_pointadd_left ff_r_pointadd_left ff_s_pointadd_left. ((((exists ff_h_pointadd_left_summand. ff_h_pointadd_left_summand + S (ff_a_pointadd_left) = S ((S (ff_i_pointadd_left)) * c)) /\ exists ff_q_pointadd_left_summand. b = ff_q_pointadd_left_summand * S ((S (ff_i_pointadd_left)) * c) + (ff_a_pointadd_left))) /\ ((((exists ff_h_pointadd_left_partial. ff_h_pointadd_left_partial + S (ff_r_pointadd_left) = S ((S (ff_i_pointadd_left)) * ff_v_pointadd_left)) /\ exists ff_q_pointadd_left_partial. ff_u_pointadd_left = ff_q_pointadd_left_partial * S ((S (ff_i_pointadd_left)) * ff_v_pointadd_left) + (ff_r_pointadd_left))) /\ ((((exists ff_h_pointadd_left_successor. ff_h_pointadd_left_successor + S (ff_s_pointadd_left) = S ((S (S ff_i_pointadd_left)) * ff_v_pointadd_left)) /\ exists ff_q_pointadd_left_successor. ff_u_pointadd_left = ff_q_pointadd_left_successor * S ((S (S ff_i_pointadd_left)) * ff_v_pointadd_left) + (ff_s_pointadd_left))) /\ ff_s_pointadd_left = ff_r_pointadd_left + ff_a_pointadd_left)))))) -> (exists ff_u_pointadd_right ff_v_pointadd_right. ((((exists ff_h_pointadd_right_start. ff_h_pointadd_right_start + S (0) = S ((S (0)) * ff_v_pointadd_right)) /\ exists ff_q_pointadd_right_start. ff_u_pointadd_right = ff_q_pointadd_right_start * S ((S (0)) * ff_v_pointadd_right) + (0))) /\ ((((exists ff_h_pointadd_right_terminal. ff_h_pointadd_right_terminal + S (m) = S ((S (l)) * ff_v_pointadd_right)) /\ exists ff_q_pointadd_right_terminal. ff_u_pointadd_right = ff_q_pointadd_right_terminal * S ((S (l)) * ff_v_pointadd_right) + (m))) /\ forall ff_i_pointadd_right. (exists ff_lt_pointadd_right_bound. ff_lt_pointadd_right_bound + S ff_i_pointadd_right = l) -> exists ff_a_pointadd_right ff_r_pointadd_right ff_s_pointadd_right. ((((exists ff_h_pointadd_right_summand. ff_h_pointadd_right_summand + S (ff_a_pointadd_right) = S ((S (ff_i_pointadd_right)) * e)) /\ exists ff_q_pointadd_right_summand. d = ff_q_pointadd_right_summand * S ((S (ff_i_pointadd_right)) * e) + (ff_a_pointadd_right))) /\ ((((exists ff_h_pointadd_right_partial. ff_h_pointadd_right_partial + S (ff_r_pointadd_right) = S ((S (ff_i_pointadd_right)) * ff_v_pointadd_right)) /\ exists ff_q_pointadd_right_partial. ff_u_pointadd_right = ff_q_pointadd_right_partial * S ((S (ff_i_pointadd_right)) * ff_v_pointadd_right) + (ff_r_pointadd_right))) /\ ((((exists ff_h_pointadd_right_successor. ff_h_pointadd_right_successor + S (ff_s_pointadd_right) = S ((S (S ff_i_pointadd_right)) * ff_v_pointadd_right)) /\ exists ff_q_pointadd_right_successor. ff_u_pointadd_right = ff_q_pointadd_right_successor * S ((S (S ff_i_pointadd_right)) * ff_v_pointadd_right) + (ff_s_pointadd_right))) /\ ff_s_pointadd_right = ff_r_pointadd_right + ff_a_pointadd_right)))))) -> (exists ff_u_pointadd_total ff_v_pointadd_total. ((((exists ff_h_pointadd_total_start. ff_h_pointadd_total_start + S (0) = S ((S (0)) * ff_v_pointadd_total)) /\ exists ff_q_pointadd_total_start. ff_u_pointadd_total = ff_q_pointadd_total_start * S ((S (0)) * ff_v_pointadd_total) + (0))) /\ ((((exists ff_h_pointadd_total_terminal. ff_h_pointadd_total_terminal + S (q) = S ((S (l)) * ff_v_pointadd_total)) /\ exists ff_q_pointadd_total_terminal. ff_u_pointadd_total = ff_q_pointadd_total_terminal * S ((S (l)) * ff_v_pointadd_total) + (q))) /\ forall ff_i_pointadd_total. (exists ff_lt_pointadd_total_bound. ff_lt_pointadd_total_bound + S ff_i_pointadd_total = l) -> exists ff_a_pointadd_total ff_r_pointadd_total ff_s_pointadd_total. ((((exists ff_h_pointadd_total_summand. ff_h_pointadd_total_summand + S (ff_a_pointadd_total) = S ((S (ff_i_pointadd_total)) * g)) /\ exists ff_q_pointadd_total_summand. f = ff_q_pointadd_total_summand * S ((S (ff_i_pointadd_total)) * g) + (ff_a_pointadd_total))) /\ ((((exists ff_h_pointadd_total_partial. ff_h_pointadd_total_partial + S (ff_r_pointadd_total) = S ((S (ff_i_pointadd_total)) * ff_v_pointadd_total)) /\ exists ff_q_pointadd_total_partial. ff_u_pointadd_total = ff_q_pointadd_total_partial * S ((S (ff_i_pointadd_total)) * ff_v_pointadd_total) + (ff_r_pointadd_total))) /\ ((((exists ff_h_pointadd_total_successor. ff_h_pointadd_total_successor + S (ff_s_pointadd_total) = S ((S (S ff_i_pointadd_total)) * ff_v_pointadd_total)) /\ exists ff_q_pointadd_total_successor. ff_u_pointadd_total = ff_q_pointadd_total_successor * S ((S (S ff_i_pointadd_total)) * ff_v_pointadd_total) + (ff_s_pointadd_total))) /\ ff_s_pointadd_total = ff_r_pointadd_total + ff_a_pointadd_total)))))) -> (forall i a z s. (exists h. h + S i = l) -> (((exists ff_h_pointadd_left_entry. ff_h_pointadd_left_entry + S (a) = S ((S (i)) * c)) /\ exists ff_q_pointadd_left_entry. b = ff_q_pointadd_left_entry * S ((S (i)) * c) + (a))) -> (((exists ff_h_pointadd_right_entry. ff_h_pointadd_right_entry + S (z) = S ((S (i)) * e)) /\ exists ff_q_pointadd_right_entry. d = ff_q_pointadd_right_entry * S ((S (i)) * e) + (z))) -> (((exists ff_h_pointadd_total_entry. ff_h_pointadd_total_entry + S (s) = S ((S (i)) * g)) /\ exists ff_q_pointadd_total_entry. f = ff_q_pointadd_total_entry * S ((S (i)) * g) + (s))) -> s = a + z) -> n + m = qStructural proof guide
Pointwise sums of decoded entries induce exact addition of finite sums.
Direct prerequisites: beta_sum_zero, beta_sum_succ_decompose, le_succ, le_refl, add_assoc, add_comm. The authored body proceeds by structural induction (1), case analysis (12), intermediate claims (9), equality transport (8).
Proof neighborhood
Direct dependencies
BT008E beta_sum_zero BT008F beta_sum_succ_decompose BT0018 le_succ BT000E le_refl BT0003 add_assoc BT0002 add_commDirect 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 b - 0002
intro c - 0003
intro d - 0004
intro e - 0005
intro f - 0006
intro g - 0007
induction l - 0008
intro n - 0009
intro m - 0010
intro q - 0011
intro hleft - 0012
intro hright - 0013
intro htotal - 0014
intro hpointwise - 0015
have hn : n = 0 - 0016
specialize beta_sum_zero b - 0017
specialize beta_sum_zero c - 0018
specialize beta_sum_zero n - 0019
apply beta_sum_zero - 0020
exact hleft - 0021
have hm : m = 0 - 0022
specialize beta_sum_zero d - 0023
specialize beta_sum_zero e - 0024
specialize beta_sum_zero m - 0025
apply beta_sum_zero - 0026
exact hright - 0027
have hq : q = 0 - 0028
specialize beta_sum_zero f - 0029
specialize beta_sum_zero g - 0030
specialize beta_sum_zero q - 0031
apply beta_sum_zero - 0032
exact htotal - 0033
rewrite hn - 0034
rewrite hm - 0035
rewrite hq - 0036
simp - 0037
intro n - 0038
intro m - 0039
intro q - 0040
intro hleft - 0041
intro hright - 0042
intro htotal - 0043
intro hpointwise - 0044
have hleft_decomp : exists a r. (((exists ff_h_pointadd_left_decomp_entry. ff_h_pointadd_left_decomp_entry + S (a) = S ((S (l)) * c)) /\ exists ff_q_pointadd_left_decomp_entry. b = ff_q_pointadd_left_decomp_entry * S ((S (l)) * c) + (a))) /\ ((exists ff_u_pointadd_left_decomp_prefix ff_v_pointadd_left_decomp_prefix. ((((exists ff_h_pointadd_left_decomp_prefix_start. ff_h_pointadd_left_decomp_prefix_start + S (0) = S ((S (0)) * ff_v_pointadd_left_decomp_prefix)) /\ exists ff_q_pointadd_left_decomp_prefix_start. ff_u_pointadd_left_decomp_prefix = ff_q_pointadd_left_decomp_prefix_start * S ((S (0)) * ff_v_pointadd_left_decomp_prefix) + (0))) /\ ((((exists ff_h_pointadd_left_decomp_prefix_terminal. ff_h_pointadd_left_decomp_prefix_terminal + S (r) = S ((S (l)) * ff_v_pointadd_left_decomp_prefix)) /\ exists ff_q_pointadd_left_decomp_prefix_terminal. ff_u_pointadd_left_decomp_prefix = ff_q_pointadd_left_decomp_prefix_terminal * S ((S (l)) * ff_v_pointadd_left_decomp_prefix) + (r))) /\ forall ff_i_pointadd_left_decomp_prefix. (exists ff_lt_pointadd_left_decomp_prefix_bound. ff_lt_pointadd_left_decomp_prefix_bound + S ff_i_pointadd_left_decomp_prefix = l) -> exists ff_a_pointadd_left_decomp_prefix ff_r_pointadd_left_decomp_prefix ff_s_pointadd_left_decomp_prefix. ((((exists ff_h_pointadd_left_decomp_prefix_summand. ff_h_pointadd_left_decomp_prefix_summand + S (ff_a_pointadd_left_decomp_prefix) = S ((S (ff_i_pointadd_left_decomp_prefix)) * c)) /\ exists ff_q_pointadd_left_decomp_prefix_summand. b = ff_q_pointadd_left_decomp_prefix_summand * S ((S (ff_i_pointadd_left_decomp_prefix)) * c) + (ff_a_pointadd_left_decomp_prefix))) /\ ((((exists ff_h_pointadd_left_decomp_prefix_partial. ff_h_pointadd_left_decomp_prefix_partial + S (ff_r_pointadd_left_decomp_prefix) = S ((S (ff_i_pointadd_left_decomp_prefix)) * ff_v_pointadd_left_decomp_prefix)) /\ exists ff_q_pointadd_left_decomp_prefix_partial. ff_u_pointadd_left_decomp_prefix = ff_q_pointadd_left_decomp_prefix_partial * S ((S (ff_i_pointadd_left_decomp_prefix)) * ff_v_pointadd_left_decomp_prefix) + (ff_r_pointadd_left_decomp_prefix))) /\ ((((exists ff_h_pointadd_left_decomp_prefix_successor. ff_h_pointadd_left_decomp_prefix_successor + S (ff_s_pointadd_left_decomp_prefix) = S ((S (S ff_i_pointadd_left_decomp_prefix)) * ff_v_pointadd_left_decomp_prefix)) /\ exists ff_q_pointadd_left_decomp_prefix_successor. ff_u_pointadd_left_decomp_prefix = ff_q_pointadd_left_decomp_prefix_successor * S ((S (S ff_i_pointadd_left_decomp_prefix)) * ff_v_pointadd_left_decomp_prefix) + (ff_s_pointadd_left_decomp_prefix))) /\ ff_s_pointadd_left_decomp_prefix = ff_r_pointadd_left_decomp_prefix + ff_a_pointadd_left_decomp_prefix)))))) /\ n = r + a) - 0045
specialize beta_sum_succ_decompose b - 0046
specialize beta_sum_succ_decompose c - 0047
specialize beta_sum_succ_decompose l - 0048
specialize beta_sum_succ_decompose n - 0049
apply beta_sum_succ_decompose - 0050
exact hleft - 0051
cases hleft_decomp - 0052
cases hleft_decomp_witness - 0053
cases hleft_decomp_witness_witness - 0054
cases hleft_decomp_witness_witness_right - 0055
have hright_decomp : exists a r. (((exists ff_h_pointadd_right_decomp_entry. ff_h_pointadd_right_decomp_entry + S (a) = S ((S (l)) * e)) /\ exists ff_q_pointadd_right_decomp_entry. d = ff_q_pointadd_right_decomp_entry * S ((S (l)) * e) + (a))) /\ ((exists ff_u_pointadd_right_decomp_prefix ff_v_pointadd_right_decomp_prefix. ((((exists ff_h_pointadd_right_decomp_prefix_start. ff_h_pointadd_right_decomp_prefix_start + S (0) = S ((S (0)) * ff_v_pointadd_right_decomp_prefix)) /\ exists ff_q_pointadd_right_decomp_prefix_start. ff_u_pointadd_right_decomp_prefix = ff_q_pointadd_right_decomp_prefix_start * S ((S (0)) * ff_v_pointadd_right_decomp_prefix) + (0))) /\ ((((exists ff_h_pointadd_right_decomp_prefix_terminal. ff_h_pointadd_right_decomp_prefix_terminal + S (r) = S ((S (l)) * ff_v_pointadd_right_decomp_prefix)) /\ exists ff_q_pointadd_right_decomp_prefix_terminal. ff_u_pointadd_right_decomp_prefix = ff_q_pointadd_right_decomp_prefix_terminal * S ((S (l)) * ff_v_pointadd_right_decomp_prefix) + (r))) /\ forall ff_i_pointadd_right_decomp_prefix. (exists ff_lt_pointadd_right_decomp_prefix_bound. ff_lt_pointadd_right_decomp_prefix_bound + S ff_i_pointadd_right_decomp_prefix = l) -> exists ff_a_pointadd_right_decomp_prefix ff_r_pointadd_right_decomp_prefix ff_s_pointadd_right_decomp_prefix. ((((exists ff_h_pointadd_right_decomp_prefix_summand. ff_h_pointadd_right_decomp_prefix_summand + S (ff_a_pointadd_right_decomp_prefix) = S ((S (ff_i_pointadd_right_decomp_prefix)) * e)) /\ exists ff_q_pointadd_right_decomp_prefix_summand. d = ff_q_pointadd_right_decomp_prefix_summand * S ((S (ff_i_pointadd_right_decomp_prefix)) * e) + (ff_a_pointadd_right_decomp_prefix))) /\ ((((exists ff_h_pointadd_right_decomp_prefix_partial. ff_h_pointadd_right_decomp_prefix_partial + S (ff_r_pointadd_right_decomp_prefix) = S ((S (ff_i_pointadd_right_decomp_prefix)) * ff_v_pointadd_right_decomp_prefix)) /\ exists ff_q_pointadd_right_decomp_prefix_partial. ff_u_pointadd_right_decomp_prefix = ff_q_pointadd_right_decomp_prefix_partial * S ((S (ff_i_pointadd_right_decomp_prefix)) * ff_v_pointadd_right_decomp_prefix) + (ff_r_pointadd_right_decomp_prefix))) /\ ((((exists ff_h_pointadd_right_decomp_prefix_successor. ff_h_pointadd_right_decomp_prefix_successor + S (ff_s_pointadd_right_decomp_prefix) = S ((S (S ff_i_pointadd_right_decomp_prefix)) * ff_v_pointadd_right_decomp_prefix)) /\ exists ff_q_pointadd_right_decomp_prefix_successor. ff_u_pointadd_right_decomp_prefix = ff_q_pointadd_right_decomp_prefix_successor * S ((S (S ff_i_pointadd_right_decomp_prefix)) * ff_v_pointadd_right_decomp_prefix) + (ff_s_pointadd_right_decomp_prefix))) /\ ff_s_pointadd_right_decomp_prefix = ff_r_pointadd_right_decomp_prefix + ff_a_pointadd_right_decomp_prefix)))))) /\ m = r + a) - 0056
specialize beta_sum_succ_decompose d - 0057
specialize beta_sum_succ_decompose e - 0058
specialize beta_sum_succ_decompose l - 0059
specialize beta_sum_succ_decompose m - 0060
apply beta_sum_succ_decompose - 0061
exact hright - 0062
cases hright_decomp - 0063
cases hright_decomp_witness - 0064
cases hright_decomp_witness_witness - 0065
cases hright_decomp_witness_witness_right - 0066
have htotal_decomp : exists a r. (((exists ff_h_pointadd_total_decomp_entry. ff_h_pointadd_total_decomp_entry + S (a) = S ((S (l)) * g)) /\ exists ff_q_pointadd_total_decomp_entry. f = ff_q_pointadd_total_decomp_entry * S ((S (l)) * g) + (a))) /\ ((exists ff_u_pointadd_total_decomp_prefix ff_v_pointadd_total_decomp_prefix. ((((exists ff_h_pointadd_total_decomp_prefix_start. ff_h_pointadd_total_decomp_prefix_start + S (0) = S ((S (0)) * ff_v_pointadd_total_decomp_prefix)) /\ exists ff_q_pointadd_total_decomp_prefix_start. ff_u_pointadd_total_decomp_prefix = ff_q_pointadd_total_decomp_prefix_start * S ((S (0)) * ff_v_pointadd_total_decomp_prefix) + (0))) /\ ((((exists ff_h_pointadd_total_decomp_prefix_terminal. ff_h_pointadd_total_decomp_prefix_terminal + S (r) = S ((S (l)) * ff_v_pointadd_total_decomp_prefix)) /\ exists ff_q_pointadd_total_decomp_prefix_terminal. ff_u_pointadd_total_decomp_prefix = ff_q_pointadd_total_decomp_prefix_terminal * S ((S (l)) * ff_v_pointadd_total_decomp_prefix) + (r))) /\ forall ff_i_pointadd_total_decomp_prefix. (exists ff_lt_pointadd_total_decomp_prefix_bound. ff_lt_pointadd_total_decomp_prefix_bound + S ff_i_pointadd_total_decomp_prefix = l) -> exists ff_a_pointadd_total_decomp_prefix ff_r_pointadd_total_decomp_prefix ff_s_pointadd_total_decomp_prefix. ((((exists ff_h_pointadd_total_decomp_prefix_summand. ff_h_pointadd_total_decomp_prefix_summand + S (ff_a_pointadd_total_decomp_prefix) = S ((S (ff_i_pointadd_total_decomp_prefix)) * g)) /\ exists ff_q_pointadd_total_decomp_prefix_summand. f = ff_q_pointadd_total_decomp_prefix_summand * S ((S (ff_i_pointadd_total_decomp_prefix)) * g) + (ff_a_pointadd_total_decomp_prefix))) /\ ((((exists ff_h_pointadd_total_decomp_prefix_partial. ff_h_pointadd_total_decomp_prefix_partial + S (ff_r_pointadd_total_decomp_prefix) = S ((S (ff_i_pointadd_total_decomp_prefix)) * ff_v_pointadd_total_decomp_prefix)) /\ exists ff_q_pointadd_total_decomp_prefix_partial. ff_u_pointadd_total_decomp_prefix = ff_q_pointadd_total_decomp_prefix_partial * S ((S (ff_i_pointadd_total_decomp_prefix)) * ff_v_pointadd_total_decomp_prefix) + (ff_r_pointadd_total_decomp_prefix))) /\ ((((exists ff_h_pointadd_total_decomp_prefix_successor. ff_h_pointadd_total_decomp_prefix_successor + S (ff_s_pointadd_total_decomp_prefix) = S ((S (S ff_i_pointadd_total_decomp_prefix)) * ff_v_pointadd_total_decomp_prefix)) /\ exists ff_q_pointadd_total_decomp_prefix_successor. ff_u_pointadd_total_decomp_prefix = ff_q_pointadd_total_decomp_prefix_successor * S ((S (S ff_i_pointadd_total_decomp_prefix)) * ff_v_pointadd_total_decomp_prefix) + (ff_s_pointadd_total_decomp_prefix))) /\ ff_s_pointadd_total_decomp_prefix = ff_r_pointadd_total_decomp_prefix + ff_a_pointadd_total_decomp_prefix)))))) /\ q = r + a) - 0067
specialize beta_sum_succ_decompose f - 0068
specialize beta_sum_succ_decompose g - 0069
specialize beta_sum_succ_decompose l - 0070
specialize beta_sum_succ_decompose q - 0071
apply beta_sum_succ_decompose - 0072
exact htotal - 0073
cases htotal_decomp - 0074
cases htotal_decomp_witness - 0075
cases htotal_decomp_witness_witness - 0076
cases htotal_decomp_witness_witness_right - 0077
have hprefix_pointwise : forall i a z s. (exists h. h + S i = l) -> (((exists ff_h_pointadd_prefix_left_entry. ff_h_pointadd_prefix_left_entry + S (a) = S ((S (i)) * c)) /\ exists ff_q_pointadd_prefix_left_entry. b = ff_q_pointadd_prefix_left_entry * S ((S (i)) * c) + (a))) -> (((exists ff_h_pointadd_prefix_right_entry. ff_h_pointadd_prefix_right_entry + S (z) = S ((S (i)) * e)) /\ exists ff_q_pointadd_prefix_right_entry. d = ff_q_pointadd_prefix_right_entry * S ((S (i)) * e) + (z))) -> (((exists ff_h_pointadd_prefix_total_entry. ff_h_pointadd_prefix_total_entry + S (s) = S ((S (i)) * g)) /\ exists ff_q_pointadd_prefix_total_entry. f = ff_q_pointadd_prefix_total_entry * S ((S (i)) * g) + (s))) -> s = a + z - 0078
intro i - 0079
intro a - 0080
intro z - 0081
intro s - 0082
intro hi - 0083
intro ha - 0084
intro hz - 0085
intro hs - 0086
specialize hpointwise i - 0087
specialize hpointwise a - 0088
specialize hpointwise z - 0089
specialize hpointwise s - 0090
apply hpointwise - 0091
specialize le_succ (S i) - 0092
specialize le_succ l - 0093
apply le_succ - 0094
exact hi - 0095
exact ha - 0096
exact hz - 0097
exact hs - 0098
have hprefix : x1 + x3 = x5 - 0099
specialize IH x1 - 0100
specialize IH x3 - 0101
specialize IH x5 - 0102
apply IH - 0103
exact hleft_decomp_witness_witness_right_left - 0104
exact hright_decomp_witness_witness_right_left - 0105
exact htotal_decomp_witness_witness_right_left - 0106
exact hprefix_pointwise - 0107
have hlast : x4 = x + x2 - 0108
specialize hpointwise l - 0109
specialize hpointwise x - 0110
specialize hpointwise x2 - 0111
specialize hpointwise x4 - 0112
apply hpointwise - 0113
specialize le_refl (S l) - 0114
exact le_refl - 0115
exact hleft_decomp_witness_witness_left - 0116
exact hright_decomp_witness_witness_left - 0117
exact htotal_decomp_witness_witness_left - 0118
rewrite hleft_decomp_witness_witness_right_right - 0119
rewrite hright_decomp_witness_witness_right_right - 0120
rewrite htotal_decomp_witness_witness_right_right - 0121
rewrite hlast - 0122
simp [add_assoc, add_comm] - 0123
trans (x1 + x3) + (x2 + x) - 0124
symm - 0125
apply add_assoc - 0126
rewrite hprefix - 0127
refl