Exact expanded PA statement
forall b c l y. ((exists fp_i_contains_l. ((exists fp_gap_contains_l_index. fp_gap_contains_l_index + S fp_i_contains_l = l) /\ (((exists ff_h_contains_l_entry. ff_h_contains_l_entry + S (y) = S ((S (fp_i_contains_l)) * c)) /\ exists ff_q_contains_l_entry. b = ff_q_contains_l_entry * S ((S (fp_i_contains_l)) * c) + (y))))) \/ ~(exists fp_i_contains_l. ((exists fp_gap_contains_l_index. fp_gap_contains_l_index + S fp_i_contains_l = l) /\ (((exists ff_h_contains_l_entry. ff_h_contains_l_entry + S (y) = S ((S (fp_i_contains_l)) * c)) /\ exists ff_q_contains_l_entry. b = ff_q_contains_l_entry * S ((S (fp_i_contains_l)) * c) + (y))))))Structural proof guide
Generated structural guide
Occurrence of a value in a nonempty decoded prefix is constructively decidable.
Use the direct prerequisites add_eq_zero_right, succ_ne_zero, finite_lt_succ_eq_or_lt, beta_at_exists, beta_at_unique, eq_decidable, le_refl, le_succ as previously established PA formulas.
The proof proceeds by structural induction (1), case analysis (11), intermediate claims (5), equality transport (4).
Referenced ingredients
Proof neighborhood
Direct dependencies
PA0004 add_eq_zero_right PA0005 succ_ne_zero PA003D finite_lt_succ_eq_or_lt PA0029 beta_at_exists PA002F beta_at_unique PA004G eq_decidable PA001A le_refl PA002O le_succDirect dependents
Formal native tactic body
Dependencies are introduced as named hypotheses before line 1. Linked names are exact direct references. This Stable checked-use theorem is independently kernel-checked when replayed.
- 0001
intro b - 0002
intro c - 0003
induction l - 0004
intro y - 0005
right - 0006
intro hcontains - 0007
cases hcontains - 0008
cases hcontains_witness - 0009
cases hcontains_witness_left - 0010
have hsi : S x = 0 - 0011
specialize add_eq_zero_right x1 - 0012
specialize add_eq_zero_right (S x) - 0013
apply add_eq_zero_right - 0014
exact hcontains_witness_left_witness - 0015
specialize succ_ne_zero x - 0016
apply succ_ne_zero - 0017
exact hsi - 0018
intro y - 0019
have hpresent : (exists i. ((exists h. h + S i = l) /\ ((exists h. h + S y = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + y))) \/ ~(exists i. ((exists h. h + S i = l) /\ ((exists h. h + S y = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + y))) - 0020
specialize IH y - 0021
exact IH - 0022
cases hpresent - 0023
left - 0024
cases hpresent_left - 0025
cases hpresent_left_witness - 0026
exists x - 0027
split - 0028
specialize le_succ (S x) - 0029
specialize le_succ l - 0030
apply le_succ - 0031
exact hpresent_left_witness_left - 0032
exact hpresent_left_witness_right - 0033
specialize beta_at_exists b - 0034
specialize beta_at_exists c - 0035
specialize beta_at_exists l - 0036
cases beta_at_exists - 0037
specialize eq_decidable x - 0038
specialize eq_decidable y - 0039
cases eq_decidable - 0040
left - 0041
exists l - 0042
split - 0043
specialize le_refl (S l) - 0044
exact le_refl - 0045
rewrite eq_decidable_left at beta_at_exists_witness - 0046
rewrite eq_decidable_left at beta_at_exists_witness - 0047
exact beta_at_exists_witness - 0048
right - 0049
intro hfull - 0050
cases hfull - 0051
cases hfull_witness - 0052
have hindex : x1 = l \/ exists h. h + S x1 = l - 0053
specialize finite_lt_succ_eq_or_lt l - 0054
specialize finite_lt_succ_eq_or_lt x1 - 0055
apply finite_lt_succ_eq_or_lt - 0056
exact hfull_witness_left - 0057
cases hindex - 0058
have hentry : ((exists h. h + S y = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + y) - 0059
rewrite hindex_left at hfull_witness_right - 0060
rewrite hindex_left at hfull_witness_right - 0061
exact hfull_witness_right - 0062
have hxy : x = y - 0063
specialize beta_at_unique b - 0064
specialize beta_at_unique c - 0065
specialize beta_at_unique l - 0066
specialize beta_at_unique x - 0067
specialize beta_at_unique y - 0068
apply beta_at_unique - 0069
exact beta_at_exists_witness - 0070
exact hentry - 0071
apply eq_decidable_right - 0072
exact hxy - 0073
apply hpresent_right - 0074
exists x1 - 0075
split - 0076
exact hindex_right - 0077
exact hfull_witness_right