Current library: Alpha v34, 4,223 checked-use theorems; Stable remains 432. Historical first admissions, original proof editions, and non-admitted aliases are preserved.
Each statement retains its explicit modulus, coprimality and divisibility assumptions. These twelve arithmetic laws do not assert all order, primitive-root, Carmichael, exponential or simultaneous-polynomial congruence goals are finished.
- linear_congruence_exact_bounded_enumeration_exists: 7303 actual ordinary certificate nodes
- linear_congruence_zero_modulus_nonzero_coefficient_unique: 351 actual ordinary certificate nodes
- linear_congruence_zero_modulus_zero_coefficient_iff: 107 actual ordinary certificate nodes
- linear_congruence_modulus_one_bounded_iff_zero: 309 actual ordinary certificate nodes
- fermat_little_all_inputs: 16013 actual ordinary certificate nodes
Actual same-live report · Exact first admissions
zero_add · unchanged support, not a new admission
forall n. 0 + n = n
induction nsimpsimp [IH]
add_succ_left · unchanged support, not a new admission
forall n m. S n + m = S (n + m)
intro ninduction msimpsimp [IH]
add_comm · unchanged support, not a new admission
forall n m. n + m = m + n
intro ninduction msimp [zero_add]simp [add_succ_left, IH]
add_assoc · unchanged support, not a new admission
forall n m k. (n + m) + k = n + (m + k)
intro nintro minduction ksimpsimp [IH]
mul_zero_left · unchanged support, not a new admission
forall n. 0 * n = 0
induction nsimpsimp [IH]
mul_succ_left · unchanged support, not a new admission
forall n m. S n * m = n * m + m
intro ninduction msimpspecialize add_comm nspecialize add_comm msimp [IH, add_comm, add_assoc]
mul_comm · unchanged support, not a new admission
forall n m. n * m = m * n
intro ninduction msimp [mul_zero_left]simp [IH, mul_succ_left]
mul_add · unchanged support, not a new admission
forall n m k. n * (m + k) = n * m + n * k
intro nintro minduction ksimpsimp [IH, add_assoc]
mul_assoc · unchanged support, not a new admission
forall n m k. (n * m) * k = n * (m * k)
intro nintro minduction ksimpsimp [IH, mul_add]
one_mul · unchanged support, not a new admission
forall n. 1 * n = n
induction nsimpsimp [IH]
mul_one · unchanged support, not a new admission
forall n. n * 1 = n
intro nsimp [zero_add]
add_mul · unchanged support, not a new admission
forall n m k. (n + m) * k = n * k + m * k
intro nintro mintro ksimp [mul_comm, mul_add]
succ_ne_zero · unchanged support, not a new admission
forall n. ~(S n = 0)
apply PA1
succ_injective · unchanged support, not a new admission
forall n m. S n = S m -> n = m
apply PA2
le_refl · unchanged support, not a new admission
forall n. n <= n
intro nexists 0simp [zero_add]
le_trans · unchanged support, not a new admission
forall n m k. n <= m -> m <= k -> n <= k
intro nintro mintro kintro h_nmintro h_mkcases h_nmcases h_mkexists x1 + xsimp [add_assoc, h_nm_witness, h_mk_witness]
no_succ_add_fixed · unchanged support, not a new admission
forall p n. S p + n = n -> false
intro pinduction nintro happly PA1rewrite PA3 at hexact hintro happly IHapply PA2rewrite PA4 at hexact h
le_total · unchanged support, not a new admission
forall n m. n <= m \/ m <= n
induction nintro mleftexists msimpinduction mrightexists (S n)simpspecialize IH mcases IHcases IH_leftleftexists xrewrite PA4congrexact IH_left_witnesscases IH_rightrightexists xrewrite PA4congrexact IH_right_witness
add_eq_zero_right · unchanged support, not a new admission
forall a b. a + b = 0 -> b = 0
intro ainduction bintro hreflintro hexfalsoapply PA1rewrite PA4 at hexact h
mul_eq_zero · unchanged support, not a new admission
forall n m. n * m = 0 -> n = 0 \/ m = 0
intro ninduction mintro hrightreflintro hleftspecialize add_eq_zero_right (n * m)specialize add_eq_zero_right napply add_eq_zero_rightrewrite PA6 at hexact h
zero_or_succ · unchanged support, not a new admission
forall n. n = 0 \/ exists k. n = S k
induction nleftreflrightexists nrefl
nonzero_is_succ · unchanged support, not a new admission
forall n. ~(n = 0) -> exists k. n = S k
induction nintro hexfalsoapply hreflintro hexists nrefl
mul_congr · unchanged support, not a new admission
forall a b c d. a = b -> c = d -> a * c = b * d
intro aintro bintro cintro dintro habintro hcdcongrexact habexact hcd
add_right_cancel · unchanged support, not a new admission
forall a b c. a + c = b + c -> a = b
intro aintro binduction cintro hrewrite PA3 at hrewrite PA3 at hexact hintro happly IHapply PA2rewrite PA4 at hrewrite PA4 at hexact h
add_left_cancel · unchanged support, not a new admission
forall a b c. a + b = a + c -> b = c
intro aintro bintro cintro hspecialize add_right_cancel bspecialize add_right_cancel cspecialize add_right_cancel aapply add_right_canceltrans a + bapply add_commtrans a + cexact happly add_comm
zero_le · unchanged support, not a new admission
forall n. 0 <= n
intro nexists nrewrite PA3refl
le_succ_self · unchanged support, not a new admission
forall n. n <= S n
intro nexists 1simp [add_succ_left, zero_add]
le_zero · unchanged support, not a new admission
forall n. n <= 0 -> n = 0
intro nintro hcases happly add_eq_zero_rightexact h_witness
one_le_of_ne_zero · unchanged support, not a new admission
forall n. ~(n = 0) -> 1 <= n
induction nintro hexfalsoapply hreflintro hexists nsimp
le_add_left · unchanged support, not a new admission
forall a b. exists k. k + a = b + a
intro aintro bexists brefl
le_add_right · unchanged support, not a new admission
forall a b. exists k. k + a = a + b
intro aintro bexists bapply add_comm
add_le_add_right · unchanged support, not a new admission
forall a b c. (exists k. k + a = b) -> exists r. r + (a + c) = b + c
intro aintro bintro cintro hcases hexists xtrans (x + a) + csymmapply add_assoccongrexact h_witnessrefl
add_le_add_left · unchanged support, not a new admission
forall a b c. (exists k. k + a = b) -> exists r. r + (c + a) = c + b
intro aintro bintro cintro hcases hexists xtrans (x + c) + asymmapply add_assoctrans (c + x) + acongrapply add_commrefltrans c + (x + a)apply add_assoccongrreflexact h_witness
succ_le_succ · unchanged support, not a new admission
forall a b. (exists k. k + a = b) -> exists r. r + S a = S b
intro aintro bintro hcases hexists xrewrite PA4congrexact h_witness
le_of_succ_le_succ · unchanged support, not a new admission
forall a b. (exists k. k + S a = S b) -> exists r. r + a = b
intro aintro bintro hcases hexists xapply PA2trans x + S asymmapply PA4exact h_witness
le_succ · unchanged support, not a new admission
forall a b. (exists k. k + a = b) -> exists r. r + a = S b
intro aintro bintro hcases hexists S xtrans S (x + a)apply add_succ_leftcongrexact h_witness
lt_to_le · unchanged support, not a new admission
forall a b. (exists k. k + S a = b) -> exists r. r + a = b
intro aintro bintro hcases hexists S xtrans x + S atrans S (x + a)apply add_succ_leftsymmapply PA4exact h_witness
lt_irrefl_expanded · unchanged support, not a new admission
forall n. ~(exists k. k + S n = n)
intro nintro hcases hspecialize no_succ_add_fixed xspecialize no_succ_add_fixed napply no_succ_add_fixedtrans x + S ntrans S (x + n)apply add_succ_leftsymmapply PA4exact h_witness
le_eq_or_lt · unchanged support, not a new admission
forall a b. (exists k. k + a = b) -> a = b \/ exists k. k + S a = b
intro aintro bintro hcases hspecialize zero_or_succ xcases zero_or_succleftrewrite zero_or_succ_left at h_witnessspecialize zero_add arewrite zero_add at h_witnessexact h_witnesscases zero_or_succ_rightrightexists x1trans S x1 + atrans S (x1 + a)apply PA4symmapply add_succ_leftrewrite <- zero_or_succ_right_witnessexact h_witness
lt_of_lt_of_le · unchanged support, not a new admission
forall a b c. (exists k. k + S a = b) -> (exists k. k + b = c) -> exists k. k + S a = c
intro aintro bintro cintro habintro hbcspecialize le_trans (S a)specialize le_trans bspecialize le_trans capply le_transexact habexact hbc
le_or_lt · unchanged support, not a new admission
forall a b. (exists k. k + a = b) \/ exists k. k + S b = a
induction aintro bleftexists bapply PA3induction brightexists atrans S (a + 0)apply PA4congrapply PA3specialize IH bcases IHleftcases IH_leftexists xrewrite PA4congrexact IH_left_witnessrightcases IH_rightexists xrewrite PA4congrexact IH_right_witness
lt_trichotomy · unchanged support, not a new admission
forall a b. a = b \/ ((exists k. k + S a = b) \/ exists k. k + S b = a)
induction ainduction bleftreflrightleftexists btrans S (b + 0)apply PA4congrapply PA3induction brightrightexists atrans S (a + 0)apply PA4congrapply PA3specialize IH bcases IHleftcongrexact IH_leftcases IH_rightrightleftcases IH_right_leftexists xrewrite PA4congrexact IH_right_left_witnessrightrightcases IH_right_rightexists xrewrite PA4congrexact IH_right_right_witness
lt_not_le · unchanged support, not a new admission
forall a b. (exists k. k + S a = b) -> ~ (exists k. k + b = a)
have hbad : forall z u v. ~(z = u + (v + S z))intro zinduction zintro uintro vintro hzapply PA1symmrewrite PA4 at hzrewrite PA4 at hzexact hzintro uintro vintro hzspecialize IH uspecialize IH vapply IHapply PA2rewrite PA4 at hzrewrite PA4 at hzexact hzintro aintro bintro habintro hbacases habcases hbaspecialize hbad aspecialize hbad x1specialize hbad xapply hbadsymmrewrite <- hab_witness at hba_witnessexact hba_witness
lt_not_eq_add_middle · unchanged support, not a new admission
forall r m a b. (exists k. k + S r = m) -> ~(r = (a + m) + b)
have hbad : forall z a w b. ~(z = (a + (w + S z)) + b)intro zinduction zintro aintro wintro bintro hzapply PA1symmrewrite PA4 at hzrewrite PA4 at hzspecialize add_succ_left (a + (w + 0))specialize add_succ_left brewrite add_succ_left at hzexact hzintro aintro wintro bintro hzspecialize IH aspecialize IH wspecialize IH bapply IHapply PA2rewrite PA4 at hzrewrite PA4 at hzspecialize add_succ_left (a + (w + S z))specialize add_succ_left brewrite add_succ_left at hzexact hzintro rintro mintro aintro bintro hrintro heqcases hrspecialize hbad rspecialize hbad aspecialize hbad xspecialize hbad bapply hbadrewrite <- hr_witness at heqexact heq
mul_le_mul_right · unchanged support, not a new admission
forall a b c. (exists k. k + a = b) -> exists r. r + a * c = b * c
intro aintro bintro cintro hcases hexists x * ctrans (x + a) * csymmapply add_mulcongrexact h_witnessrefl
division_remainder_succ · unchanged support, not a new admission
forall d n. exists q r. n = S d * q + r /\ S r <= S d
intro dinduction nexists 0exists 0splitsimpexists dsimpcases IHcases IH_witnesscases IH_witness_witnesscases IH_witness_witness_rightspecialize zero_or_succ x2cases zero_or_succrewrite zero_or_succ_left at IH_witness_witness_right_witnessspecialize zero_add S x1rewrite zero_add at IH_witness_witness_right_witnesshave hrd : x1 = dapply PA2exact IH_witness_witness_right_witnessexists S xexists 0splitrewrite IH_witness_witness_leftrewrite hrdsimpexists dsimpcases zero_or_succ_rightexists xexists S x1splitrewrite IH_witness_witness_leftsimpexists x3rewrite <- IH_witness_witness_right_witnessrewrite zero_or_succ_right_witnesssimp [add_succ_left]
division_remainder_exists · unchanged support, not a new admission
forall m n. ~(m = 0) -> exists q r. n = m * q + r /\ S r <= m
intro mintro nintro hmspecialize zero_or_succ mcases zero_or_succexfalsoapply hmexact zero_or_succ_leftcases zero_or_succ_rightspecialize division_remainder_succ xspecialize division_remainder_succ nrewrite zero_or_succ_right_witnessrewrite zero_or_succ_right_witnessexact division_remainder_succ
positive_quotient_gap_impossible · unchanged support, not a new admission
forall m q q2 r s k. (exists z. z + S r = m) -> S k + q = q2 -> ~(m * q + r = m * q2 + s)
intro mintro qintro q2intro rintro sintro kintro hrintro hgapintro heqspecialize lt_not_eq_add_middle rspecialize lt_not_eq_add_middle mspecialize lt_not_eq_add_middle (m * k)specialize lt_not_eq_add_middle sapply lt_not_eq_add_middleexact hrspecialize add_left_cancel (m * q)specialize add_left_cancel rspecialize add_left_cancel ((m * k + m) + s)apply add_left_canceltrans m * q2 + sexact heqrewrite <- hgapspecialize add_comm S kspecialize add_comm qrewrite add_commspecialize mul_add mspecialize mul_add qspecialize mul_add S krewrite mul_addrewrite PA6specialize add_assoc (m * q)specialize add_assoc (m * k + m)specialize add_assoc sapply add_assoc
division_remainder_unique · unchanged support, not a new admission
forall m n q r q2 r2. n = m * q + r -> (exists k. k + S r = m) -> n = m * q2 + r2 -> (exists k. k + S r2 = m) -> q = q2 /\ r = r2
intro mintro nintro qintro rintro q2intro r2intro h1intro hrintro h2intro hr2have hsum : m * q + r = m * q2 + r2trans nsymmexact h1exact h2specialize le_total qspecialize le_total q2cases le_totalcases le_total_leftspecialize zero_or_succ xcases zero_or_succrewrite zero_or_succ_left at le_total_left_witnessspecialize zero_add qrewrite zero_add at le_total_left_witnesssplitexact le_total_left_witnessspecialize add_left_cancel (m * q)specialize add_left_cancel rspecialize add_left_cancel r2apply add_left_cancelrewrite <- le_total_left_witness at hsumexact hsumcases zero_or_succ_rightexfalsospecialize positive_quotient_gap_impossible mspecialize positive_quotient_gap_impossible qspecialize positive_quotient_gap_impossible q2specialize positive_quotient_gap_impossible rspecialize positive_quotient_gap_impossible r2specialize positive_quotient_gap_impossible x1apply positive_quotient_gap_impossibleexact hrrewrite zero_or_succ_right_witness at le_total_left_witnessexact le_total_left_witnessexact hsumcases le_total_rightspecialize zero_or_succ xcases zero_or_succrewrite zero_or_succ_left at le_total_right_witnessspecialize zero_add q2rewrite zero_add at le_total_right_witnesssplitsymmexact le_total_right_witnessspecialize add_left_cancel (m * q)specialize add_left_cancel rspecialize add_left_cancel r2apply add_left_cancelrewrite le_total_right_witness at hsumexact hsumcases zero_or_succ_rightexfalsospecialize positive_quotient_gap_impossible mspecialize positive_quotient_gap_impossible q2specialize positive_quotient_gap_impossible qspecialize positive_quotient_gap_impossible r2specialize positive_quotient_gap_impossible rspecialize positive_quotient_gap_impossible x1apply positive_quotient_gap_impossibleexact hr2rewrite zero_or_succ_right_witness at le_total_right_witnessexact le_total_right_witnesssymmexact hsum
add_eq_zero_left · unchanged support, not a new admission
forall a b. a + b = 0 -> a = 0
intro aintro bintro hspecialize add_eq_zero_right bspecialize add_eq_zero_right aapply add_eq_zero_righttrans a + bapply add_commexact h
mul_eq_one_components · unchanged support, not a new admission
forall a b. a * b = 1 -> a = 1 /\ b = 1
intro ainduction aintro bintro hspecialize mul_zero_left brewrite mul_zero_left at hexfalsoapply PA1symmexact hintro binduction bintro hrewrite PA5 at hexfalsoapply PA1symmexact hintro hrewrite PA6 at hrewrite PA4 at hhave hz : S a * b + a = 0apply PA2exact hspecialize add_eq_zero_right (S a * b)specialize add_eq_zero_right ahave ha0 : a = 0apply add_eq_zero_rightexact hzsplitcongrexact ha0rewrite ha0 at hzrewrite ha0 at hzrewrite PA3 at hzspecialize one_mul brewrite one_mul at hzcongrexact hz
mul_ne_zero · unchanged support, not a new admission
forall a b. ~(a = 0) -> ~(b = 0) -> ~(a * b = 0)
intro aintro bintro haintro hbintro habspecialize mul_eq_zero aspecialize mul_eq_zero bhave hz : a = 0 \/ b = 0apply mul_eq_zeroexact habcases hzapply haexact hz_leftapply hbexact hz_right
mul_left_cancel_nonzero · unchanged support, not a new admission
forall a b c. ~(a = 0) -> a * b = a * c -> b = c
intro ainduction bintro cintro haintro hhave hz : a * c = 0symmrewrite PA5 at hexact hhave factors : a = 0 \/ c = 0specialize mul_eq_zero aspecialize mul_eq_zero capply mul_eq_zeroexact hzcases factorsexfalsoapply haexact factors_leftsymmexact factors_rightintro cinduction cintro haintro hexfalsospecialize mul_ne_zero aspecialize mul_ne_zero (S b)apply mul_ne_zeroexact haspecialize succ_ne_zero bexact succ_ne_zerorewrite PA5 at hexact hintro haintro hcongrapply IHexact haapply add_right_cancelrewrite PA6 at hrewrite PA6 at hexact h
multiple_zero · unchanged support, not a new admission
forall a. exists q. 0 = a * q
intro aexists 0rewrite PA5refl
multiple_refl · unchanged support, not a new admission
forall a. exists q. a = a * q
intro aexists 1symmapply mul_one
multiple_mul_right · unchanged support, not a new admission
forall a n m. (exists q. n = a * q) -> exists s. n * m = a * s
intro aintro nintro mintro hncases hnexists x * mrewrite hn_witnessapply mul_assoc
multiple_mul_left · unchanged support, not a new admission
forall a n m. (exists q. n = a * q) -> exists s. m * n = a * s
intro aintro nintro mintro hnsuffices hswap : m * n = n * mrewrite hswapapply multiple_mul_rightexact hnapply mul_comm
multiple_trans · unchanged support, not a new admission
forall a b n. (exists q. n = a * q) -> (exists r. a = b * r) -> exists s. n = b * s
intro aintro bintro nintro hnintro habcases hncases habexists x1 * xrewrite hn_witnessrewrite hab_witnessapply mul_assoc
divisor_le_nonzero · unchanged support, not a new admission
forall d n. ~(n = 0) -> (exists q. n = d * q) -> exists k. k + d = n
intro dintro nintro hnintro hdcases hdhave hq : ~(x = 0)intro hxapply hntrans d * xexact hd_witnessrewrite hxapply PA5specialize one_le_of_ne_zero xhave h1q : exists k. k + 1 = xapply one_le_of_ne_zeroexact hqcases h1qhave hs : S x1 = xtrans x1 + 1simpexact h1q_witnessexists d * x1trans d * S x1symmapply PA6trans d * xcongrreflexact hssymmexact hd_witness
divisor_one · unchanged support, not a new admission
forall d. (exists y. 1 = d * y) -> d = 1
intro dintro hcases hspecialize mul_eq_one_components dspecialize mul_eq_one_components xhave parts : d = 1 /\ x = 1apply mul_eq_one_componentssymmexact h_witnesscases partsexact parts_left
multiple_antisymm · unchanged support, not a new admission
forall a b. (exists x. b = a * x) -> (exists y. a = b * y) -> a = b
intro aintro bintro habintro hbacases habcases hbaspecialize zero_or_succ acases zero_or_succrewrite zero_or_succ_leftrewrite zero_or_succ_left at hab_witnessspecialize mul_zero_left xrewrite mul_zero_left at hab_witnesssymmexact hab_witnesscases zero_or_succ_righthave ha : ~(a = 0)intro ha0rewrite zero_or_succ_right_witness at ha0apply PA1exact ha0have hcycle : a = a * (x * x1)trans b * x1exact hba_witnesstrans (a * x) * x1congrexact hab_witnessreflapply mul_assocspecialize mul_left_cancel_nonzero aspecialize mul_left_cancel_nonzero 1specialize mul_left_cancel_nonzero (x * x1)have hunit : 1 = x * x1apply mul_left_cancel_nonzeroexact haspecialize mul_one atrans aapply mul_oneexact hcyclespecialize mul_eq_one_components xspecialize mul_eq_one_components x1have hparts : x = 1 /\ x1 = 1apply mul_eq_one_componentssymmexact hunitcases hpartssymmtrans a * xexact hab_witnessrewrite hparts_leftapply mul_one
factor_difference · unchanged support, not a new admission
forall c u v r. c * u = c * v + r -> exists w. r = c * w
intro cinduction uintro vintro rintro hrewrite PA5 at hhave hr : r = 0apply add_eq_zero_rightsymmexact hexists 0rewrite hrrewrite PA5reflintro vinduction vintro rintro hexists S urewrite PA5 at hspecialize zero_add rrewrite zero_add at hsymmexact hintro rintro hhave hred : c * u = c * v + rspecialize add_right_cancel (c * u)specialize add_right_cancel (c * v + r)specialize add_right_cancel capply add_right_cancelrewrite PA6 at hrewrite PA6 at htrans (c * v + c) + rexact htrans c * v + (c + r)apply add_assoctrans c * v + (r + c)congrreflapply add_commsymmapply add_assocspecialize IH vspecialize IH rapply IHexact hred
divides_remainder · unchanged support, not a new admission
forall c a b q r. (exists u. a = c * u) -> (exists v. b = c * v) -> a = b * q + r -> exists w. r = c * w
intro cintro aintro bintro qintro rintro haintro hbintro hcases hacases hbspecialize factor_difference cspecialize factor_difference xspecialize factor_difference (x1 * q)specialize factor_difference rapply factor_differencetrans asymmexact ha_witnesstrans b * q + rexact hcongrrewrite hb_witnessapply mul_assocrefl
divides_linear_step · unchanged support, not a new admission
forall c b q r. (exists u. b = c * u) -> (exists v. r = c * v) -> exists w. b * q + r = c * w
intro cintro bintro qintro rintro hbintro hrcases hbcases hrexists x * q + x1rewrite hb_witnessrewrite hr_witnesstrans c * (x * q) + c * x1congrapply mul_assocreflsymmapply mul_add
is_gcd_zero_right · unchanged support, not a new admission
forall a. (((exists x. a = a * x) /\ (exists y. 0 = a * y)) /\ forall c. (exists u. a = c * u) -> (exists v. 0 = c * v) -> exists w. a = c * w)
intro asplitsplitspecialize multiple_refl aexact multiple_reflspecialize multiple_zero aexact multiple_zerointro cintro haintro hzexact ha
is_gcd_symm · unchanged support, not a new admission
forall g a b. (((exists x. a = g * x) /\ (exists y. b = g * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. g = c * w) -> ((exists x. b = g * x) /\ (exists y. a = g * y)) /\ forall c. (exists u. b = c * u) -> (exists v. a = c * v) -> exists w. g = c * w
intro gintro aintro bintro hcases hcases h_leftsplitsplitexact h_left_rightexact h_left_leftintro cintro hbintro haspecialize h_right capply h_rightexact haexact hb
is_gcd_dvd_left · unchanged support, not a new admission
forall g a b. (((exists x. a = g * x) /\ (exists y. b = g * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. g = c * w) -> exists x. a = g * x
intro gintro aintro bintro hcases hcases h_leftexact h_left_left
is_gcd_dvd_right · unchanged support, not a new admission
forall g a b. (((exists x. a = g * x) /\ (exists y. b = g * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. g = c * w) -> exists y. b = g * y
intro gintro aintro bintro hcases hcases h_leftexact h_left_right
is_gcd_greatest · unchanged support, not a new admission
forall g a b c. (((exists x. a = g * x) /\ (exists y. b = g * y)) /\ forall d. (exists u. a = d * u) -> (exists v. b = d * v) -> exists w. g = d * w) -> (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. g = c * w
intro gintro aintro bintro cintro hintro haintro hbcases hspecialize h_right capply h_rightexact haexact hb
is_gcd_unique · unchanged support, not a new admission
forall g h a b. (((exists x. a = g * x) /\ (exists y. b = g * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. g = c * w) -> (((exists x. a = h * x) /\ (exists y. b = h * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. h = c * w) -> g = h
intro gintro hintro aintro bintro hgintro hhcases hgcases hg_leftcases hhcases hh_leftspecialize hg_right hhave hdg : exists w. g = h * wapply hg_rightexact hh_left_leftexact hh_left_rightspecialize hh_right ghave gdh : exists w. h = g * wapply hh_rightexact hg_left_leftexact hg_left_rightspecialize multiple_antisymm gspecialize multiple_antisymm happly multiple_antisymmexact gdhexact hdg
is_gcd_euclid_forward · unchanged support, not a new admission
forall d a b q r. a = b * q + r -> (((exists x. b = d * x) /\ (exists y. r = d * y)) /\ forall c. (exists u. b = c * u) -> (exists v. r = c * v) -> exists w. d = c * w) -> (((exists x. a = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. d = c * w)
intro dintro aintro bintro qintro rintro hstepintro hgcases hgcases hg_leftsplitsplitrewrite hstepspecialize divides_linear_step dspecialize divides_linear_step bspecialize divides_linear_step qspecialize divides_linear_step rapply divides_linear_stepexact hg_left_leftexact hg_left_rightexact hg_left_leftintro cintro hcaintro hcbspecialize hg_right capply hg_rightexact hcbspecialize divides_remainder cspecialize divides_remainder aspecialize divides_remainder bspecialize divides_remainder qspecialize divides_remainder rapply divides_remainderexact hcaexact hcbexact hstep
gcd_exists_up_to · unchanged support, not a new admission
forall B b. (exists t. t + b = B) -> forall a. exists d. (((exists x. a = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. d = c * w)
intro Binduction Bintro bintro hbintro ahave hb0 : b = 0apply le_zeroexact hbexists asplitsplitspecialize multiple_refl aexact multiple_reflexists 0trans 0exact hb0symmapply PA5intro cintro hcaintro hcbexact hcaintro bintro hbintro aspecialize le_eq_or_lt bspecialize le_eq_or_lt (S B)have hsplit : b = S B \/ exists k. k + S b = S Bapply le_eq_or_ltexact hbcases hsplithave hb0 : ~(b = 0)intro hzeroapply PA1trans bsymmexact hsplit_leftexact hzerohave hdiv : exists q r. a = b * q + r /\ exists k. k + S r = bapply division_remainder_existsexact hb0cases hdivcases hdiv_witnesscases hdiv_witness_witnesshave hrB : exists k. k + x1 = Bapply le_of_succ_le_succrewrite hsplit_left at hdiv_witness_witness_rightexact hdiv_witness_witness_righthave hsmall : exists d. (((exists u. b = d * u) /\ (exists v. x1 = d * v)) /\ forall c. (exists s. b = c * s) -> (exists t. x1 = c * t) -> exists w. d = c * w)specialize IH x1have hall : forall z. exists d. (((exists u. z = d * u) /\ (exists v. x1 = d * v)) /\ forall c. (exists s. z = c * s) -> (exists t. x1 = c * t) -> exists w. d = c * w)apply IHexact hrBspecialize hall bexact hallcases hsmallexists x2specialize is_gcd_euclid_forward x2specialize is_gcd_euclid_forward aspecialize is_gcd_euclid_forward bspecialize is_gcd_euclid_forward xspecialize is_gcd_euclid_forward x1apply is_gcd_euclid_forwardexact hdiv_witness_witness_leftexact hsmall_witnesshave hbB : exists k. k + b = Bapply le_of_succ_le_succexact hsplit_rightspecialize IH bhave hall : forall z. exists d. (((exists u. z = d * u) /\ (exists v. b = d * v)) /\ forall c. (exists s. z = c * s) -> (exists t. b = c * t) -> exists w. d = c * w)apply IHexact hbBspecialize hall aexact hall
gcd_exists_relational · unchanged support, not a new admission
forall a b. exists d. (((exists x. a = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. d = c * w)
intro aintro bspecialize gcd_exists_up_to bspecialize gcd_exists_up_to bhave hbb : exists t. t + b = bapply le_reflhave hall : forall z. exists d. (((exists x. z = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. z = c * u) -> (exists v. b = c * v) -> exists w. d = c * w)apply gcd_exists_up_toexact hbbspecialize hall aexact hall
coprime_symm · unchanged support, not a new admission
forall a b. (forall d. (exists x. a = d * x) -> (exists y. b = d * y) -> d = 1) -> forall c. (exists u. b = c * u) -> (exists v. a = c * v) -> c = 1
intro aintro bintro hintro cintro hbintro haspecialize h capply hexact haexact hb
coprime_one_left · unchanged support, not a new admission
forall a d. (exists x. 1 = d * x) -> (exists y. a = d * y) -> d = 1
intro aintro dintro h1intro haspecialize divisor_one dapply divisor_oneexact h1
is_gcd_one_to_coprime · unchanged support, not a new admission
forall a b. (((exists x. a = 1 * x) /\ (exists y. b = 1 * y)) /\ forall d. (exists u. a = d * u) -> (exists v. b = d * v) -> exists w. 1 = d * w) -> forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> c = 1
intro aintro bintro hgintro cintro haintro hbcases hgspecialize hg_right chave hd : exists w. 1 = c * wapply hg_rightexact haexact hbspecialize divisor_one capply divisor_oneexact hd
add_permute_outer · unchanged support, not a new admission
forall a b c d. (a + b) + (c + d) = (c + b) + (a + d)
intro aintro bintro cintro dtrans a + (b + (c + d))apply add_assoctrans a + ((b + c) + d)congrreflsymmapply add_assoctrans a + ((c + b) + d)congrreflcongrapply add_commrefltrans (a + (c + b)) + dsymmapply add_assoctrans ((c + b) + a) + dcongrapply add_commreflapply add_assoc
balanced_bezout_euclid_step · unchanged support, not a new admission
forall a b q r d xp yp xn yn. a = b * q + r -> b * xp + r * yp = d + (b * xn + r * yn) -> a * yp + b * (xp + q * yn) = d + (a * yn + b * (xn + q * yp))
intro aintro bintro qintro rintro dintro xpintro ypintro xnintro ynintro habintro hbezrewrite habtrans ((b * q) * yp + r * yp) + b * (xp + q * yn)congrapply add_mulrefltrans ((b * q) * yp + r * yp) + (b * xp + b * (q * yn))congrreflapply mul_addtrans ((b * q) * yp + r * yp) + (b * xp + (b * q) * yn)congrreflcongrreflsymmapply mul_assoctrans (b * xp + r * yp) + ((b * q) * yp + (b * q) * yn)apply add_permute_outertrans (b * xp + r * yp) + ((b * q) * yn + (b * q) * yp)congrreflapply add_commtrans (d + (b * xn + r * yn)) + ((b * q) * yn + (b * q) * yp)congrexact hbezrefltrans d + ((b * xn + r * yn) + ((b * q) * yn + (b * q) * yp))apply add_assoctrans d + (((b * q) * yn + r * yn) + (b * xn + (b * q) * yp))congrreflapply add_permute_outertrans d + ((b * q + r) * yn + (b * xn + (b * q) * yp))congrreflcongrsymmapply add_mulrefltrans d + ((b * q + r) * yn + (b * xn + b * (q * yp)))congrreflcongrreflcongrreflapply mul_assoccongrreflcongrcongrsymmexact habreflsymmapply mul_add
gcd_balanced_bezout_exists_up_to · unchanged support, not a new admission
forall B b. (exists t. t + b = B) -> forall a. exists d. ((((exists x. a = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. d = c * w) /\ exists xp yp xn yn. a * xp + b * yp = d + (a * xn + b * yn))
intro Binduction Bintro bintro hbintro ahave hb0 : b = 0apply le_zeroexact hbexists asplitrewrite hb0rewrite hb0specialize is_gcd_zero_right aexact is_gcd_zero_rightexists 1exists 0exists 0exists 0rewrite hb0simp [zero_add]intro bintro hbintro aspecialize le_eq_or_lt bspecialize le_eq_or_lt (S B)have hsplit : b = S B \/ exists k. k + S b = S Bapply le_eq_or_ltexact hbcases hsplithave hb0 : ~(b = 0)intro hzeroapply PA1trans bsymmexact hsplit_leftexact hzerohave hdiv : exists q r. a = b * q + r /\ exists k. k + S r = bapply division_remainder_existsexact hb0cases hdivcases hdiv_witnesscases hdiv_witness_witnesshave hrB : exists k. k + x1 = Bapply le_of_succ_le_succrewrite hsplit_left at hdiv_witness_witness_rightexact hdiv_witness_witness_righthave hsmall : exists d. ((((exists u. b = d * u) /\ (exists v. x1 = d * v)) /\ forall c. (exists s. b = c * s) -> (exists t. x1 = c * t) -> exists w. d = c * w) /\ exists xp yp xn yn. b * xp + x1 * yp = d + (b * xn + x1 * yn))specialize IH x1have hall : forall z. exists d. ((((exists u. z = d * u) /\ (exists v. x1 = d * v)) /\ forall c. (exists s. z = c * s) -> (exists t. x1 = c * t) -> exists w. d = c * w) /\ exists xp yp xn yn. z * xp + x1 * yp = d + (z * xn + x1 * yn))apply IHexact hrBspecialize hall bexact hallcases hsmallcases hsmall_witnesscases hsmall_witness_rightcases hsmall_witness_right_witnesscases hsmall_witness_right_witness_witnesscases hsmall_witness_right_witness_witness_witnessexists x2splitapply is_gcd_euclid_forwardexact hdiv_witness_witness_leftexact hsmall_witness_leftexists x4exists x3 + x * x6exists x6exists x5 + x * x4apply balanced_bezout_euclid_stepexact hdiv_witness_witness_leftexact hsmall_witness_right_witness_witness_witness_witnesshave hbB : exists k. k + b = Bapply le_of_succ_le_succexact hsplit_rightspecialize IH bhave hall : forall z. exists d. ((((exists u. z = d * u) /\ (exists v. b = d * v)) /\ forall c. (exists s. z = c * s) -> (exists t. b = c * t) -> exists w. d = c * w) /\ exists xp yp xn yn. z * xp + b * yp = d + (z * xn + b * yn))apply IHexact hbBspecialize hall aexact hall
gcd_balanced_bezout_exists · unchanged support, not a new admission
forall a b. exists d. ((((exists x. a = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. d = c * w) /\ exists xp yp xn yn. a * xp + b * yp = d + (a * xn + b * yn))
intro aintro bspecialize gcd_balanced_bezout_exists_up_to bspecialize gcd_balanced_bezout_exists_up_to bhave hbb : exists t. t + b = bapply le_reflhave hall : forall z. exists d. ((((exists x. z = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. z = c * u) -> (exists v. b = c * v) -> exists w. d = c * w) /\ exists xp yp xn yn. z * xp + b * yp = d + (z * xn + b * yn))apply gcd_balanced_bezout_exists_up_toexact hbbspecialize hall aexact hall
balanced_combination_scale_right · unchanged support, not a new admission
forall a b d xp yp xn yn z. a * xp + b * yp = d + (a * xn + b * yn) -> a * (xp * z) + (b * z) * yp = d * z + (a * (xn * z) + (b * z) * yn)
intro aintro bintro dintro xpintro ypintro xnintro ynintro zintro htrans (a * xp) * z + (b * z) * ypcongrsymmapply mul_assocrefltrans (a * xp) * z + (b * yp) * zcongrrefltrans b * (z * yp)apply mul_assoctrans b * (yp * z)congrreflapply mul_commsymmapply mul_assoctrans (a * xp + b * yp) * zsymmapply add_multrans (d + (a * xn + b * yn)) * zcongrexact hrefltrans d * z + (a * xn + b * yn) * zapply add_multrans d * z + ((a * xn) * z + (b * yn) * z)congrreflapply add_multrans d * z + (a * (xn * z) + (b * yn) * z)congrreflcongrapply mul_assocreflcongrreflcongrrefltrans b * (yn * z)apply mul_assoctrans b * (z * yn)congrreflapply mul_commsymmapply mul_assoc
common_divisor_divides_balanced_result · unchanged support, not a new admission
forall c a b d xp yp xn yn. (exists u. a = c * u) -> (exists v. b = c * v) -> a * xp + b * yp = d + (a * xn + b * yn) -> exists w. d = c * w
intro cintro aintro bintro dintro xpintro ypintro xnintro ynintro haintro hbintro hcases hacases hbspecialize factor_difference cspecialize factor_difference (x * xp + x1 * yp)specialize factor_difference (x * xn + x1 * yn)specialize factor_difference dapply factor_differencetrans c * (x * xp) + c * (x1 * yp)apply mul_addtrans (c * x) * xp + (c * x1) * ypcongrsymmapply mul_assocsymmapply mul_assoctrans a * xp + b * yprewrite ha_witnessrewrite hb_witnessrefltrans d + (a * xn + b * yn)exact htrans (a * xn + b * yn) + dapply add_commtrans ((c * x) * xn + (c * x1) * yn) + drewrite ha_witnessrewrite hb_witnessrefltrans (c * (x * xn) + c * (x1 * yn)) + dcongrcongrapply mul_assocapply mul_assocreflcongrsymmapply mul_addrefl
coprime_balanced_bezout · unchanged support, not a new admission
forall a b. (forall d. (exists x. a = d * x) -> (exists y. b = d * y) -> d = 1) -> exists xp yp xn yn. a * xp + b * yp = 1 + (a * xn + b * yn)
intro aintro bintro hcophave hgb : exists d. ((((exists x. a = d * x) /\ (exists y. b = d * y)) /\ forall c. (exists u. a = c * u) -> (exists v. b = c * v) -> exists w. d = c * w) /\ exists xp yp xn yn. a * xp + b * yp = d + (a * xn + b * yn))apply gcd_balanced_bezout_existscases hgbcases hgb_witnesscases hgb_witness_leftcases hgb_witness_left_lefthave hd : x = 1specialize hcop xapply hcopexact hgb_witness_left_left_leftexact hgb_witness_left_left_rightcases hgb_witness_rightcases hgb_witness_right_witnesscases hgb_witness_right_witness_witnesscases hgb_witness_right_witness_witness_witnessexists x1exists x2exists x3exists x4rewrite hd at hgb_witness_right_witness_witness_witness_witnessexact hgb_witness_right_witness_witness_witness_witness
gauss_coprime_cancel · unchanged support, not a new admission
forall a b z. (forall d. (exists x. a = d * x) -> (exists y. b = d * y) -> d = 1) -> (exists q. b * z = a * q) -> exists w. z = a * w
intro aintro bintro zintro hcopintro hdivhave hbez : exists xp yp xn yn. a * xp + b * yp = 1 + (a * xn + b * yn)apply coprime_balanced_bezoutexact hcopcases hbezcases hbez_witnesscases hbez_witness_witnesscases hbez_witness_witness_witnesshave hscaled : a * (x * z) + (b * z) * x1 = 1 * z + (a * (x2 * z) + (b * z) * x3)apply balanced_combination_scale_rightexact hbez_witness_witness_witness_witnessspecialize one_mul zrewrite one_mul at hscaledspecialize common_divisor_divides_balanced_result aspecialize common_divisor_divides_balanced_result aspecialize common_divisor_divides_balanced_result (b * z)specialize common_divisor_divides_balanced_result zspecialize common_divisor_divides_balanced_result (x * z)specialize common_divisor_divides_balanced_result x1specialize common_divisor_divides_balanced_result (x2 * z)specialize common_divisor_divides_balanced_result x3apply common_divisor_divides_balanced_resultspecialize multiple_refl aexact multiple_reflexact hdivexact hscaled
eq_decidable · unchanged support, not a new admission
forall a b. a = b \/ ~(a = b)
intro ainduction aintro binduction bleftreflrightintro happly PA1symmexact hintro binduction brightintro happly PA1exact hspecialize IH bcases IHleftcongrexact IH_leftrightintro happly IH_rightapply PA2exact h
prime_nonzero · unchanged support, not a new admission
forall p. (~(p = 1) /\ forall a b. p = a * b -> a = 1 \/ b = 1) -> ~(p = 0)
intro pintro hpintro hp0cases hpspecialize hp_right 0specialize hp_right 0have hunit : 0 = 1 \/ 0 = 1apply hp_rightrewrite hp0symmapply mul_zero_leftcases hunitspecialize succ_ne_zero 0apply succ_ne_zerosymmexact hunit_leftspecialize succ_ne_zero 0apply succ_ne_zerosymmexact hunit_right
prime_divisor_eq_one_or_self · unchanged support, not a new admission
forall p g. (~(p = 1) /\ forall c d. p = c * d -> c = 1 \/ d = 1) -> (exists x. p = g * x) -> g = 1 \/ p = g
intro pintro gintro hpintro hdivcases hpcases hdivspecialize hp_right gspecialize hp_right xhave hfactor : g = 1 \/ x = 1apply hp_rightexact hdiv_witnesscases hfactorleftexact hfactor_leftrighttrans g * xexact hdiv_witnessrewrite hfactor_rightapply mul_one
euclid_prime_dvd_product · unchanged support, not a new admission
forall p a b. (~(p = 1) /\ forall c d. p = c * d -> c = 1 \/ d = 1) -> (exists k. a * b = p * k) -> (exists u. a = p * u) \/ exists v. b = p * v
intro pintro aintro bintro hpintro habhave hg : exists g. (((exists x. p = g * x) /\ (exists y. a = g * y)) /\ forall c. (exists u. p = c * u) -> (exists v. a = c * v) -> exists w. g = c * w)apply gcd_exists_relationalcases hghave hgfull : (((exists u. p = x * u) /\ (exists v. a = x * v)) /\ forall c. (exists s. p = c * s) -> (exists t. a = c * t) -> exists w. x = c * w)exact hg_witnesscases hg_witnesscases hg_witness_lefthave hfactor : x = 1 \/ p = xspecialize prime_divisor_eq_one_or_self pspecialize prime_divisor_eq_one_or_self xapply prime_divisor_eq_one_or_selfexact hpexact hg_witness_left_leftcases hfactorrightapply gauss_coprime_cancelhave hcop : forall d. (exists u. p = d * u) -> (exists v. a = d * v) -> d = 1apply is_gcd_one_to_coprimehave hg1 : (((exists u. p = 1 * u) /\ (exists v. a = 1 * v)) /\ forall c. (exists s. p = c * s) -> (exists t. a = c * t) -> exists w. 1 = c * w)rewrite <- hfactor_leftrewrite <- hfactor_leftrewrite <- hfactor_leftexact hgfullexact hg1exact hcopexact hableftcases hg_witness_left_rightexists x1rewrite hfactor_rightexact hg_witness_left_right_witness
mod_eq_refl · unchanged support, not a new admission
forall m a. exists u v. a + m * u = a + m * v
intro mintro aexists 0exists 0refl
mod_eq_symm · unchanged support, not a new admission
forall m a b. (exists u v. a + m * u = b + m * v) -> exists r s. b + m * r = a + m * s
intro mintro aintro bintro hcases hcases h_witnessexists x1exists xsymmexact h_witness_witness
mod_eq_trans · unchanged support, not a new admission
forall m a b c. (exists u v. a + m * u = b + m * v) -> (exists r s. b + m * r = c + m * s) -> exists x y. a + m * x = c + m * y
intro mintro aintro bintro cintro habintro hbccases habcases hab_witnesscases hbccases hbc_witnessexists x + x2exists x3 + x1trans a + (m * x + m * x2)congrreflapply mul_addtrans (a + m * x) + m * x2symmapply add_assoctrans (b + m * x1) + m * x2congrexact hab_witness_witnessrefltrans b + (m * x1 + m * x2)apply add_assoctrans b + (m * x2 + m * x1)congrreflapply add_commtrans (b + m * x2) + m * x1symmapply add_assoctrans (c + m * x3) + m * x1congrexact hbc_witness_witnessrefltrans c + (m * x3 + m * x1)apply add_assoccongrreflsymmapply mul_add
mod_eq_add · unchanged support, not a new admission
forall m a b c d. (exists u v. a + m * u = b + m * v) -> (exists r s. c + m * r = d + m * s) -> exists x y. (a + c) + m * x = (b + d) + m * y
intro mintro aintro bintro cintro dintro habintro hcdcases habcases hab_witnesscases hcdcases hcd_witnessexists x2 + xexists x3 + x1trans (a + c) + (m * x2 + m * x)congrreflapply mul_addtrans (m * x2 + c) + (a + m * x)apply add_permute_outertrans (c + m * x2) + (a + m * x)congrapply add_commrefltrans (a + m * x) + (c + m * x2)apply add_commtrans (b + m * x1) + (d + m * x3)congrexact hab_witness_witnessexact hcd_witness_witnesstrans (d + m * x3) + (b + m * x1)apply add_commtrans (m * x3 + d) + (b + m * x1)congrapply add_commrefltrans (b + d) + (m * x3 + m * x1)symmapply add_permute_outercongrreflsymmapply mul_add
mod_eq_mul_right · unchanged support, not a new admission
forall m a b c. (exists u v. a + m * u = b + m * v) -> exists r s. (a * c) + m * r = (b * c) + m * s
intro mintro aintro bintro cintro hcases hcases h_witnessexists x * cexists x1 * ctrans a * c + (m * x) * ccongrreflsymmapply mul_assoctrans (a + m * x) * csymmapply add_multrans (b + m * x1) * ccongrexact h_witness_witnessrefltrans b * c + (m * x1) * capply add_mulcongrreflapply mul_assoc
mod_eq_mul_left · unchanged support, not a new admission
forall m a b c. (exists u v. a + m * u = b + m * v) -> exists r s. (c * a) + m * r = (c * b) + m * s
intro mintro aintro bintro cintro hspecialize mod_eq_mul_right mspecialize mod_eq_mul_right aspecialize mod_eq_mul_right bspecialize mod_eq_mul_right chave hr : exists r s. (a * c) + m * r = (b * c) + m * sapply mod_eq_mul_rightexact hcases hrcases hr_witnessexists xexists x1trans a * c + m * xcongrapply mul_commrefltrans b * c + m * x1exact hr_witness_witnesscongrapply mul_commrefl
mod_eq_mul · unchanged support, not a new admission
forall m a b c d. (exists u v. a + m * u = b + m * v) -> (exists r s. c + m * r = d + m * s) -> exists x y. (a * c) + m * x = (b * d) + m * y
intro mintro aintro bintro cintro dintro habintro hcdhave hacbc : exists r s. (a * c) + m * r = (b * c) + m * sspecialize mod_eq_mul_right mspecialize mod_eq_mul_right aspecialize mod_eq_mul_right bspecialize mod_eq_mul_right capply mod_eq_mul_rightexact habhave hbcbd : exists r s. (b * c) + m * r = (b * d) + m * sspecialize mod_eq_mul_left mspecialize mod_eq_mul_left cspecialize mod_eq_mul_left dspecialize mod_eq_mul_left bapply mod_eq_mul_leftexact hcdspecialize mod_eq_trans mspecialize mod_eq_trans (a * c)specialize mod_eq_trans (b * c)specialize mod_eq_trans (b * d)apply mod_eq_transexact hacbcexact hbcbd
remainder_decomposition_to_mod_eq · unchanged support, not a new admission
forall m b q x. b = q * m + x -> exists u v. b + m * u = x + m * v
intro mintro bintro qintro xintro hexists 0exists qrewrite PA5rewrite PA3trans q * m + xexact htrans x + q * mapply add_commcongrreflapply mul_comm
mod_eq_bounded_unique · unchanged support, not a new admission
forall m a b. (exists ha. ha + S a = m) -> (exists hb. hb + S b = m) -> (exists u v. a + m * u = b + m * v) -> a = b
intro mintro aintro bintro haintro hbintro habcases habcases hab_witnesshave hda : a + m * x = m * x + aapply add_commhave hdb : a + m * x = m * x1 + btrans b + m * x1exact hab_witness_witnessapply add_commspecialize division_remainder_unique mspecialize division_remainder_unique (a + m * x)specialize division_remainder_unique xspecialize division_remainder_unique aspecialize division_remainder_unique x1specialize division_remainder_unique bhave huniq : x = x1 /\ a = bapply division_remainder_uniqueexact hdaexact haexact hdbexact hbcases huniqexact huniq_right
mod_eq_to_remainder_decomposition · unchanged support, not a new admission
forall m b x. ~(m = 0) -> (exists h. h + S x = m) -> (exists u v. b + m * u = x + m * v) -> exists q. b = q * m + x
intro mintro bintro xintro hmintro hxintro hbxhave hdiv : exists q r. b = m * q + r /\ exists h. h + S r = mspecialize division_remainder_exists mspecialize division_remainder_exists bapply division_remainder_existsexact hmcases hdivcases hdiv_witnesscases hdiv_witness_witnesshave hremb : exists u v. x2 + m * u = b + m * vexists x1exists 0trans m * x1 + x2apply add_commtrans bsymmexact hdiv_witness_witness_leftsymmrewrite PA5apply PA3have hremx : exists u v. x2 + m * u = x + m * vspecialize mod_eq_trans mspecialize mod_eq_trans x2specialize mod_eq_trans bspecialize mod_eq_trans xapply mod_eq_transexact hrembexact hbxhave hrx : x2 = xspecialize mod_eq_bounded_unique mspecialize mod_eq_bounded_unique x2specialize mod_eq_bounded_unique xapply mod_eq_bounded_uniqueexact hdiv_witness_witness_rightexact hxexact hremxexists x1trans m * x1 + x2exact hdiv_witness_witness_lefttrans x1 * m + x2congrapply mul_commreflcongrreflexact hrx
beta_modulus_nonzero · unchanged support, not a new admission
forall c i. ~(S ((S i) * c) = 0)
intro cintro ispecialize succ_ne_zero ((S i) * c)exact succ_ne_zero
beta_at_self_of_bound · unchanged support, not a new admission
forall c i x. (exists h. h + S x = S ((S i) * c)) -> ((exists h. h + S x = S ((S i) * c)) /\ exists q. x = q * S ((S i) * c) + x)
intro cintro iintro xintro hxsplitexact hxexists 0specialize mul_zero_left (S ((S i) * c))rewrite mul_zero_leftspecialize zero_add xrewrite zero_addrefl
beta_at_exists · unchanged support, not a new admission
forall b c i. exists x. ((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x)
intro bintro cintro ihave hm0 : ~(S ((S i) * c) = 0)specialize beta_modulus_nonzero cspecialize beta_modulus_nonzero iexact beta_modulus_nonzerospecialize division_remainder_exists (S ((S i) * c))specialize division_remainder_exists bhave hdiv : exists q r. b = S ((S i) * c) * q + r /\ exists h. h + S r = S ((S i) * c)apply division_remainder_existsexact hm0cases hdivcases hdiv_witnesscases hdiv_witness_witnessexists x1splitexact hdiv_witness_witness_rightexists xtrans S ((S i) * c) * x + x1exact hdiv_witness_witness_leftcongrapply mul_commrefl
beta_at_unique · unchanged support, not a new admission
forall b c i x y. ((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x) -> ((exists h. h + S y = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + y) -> x = y
intro bintro cintro iintro xintro yintro hxintro hycases hxcases hycases hx_rightcases hy_righthave hdx : b = S ((S i) * c) * x1 + xtrans x1 * S ((S i) * c) + xexact hx_right_witnesscongrapply mul_commreflhave hdy : b = S ((S i) * c) * x2 + ytrans x2 * S ((S i) * c) + yexact hy_right_witnesscongrapply mul_commreflspecialize division_remainder_unique (S ((S i) * c))specialize division_remainder_unique bspecialize division_remainder_unique x1specialize division_remainder_unique xspecialize division_remainder_unique x2specialize division_remainder_unique yhave huniq : x1 = x2 /\ x = yapply division_remainder_uniqueexact hdxexact hx_leftexact hdyexact hy_leftcases huniqexact huniq_right
beta_at_of_mod_eq_bound · unchanged support, not a new admission
forall b c i x. (exists h. h + S x = S ((S i) * c)) -> (exists u v. b + S ((S i) * c) * u = x + S ((S i) * c) * v) -> ((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x)
intro bintro cintro iintro xintro hxintro hmodsplitexact hxspecialize mod_eq_to_remainder_decomposition (S ((S i) * c))specialize mod_eq_to_remainder_decomposition bspecialize mod_eq_to_remainder_decomposition xapply mod_eq_to_remainder_decompositionspecialize beta_modulus_nonzero cspecialize beta_modulus_nonzero iexact beta_modulus_nonzeroexact hxexact hmod
dvd_to_mod_zero · unchanged support, not a new admission
forall m a. (exists k. a = m * k) -> exists u v. a + m * u = 0 + m * v
intro mintro aintro hcases hexists 0exists xrewrite h_witnesssimp [zero_add]
bezout_mod_left · unchanged support, not a new admission
forall m n xp yp xn yn. m * xp + n * yp = 1 + (m * xn + n * yn) -> exists u v. n * yp + m * u = (1 + n * yn) + m * v
intro mintro nintro xpintro ypintro xnintro ynintro hexists xpexists xntrans m * xp + n * ypapply add_commtrans 1 + (m * xn + n * yn)exact htrans 1 + (n * yn + m * xn)congrreflapply add_commsymmapply add_assoc
bezout_mod_right · unchanged support, not a new admission
forall m n xp yp xn yn. m * xp + n * yp = 1 + (m * xn + n * yn) -> exists u v. m * xp + n * u = (1 + m * xn) + n * v
intro mintro nintro xpintro ypintro xnintro ynintro hexists ypexists yntrans 1 + (m * xn + n * yn)exact hsymmapply add_assoc
mod_eq_predecessor_cancel · unchanged support, not a new admission
forall k a z. exists u v. ((a + z) + k * z) + S k * u = a + S k * v
intro kintro aintro zexists 0exists zrewrite PA5rewrite PA3specialize mul_succ_left kspecialize mul_succ_left zrewrite mul_succ_lefttrans a + (z + k * z)apply add_assoccongrreflapply add_comm
binary_crt · unchanged support, not a new admission
forall m n a b. ~(m = 0) -> ~(n = 0) -> (forall d. (exists u. m = d * u) -> (exists v. n = d * v) -> d = 1) -> exists x. (exists u v. x + m * u = a + m * v) /\ (exists r s. x + n * r = b + n * s)
intro mintro nintro aintro bintro hmintro hnintro hcophave hms : exists k. m = S kspecialize nonzero_is_succ mapply nonzero_is_succexact hmhave hns : exists k. n = S kspecialize nonzero_is_succ napply nonzero_is_succexact hnhave hbez : exists xp yp xn yn. m * xp + n * yp = 1 + (m * xn + n * yn)specialize coprime_balanced_bezout mspecialize coprime_balanced_bezout napply coprime_balanced_bezoutexact hcopcases hmscases hnscases hbezcases hbez_witnesscases hbez_witness_witnesscases hbez_witness_witness_witnesshave hbl : exists u v. n * x3 + m * u = (1 + n * x5) + m * vspecialize bezout_mod_left mspecialize bezout_mod_left nspecialize bezout_mod_left x2specialize bezout_mod_left x3specialize bezout_mod_left x4specialize bezout_mod_left x5apply bezout_mod_leftexact hbez_witness_witness_witness_witnesshave hbr : exists u v. m * x2 + n * u = (1 + m * x4) + n * vspecialize bezout_mod_right mspecialize bezout_mod_right nspecialize bezout_mod_right x2specialize bezout_mod_right x3specialize bezout_mod_right x4specialize bezout_mod_right x5apply bezout_mod_rightexact hbez_witness_witness_witness_witnesshave hal0 : exists u v. (a * (n * x3)) + m * u = (a * (1 + n * x5)) + m * vspecialize mod_eq_mul_left mspecialize mod_eq_mul_left (n * x3)specialize mod_eq_mul_left (1 + n * x5)specialize mod_eq_mul_left aapply mod_eq_mul_leftexact hblhave hal : exists u v. (a * (n * x3)) + m * u = (a + a * (n * x5)) + m * vhave haexpand : a * (1 + n * x5) = a + a * (n * x5)trans a * 1 + a * (n * x5)apply mul_addcongrapply mul_onereflrewrite <- haexpandexact hal0have hbm : exists u v. (b * (m * x2)) + m * u = 0 + m * vapply dvd_to_mod_zeroexists b * x2trans (b * m) * x2symmapply mul_assoctrans (m * b) * x2congrapply mul_commreflapply mul_assochave hym : exists u v. ((a * (n * x3)) + (b * (m * x2))) + m * u = ((a + a * (n * x5)) + 0) + m * vspecialize mod_eq_add mspecialize mod_eq_add (a * (n * x3))specialize mod_eq_add (a + a * (n * x5))specialize mod_eq_add (b * (m * x2))specialize mod_eq_add 0apply mod_eq_addexact halexact hbmhave hym_norm : exists u v. ((a * (n * x3)) + (b * (m * x2))) + m * u = (a + a * (n * x5)) + m * vhave hym_zero : (a + a * (n * x5)) + 0 = a + a * (n * x5)rewrite PA3reflrewrite <- hym_zeroexact hymhave hkm : exists u v. (x * (a * (n * x5))) + m * u = (x * (a * (n * x5))) + m * vspecialize mod_eq_refl mspecialize mod_eq_refl (x * (a * (n * x5)))apply mod_eq_reflhave hymk : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + m * u = ((a + a * (n * x5)) + (x * (a * (n * x5)))) + m * vspecialize mod_eq_add mspecialize mod_eq_add ((a * (n * x3)) + (b * (m * x2)))specialize mod_eq_add (a + a * (n * x5))specialize mod_eq_add (x * (a * (n * x5)))specialize mod_eq_add (x * (a * (n * x5)))apply mod_eq_addexact hym_normexact hkmhave hcancelm : exists u v. ((a + a * (n * x5)) + x * (a * (n * x5))) + S x * u = a + S x * vspecialize mod_eq_predecessor_cancel xspecialize mod_eq_predecessor_cancel aspecialize mod_eq_predecessor_cancel (a * (n * x5))apply mod_eq_predecessor_cancelrewrite <- hms_witness at hcancelmrewrite <- hms_witness at hcancelmhave hbasem : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + m * u = a + m * vspecialize mod_eq_trans mspecialize mod_eq_trans (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5))))specialize mod_eq_trans ((a + a * (n * x5)) + (x * (a * (n * x5))))specialize mod_eq_trans aapply mod_eq_transexact hymkexact hcancelmhave hknznm : exists u v. (x1 * (b * (m * x4))) + m * u = 0 + m * vapply dvd_to_mod_zeroexists x1 * (b * x4)trans x1 * ((b * m) * x4)congrreflsymmapply mul_assoctrans x1 * ((m * b) * x4)congrreflcongrapply mul_commrefltrans x1 * (m * (b * x4))congrreflapply mul_assoctrans (x1 * m) * (b * x4)symmapply mul_assoctrans (m * x1) * (b * x4)congrapply mul_commreflapply mul_assochave hfinalm0 : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + m * u = (a + 0) + m * vspecialize mod_eq_add mspecialize mod_eq_add (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5))))specialize mod_eq_add aspecialize mod_eq_add (x1 * (b * (m * x4)))specialize mod_eq_add 0apply mod_eq_addexact hbasemexact hknznmhave hazerom : exists u v. (a + 0) + m * u = a + m * vexists 0exists 0simphave hfinalm : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + m * u = a + m * vspecialize mod_eq_trans mspecialize mod_eq_trans ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4))))specialize mod_eq_trans (a + 0)specialize mod_eq_trans aapply mod_eq_transexact hfinalm0exact hazeromhave hbn0 : exists u v. (b * (m * x2)) + n * u = (b * (1 + m * x4)) + n * vspecialize mod_eq_mul_left nspecialize mod_eq_mul_left (m * x2)specialize mod_eq_mul_left (1 + m * x4)specialize mod_eq_mul_left bapply mod_eq_mul_leftexact hbrhave hbn : exists u v. (b * (m * x2)) + n * u = (b + b * (m * x4)) + n * vhave hbexpand : b * (1 + m * x4) = b + b * (m * x4)trans b * 1 + b * (m * x4)apply mul_addcongrapply mul_onereflrewrite <- hbexpandexact hbn0have han : exists u v. (a * (n * x3)) + n * u = 0 + n * vapply dvd_to_mod_zeroexists a * x3trans (a * n) * x3symmapply mul_assoctrans (n * a) * x3congrapply mul_commreflapply mul_assochave hyn0 : exists u v. ((a * (n * x3)) + (b * (m * x2))) + n * u = (0 + (b + b * (m * x4))) + n * vspecialize mod_eq_add nspecialize mod_eq_add (a * (n * x3))specialize mod_eq_add 0specialize mod_eq_add (b * (m * x2))specialize mod_eq_add (b + b * (m * x4))apply mod_eq_addexact hanexact hbnhave hyn_norm : exists u v. ((a * (n * x3)) + (b * (m * x2))) + n * u = (b + b * (m * x4)) + n * vhave hyn_zero : 0 + (b + b * (m * x4)) = b + b * (m * x4)specialize zero_add (b + b * (m * x4))exact zero_addrewrite <- hyn_zeroexact hyn0have hkmz : exists u v. (x * (a * (n * x5))) + n * u = 0 + n * vapply dvd_to_mod_zeroexists x * (a * x5)trans x * ((a * n) * x5)congrreflsymmapply mul_assoctrans x * ((n * a) * x5)congrreflcongrapply mul_commrefltrans x * (n * (a * x5))congrreflapply mul_assoctrans (x * n) * (a * x5)symmapply mul_assoctrans (n * x) * (a * x5)congrapply mul_commreflapply mul_assochave hyn1 : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + n * u = ((b + b * (m * x4)) + 0) + n * vspecialize mod_eq_add nspecialize mod_eq_add ((a * (n * x3)) + (b * (m * x2)))specialize mod_eq_add (b + b * (m * x4))specialize mod_eq_add (x * (a * (n * x5)))specialize mod_eq_add 0apply mod_eq_addexact hyn_normexact hkmzhave hyn1_norm : exists u v. (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + n * u = (b + b * (m * x4)) + n * vhave hyn1_zero : (b + b * (m * x4)) + 0 = b + b * (m * x4)rewrite PA3reflrewrite <- hyn1_zeroexact hyn1have hkn : exists u v. (x1 * (b * (m * x4))) + n * u = (x1 * (b * (m * x4))) + n * vspecialize mod_eq_refl nspecialize mod_eq_refl (x1 * (b * (m * x4)))apply mod_eq_reflhave hynk : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + n * u = ((b + b * (m * x4)) + (x1 * (b * (m * x4)))) + n * vspecialize mod_eq_add nspecialize mod_eq_add (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5))))specialize mod_eq_add (b + b * (m * x4))specialize mod_eq_add (x1 * (b * (m * x4)))specialize mod_eq_add (x1 * (b * (m * x4)))apply mod_eq_addexact hyn1_normexact hknhave hcanceln : exists u v. ((b + b * (m * x4)) + x1 * (b * (m * x4))) + S x1 * u = b + S x1 * vspecialize mod_eq_predecessor_cancel x1specialize mod_eq_predecessor_cancel bspecialize mod_eq_predecessor_cancel (b * (m * x4))apply mod_eq_predecessor_cancelrewrite <- hns_witness at hcancelnrewrite <- hns_witness at hcancelnhave hfinaln : exists u v. ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))) + n * u = b + n * vspecialize mod_eq_trans nspecialize mod_eq_trans ((((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4))))specialize mod_eq_trans ((b + b * (m * x4)) + (x1 * (b * (m * x4))))specialize mod_eq_trans bapply mod_eq_transexact hynkexact hcancelnexists (((a * (n * x3)) + (b * (m * x2))) + (x * (a * (n * x5)))) + (x1 * (b * (m * x4)))splitexact hfinalmexact hfinaln
beta_modulus_coprime_base · unchanged support, not a new admission
forall c k d. (exists u. S (k * c) = d * u) -> (exists v. c = d * v) -> d = 1
intro cintro kintro dintro hmintro hchave hstep : S (k * c) = c * k + 1simp [mul_comm]have h1 : exists w. 1 = d * wspecialize divides_remainder dspecialize divides_remainder (S (k * c))specialize divides_remainder cspecialize divides_remainder kspecialize divides_remainder 1apply divides_remainderexact hmexact hcexact hstepspecialize divisor_one dapply divisor_oneexact h1
common_divisor_beta_moduli_divides_gap_times_c · unchanged support, not a new admission
forall c i j gap d. j = i + gap -> (exists u. S ((S i) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> exists w. gap * c = d * w
intro cintro iintro jintro gapintro dintro hijintro hmiintro hmjhave hstep : S ((S j) * c) = S ((S i) * c) * 1 + gap * crewrite hijspecialize add_succ_left ispecialize add_succ_left gaprewrite <- add_succ_leftsimp [add_mul, zero_add]symmspecialize add_succ_left_before (S i * c)specialize add_succ_left_before (gap * c)exact add_succ_left_beforespecialize divides_remainder dspecialize divides_remainder (S ((S j) * c))specialize divides_remainder (S ((S i) * c))specialize divides_remainder 1specialize divides_remainder (gap * c)apply divides_remainderexact hmjexact hmiexact hstep
beta_moduli_coprime_of_gap_dvd · unchanged support, not a new admission
forall c i j gap. j = i + gap -> (exists k. c = gap * k) -> forall d. (exists u. S ((S i) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1
intro cintro iintro jintro gapintro hijintro hgapcintro dintro hmiintro hmjhave hcopdc : forall e. (exists u. d = e * u) -> (exists v. c = e * v) -> e = 1intro eintro hedintro hechave hmei : exists u. S ((S i) * c) = e * uspecialize multiple_trans dspecialize multiple_trans especialize multiple_trans (S ((S i) * c))apply multiple_transexact hmiexact hedspecialize beta_modulus_coprime_base cspecialize beta_modulus_coprime_base (S i)specialize beta_modulus_coprime_base eapply beta_modulus_coprime_baseexact hmeiexact hechave hgapprod : exists w. gap * c = d * wspecialize common_divisor_beta_moduli_divides_gap_times_c cspecialize common_divisor_beta_moduli_divides_gap_times_c ispecialize common_divisor_beta_moduli_divides_gap_times_c jspecialize common_divisor_beta_moduli_divides_gap_times_c gapspecialize common_divisor_beta_moduli_divides_gap_times_c dapply common_divisor_beta_moduli_divides_gap_times_cexact hijexact hmiexact hmjcases hgapprodhave hdivgap : exists w. gap = d * wspecialize gauss_coprime_cancel dspecialize gauss_coprime_cancel cspecialize gauss_coprime_cancel gapapply gauss_coprime_cancelexact hcopdcexists xtrans gap * capply mul_commexact hgapprod_witnesshave hdc : exists w. c = d * wspecialize multiple_trans gapspecialize multiple_trans dspecialize multiple_trans capply multiple_transexact hgapcexact hdivgapspecialize hcopdc dapply hcopdcspecialize multiple_refl dexact multiple_reflexact hdc
bounded_common_multiple_step · unchanged support, not a new admission
forall B c. ~(c = 0) -> (forall t. (exists h. S t + S h = S B) -> exists k. c = S t * k) -> exists c2. (~(c2 = 0) /\ forall t. (exists h. S t + S h = S (S B)) -> exists k. c2 = S t * k)
intro Bintro cintro hcintro hallexists c * S Bsplithave hSB : ~(S B = 0)specialize succ_ne_zero Bexact succ_ne_zerohave hprod : ~(c * S B = 0)intro hzerohave hz : c = 0 \/ S B = 0specialize mul_eq_zero cspecialize mul_eq_zero (S B)apply mul_eq_zeroexact hzerocases hzapply hcexact hz_leftapply hSBexact hz_rightexact hprodintro tintro htcases htspecialize zero_or_succ xcases zero_or_succrewrite zero_or_succ_left at ht_witnesshave hteq : S t = S Brewrite PA4 at ht_witnessrewrite PA3 at ht_witnessapply PA2exact ht_witnessexists crewrite hteqapply mul_commcases zero_or_succ_righthave hprev : exists h. S t + S h = S Bexists x1rewrite zero_or_succ_right_witness at ht_witnessrewrite PA4 at ht_witnessapply PA2exact ht_witnesshave hdivc : exists k. c = S t * kspecialize hall tapply hallexact hprevspecialize multiple_mul_right (S t)specialize multiple_mul_right cspecialize multiple_mul_right (S B)apply multiple_mul_rightexact hdivc
bounded_common_multiple_exists · unchanged support, not a new admission
forall B. exists c. (~(c = 0) /\ forall t. (exists h. S t + S h = S B) -> exists k. c = S t * k)
intro Binduction Bexists 1splitspecialize succ_ne_zero 0exact succ_ne_zerointro tintro htcases htexfalsohave hz : S t + x = 0rewrite PA4 at ht_witnessapply PA2exact ht_witnesshave hst0 : S t = 0specialize add_eq_zero_left (S t)specialize add_eq_zero_left xapply add_eq_zero_leftexact hzspecialize succ_ne_zero tapply succ_ne_zeroexact hst0cases IHcases IH_witnessspecialize bounded_common_multiple_step Bspecialize bounded_common_multiple_step xapply bounded_common_multiple_stepexact IH_witness_leftexact IH_witness_right
beta_moduli_coprime_of_lt_bounded_common_multiple · unchanged support, not a new admission
forall B c i j. (forall t. (exists h. S t + S h = S B) -> exists k. c = S t * k) -> (exists g. g + S i = j) -> (exists h. h + j = B) -> forall d. (exists u. S ((S i) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1
intro Bintro cintro iintro jintro hcmintro hltintro hjBintro dintro hdiintro hdjcases hlthave hij : j = i + S xsymmtrans x + S isimp [add_comm]exact hlt_witnesshave hgaple : exists r. r + S x = Bspecialize le_trans (S x)specialize le_trans jspecialize le_trans Bapply le_transexists isymmexact hijexact hjBcases hgaplehave hgapbound : exists h. S x + S h = S Bexists x1rewrite PA4congrtrans x1 + S xapply add_commexact hgaple_witnesshave hgapdvd : exists k. c = S x * kspecialize hcm xapply hcmexact hgapboundhave hcop : forall e. (exists u. S ((S i) * c) = e * u) -> (exists v. S ((S j) * c) = e * v) -> e = 1specialize beta_moduli_coprime_of_gap_dvd cspecialize beta_moduli_coprime_of_gap_dvd ispecialize beta_moduli_coprime_of_gap_dvd jspecialize beta_moduli_coprime_of_gap_dvd (S x)apply beta_moduli_coprime_of_gap_dvdexact hijexact hgapdvdspecialize hcop dapply hcopexact hdiexact hdj
beta_moduli_pairwise_coprime_bounded · unchanged support, not a new admission
forall B c. (forall t. (exists h. S t + S h = S B) -> exists k. c = S t * k) -> forall i j. ~(i = j) -> (exists hi. hi + i = B) -> (exists hj. hj + j = B) -> forall d. (exists u. S ((S i) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1
intro Bintro cintro hcmintro iintro jintro hneintro hiBintro hjBintro dintro hdiintro hdjspecialize lt_trichotomy ispecialize lt_trichotomy jcases lt_trichotomyexfalsoapply hneexact lt_trichotomy_leftcases lt_trichotomy_righthave hcopij : forall e. (exists u. S ((S i) * c) = e * u) -> (exists v. S ((S j) * c) = e * v) -> e = 1specialize beta_moduli_coprime_of_lt_bounded_common_multiple Bspecialize beta_moduli_coprime_of_lt_bounded_common_multiple cspecialize beta_moduli_coprime_of_lt_bounded_common_multiple ispecialize beta_moduli_coprime_of_lt_bounded_common_multiple japply beta_moduli_coprime_of_lt_bounded_common_multipleexact hcmexact lt_trichotomy_right_leftexact hjBspecialize hcopij dapply hcopijexact hdiexact hdjhave hcopji : forall e. (exists u. S ((S j) * c) = e * u) -> (exists v. S ((S i) * c) = e * v) -> e = 1specialize beta_moduli_coprime_of_lt_bounded_common_multiple Bspecialize beta_moduli_coprime_of_lt_bounded_common_multiple cspecialize beta_moduli_coprime_of_lt_bounded_common_multiple jspecialize beta_moduli_coprime_of_lt_bounded_common_multiple iapply beta_moduli_coprime_of_lt_bounded_common_multipleexact hcmexact lt_trichotomy_right_rightexact hiBspecialize hcopji dapply hcopjiexact hdjexact hdi
coprime_mul_left · unchanged support, not a new admission
forall a b n. (forall d. (exists x. a = d * x) -> (exists y. n = d * y) -> d = 1) -> (forall d. (exists x. b = d * x) -> (exists y. n = d * y) -> d = 1) -> forall d. (exists x. a * b = d * x) -> (exists y. n = d * y) -> d = 1
intro aintro bintro nintro hanintro hbnintro dintro habintro hdnhave hda : forall e. (exists u. d = e * u) -> (exists v. a = e * v) -> e = 1intro eintro hedintro heahave hen : exists q. n = e * qspecialize multiple_trans dspecialize multiple_trans especialize multiple_trans napply multiple_transexact hdnexact hedspecialize han eapply hanexact heaexact henhave hdb : exists w. b = d * wspecialize gauss_coprime_cancel dspecialize gauss_coprime_cancel aspecialize gauss_coprime_cancel bapply gauss_coprime_cancelexact hdaexact habspecialize hbn dapply hbnexact hdbexact hdn
mod_eq_of_mod_eq_multiple · unchanged support, not a new admission
forall m P x a. (exists k. P = m * k) -> (exists u v. x + P * u = a + P * v) -> exists r s. x + m * r = a + m * s
intro mintro Pintro xintro aintro hdivintro hmodcases hdivcases hmodcases hmod_witnessrewrite hdiv_witness at hmod_witness_witnessrewrite hdiv_witness at hmod_witness_witnessexists x1 * x2exists x1 * x3trans x + (m * x1) * x2congrreflsymmapply mul_assoctrans a + (m * x1) * x3exact hmod_witness_witnesscongrreflapply mul_assoc
binary_crt_fold_step · unchanged support, not a new admission
forall P n x b. ~(P = 0) -> ~(n = 0) -> (forall d. (exists u. P = d * u) -> (exists v. n = d * v) -> d = 1) -> exists z. ((forall m a. (exists k. P = m * k) -> (exists u v. x + m * u = a + m * v) -> exists r s. z + m * r = a + m * s) /\ exists q r. z + n * q = b + n * r)
intro Pintro nintro xintro bintro hPintro hnintro hcophave hcrt : exists z. (exists u v. z + P * u = x + P * v) /\ (exists q r. z + n * q = b + n * r)specialize binary_crt Pspecialize binary_crt nspecialize binary_crt xspecialize binary_crt bapply binary_crtexact hPexact hnexact hcopcases hcrtcases hcrt_witnessexists x1splitintro mintro aintro hmPintro hxahave hzx : exists u v. x1 + m * u = x + m * vspecialize mod_eq_of_mod_eq_multiple mspecialize mod_eq_of_mod_eq_multiple Pspecialize mod_eq_of_mod_eq_multiple x1specialize mod_eq_of_mod_eq_multiple xapply mod_eq_of_mod_eq_multipleexact hmPexact hcrt_witness_leftspecialize mod_eq_trans mspecialize mod_eq_trans x1specialize mod_eq_trans xspecialize mod_eq_trans aapply mod_eq_transexact hzxexact hxaexact hcrt_witness_right
right_factor_divides_product · unchanged support, not a new admission
forall a b. exists k. a * b = b * k
intro aintro bexists aapply mul_comm
beta_value_le_code · unchanged support, not a new admission
forall b c i x. ((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x) -> exists h. h + x = b
intro bintro cintro iintro xintro hatcases hatcases hat_rightexists x1 * S ((S i) * c)symmexact hat_right_witness
base_le_beta_modulus · unchanged support, not a new admission
forall c i. exists h. h + c = S ((S i) * c)
intro cintro ihave hproduct : exists h. h + c = S i * cspecialize mul_succ_left ispecialize mul_succ_left crewrite mul_succ_leftspecialize le_add_left cspecialize le_add_left (i * c)exact le_add_leftspecialize le_succ cspecialize le_succ (S i * c)apply le_succexact hproduct
le_scaled_nonzero · unchanged support, not a new admission
forall C B. ~(C = 0) -> exists h. h + B = C * B
intro Cintro Bintro hChave h1C : exists h. h + 1 = Cspecialize one_le_of_ne_zero Capply one_le_of_ne_zeroexact hChave hscaled : exists h. h + 1 * B = C * Bspecialize mul_le_mul_right 1specialize mul_le_mul_right Cspecialize mul_le_mul_right Bapply mul_le_mul_rightexact h1Cspecialize one_mul Brewrite one_mul at hscaledexact hscaled
scaled_bounded_common_multiple · unchanged support, not a new admission
forall N C B. (forall t. (exists h. S t + S h = S N) -> exists q. C = S t * q) -> forall t. (exists h. S t + S h = S N) -> exists q. C * B = S t * q
intro Nintro Cintro Bintro hcmintro tintro hthave htC : exists q. C = S t * qspecialize hcm tapply hcmexact htspecialize multiple_mul_right (S t)specialize multiple_mul_right Cspecialize multiple_mul_right Bapply multiple_mul_rightexact htC
beta_value_lt_scaled_base · unchanged support, not a new admission
forall b c i x C s j. ((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x) -> ~(C = 0) -> exists h. h + S x = S ((S j) * (C * S (b + s)))
intro bintro cintro iintro xintro Cintro sintro jintro hatintro hChave hxb : exists h. h + x = bspecialize beta_value_le_code bspecialize beta_value_le_code cspecialize beta_value_le_code ispecialize beta_value_le_code xapply beta_value_le_codeexact hathave hbs : exists h. h + b = b + sspecialize le_add_right bspecialize le_add_right sexact le_add_righthave hxs : exists h. h + x = b + sspecialize le_trans xspecialize le_trans bspecialize le_trans (b + s)apply le_transexact hxbexact hbshave hsx : exists h. h + S x = S (b + s)specialize succ_le_succ xspecialize succ_le_succ (b + s)apply succ_le_succexact hxshave hscale : exists h. h + S (b + s) = C * S (b + s)specialize le_scaled_nonzero Cspecialize le_scaled_nonzero (S (b + s))apply le_scaled_nonzeroexact hChave hxbase : exists h. h + S x = C * S (b + s)specialize le_trans (S x)specialize le_trans (S (b + s))specialize le_trans (C * S (b + s))apply le_transexact hsxexact hscalehave hmod : exists h. h + C * S (b + s) = S ((S j) * (C * S (b + s)))specialize base_le_beta_modulus (C * S (b + s))specialize base_le_beta_modulus jexact base_le_beta_modulusspecialize le_trans (S x)specialize le_trans (C * S (b + s))specialize le_trans (S ((S j) * (C * S (b + s))))apply le_transexact hxbaseexact hmod
new_value_lt_scaled_base · unchanged support, not a new admission
forall b s C j. ~(C = 0) -> exists h. h + S s = S ((S j) * (C * S (b + s)))
intro bintro sintro Cintro jintro hChave hsb : exists h. h + s = b + sspecialize le_add_left sspecialize le_add_left bexact le_add_lefthave hss : exists h. h + S s = S (b + s)specialize succ_le_succ sspecialize succ_le_succ (b + s)apply succ_le_succexact hsbhave hscale : exists h. h + S (b + s) = C * S (b + s)specialize le_scaled_nonzero Cspecialize le_scaled_nonzero (S (b + s))apply le_scaled_nonzeroexact hChave hsbase : exists h. h + S s = C * S (b + s)specialize le_trans (S s)specialize le_trans (S (b + s))specialize le_trans (C * S (b + s))apply le_transexact hssexact hscalehave hmod : exists h. h + C * S (b + s) = S ((S j) * (C * S (b + s)))specialize base_le_beta_modulus (C * S (b + s))specialize base_le_beta_modulus jexact base_le_beta_modulusspecialize le_trans (S s)specialize le_trans (C * S (b + s))specialize le_trans (S ((S j) * (C * S (b + s))))apply le_transexact hsbaseexact hmod
beta_exclusive_accumulated_product_step · unchanged support, not a new admission
forall N c k P. (forall t. (exists h. S t + S h = S N) -> exists q. c = S t * q) -> (exists h. h + S k = N) -> ~(P = 0) -> (forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * c) * q) -> (forall j. (exists g. g + k = j) -> (exists h. h + j = N) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1) -> (~(P * S ((S k) * c) = 0) /\ ((forall i. (exists h. h + S i = S k) -> exists q. P * S ((S k) * c) = S ((S i) * c) * q) /\ forall j. (exists g. g + S k = j) -> (exists h. h + j = N) -> forall d. (exists u. P * S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1))
intro Nintro cintro kintro Pintro hcmintro hkNintro hPintro hdivintro hfuturehave hnew : ~(S ((S k) * c) = 0)specialize beta_modulus_nonzero cspecialize beta_modulus_nonzero kexact beta_modulus_nonzerosplitspecialize mul_ne_zero Pspecialize mul_ne_zero (S ((S k) * c))intro hzeroapply mul_ne_zeroexact hPexact hnewexact hzerosplitintro iintro hihave hik : exists r. r + i = kspecialize le_of_succ_le_succ ispecialize le_of_succ_le_succ kapply le_of_succ_le_succexact hihave hsplit : i = k \/ exists r. r + S i = kspecialize le_eq_or_lt ispecialize le_eq_or_lt kapply le_eq_or_ltexact hikcases hsplitrewrite hsplit_leftspecialize right_factor_divides_product Pspecialize right_factor_divides_product (S ((S k) * c))exact right_factor_divides_producthave hiP : exists q. P = S ((S i) * c) * qspecialize hdiv iapply hdivexact hsplit_rightspecialize multiple_mul_right (S ((S i) * c))specialize multiple_mul_right Pspecialize multiple_mul_right (S ((S k) * c))apply multiple_mul_rightexact hiPintro jintro hSkjintro hjNhave hkj : exists r. r + k = jhave hkSk : exists r. r + k = S kspecialize le_succ_self kexact le_succ_selfspecialize le_trans kspecialize le_trans (S k)specialize le_trans japply le_transexact hkSkexact hSkjhave hPj : forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1specialize hfuture japply hfutureexact hkjexact hjNhave hneq : ~(k = j)intro heqrewrite <- heq at hSkjspecialize lt_irrefl_expanded kapply lt_irrefl_expandedexact hSkjhave hkbound : exists r. r + k = Nspecialize lt_to_le kspecialize lt_to_le Napply lt_to_leexact hkNhave hpairs : forall i j. ~(i = j) -> (exists hi. hi + i = N) -> (exists hj. hj + j = N) -> forall d. (exists u. S ((S i) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1specialize beta_moduli_pairwise_coprime_bounded Nspecialize beta_moduli_pairwise_coprime_bounded capply beta_moduli_pairwise_coprime_boundedexact hcmhave hnewj : forall d. (exists u. S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1specialize hpairs kspecialize hpairs japply hpairsexact hneqexact hkboundexact hjNspecialize coprime_mul_left Pspecialize coprime_mul_left (S ((S k) * c))specialize coprime_mul_left (S ((S j) * c))apply coprime_mul_leftexact hPjexact hnewj
beta_exclusive_recode_congruence_step · unchanged support, not a new admission
forall N c b e k P z. (exists h. h + S k = N) -> ~(P = 0) -> (forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * c) * q) -> (forall i a. (exists h. h + S i = k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z + S ((S i) * c) * u = a + S ((S i) * c) * v) -> (forall j. (exists g. g + k = j) -> (exists h. h + j = N) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1) -> exists z2. forall i a. (exists h. h + S i = S k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z2 + S ((S i) * c) * u = a + S ((S i) * c) * v
intro Nintro cintro bintro eintro kintro Pintro zintro hkNintro hPintro hdivintro hcongintro hfuturehave hnew : ~(S ((S k) * c) = 0)specialize beta_modulus_nonzero cspecialize beta_modulus_nonzero kexact beta_modulus_nonzerohave hkbound : exists h. h + k = Nspecialize lt_to_le kspecialize lt_to_le Napply lt_to_leexact hkNhave hcop : forall d. (exists u. P = d * u) -> (exists v. S ((S k) * c) = d * v) -> d = 1specialize hfuture kapply hfuturespecialize le_refl kexact le_reflexact hkboundhave hvalue : exists a. ((exists h. h + S a = S ((S k) * e)) /\ exists q. b = q * S ((S k) * e) + a)specialize beta_at_exists bspecialize beta_at_exists especialize beta_at_exists kexact beta_at_existscases hvaluehave hfold : exists z2. ((forall m a. (exists q. P = m * q) -> (exists u v. z + m * u = a + m * v) -> exists r s. z2 + m * r = a + m * s) /\ exists q r. z2 + S ((S k) * c) * q = x + S ((S k) * c) * r)specialize binary_crt_fold_step Pspecialize binary_crt_fold_step (S ((S k) * c))specialize binary_crt_fold_step zspecialize binary_crt_fold_step xapply binary_crt_fold_stepexact hPexact hnewexact hcopcases hfoldcases hfold_witnessexists x1intro iintro aintro hiintro hatihave hik : exists r. r + i = kspecialize le_of_succ_le_succ ispecialize le_of_succ_le_succ kapply le_of_succ_le_succexact hihave hsplit : i = k \/ exists r. r + S i = kspecialize le_eq_or_lt ispecialize le_eq_or_lt kapply le_eq_or_ltexact hikcases hsplithave hati_new : ((exists h. h + S a = S ((S k) * e)) /\ exists q. b = q * S ((S k) * e) + a)rewrite <- hsplit_leftrewrite <- hsplit_leftexact hatihave haeq : a = xspecialize beta_at_unique bspecialize beta_at_unique especialize beta_at_unique kspecialize beta_at_unique aspecialize beta_at_unique xapply beta_at_uniqueexact hati_newexact hvalue_witnessrewrite hsplit_leftrewrite hsplit_leftrewrite haeqexact hfold_witness_righthave hmiP : exists q. P = S ((S i) * c) * qspecialize hdiv iapply hdivexact hsplit_righthave hzold : exists u v. z + S ((S i) * c) * u = a + S ((S i) * c) * vspecialize hcong ispecialize hcong aapply hcongexact hsplit_rightexact hatispecialize hfold_witness_left (S ((S i) * c))specialize hfold_witness_left aapply hfold_witness_leftexact hmiPexact hzold
beta_exclusive_recode_invariant_step · unchanged support, not a new admission
forall N c b e k P z. (forall t. (exists h. S t + S h = S N) -> exists q. c = S t * q) -> (exists h. h + S k = N) -> ~(P = 0) -> (forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * c) * q) -> (forall i a. (exists h. h + S i = k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z + S ((S i) * c) * u = a + S ((S i) * c) * v) -> (forall j. (exists g. g + k = j) -> (exists h. h + j = N) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1) -> exists z2. (~(P * S ((S k) * c) = 0) /\ ((forall i. (exists h. h + S i = S k) -> exists q. P * S ((S k) * c) = S ((S i) * c) * q) /\ ((forall i a. (exists h. h + S i = S k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z2 + S ((S i) * c) * u = a + S ((S i) * c) * v) /\ forall j. (exists g. g + S k = j) -> (exists h. h + j = N) -> forall d. (exists u. P * S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1)))
intro Nintro cintro bintro eintro kintro Pintro zintro hcmintro hkNintro hPintro hdivintro hcongintro hfuturehave hproduct : (~(P * S ((S k) * c) = 0) /\ ((forall i. (exists h. h + S i = S k) -> exists q. P * S ((S k) * c) = S ((S i) * c) * q) /\ forall j. (exists g. g + S k = j) -> (exists h. h + j = N) -> forall d. (exists u. P * S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1))specialize beta_exclusive_accumulated_product_step Nspecialize beta_exclusive_accumulated_product_step cspecialize beta_exclusive_accumulated_product_step kspecialize beta_exclusive_accumulated_product_step Papply beta_exclusive_accumulated_product_stepexact hcmexact hkNexact hPexact hdivexact hfuturehave hcodes : exists z2. forall i a. (exists h. h + S i = S k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z2 + S ((S i) * c) * u = a + S ((S i) * c) * vspecialize beta_exclusive_recode_congruence_step Nspecialize beta_exclusive_recode_congruence_step cspecialize beta_exclusive_recode_congruence_step bspecialize beta_exclusive_recode_congruence_step especialize beta_exclusive_recode_congruence_step kspecialize beta_exclusive_recode_congruence_step Pspecialize beta_exclusive_recode_congruence_step zapply beta_exclusive_recode_congruence_stepexact hkNexact hPexact hdivexact hcongexact hfuturecases hcodescases hproductcases hproduct_rightexists xsplitexact hproduct_leftsplitexact hproduct_right_leftsplitexact hcodes_witnessexact hproduct_right_right
bounded_beta_exclusive_recode_invariant · unchanged support, not a new admission
forall N c b e. (forall t. (exists h. S t + S h = S N) -> exists q. c = S t * q) -> forall k. (exists h. h + k = N) -> exists P z. (~(P = 0) /\ ((forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * c) * q) /\ ((forall i a. (exists h. h + S i = k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z + S ((S i) * c) * u = a + S ((S i) * c) * v) /\ forall j. (exists g. g + k = j) -> (exists h. h + j = N) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1)))
intro Nintro cintro bintro eintro hcminduction kintro hkNexists 1exists 0splitspecialize succ_ne_zero 0exact succ_ne_zerosplitintro iintro hiexfalsocases hihave hsi0 : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsi0splitintro iintro aintro hiintro hatiexfalsocases hihave hsi0 : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsi0intro jintro h0jintro hjNintro dintro h1intro hmspecialize coprime_one_left (S ((S j) * c))specialize coprime_one_left dapply coprime_one_leftexact h1exact hmintro hkNhave hkprev : exists h. h + k = Nhave hkstep : exists h. h + k = S kspecialize le_succ_self kexact le_succ_selfspecialize le_trans kspecialize le_trans (S k)specialize le_trans Napply le_transexact hkstepexact hkNhave hprev : exists P z. (~(P = 0) /\ ((forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * c) * q) /\ ((forall i a. (exists h. h + S i = k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z + S ((S i) * c) * u = a + S ((S i) * c) * v) /\ forall j. (exists g. g + k = j) -> (exists h. h + j = N) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1)))apply IHexact hkprevcases hprevcases hprev_witnesscases hprev_witness_witnesscases hprev_witness_witness_rightcases hprev_witness_witness_right_righthave hnext : exists z2. (~(x * S ((S k) * c) = 0) /\ ((forall i. (exists h. h + S i = S k) -> exists q. x * S ((S k) * c) = S ((S i) * c) * q) /\ ((forall i a. (exists h. h + S i = S k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z2 + S ((S i) * c) * u = a + S ((S i) * c) * v) /\ forall j. (exists g. g + S k = j) -> (exists h. h + j = N) -> forall d. (exists u. x * S ((S k) * c) = d * u) -> (exists v. S ((S j) * c) = d * v) -> d = 1)))specialize beta_exclusive_recode_invariant_step Nspecialize beta_exclusive_recode_invariant_step cspecialize beta_exclusive_recode_invariant_step bspecialize beta_exclusive_recode_invariant_step especialize beta_exclusive_recode_invariant_step kspecialize beta_exclusive_recode_invariant_step xspecialize beta_exclusive_recode_invariant_step x1apply beta_exclusive_recode_invariant_stepexact hcmexact hkNexact hprev_witness_witness_leftexact hprev_witness_witness_right_leftexact hprev_witness_witness_right_right_leftexact hprev_witness_witness_right_right_rightcases hnextexists x * S ((S k) * c)exists x2exact hnext_witness
beta_prefix_extend · unchanged support, not a new admission
forall k b e s. exists z c. (((exists h. h + S s = S ((S k) * c)) /\ exists q. z = q * S ((S k) * c) + s) /\ forall i a. (exists h. h + S i = k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> ((exists h. h + S a = S ((S i) * c)) /\ exists q. z = q * S ((S i) * c) + a))
intro kintro bintro eintro shave hC : exists C. (~(C = 0) /\ forall t. (exists h. S t + S h = S k) -> exists q. C = S t * q)specialize bounded_common_multiple_exists kexact bounded_common_multiple_existscases hCcases hC_witnesshave hcm2 : forall t. (exists h. S t + S h = S k) -> exists q. x * S (b + s) = S t * qspecialize scaled_bounded_common_multiple kspecialize scaled_bounded_common_multiple xspecialize scaled_bounded_common_multiple (S (b + s))apply scaled_bounded_common_multipleexact hC_witness_righthave hall : forall n. (exists h. h + n = k) -> exists P z. (~(P = 0) /\ ((forall i. (exists h. h + S i = n) -> exists q. P = S ((S i) * (x * S (b + s))) * q) /\ ((forall i a. (exists h. h + S i = n) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z + S ((S i) * (x * S (b + s))) * u = a + S ((S i) * (x * S (b + s))) * v) /\ forall j. (exists g. g + n = j) -> (exists h. h + j = k) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * (x * S (b + s))) = d * v) -> d = 1)))specialize bounded_beta_exclusive_recode_invariant kspecialize bounded_beta_exclusive_recode_invariant (x * S (b + s))specialize bounded_beta_exclusive_recode_invariant bspecialize bounded_beta_exclusive_recode_invariant eapply bounded_beta_exclusive_recode_invariantexact hcm2have hinv : exists P z. (~(P = 0) /\ ((forall i. (exists h. h + S i = k) -> exists q. P = S ((S i) * (x * S (b + s))) * q) /\ ((forall i a. (exists h. h + S i = k) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. b = q * S ((S i) * e) + a) -> exists u v. z + S ((S i) * (x * S (b + s))) * u = a + S ((S i) * (x * S (b + s))) * v) /\ forall j. (exists g. g + k = j) -> (exists h. h + j = k) -> forall d. (exists u. P = d * u) -> (exists v. S ((S j) * (x * S (b + s))) = d * v) -> d = 1)))specialize hall kapply hallspecialize le_refl kexact le_reflcases hinvcases hinv_witnesscases hinv_witness_witnesscases hinv_witness_witness_rightcases hinv_witness_witness_right_righthave hcop : forall d. (exists u. x1 = d * u) -> (exists v. S ((S k) * (x * S (b + s))) = d * v) -> d = 1specialize hinv_witness_witness_right_right_right kapply hinv_witness_witness_right_right_rightspecialize le_refl kexact le_reflspecialize le_refl kexact le_reflhave hnew0 : ~(S ((S k) * (x * S (b + s))) = 0)specialize beta_modulus_nonzero (x * S (b + s))specialize beta_modulus_nonzero kexact beta_modulus_nonzerohave hfold : exists z2. ((forall m a. (exists q. x1 = m * q) -> (exists u v. x2 + m * u = a + m * v) -> exists r t. z2 + m * r = a + m * t) /\ exists q r. z2 + S ((S k) * (x * S (b + s))) * q = s + S ((S k) * (x * S (b + s))) * r)specialize binary_crt_fold_step x1specialize binary_crt_fold_step (S ((S k) * (x * S (b + s))))specialize binary_crt_fold_step x2specialize binary_crt_fold_step sapply binary_crt_fold_stepexact hinv_witness_witness_leftexact hnew0exact hcopcases hfoldcases hfold_witnessexists x3exists x * S (b + s)splitspecialize beta_at_of_mod_eq_bound x3specialize beta_at_of_mod_eq_bound (x * S (b + s))specialize beta_at_of_mod_eq_bound kspecialize beta_at_of_mod_eq_bound sapply beta_at_of_mod_eq_boundspecialize new_value_lt_scaled_base bspecialize new_value_lt_scaled_base sspecialize new_value_lt_scaled_base xspecialize new_value_lt_scaled_base kapply new_value_lt_scaled_baseexact hC_witness_leftexact hfold_witness_rightintro iintro aintro hiintro hatihave hmi : exists q. x1 = S ((S i) * (x * S (b + s))) * qspecialize hinv_witness_witness_right_left iapply hinv_witness_witness_right_leftexact hihave hzold : exists u v. x2 + S ((S i) * (x * S (b + s))) * u = a + S ((S i) * (x * S (b + s))) * vspecialize hinv_witness_witness_right_right_left ispecialize hinv_witness_witness_right_right_left aapply hinv_witness_witness_right_right_leftexact hiexact hatihave hznew : exists u v. x3 + S ((S i) * (x * S (b + s))) * u = a + S ((S i) * (x * S (b + s))) * vspecialize hfold_witness_left (S ((S i) * (x * S (b + s))))specialize hfold_witness_left aapply hfold_witness_leftexact hmiexact hzoldspecialize beta_at_of_mod_eq_bound x3specialize beta_at_of_mod_eq_bound (x * S (b + s))specialize beta_at_of_mod_eq_bound ispecialize beta_at_of_mod_eq_bound aapply beta_at_of_mod_eq_boundspecialize beta_value_lt_scaled_base bspecialize beta_value_lt_scaled_base especialize beta_value_lt_scaled_base ispecialize beta_value_lt_scaled_base aspecialize beta_value_lt_scaled_base xspecialize beta_value_lt_scaled_base sspecialize beta_value_lt_scaled_base iapply beta_value_lt_scaled_baseexact hatiexact hC_witness_leftexact hznew
beta_prefix_product_trace_exists · unchanged support, not a new admission
forall b c l. exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S (S i)) * v)) /\ exists q. u = q * S ((S (S i)) * v) + s) /\ s = r * p))))
intro bintro cinduction lexists 1exists 1splitspecialize beta_at_self_of_bound 1specialize beta_at_self_of_bound 0specialize beta_at_self_of_bound 1apply beta_at_self_of_boundspecialize one_mul 1rewrite one_mulspecialize le_refl 2exact le_reflintro iintro hiexfalsocases hihave hsi0 : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsi0have htrace : exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S (S i)) * v)) /\ exists q. u = q * S ((S (S i)) * v) + s) /\ s = r * p))))apply IHcases htracecases htrace_witnesscases htrace_witness_witnesshave hfactor : exists p. ((exists h. h + S p = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + p)specialize beta_at_exists bspecialize beta_at_exists cspecialize beta_at_exists lexact beta_at_existscases hfactorhave hlast : exists r. ((exists h. h + S r = S ((S l) * x1)) /\ exists q. x = q * S ((S l) * x1) + r)specialize beta_at_exists xspecialize beta_at_exists x1specialize beta_at_exists lexact beta_at_existscases hlasthave hext : exists z v. (((exists h. h + S (x3 * x2) = S ((S (S l)) * v)) /\ exists q. z = q * S ((S (S l)) * v) + (x3 * x2)) /\ forall i a. (exists h. h + S i = S l) -> ((exists h. h + S a = S ((S i) * x1)) /\ exists q. x = q * S ((S i) * x1) + a) -> ((exists h. h + S a = S ((S i) * v)) /\ exists q. z = q * S ((S i) * v) + a))specialize beta_prefix_extend (S l)specialize beta_prefix_extend xspecialize beta_prefix_extend x1specialize beta_prefix_extend (x3 * x2)exact beta_prefix_extendcases hextcases hext_witnesscases hext_witness_witnessexists x4exists x5splitspecialize hext_witness_witness_right 0specialize hext_witness_witness_right 1apply hext_witness_witness_righthave h0 : exists h. h + S 0 = S lhave hzero : exists h. h + 0 = lspecialize zero_le lexact zero_lespecialize succ_le_succ 0specialize succ_le_succ lapply succ_le_succexact hzeroexact h0exact htrace_witness_witness_leftintro iintro hihave hil : exists h. h + i = lspecialize le_of_succ_le_succ ispecialize le_of_succ_le_succ lapply le_of_succ_le_succexact hihave hsplit : i = l \/ exists h. h + S i = lspecialize le_eq_or_lt ispecialize le_eq_or_lt lapply le_eq_or_ltexact hilcases hsplitexists x2exists x3exists x3 * x2splitrewrite hsplit_leftrewrite hsplit_leftexact hfactor_witnesssplitrewrite hsplit_leftrewrite hsplit_leftspecialize hext_witness_witness_right lspecialize hext_witness_witness_right x3apply hext_witness_witness_rightspecialize le_refl (S l)exact le_reflexact hlast_witnesssplitrewrite hsplit_leftrewrite hsplit_leftexact hext_witness_witness_leftreflhave hold : exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * x1)) /\ exists q. x = q * S ((S i) * x1) + r) /\ (((exists h. h + S s = S ((S (S i)) * x1)) /\ exists q. x = q * S ((S (S i)) * x1) + s) /\ s = r * p)))specialize htrace_witness_witness_right iapply htrace_witness_witness_rightexact hsplit_rightcases holdcases hold_witnesscases hold_witness_witnesscases hold_witness_witness_witnesscases hold_witness_witness_witness_rightcases hold_witness_witness_witness_right_rightexists x6exists x7exists x8splitexact hold_witness_witness_witness_leftsplitspecialize hext_witness_witness_right ispecialize hext_witness_witness_right x7apply hext_witness_witness_rightexact hiexact hold_witness_witness_witness_right_leftsplitspecialize hext_witness_witness_right (S i)specialize hext_witness_witness_right x8apply hext_witness_witness_rightspecialize succ_le_succ (S i)specialize succ_le_succ lapply succ_le_succexact hsplit_rightexact hold_witness_witness_witness_right_right_leftexact hold_witness_witness_witness_right_right_right
beta_product_exists · unchanged support, not a new admission
forall b c l. exists n u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S n = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + n) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S (S i)) * v)) /\ exists q. u = q * S ((S (S i)) * v) + s) /\ s = r * p)))))
intro bintro cintro lhave htrace : exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S (S i)) * v)) /\ exists q. u = q * S ((S (S i)) * v) + s) /\ s = r * p))))specialize beta_prefix_product_trace_exists bspecialize beta_prefix_product_trace_exists cspecialize beta_prefix_product_trace_exists lexact beta_prefix_product_trace_existscases htracecases htrace_witnesscases htrace_witness_witnesshave hterminal : exists n. ((exists h. h + S n = S ((S l) * x1)) /\ exists q. x = q * S ((S l) * x1) + n)specialize beta_at_exists xspecialize beta_at_exists x1specialize beta_at_exists lexact beta_at_existscases hterminalexists x2exists xexists x1splitexact htrace_witness_witness_leftsplitexact hterminal_witnessexact htrace_witness_witness_right
beta_product_functional · unchanged support, not a new admission
forall b c l n u v m w d. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S n = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + n) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p))))) -> (((exists h. h + S 1 = S ((S 0) * d)) /\ exists q. w = q * S ((S 0) * d) + 1) /\ (((exists h. h + S m = S ((S l) * d)) /\ exists q. w = q * S ((S l) * d) + m) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * d)) /\ exists q. w = q * S ((S i) * d) + r) /\ (((exists h. h + S s = S ((S S i) * d)) /\ exists q. w = q * S ((S S i) * d) + s) /\ s = r * p))))) -> n = m
intro bintro cinduction lintro nintro uintro vintro mintro wintro dintro h1intro h2cases h1cases h1_rightcases h2cases h2_righthave hn : n = 1specialize beta_at_unique uspecialize beta_at_unique vspecialize beta_at_unique 0specialize beta_at_unique nspecialize beta_at_unique 1apply beta_at_uniqueexact h1_right_leftexact h1_lefthave hm : m = 1specialize beta_at_unique wspecialize beta_at_unique dspecialize beta_at_unique 0specialize beta_at_unique mspecialize beta_at_unique 1apply beta_at_uniqueexact h2_right_leftexact h2_lefttrans 1exact hnsymmexact hmintro nintro uintro vintro mintro wintro dintro h1intro h2cases h1cases h1_rightcases h2cases h2_righthave hstep1 : exists p r s. (((exists h. h + S p = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + p) /\ (((exists h. h + S r = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + r) /\ (((exists h. h + S s = S ((S S l) * v)) /\ exists q. u = q * S ((S S l) * v) + s) /\ s = r * p)))specialize h1_right_right lapply h1_right_rightspecialize le_refl (S l)exact le_reflcases hstep1cases hstep1_witnesscases hstep1_witness_witnesscases hstep1_witness_witness_witnesscases hstep1_witness_witness_witness_rightcases hstep1_witness_witness_witness_right_righthave hstep2 : exists p r s. (((exists h. h + S p = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + p) /\ (((exists h. h + S r = S ((S l) * d)) /\ exists q. w = q * S ((S l) * d) + r) /\ (((exists h. h + S s = S ((S S l) * d)) /\ exists q. w = q * S ((S S l) * d) + s) /\ s = r * p)))specialize h2_right_right lapply h2_right_rightspecialize le_refl (S l)exact le_reflcases hstep2cases hstep2_witnesscases hstep2_witness_witnesscases hstep2_witness_witness_witnesscases hstep2_witness_witness_witness_rightcases hstep2_witness_witness_witness_right_righthave hn : n = x2specialize beta_at_unique uspecialize beta_at_unique vspecialize beta_at_unique (S l)specialize beta_at_unique nspecialize beta_at_unique x2apply beta_at_uniqueexact h1_right_leftexact hstep1_witness_witness_witness_right_right_lefthave hm : m = x5specialize beta_at_unique wspecialize beta_at_unique dspecialize beta_at_unique (S l)specialize beta_at_unique mspecialize beta_at_unique x5apply beta_at_uniqueexact h2_right_leftexact hstep2_witness_witness_witness_right_right_lefthave hp : x = x3specialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique lspecialize beta_at_unique xspecialize beta_at_unique x3apply beta_at_uniqueexact hstep1_witness_witness_witness_leftexact hstep2_witness_witness_witness_lefthave hprod1 : (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S x1 = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + x1) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p)))))splitexact h1_leftsplitexact hstep1_witness_witness_witness_right_leftintro iintro hispecialize h1_right_right iapply h1_right_rightspecialize le_succ (S i)specialize le_succ lapply le_succexact hihave hprod2 : (((exists h. h + S 1 = S ((S 0) * d)) /\ exists q. w = q * S ((S 0) * d) + 1) /\ (((exists h. h + S x4 = S ((S l) * d)) /\ exists q. w = q * S ((S l) * d) + x4) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * d)) /\ exists q. w = q * S ((S i) * d) + r) /\ (((exists h. h + S s = S ((S S i) * d)) /\ exists q. w = q * S ((S S i) * d) + s) /\ s = r * p)))))splitexact h2_leftsplitexact hstep2_witness_witness_witness_right_leftintro iintro hispecialize h2_right_right iapply h2_right_rightspecialize le_succ (S i)specialize le_succ lapply le_succexact hihave hprev : x1 = x4specialize IH x1specialize IH uspecialize IH vspecialize IH x4specialize IH wspecialize IH dapply IHexact hprod1exact hprod2have hmul : x1 * x = x4 * x3specialize mul_congr x1specialize mul_congr x4specialize mul_congr xspecialize mul_congr x3apply mul_congrexact hprevexact hptrans x2exact hntrans x1 * xexact hstep1_witness_witness_witness_right_right_righttrans x4 * x3exact hmultrans x5symmexact hstep2_witness_witness_witness_right_right_rightsymmexact hm
beta_product_zero · unchanged support, not a new admission
forall b c n. (exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S n = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + n) /\ forall i. (exists h. h + S i = 0) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p)))))) -> n = 1
intro bintro cintro nintro hproductcases hproductcases hproduct_witnesscases hproduct_witness_witnesscases hproduct_witness_witness_rightspecialize beta_at_unique xspecialize beta_at_unique x1specialize beta_at_unique 0specialize beta_at_unique nspecialize beta_at_unique 1apply beta_at_uniqueexact hproduct_witness_witness_right_leftexact hproduct_witness_witness_left
beta_product_succ_decompose · unchanged support, not a new admission
forall b c l n. (exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S n = S ((S S l) * v)) /\ exists q. u = q * S ((S S l) * v) + n) /\ forall i. (exists h. h + S i = S l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p)))))) -> exists p r. (((exists h. h + S p = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + p) /\ ((exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S r = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + r) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p)))))) /\ n = r * p))
intro bintro cintro lintro nintro hproductcases hproductcases hproduct_witnesscases hproduct_witness_witnesscases hproduct_witness_witness_righthave hstep : exists p r s. (((exists h. h + S p = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + p) /\ (((exists h. h + S r = S ((S l) * x1)) /\ exists q. x = q * S ((S l) * x1) + r) /\ (((exists h. h + S s = S ((S S l) * x1)) /\ exists q. x = q * S ((S S l) * x1) + s) /\ s = r * p)))specialize hproduct_witness_witness_right_right lapply hproduct_witness_witness_right_rightspecialize le_refl (S l)exact le_reflcases hstepcases hstep_witnesscases hstep_witness_witnesscases hstep_witness_witness_witnesscases hstep_witness_witness_witness_rightcases hstep_witness_witness_witness_right_righthave hn : n = x4specialize beta_at_unique xspecialize beta_at_unique x1specialize beta_at_unique (S l)specialize beta_at_unique nspecialize beta_at_unique x4apply beta_at_uniqueexact hproduct_witness_witness_right_leftexact hstep_witness_witness_witness_right_right_leftexists x2exists x3splitexact hstep_witness_witness_witness_leftsplitexists xexists x1splitexact hproduct_witness_witness_leftsplitexact hstep_witness_witness_witness_right_leftintro iintro hispecialize hproduct_witness_witness_right_right iapply hproduct_witness_witness_right_rightspecialize le_succ (S i)specialize le_succ lapply le_succexact hitrans x4exact hnexact hstep_witness_witness_witness_right_right_right
beta_product_transport_prefix · unchanged support, not a new admission
forall b c z e l n. (exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S n = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + n) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p)))))) -> (forall i a. (exists h. h + S i = l) -> ((exists h. h + S a = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + a) -> ((exists h. h + S a = S ((S i) * e)) /\ exists q. z = q * S ((S i) * e) + a)) -> (exists u v. (((exists h. h + S 1 = S ((S 0) * v)) /\ exists q. u = q * S ((S 0) * v) + 1) /\ (((exists h. h + S n = S ((S l) * v)) /\ exists q. u = q * S ((S l) * v) + n) /\ forall i. (exists h. h + S i = l) -> exists p r s. (((exists h. h + S p = S ((S i) * e)) /\ exists q. z = q * S ((S i) * e) + p) /\ (((exists h. h + S r = S ((S i) * v)) /\ exists q. u = q * S ((S i) * v) + r) /\ (((exists h. h + S s = S ((S S i) * v)) /\ exists q. u = q * S ((S S i) * v) + s) /\ s = r * p))))))
intro bintro cintro zintro eintro lintro nintro hproductintro hprescases hproductcases hproduct_witnesscases hproduct_witness_witnesscases hproduct_witness_witness_rightexists xexists x1splitexact hproduct_witness_witness_leftsplitexact hproduct_witness_witness_right_leftintro iintro hihave hstep : exists p r s. (((exists h. h + S p = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + p) /\ (((exists h. h + S r = S ((S i) * x1)) /\ exists q. x = q * S ((S i) * x1) + r) /\ (((exists h. h + S s = S ((S S i) * x1)) /\ exists q. x = q * S ((S S i) * x1) + s) /\ s = r * p)))specialize hproduct_witness_witness_right_right iapply hproduct_witness_witness_right_rightexact hicases hstepcases hstep_witnesscases hstep_witness_witnesscases hstep_witness_witness_witnesscases hstep_witness_witness_witness_rightcases hstep_witness_witness_witness_right_rightexists x2exists x3exists x4splitspecialize hpres ispecialize hpres x2apply hpresexact hiexact hstep_witness_witness_witness_leftsplitexact hstep_witness_witness_witness_right_leftsplitexact hstep_witness_witness_witness_right_right_leftexact hstep_witness_witness_witness_right_right_right
beta_repeat_entry_eq · unchanged support, not a new admission
forall b c a l i x. (forall ff_i_entry. (exists ff_lt_entry_bound. ff_lt_entry_bound + S ff_i_entry = l) -> (((exists ff_h_entry_decoded. ff_h_entry_decoded + S (a) = S ((S (ff_i_entry)) * c)) /\ exists ff_q_entry_decoded. b = ff_q_entry_decoded * S ((S (ff_i_entry)) * c) + (a)))) -> (exists h. h + S i = l) -> (((exists ff_h_entry_x. ff_h_entry_x + S (x) = S ((S (i)) * c)) /\ exists ff_q_entry_x. b = ff_q_entry_x * S ((S (i)) * c) + (x))) -> x = a
intro bintro cintro aintro lintro iintro xintro hrepeatintro hiintro hxhave ha : ((exists h. h + S a = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + a)specialize hrepeat iapply hrepeatexact hispecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique ispecialize beta_at_unique xspecialize beta_at_unique aapply beta_at_uniqueexact hxexact ha
pow_zero · unchanged support, not a new admission
forall a e n. e = 0 -> (exists ff_b_z ff_c_z. ((forall ff_i_z_repeat. (exists ff_lt_z_repeat_bound. ff_lt_z_repeat_bound + S ff_i_z_repeat = e) -> (((exists ff_h_z_repeat_decoded. ff_h_z_repeat_decoded + S (a) = S ((S (ff_i_z_repeat)) * ff_c_z)) /\ exists ff_q_z_repeat_decoded. ff_b_z = ff_q_z_repeat_decoded * S ((S (ff_i_z_repeat)) * ff_c_z) + (a)))) /\ (exists ff_u_z_product ff_v_z_product. ((((exists ff_h_z_product_start. ff_h_z_product_start + S (1) = S ((S (0)) * ff_v_z_product)) /\ exists ff_q_z_product_start. ff_u_z_product = ff_q_z_product_start * S ((S (0)) * ff_v_z_product) + (1))) /\ ((((exists ff_h_z_product_terminal. ff_h_z_product_terminal + S (n) = S ((S (e)) * ff_v_z_product)) /\ exists ff_q_z_product_terminal. ff_u_z_product = ff_q_z_product_terminal * S ((S (e)) * ff_v_z_product) + (n))) /\ forall ff_i_z_product. (exists ff_lt_z_product_bound. ff_lt_z_product_bound + S ff_i_z_product = e) -> exists ff_p_z_product ff_r_z_product ff_s_z_product. ((((exists ff_h_z_product_factor. ff_h_z_product_factor + S (ff_p_z_product) = S ((S (ff_i_z_product)) * ff_c_z)) /\ exists ff_q_z_product_factor. ff_b_z = ff_q_z_product_factor * S ((S (ff_i_z_product)) * ff_c_z) + (ff_p_z_product))) /\ ((((exists ff_h_z_product_partial. ff_h_z_product_partial + S (ff_r_z_product) = S ((S (ff_i_z_product)) * ff_v_z_product)) /\ exists ff_q_z_product_partial. ff_u_z_product = ff_q_z_product_partial * S ((S (ff_i_z_product)) * ff_v_z_product) + (ff_r_z_product))) /\ ((((exists ff_h_z_product_successor. ff_h_z_product_successor + S (ff_s_z_product) = S ((S (S ff_i_z_product)) * ff_v_z_product)) /\ exists ff_q_z_product_successor. ff_u_z_product = ff_q_z_product_successor * S ((S (S ff_i_z_product)) * ff_v_z_product) + (ff_s_z_product))) /\ ff_s_z_product = ff_r_z_product * ff_p_z_product)))))))) -> n = 1
intro aintro eintro nintro heintro hpowrewrite he at hpowrewrite he at hpowrewrite he at hpowrewrite he at hpowcases hpowcases hpow_witnesscases hpow_witness_witnessspecialize beta_product_zero xspecialize beta_product_zero x1specialize beta_product_zero napply beta_product_zeroexact hpow_witness_witness_right
pow_successor_decompose · unchanged support, not a new admission
forall a e se n. se = S e -> (exists ff_b_s ff_c_s. ((forall ff_i_s_repeat. (exists ff_lt_s_repeat_bound. ff_lt_s_repeat_bound + S ff_i_s_repeat = se) -> (((exists ff_h_s_repeat_decoded. ff_h_s_repeat_decoded + S (a) = S ((S (ff_i_s_repeat)) * ff_c_s)) /\ exists ff_q_s_repeat_decoded. ff_b_s = ff_q_s_repeat_decoded * S ((S (ff_i_s_repeat)) * ff_c_s) + (a)))) /\ (exists ff_u_s_product ff_v_s_product. ((((exists ff_h_s_product_start. ff_h_s_product_start + S (1) = S ((S (0)) * ff_v_s_product)) /\ exists ff_q_s_product_start. ff_u_s_product = ff_q_s_product_start * S ((S (0)) * ff_v_s_product) + (1))) /\ ((((exists ff_h_s_product_terminal. ff_h_s_product_terminal + S (n) = S ((S (se)) * ff_v_s_product)) /\ exists ff_q_s_product_terminal. ff_u_s_product = ff_q_s_product_terminal * S ((S (se)) * ff_v_s_product) + (n))) /\ forall ff_i_s_product. (exists ff_lt_s_product_bound. ff_lt_s_product_bound + S ff_i_s_product = se) -> exists ff_p_s_product ff_r_s_product ff_s_s_product. ((((exists ff_h_s_product_factor. ff_h_s_product_factor + S (ff_p_s_product) = S ((S (ff_i_s_product)) * ff_c_s)) /\ exists ff_q_s_product_factor. ff_b_s = ff_q_s_product_factor * S ((S (ff_i_s_product)) * ff_c_s) + (ff_p_s_product))) /\ ((((exists ff_h_s_product_partial. ff_h_s_product_partial + S (ff_r_s_product) = S ((S (ff_i_s_product)) * ff_v_s_product)) /\ exists ff_q_s_product_partial. ff_u_s_product = ff_q_s_product_partial * S ((S (ff_i_s_product)) * ff_v_s_product) + (ff_r_s_product))) /\ ((((exists ff_h_s_product_successor. ff_h_s_product_successor + S (ff_s_s_product) = S ((S (S ff_i_s_product)) * ff_v_s_product)) /\ exists ff_q_s_product_successor. ff_u_s_product = ff_q_s_product_successor * S ((S (S ff_i_s_product)) * ff_v_s_product) + (ff_s_s_product))) /\ ff_s_s_product = ff_r_s_product * ff_p_s_product)))))))) -> exists r. (exists ff_b_p ff_c_p. ((forall ff_i_p_repeat. (exists ff_lt_p_repeat_bound. ff_lt_p_repeat_bound + S ff_i_p_repeat = e) -> (((exists ff_h_p_repeat_decoded. ff_h_p_repeat_decoded + S (a) = S ((S (ff_i_p_repeat)) * ff_c_p)) /\ exists ff_q_p_repeat_decoded. ff_b_p = ff_q_p_repeat_decoded * S ((S (ff_i_p_repeat)) * ff_c_p) + (a)))) /\ (exists ff_u_p_product ff_v_p_product. ((((exists ff_h_p_product_start. ff_h_p_product_start + S (1) = S ((S (0)) * ff_v_p_product)) /\ exists ff_q_p_product_start. ff_u_p_product = ff_q_p_product_start * S ((S (0)) * ff_v_p_product) + (1))) /\ ((((exists ff_h_p_product_terminal. ff_h_p_product_terminal + S (r) = S ((S (e)) * ff_v_p_product)) /\ exists ff_q_p_product_terminal. ff_u_p_product = ff_q_p_product_terminal * S ((S (e)) * ff_v_p_product) + (r))) /\ forall ff_i_p_product. (exists ff_lt_p_product_bound. ff_lt_p_product_bound + S ff_i_p_product = e) -> exists ff_p_p_product ff_r_p_product ff_s_p_product. ((((exists ff_h_p_product_factor. ff_h_p_product_factor + S (ff_p_p_product) = S ((S (ff_i_p_product)) * ff_c_p)) /\ exists ff_q_p_product_factor. ff_b_p = ff_q_p_product_factor * S ((S (ff_i_p_product)) * ff_c_p) + (ff_p_p_product))) /\ ((((exists ff_h_p_product_partial. ff_h_p_product_partial + S (ff_r_p_product) = S ((S (ff_i_p_product)) * ff_v_p_product)) /\ exists ff_q_p_product_partial. ff_u_p_product = ff_q_p_product_partial * S ((S (ff_i_p_product)) * ff_v_p_product) + (ff_r_p_product))) /\ ((((exists ff_h_p_product_successor. ff_h_p_product_successor + S (ff_s_p_product) = S ((S (S ff_i_p_product)) * ff_v_p_product)) /\ exists ff_q_p_product_successor. ff_u_p_product = ff_q_p_product_successor * S ((S (S ff_i_p_product)) * ff_v_p_product) + (ff_s_p_product))) /\ ff_s_p_product = ff_r_p_product * ff_p_p_product)))))))) /\ n = r * a
intro aintro eintro seintro nintro hseintro hpowrewrite hse at hpowrewrite hse at hpowrewrite hse at hpowrewrite hse at hpowcases hpowcases hpow_witnesscases hpow_witness_witnesshave hdecomp : exists p r. (((exists ff_h_pow_succ_factor. ff_h_pow_succ_factor + S (p) = S ((S (e)) * x1)) /\ exists ff_q_pow_succ_factor. x = ff_q_pow_succ_factor * S ((S (e)) * x1) + (p))) /\ ((exists ff_u_pow_succ_prefix ff_v_pow_succ_prefix. ((((exists ff_h_pow_succ_prefix_start. ff_h_pow_succ_prefix_start + S (1) = S ((S (0)) * ff_v_pow_succ_prefix)) /\ exists ff_q_pow_succ_prefix_start. ff_u_pow_succ_prefix = ff_q_pow_succ_prefix_start * S ((S (0)) * ff_v_pow_succ_prefix) + (1))) /\ ((((exists ff_h_pow_succ_prefix_terminal. ff_h_pow_succ_prefix_terminal + S (r) = S ((S (e)) * ff_v_pow_succ_prefix)) /\ exists ff_q_pow_succ_prefix_terminal. ff_u_pow_succ_prefix = ff_q_pow_succ_prefix_terminal * S ((S (e)) * ff_v_pow_succ_prefix) + (r))) /\ forall ff_i_pow_succ_prefix. (exists ff_lt_pow_succ_prefix_bound. ff_lt_pow_succ_prefix_bound + S ff_i_pow_succ_prefix = e) -> exists ff_p_pow_succ_prefix ff_r_pow_succ_prefix ff_s_pow_succ_prefix. ((((exists ff_h_pow_succ_prefix_factor. ff_h_pow_succ_prefix_factor + S (ff_p_pow_succ_prefix) = S ((S (ff_i_pow_succ_prefix)) * x1)) /\ exists ff_q_pow_succ_prefix_factor. x = ff_q_pow_succ_prefix_factor * S ((S (ff_i_pow_succ_prefix)) * x1) + (ff_p_pow_succ_prefix))) /\ ((((exists ff_h_pow_succ_prefix_partial. ff_h_pow_succ_prefix_partial + S (ff_r_pow_succ_prefix) = S ((S (ff_i_pow_succ_prefix)) * ff_v_pow_succ_prefix)) /\ exists ff_q_pow_succ_prefix_partial. ff_u_pow_succ_prefix = ff_q_pow_succ_prefix_partial * S ((S (ff_i_pow_succ_prefix)) * ff_v_pow_succ_prefix) + (ff_r_pow_succ_prefix))) /\ ((((exists ff_h_pow_succ_prefix_successor. ff_h_pow_succ_prefix_successor + S (ff_s_pow_succ_prefix) = S ((S (S ff_i_pow_succ_prefix)) * ff_v_pow_succ_prefix)) /\ exists ff_q_pow_succ_prefix_successor. ff_u_pow_succ_prefix = ff_q_pow_succ_prefix_successor * S ((S (S ff_i_pow_succ_prefix)) * ff_v_pow_succ_prefix) + (ff_s_pow_succ_prefix))) /\ ff_s_pow_succ_prefix = ff_r_pow_succ_prefix * ff_p_pow_succ_prefix)))))) /\ n = r * p)specialize beta_product_succ_decompose xspecialize beta_product_succ_decompose x1specialize beta_product_succ_decompose especialize beta_product_succ_decompose napply beta_product_succ_decomposeexact hpow_witness_witness_rightcases hdecompcases hdecomp_witnesscases hdecomp_witness_witnesscases hdecomp_witness_witness_righthave hpa : x2 = aspecialize beta_repeat_entry_eq xspecialize beta_repeat_entry_eq x1specialize beta_repeat_entry_eq aspecialize beta_repeat_entry_eq (S e)specialize beta_repeat_entry_eq especialize beta_repeat_entry_eq x2apply beta_repeat_entry_eqexact hpow_witness_witness_leftspecialize le_refl (S e)exact le_reflexact hdecomp_witness_witness_leftexists x3splitexists xexists x1splitintro iintro hispecialize hpow_witness_witness_left iapply hpow_witness_witness_leftspecialize le_succ (S i)specialize le_succ eapply le_succexact hiexact hdecomp_witness_witness_right_lefttrans x3 * x2exact hdecomp_witness_witness_right_rightrewrite hparefl
beta_range_empty · unchanged support, not a new admission
forall b c a l. l = 0 -> (forall ff_i_empty. (exists ff_lt_empty_bound. ff_lt_empty_bound + S ff_i_empty = l) -> (((exists ff_h_empty_decoded. ff_h_empty_decoded + S (a + ff_i_empty) = S ((S (ff_i_empty)) * c)) /\ exists ff_q_empty_decoded. b = ff_q_empty_decoded * S ((S (ff_i_empty)) * c) + (a + ff_i_empty))))
intro bintro cintro aintro lintro hlintro iintro hirewrite hl at hiexfalsocases hihave hsi : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsi
beta_range_succ_extend · unchanged support, not a new admission
forall b c a l sl. sl = S l -> (forall ff_i_before. (exists ff_lt_before_bound. ff_lt_before_bound + S ff_i_before = l) -> (((exists ff_h_before_decoded. ff_h_before_decoded + S (a + ff_i_before) = S ((S (ff_i_before)) * c)) /\ exists ff_q_before_decoded. b = ff_q_before_decoded * S ((S (ff_i_before)) * c) + (a + ff_i_before)))) -> exists z d. (forall ff_i_after. (exists ff_lt_after_bound. ff_lt_after_bound + S ff_i_after = sl) -> (((exists ff_h_after_decoded. ff_h_after_decoded + S (a + ff_i_after) = S ((S (ff_i_after)) * d)) /\ exists ff_q_after_decoded. z = ff_q_after_decoded * S ((S (ff_i_after)) * d) + (a + ff_i_after))))
intro bintro cintro aintro lintro slintro hslintro hrangespecialize beta_prefix_extend lspecialize beta_prefix_extend bspecialize beta_prefix_extend cspecialize beta_prefix_extend (a + l)cases beta_prefix_extendcases beta_prefix_extend_witnesscases beta_prefix_extend_witness_witnessexists xexists x1intro iintro hirewrite hsl at hihave hil : exists h. h + i = lspecialize le_of_succ_le_succ ispecialize le_of_succ_le_succ lapply le_of_succ_le_succexact hihave hsplit : i = l \/ exists h. h + S i = lspecialize le_eq_or_lt ispecialize le_eq_or_lt lapply le_eq_or_ltexact hilcases hsplitrewrite hsplit_leftrewrite hsplit_leftrewrite hsplit_leftrewrite hsplit_leftexact beta_prefix_extend_witness_witness_leftspecialize beta_prefix_extend_witness_witness_right ispecialize beta_prefix_extend_witness_witness_right (a + i)apply beta_prefix_extend_witness_witness_rightexact hsplit_rightspecialize hrange iapply hrangeexact hsplit_right
beta_range_exists · unchanged support, not a new admission
forall a l. exists b c. (forall ff_i_r. (exists ff_lt_r_bound. ff_lt_r_bound + S ff_i_r = l) -> (((exists ff_h_r_decoded. ff_h_r_decoded + S (a + ff_i_r) = S ((S (ff_i_r)) * c)) /\ exists ff_q_r_decoded. b = ff_q_r_decoded * S ((S (ff_i_r)) * c) + (a + ff_i_r))))
intro ainduction lexists 0exists 0specialize beta_range_empty 0specialize beta_range_empty 0specialize beta_range_empty aspecialize beta_range_empty 0apply beta_range_emptyreflcases IHcases IH_witnessspecialize beta_range_succ_extend xspecialize beta_range_succ_extend x1specialize beta_range_succ_extend aspecialize beta_range_succ_extend lspecialize beta_range_succ_extend (S l)apply beta_range_succ_extendreflexact IH_witness_witness
beta_range_entry_eq · unchanged support, not a new admission
forall b c a l i x. (forall ff_i_entry. (exists ff_lt_entry_bound. ff_lt_entry_bound + S ff_i_entry = l) -> (((exists ff_h_entry_decoded. ff_h_entry_decoded + S (a + ff_i_entry) = S ((S (ff_i_entry)) * c)) /\ exists ff_q_entry_decoded. b = ff_q_entry_decoded * S ((S (ff_i_entry)) * c) + (a + ff_i_entry)))) -> (exists h. h + S i = l) -> (((exists ff_h_range_entry_x. ff_h_range_entry_x + S (x) = S ((S (i)) * c)) /\ exists ff_q_range_entry_x. b = ff_q_range_entry_x * S ((S (i)) * c) + (x))) -> x = a + i
intro bintro cintro aintro lintro iintro xintro hrangeintro hiintro hxhave ha : ((exists h. h + S (a + i) = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + (a + i))specialize hrange iapply hrangeexact hispecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique ispecialize beta_at_unique xspecialize beta_at_unique (a + i)apply beta_at_uniqueexact hxexact ha
prime_coprime_or_divides · unchanged support, not a new admission
forall p a. (~(p = 1) /\ forall c e. p = c * e -> c = 1 \/ e = 1) -> (forall d. (exists x. p = d * x) -> (exists y. a = d * y) -> d = 1) \/ exists k. a = p * k
intro pintro aintro hphave hg : exists g. (((exists x. p = g * x) /\ (exists y. a = g * y)) /\ forall c. (exists u. p = c * u) -> (exists v. a = c * v) -> exists w. g = c * w)apply gcd_exists_relationalcases hghave hgfull : (((exists u. p = x * u) /\ (exists v. a = x * v)) /\ forall c. (exists s. p = c * s) -> (exists t. a = c * t) -> exists w. x = c * w)exact hg_witnesscases hg_witnesscases hg_witness_lefthave hfactor : x = 1 \/ p = xspecialize prime_divisor_eq_one_or_self pspecialize prime_divisor_eq_one_or_self xapply prime_divisor_eq_one_or_selfexact hpexact hg_witness_left_leftcases hfactorleftapply is_gcd_one_to_coprimehave hg1 : (((exists u. p = 1 * u) /\ (exists v. a = 1 * v)) /\ forall c. (exists s. p = c * s) -> (exists t. a = c * t) -> exists w. 1 = c * w)rewrite <- hfactor_leftrewrite <- hfactor_leftrewrite <- hfactor_leftexact hgfullexact hg1rightcases hg_witness_left_rightexists x1rewrite hfactor_rightexact hg_witness_left_right_witness
prime_not_divides_coprime · unchanged support, not a new admission
forall p a. (~(p = 1) /\ forall c e. p = c * e -> c = 1 \/ e = 1) -> ~(exists k. a = p * k) -> forall d. (exists x. p = d * x) -> (exists y. a = d * y) -> d = 1
intro pintro aintro hpintro hnotspecialize prime_coprime_or_divides pspecialize prime_coprime_or_divides ahave hsplit : (forall d. (exists x. p = d * x) -> (exists y. a = d * y) -> d = 1) \/ exists k. a = p * kapply prime_coprime_or_dividesexact hpcases hsplitexact hsplit_leftexfalsoapply hnotexact hsplit_right
coprime_balanced_mod_inverse · unchanged support, not a new admission
forall a m. (forall d. (exists x. a = d * x) -> (exists y. m = d * y) -> d = 1) -> exists xp xn u v. a * xp + m * u = (1 + a * xn) + m * v
intro aintro mintro hcophave hbez : exists xp yp xn yn. a * xp + m * yp = 1 + (a * xn + m * yn)specialize coprime_balanced_bezout aspecialize coprime_balanced_bezout mapply coprime_balanced_bezoutexact hcopcases hbezcases hbez_witnesscases hbez_witness_witnesscases hbez_witness_witness_witnessexists xexists x2exists x1exists x3trans 1 + (a * x2 + m * x3)exact hbez_witness_witness_witness_witnesssymmapply add_assoc
coprime_mod_inverse · unchanged support, not a new admission
forall a m. ~(m = 0) -> (forall d. (exists x. a = d * x) -> (exists y. m = d * y) -> d = 1) -> exists z u v. a * z + m * u = 1 + m * v
intro aintro mintro hmintro hcophave hms : exists k. m = S kspecialize nonzero_is_succ mapply nonzero_is_succexact hmhave hbal : exists xp xn u v. a * xp + m * u = (1 + a * xn) + m * vspecialize coprime_balanced_mod_inverse aspecialize coprime_balanced_mod_inverse mapply coprime_balanced_mod_inverseexact hcopcases hmscases hbalcases hbal_witnesscases hbal_witness_witnesscases hbal_witness_witness_witnesshave hself : exists u v. (x * (a * x2)) + m * u = (x * (a * x2)) + m * vspecialize mod_eq_refl mspecialize mod_eq_refl (x * (a * x2))apply mod_eq_reflhave hadd : exists u v. ((a * x1) + x * (a * x2)) + m * u = ((1 + a * x2) + x * (a * x2)) + m * vspecialize mod_eq_add mspecialize mod_eq_add (a * x1)specialize mod_eq_add (1 + a * x2)specialize mod_eq_add (x * (a * x2))specialize mod_eq_add (x * (a * x2))apply mod_eq_addexists x3exists x4exact hbal_witness_witness_witness_witnessexact hselfhave hcancel : exists u v. ((1 + a * x2) + x * (a * x2)) + m * u = 1 + m * vspecialize mod_eq_predecessor_cancel xspecialize mod_eq_predecessor_cancel 1specialize mod_eq_predecessor_cancel (a * x2)have hkcancel : exists u v. ((1 + a * x2) + x * (a * x2)) + S x * u = 1 + S x * vapply mod_eq_predecessor_cancelrewrite <- hms_witness at hkcancelrewrite <- hms_witness at hkcancelexact hkcancelhave hfinal : exists u v. ((a * x1) + x * (a * x2)) + m * u = 1 + m * vspecialize mod_eq_trans mspecialize mod_eq_trans ((a * x1) + x * (a * x2))specialize mod_eq_trans ((1 + a * x2) + x * (a * x2))specialize mod_eq_trans 1apply mod_eq_transexact haddexact hcancelhave hnorm : a * (x1 + x * x2) = (a * x1) + x * (a * x2)trans a * x1 + a * (x * x2)apply mul_addcongrrefltrans (a * x) * x2symmapply mul_assoctrans (x * a) * x2congrapply mul_commreflapply mul_assocexists x1 + x * x2rewrite hnormexact hfinal
mod_eq_cancel_coprime · unchanged support, not a new admission
forall m a x y. ~(m = 0) -> (forall d. (exists x. a = d * x) -> (exists y. m = d * y) -> d = 1) -> (exists u v. (a * x) + m * u = (a * y) + m * v) -> exists r s. x + m * r = y + m * s
intro mintro aintro xintro yintro hmintro hcopintro hxyhave hinv : exists z u v. a * z + m * u = 1 + m * vspecialize coprime_mod_inverse aspecialize coprime_mod_inverse mapply coprime_mod_inverseexact hmexact hcopcases hinvcases hinv_witnesscases hinv_witness_witnesshave hzx : exists u v. (x * (a * x1)) + m * u = (x * 1) + m * vspecialize mod_eq_mul_left mspecialize mod_eq_mul_left (a * x1)specialize mod_eq_mul_left 1specialize mod_eq_mul_left xapply mod_eq_mul_leftexists x2exists x3exact hinv_witness_witness_witnesshave hnormx : x * (a * x1) = (a * x) * x1trans (x * a) * x1symmapply mul_assoctrans (a * x) * x1congrapply mul_commreflreflhave honex : x * 1 = xapply mul_onehave hxprod : exists u v. ((a * x) * x1) + m * u = x + m * vcases hzxcases hzx_witnessexists x4exists x5trans (x * (a * x1)) + m * x4congrsymmexact hnormxrefltrans (x * 1) + m * x5exact hzx_witness_witnesscongrexact honexreflhave hxhprod : exists u v. x + m * u = ((a * x) * x1) + m * vspecialize mod_eq_symm mspecialize mod_eq_symm ((a * x) * x1)specialize mod_eq_symm xapply mod_eq_symmexact hxprodhave hscaled : exists u v. ((a * x) * x1) + m * u = ((a * y) * x1) + m * vspecialize mod_eq_mul_right mspecialize mod_eq_mul_right (a * x)specialize mod_eq_mul_right (a * y)specialize mod_eq_mul_right x1apply mod_eq_mul_rightexact hxyhave hzy : exists u v. (y * (a * x1)) + m * u = (y * 1) + m * vspecialize mod_eq_mul_left mspecialize mod_eq_mul_left (a * x1)specialize mod_eq_mul_left 1specialize mod_eq_mul_left yapply mod_eq_mul_leftexists x2exists x3exact hinv_witness_witness_witnesshave hnormy : y * (a * x1) = (a * y) * x1trans (y * a) * x1symmapply mul_assoctrans (a * y) * x1congrapply mul_commreflreflhave honey : y * 1 = yapply mul_onehave hyprod : exists u v. ((a * y) * x1) + m * u = y + m * vcases hzycases hzy_witnessexists x4exists x5trans (y * (a * x1)) + m * x4congrsymmexact hnormyrefltrans (y * 1) + m * x5exact hzy_witness_witnesscongrexact honeyreflhave hmid : exists u v. x + m * u = ((a * y) * x1) + m * vspecialize mod_eq_trans mspecialize mod_eq_trans xspecialize mod_eq_trans ((a * x) * x1)specialize mod_eq_trans ((a * y) * x1)apply mod_eq_transexact hxhprodexact hscaledspecialize mod_eq_trans mspecialize mod_eq_trans xspecialize mod_eq_trans ((a * y) * x1)specialize mod_eq_trans yapply mod_eq_transexact hmidexact hyprod
prime_mod_cancel · unchanged support, not a new admission
forall p a x y. (~(p = 1) /\ forall c e. p = c * e -> c = 1 \/ e = 1) -> ~(exists k. a = p * k) -> (exists u v. (a * x) + p * u = (a * y) + p * v) -> exists r s. x + p * r = y + p * s
intro pintro aintro xintro yintro hpintro hnotintro hxyhave hp0 : ~(p = 0)intro hpzerospecialize prime_nonzero papply prime_nonzeroexact hpexact hpzerohave hpacop : forall d. (exists u. p = d * u) -> (exists v. a = d * v) -> d = 1specialize prime_not_divides_coprime pspecialize prime_not_divides_coprime aapply prime_not_divides_coprimeexact hpexact hnothave hapcop : forall d. (exists u. a = d * u) -> (exists v. p = d * v) -> d = 1specialize coprime_symm pspecialize coprime_symm aapply coprime_symmexact hpacopspecialize mod_eq_cancel_coprime pspecialize mod_eq_cancel_coprime aspecialize mod_eq_cancel_coprime xspecialize mod_eq_cancel_coprime yapply mod_eq_cancel_coprimeexact hp0exact hapcopexact hxy
factorial_exists · unchanged support, not a new admission
forall n. exists z. (exists ff_b_exists ff_c_exists. ((forall ff_i_exists_range. (exists ff_lt_exists_range_bound. ff_lt_exists_range_bound + S ff_i_exists_range = n) -> (((exists ff_h_exists_range_decoded. ff_h_exists_range_decoded + S (1 + ff_i_exists_range) = S ((S (ff_i_exists_range)) * ff_c_exists)) /\ exists ff_q_exists_range_decoded. ff_b_exists = ff_q_exists_range_decoded * S ((S (ff_i_exists_range)) * ff_c_exists) + (1 + ff_i_exists_range)))) /\ (exists ff_u_exists_product ff_v_exists_product. ((((exists ff_h_exists_product_start. ff_h_exists_product_start + S (1) = S ((S (0)) * ff_v_exists_product)) /\ exists ff_q_exists_product_start. ff_u_exists_product = ff_q_exists_product_start * S ((S (0)) * ff_v_exists_product) + (1))) /\ ((((exists ff_h_exists_product_terminal. ff_h_exists_product_terminal + S (z) = S ((S (n)) * ff_v_exists_product)) /\ exists ff_q_exists_product_terminal. ff_u_exists_product = ff_q_exists_product_terminal * S ((S (n)) * ff_v_exists_product) + (z))) /\ forall ff_i_exists_product. (exists ff_lt_exists_product_bound. ff_lt_exists_product_bound + S ff_i_exists_product = n) -> exists ff_p_exists_product ff_r_exists_product ff_s_exists_product. ((((exists ff_h_exists_product_factor. ff_h_exists_product_factor + S (ff_p_exists_product) = S ((S (ff_i_exists_product)) * ff_c_exists)) /\ exists ff_q_exists_product_factor. ff_b_exists = ff_q_exists_product_factor * S ((S (ff_i_exists_product)) * ff_c_exists) + (ff_p_exists_product))) /\ ((((exists ff_h_exists_product_partial. ff_h_exists_product_partial + S (ff_r_exists_product) = S ((S (ff_i_exists_product)) * ff_v_exists_product)) /\ exists ff_q_exists_product_partial. ff_u_exists_product = ff_q_exists_product_partial * S ((S (ff_i_exists_product)) * ff_v_exists_product) + (ff_r_exists_product))) /\ ((((exists ff_h_exists_product_successor. ff_h_exists_product_successor + S (ff_s_exists_product) = S ((S (S ff_i_exists_product)) * ff_v_exists_product)) /\ exists ff_q_exists_product_successor. ff_u_exists_product = ff_q_exists_product_successor * S ((S (S ff_i_exists_product)) * ff_v_exists_product) + (ff_s_exists_product))) /\ ff_s_exists_product = ff_r_exists_product * ff_p_exists_product))))))))
intro nhave hrange : exists b c. (forall i. (exists h. h + S i = n) -> ((exists h. h + S (1 + i) = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + (1 + i)))specialize beta_range_exists 1specialize beta_range_exists nexact beta_range_existscases hrangecases hrange_witnessspecialize beta_product_exists xspecialize beta_product_exists x1specialize beta_product_exists ncases beta_product_existscases beta_product_exists_witnesscases beta_product_exists_witness_witnessexists x2exists xexists x1splitexact hrange_witness_witnessexists x3exists x4exact beta_product_exists_witness_witness_witness
finite_surjective_zero · unchanged support, not a new admission
forall b c n. n = 0 -> (forall fp_value_zero. (exists fp_gap_zero_value. fp_gap_zero_value + S fp_value_zero = n) -> exists fp_i_zero. ((exists fp_gap_zero_index. fp_gap_zero_index + S fp_i_zero = n) /\ (((exists ff_h_zero_entry. ff_h_zero_entry + S (fp_value_zero) = S ((S (fp_i_zero)) * c)) /\ exists ff_q_zero_entry. b = ff_q_zero_entry * S ((S (fp_i_zero)) * c) + (fp_value_zero)))))
intro bintro cintro nintro hnintro yintro hyrewrite hn at hyexfalsocases hyhave hsy : S y = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S y)apply add_eq_zero_rightexact hy_witnessspecialize succ_ne_zero yapply succ_ne_zeroexact hsy
finite_injective_prefix_succ · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_i_inj_succ fp_j_inj_succ fp_value_inj_succ. (exists fp_gap_inj_succ_i. fp_gap_inj_succ_i + S fp_i_inj_succ = sn) -> (exists fp_gap_inj_succ_j. fp_gap_inj_succ_j + S fp_j_inj_succ = sn) -> (((exists ff_h_inj_succ_left. ff_h_inj_succ_left + S (fp_value_inj_succ) = S ((S (fp_i_inj_succ)) * c)) /\ exists ff_q_inj_succ_left. b = ff_q_inj_succ_left * S ((S (fp_i_inj_succ)) * c) + (fp_value_inj_succ))) -> (((exists ff_h_inj_succ_right. ff_h_inj_succ_right + S (fp_value_inj_succ) = S ((S (fp_j_inj_succ)) * c)) /\ exists ff_q_inj_succ_right. b = ff_q_inj_succ_right * S ((S (fp_j_inj_succ)) * c) + (fp_value_inj_succ))) -> fp_i_inj_succ = fp_j_inj_succ) -> (forall fp_i_inj_prefix fp_j_inj_prefix fp_value_inj_prefix. (exists fp_gap_inj_prefix_i. fp_gap_inj_prefix_i + S fp_i_inj_prefix = n) -> (exists fp_gap_inj_prefix_j. fp_gap_inj_prefix_j + S fp_j_inj_prefix = n) -> (((exists ff_h_inj_prefix_left. ff_h_inj_prefix_left + S (fp_value_inj_prefix) = S ((S (fp_i_inj_prefix)) * c)) /\ exists ff_q_inj_prefix_left. b = ff_q_inj_prefix_left * S ((S (fp_i_inj_prefix)) * c) + (fp_value_inj_prefix))) -> (((exists ff_h_inj_prefix_right. ff_h_inj_prefix_right + S (fp_value_inj_prefix) = S ((S (fp_j_inj_prefix)) * c)) /\ exists ff_q_inj_prefix_right. b = ff_q_inj_prefix_right * S ((S (fp_j_inj_prefix)) * c) + (fp_value_inj_prefix))) -> fp_i_inj_prefix = fp_j_inj_prefix)
intro bintro cintro nintro snintro hsnintro hinjrewrite hsn at hinjrewrite hsn at hinjintro iintro jintro xintro hiintro hjintro hxiintro hxjspecialize hinj ispecialize hinj jspecialize hinj xapply hinjspecialize le_succ (S i)specialize le_succ napply le_succexact hispecialize le_succ (S j)specialize le_succ napply le_succexact hjexact hxiexact hxj
finite_lt_succ_eq_or_lt · unchanged support, not a new admission
forall n x. (exists h. h + S x = S n) -> x = n \/ exists h. h + S x = n
intro nintro xintro hlthave hle : exists h. h + x = nspecialize le_of_succ_le_succ xspecialize le_of_succ_le_succ napply le_of_succ_le_succexact hltspecialize le_eq_or_lt xspecialize le_eq_or_lt napply le_eq_or_ltexact hle
finite_bounded_entry_lt · unchanged support, not a new admission
forall b c l i x. (forall fp_i_entry_bound. (exists fp_gap_entry_bound_index. fp_gap_entry_bound_index + S fp_i_entry_bound = l) -> exists fp_value_entry_bound. ((((exists ff_h_entry_bound_entry. ff_h_entry_bound_entry + S (fp_value_entry_bound) = S ((S (fp_i_entry_bound)) * c)) /\ exists ff_q_entry_bound_entry. b = ff_q_entry_bound_entry * S ((S (fp_i_entry_bound)) * c) + (fp_value_entry_bound))) /\ (exists fp_gap_entry_bound_value. fp_gap_entry_bound_value + S fp_value_entry_bound = l))) -> (exists h. h + S i = l) -> (((exists ff_h_entry_bound_at. ff_h_entry_bound_at + S (x) = S ((S (i)) * c)) /\ exists ff_q_entry_bound_at. b = ff_q_entry_bound_at * S ((S (i)) * c) + (x))) -> exists h. h + S x = l
intro bintro cintro lintro iintro xintro hboundedintro hiintro hentryspecialize hbounded ihave hdecoded : exists a. (((exists h. h + S a = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + a) /\ exists h. h + S a = l)apply hboundedexact hicases hdecodedcases hdecoded_witnesshave hxa : x = x1specialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique ispecialize beta_at_unique xspecialize beta_at_unique x1apply beta_at_uniqueexact hentryexact hdecoded_witness_leftrewrite hxaexact hdecoded_witness_right
beta_prefix_replace_exists · unchanged support, not a new admission
forall b c i s k. (exists h. h + S i = k) -> exists z d. ((((exists ff_h_replace_entry. ff_h_replace_entry + S (s) = S ((S (i)) * d)) /\ exists ff_q_replace_entry. z = ff_q_replace_entry * S ((S (i)) * d) + (s))) /\ forall j a. (exists h. h + S j = k) -> ~(j = i) -> (((exists ff_h_replace_old. ff_h_replace_old + S (a) = S ((S (j)) * c)) /\ exists ff_q_replace_old. b = ff_q_replace_old * S ((S (j)) * c) + (a))) -> (((exists ff_h_replace_new. ff_h_replace_new + S (a) = S ((S (j)) * d)) /\ exists ff_q_replace_new. z = ff_q_replace_new * S ((S (j)) * d) + (a))))
intro bintro cintro iintro sinduction kintro hiexfalsocases hihave hsi : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsiintro hihave hisplit : i = k \/ exists h. h + S i = kspecialize finite_lt_succ_eq_or_lt kspecialize finite_lt_succ_eq_or_lt iapply finite_lt_succ_eq_or_ltexact hicases hisplitspecialize beta_prefix_extend kspecialize beta_prefix_extend bspecialize beta_prefix_extend cspecialize beta_prefix_extend scases beta_prefix_extendcases beta_prefix_extend_witnesscases beta_prefix_extend_witness_witnessexists xexists x1splitrewrite hisplit_leftrewrite hisplit_leftexact beta_prefix_extend_witness_witness_leftintro jintro aintro hjintro hjiintro holdhave hjsplit : j = k \/ exists h. h + S j = kspecialize finite_lt_succ_eq_or_lt kspecialize finite_lt_succ_eq_or_lt japply finite_lt_succ_eq_or_ltexact hjcases hjsplitexfalsoapply hjitrans kexact hjsplit_leftsymmexact hisplit_leftspecialize beta_prefix_extend_witness_witness_right jspecialize beta_prefix_extend_witness_witness_right aapply beta_prefix_extend_witness_witness_rightexact hjsplit_rightexact holdhave hreplaced : exists z d. (((exists h. h + S s = S ((S i) * d)) /\ exists q. z = q * S ((S i) * d) + s) /\ forall j a. (exists h. h + S j = k) -> ~(j = i) -> ((exists h. h + S a = S ((S j) * c)) /\ exists q. b = q * S ((S j) * c) + a) -> ((exists h. h + S a = S ((S j) * d)) /\ exists q. z = q * S ((S j) * d) + a))apply IHexact hisplit_rightcases hreplacedcases hreplaced_witnesscases hreplaced_witness_witnessspecialize beta_at_exists bspecialize beta_at_exists cspecialize beta_at_exists kcases beta_at_existsspecialize beta_prefix_extend kspecialize beta_prefix_extend xspecialize beta_prefix_extend x1specialize beta_prefix_extend x2cases beta_prefix_extendcases beta_prefix_extend_witnesscases beta_prefix_extend_witness_witnessexists x3exists x4splitspecialize beta_prefix_extend_witness_witness_right ispecialize beta_prefix_extend_witness_witness_right sapply beta_prefix_extend_witness_witness_rightexact hisplit_rightexact hreplaced_witness_witness_leftintro jintro aintro hjintro hjiintro holdhave hjsplit : j = k \/ exists h. h + S j = kspecialize finite_lt_succ_eq_or_lt kspecialize finite_lt_succ_eq_or_lt japply finite_lt_succ_eq_or_ltexact hjcases hjsplithave hax : a = x2specialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique kspecialize beta_at_unique aspecialize beta_at_unique x2apply beta_at_uniquerewrite hjsplit_left at holdrewrite hjsplit_left at holdexact holdexact beta_at_exists_witnessrewrite hjsplit_leftrewrite hjsplit_leftrewrite haxrewrite haxexact beta_prefix_extend_witness_witness_lefthave hmiddle : ((exists h. h + S a = S ((S j) * x1)) /\ exists q. x = q * S ((S j) * x1) + a)specialize hreplaced_witness_witness_right jspecialize hreplaced_witness_witness_right aapply hreplaced_witness_witness_rightexact hjsplit_rightexact hjiexact holdspecialize beta_prefix_extend_witness_witness_right jspecialize beta_prefix_extend_witness_witness_right aapply beta_prefix_extend_witness_witness_rightexact hjsplit_rightexact hmiddle
beta_prefix_swap_last_from_entries · unchanged support, not a new admission
forall b c n i x y. (exists h. h + S i = n) -> (((exists ff_h_swap_old_i. ff_h_swap_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_swap_old_i. b = ff_q_swap_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_swap_old_n. ff_h_swap_old_n + S (y) = S ((S (n)) * c)) /\ exists ff_q_swap_old_n. b = ff_q_swap_old_n * S ((S (n)) * c) + (y))) -> exists z d. ((((exists ff_h_swap_new_i. ff_h_swap_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_swap_new_i. z = ff_q_swap_new_i * S ((S (i)) * d) + (y))) /\ ((((exists ff_h_swap_new_n. ff_h_swap_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_swap_new_n. z = ff_q_swap_new_n * S ((S (n)) * d) + (x))) /\ forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ~(j = n) -> (((exists ff_h_swap_old_j. ff_h_swap_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_swap_old_j. b = ff_q_swap_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_swap_new_j. ff_h_swap_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_swap_new_j. z = ff_q_swap_new_j * S ((S (j)) * d) + (a)))))
intro bintro cintro nintro iintro xintro yintro hiintro hxiintro hynhave hisn : exists h. h + S i = S nspecialize le_succ (S i)specialize le_succ napply le_succexact hihave hnsn : exists h. h + S n = S nspecialize le_refl (S n)exact le_reflhave hin : ~(i = n)intro hin_eqspecialize lt_irrefl_expanded napply lt_irrefl_expandedrewrite hin_eq at hiexact hihave hni : ~(n = i)intro hni_eqapply hinsymmexact hni_eqhave hfirst : exists z d. (((exists h. h + S y = S ((S i) * d)) /\ exists q. z = q * S ((S i) * d) + y) /\ forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ((exists h. h + S a = S ((S j) * c)) /\ exists q. b = q * S ((S j) * c) + a) -> ((exists h. h + S a = S ((S j) * d)) /\ exists q. z = q * S ((S j) * d) + a))specialize beta_prefix_replace_exists bspecialize beta_prefix_replace_exists cspecialize beta_prefix_replace_exists ispecialize beta_prefix_replace_exists yspecialize beta_prefix_replace_exists (S n)apply beta_prefix_replace_existsexact hisncases hfirstcases hfirst_witnesscases hfirst_witness_witnesshave hfirst_n : ((exists h. h + S y = S ((S n) * x2)) /\ exists q. x1 = q * S ((S n) * x2) + y)specialize hfirst_witness_witness_right nspecialize hfirst_witness_witness_right yapply hfirst_witness_witness_rightexact hnsnexact hniexact hynhave hsecond : exists z d. (((exists h. h + S x = S ((S n) * d)) /\ exists q. z = q * S ((S n) * d) + x) /\ forall j a. (exists h. h + S j = S n) -> ~(j = n) -> ((exists h. h + S a = S ((S j) * x2)) /\ exists q. x1 = q * S ((S j) * x2) + a) -> ((exists h. h + S a = S ((S j) * d)) /\ exists q. z = q * S ((S j) * d) + a))specialize beta_prefix_replace_exists x1specialize beta_prefix_replace_exists x2specialize beta_prefix_replace_exists nspecialize beta_prefix_replace_exists xspecialize beta_prefix_replace_exists (S n)apply beta_prefix_replace_existsexact hnsncases hsecondcases hsecond_witnesscases hsecond_witness_witnessexists x3exists x4splitspecialize hsecond_witness_witness_right ispecialize hsecond_witness_witness_right yapply hsecond_witness_witness_rightexact hisnexact hinexact hfirst_witness_witness_leftsplitexact hsecond_witness_witness_leftintro jintro aintro hjintro hjiintro hjnintro holdhave hmiddle : ((exists h. h + S a = S ((S j) * x2)) /\ exists q. x1 = q * S ((S j) * x2) + a)specialize hfirst_witness_witness_right jspecialize hfirst_witness_witness_right aapply hfirst_witness_witness_rightexact hjexact hjiexact holdspecialize hsecond_witness_witness_right jspecialize hsecond_witness_witness_right aapply hsecond_witness_witness_rightexact hjexact hjnexact hmiddle
beta_prefix_swap_last_reflect · unchanged support, not a new admission
forall b c z d n i x y. (((exists ff_h_reflect_new_i. ff_h_reflect_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_reflect_new_i. z = ff_q_reflect_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_reflect_new_n. ff_h_reflect_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_reflect_new_n. z = ff_q_reflect_new_n * S ((S (n)) * d) + (x))) -> (forall k v. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_reflect_old_k. ff_h_reflect_old_k + S (v) = S ((S (k)) * c)) /\ exists ff_q_reflect_old_k. b = ff_q_reflect_old_k * S ((S (k)) * c) + (v))) -> (((exists ff_h_reflect_new_k. ff_h_reflect_new_k + S (v) = S ((S (k)) * d)) /\ exists ff_q_reflect_new_k. z = ff_q_reflect_new_k * S ((S (k)) * d) + (v)))) -> forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a)))))))
intro bintro cintro zintro dintro nintro iintro xintro yintro hnew_iintro hnew_nintro hpreserveintro jintro aintro hjintro hnewspecialize eq_decidable jspecialize eq_decidable icases eq_decidableleftsplitexact eq_decidable_leftspecialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique ispecialize beta_at_unique aspecialize beta_at_unique yapply beta_at_uniquerewrite eq_decidable_left at hnewrewrite eq_decidable_left at hnewexact hnewexact hnew_ispecialize eq_decidable_before2 ncases eq_decidable_before2rightleftsplitexact eq_decidable_before2_leftspecialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique nspecialize beta_at_unique aspecialize beta_at_unique xapply beta_at_uniquerewrite eq_decidable_before2_left at hnewrewrite eq_decidable_before2_left at hnewexact hnewexact hnew_nspecialize beta_at_exists bspecialize beta_at_exists cspecialize beta_at_exists jcases beta_at_existshave htransport : ((exists h. h + S x1 = S ((S j) * d)) /\ exists q. z = q * S ((S j) * d) + x1)specialize hpreserve jspecialize hpreserve x1apply hpreserveexact hjexact eq_decidable_rightexact eq_decidable_before2_rightexact beta_at_exists_witnesshave hav : a = x1specialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique jspecialize beta_at_unique aspecialize beta_at_unique x1apply beta_at_uniqueexact hnewexact htransportrightrightsplitexact eq_decidable_rightsplitexact eq_decidable_before2_rightrewrite havrewrite havexact beta_at_exists_witness
finite_swap_last_bounded · unchanged support, not a new admission
forall b c z d n sn i x y. sn = S n -> (exists h. h + S i = n) -> (forall fp_i_swap_bound_old. (exists fp_gap_swap_bound_old_index. fp_gap_swap_bound_old_index + S fp_i_swap_bound_old = sn) -> exists fp_value_swap_bound_old. ((((exists ff_h_swap_bound_old_entry. ff_h_swap_bound_old_entry + S (fp_value_swap_bound_old) = S ((S (fp_i_swap_bound_old)) * c)) /\ exists ff_q_swap_bound_old_entry. b = ff_q_swap_bound_old_entry * S ((S (fp_i_swap_bound_old)) * c) + (fp_value_swap_bound_old))) /\ (exists fp_gap_swap_bound_old_value. fp_gap_swap_bound_old_value + S fp_value_swap_bound_old = sn))) -> (((exists ff_h_swap_bound_old_i. ff_h_swap_bound_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_swap_bound_old_i. b = ff_q_swap_bound_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_swap_bound_old_n. ff_h_swap_bound_old_n + S (y) = S ((S (n)) * c)) /\ exists ff_q_swap_bound_old_n. b = ff_q_swap_bound_old_n * S ((S (n)) * c) + (y))) -> (((exists ff_h_swap_bound_new_i. ff_h_swap_bound_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_swap_bound_new_i. z = ff_q_swap_bound_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_swap_bound_new_n. ff_h_swap_bound_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_swap_bound_new_n. z = ff_q_swap_bound_new_n * S ((S (n)) * d) + (x))) -> (forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ~(j = n) -> (((exists ff_h_swap_bound_old_j. ff_h_swap_bound_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_swap_bound_old_j. b = ff_q_swap_bound_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_swap_bound_new_j. ff_h_swap_bound_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_swap_bound_new_j. z = ff_q_swap_bound_new_j * S ((S (j)) * d) + (a)))) -> (forall fp_i_swap_bound_new. (exists fp_gap_swap_bound_new_index. fp_gap_swap_bound_new_index + S fp_i_swap_bound_new = sn) -> exists fp_value_swap_bound_new. ((((exists ff_h_swap_bound_new_entry. ff_h_swap_bound_new_entry + S (fp_value_swap_bound_new) = S ((S (fp_i_swap_bound_new)) * d)) /\ exists ff_q_swap_bound_new_entry. z = ff_q_swap_bound_new_entry * S ((S (fp_i_swap_bound_new)) * d) + (fp_value_swap_bound_new))) /\ (exists fp_gap_swap_bound_new_value. fp_gap_swap_bound_new_value + S fp_value_swap_bound_new = sn)))
intro bintro cintro zintro dintro nintro snintro iintro xintro yintro hsnintro hiintro hboundedintro hold_iintro hold_nintro hnew_iintro hnew_nintro hpreserverewrite hsn at hboundedrewrite hsn at hboundedhave hisn : exists h. h + S i = S nspecialize le_succ (S i)specialize le_succ napply le_succexact hihave hnsn : exists h. h + S n = S nspecialize le_refl (S n)exact le_reflhave hentry_bound_i : forall b c l i x. (forall fp_i_entry_bound. (exists fp_gap_entry_bound_index. fp_gap_entry_bound_index + S fp_i_entry_bound = l) -> exists fp_value_entry_bound. ((((exists ff_h_entry_bound_entry. ff_h_entry_bound_entry + S (fp_value_entry_bound) = S ((S (fp_i_entry_bound)) * c)) /\ exists ff_q_entry_bound_entry. b = ff_q_entry_bound_entry * S ((S (fp_i_entry_bound)) * c) + (fp_value_entry_bound))) /\ (exists fp_gap_entry_bound_value. fp_gap_entry_bound_value + S fp_value_entry_bound = l))) -> (exists h. h + S i = l) -> (((exists ff_h_entry_bound_at. ff_h_entry_bound_at + S (x) = S ((S (i)) * c)) /\ exists ff_q_entry_bound_at. b = ff_q_entry_bound_at * S ((S (i)) * c) + (x))) -> exists h. h + S x = lexact finite_bounded_entry_lthave hentry_bound_n : forall b c l i x. (forall fp_i_entry_bound. (exists fp_gap_entry_bound_index. fp_gap_entry_bound_index + S fp_i_entry_bound = l) -> exists fp_value_entry_bound. ((((exists ff_h_entry_bound_entry. ff_h_entry_bound_entry + S (fp_value_entry_bound) = S ((S (fp_i_entry_bound)) * c)) /\ exists ff_q_entry_bound_entry. b = ff_q_entry_bound_entry * S ((S (fp_i_entry_bound)) * c) + (fp_value_entry_bound))) /\ (exists fp_gap_entry_bound_value. fp_gap_entry_bound_value + S fp_value_entry_bound = l))) -> (exists h. h + S i = l) -> (((exists ff_h_entry_bound_at. ff_h_entry_bound_at + S (x) = S ((S (i)) * c)) /\ exists ff_q_entry_bound_at. b = ff_q_entry_bound_at * S ((S (i)) * c) + (x))) -> exists h. h + S x = lexact finite_bounded_entry_lthave hxb : exists h. h + S x = S nspecialize hentry_bound_i bspecialize hentry_bound_i cspecialize hentry_bound_i (S n)specialize hentry_bound_i ispecialize hentry_bound_i xapply hentry_bound_iexact hboundedexact hisnexact hold_ihave hyb : exists h. h + S y = S nspecialize hentry_bound_n bspecialize hentry_bound_n cspecialize hentry_bound_n (S n)specialize hentry_bound_n nspecialize hentry_bound_n yapply hentry_bound_nexact hboundedexact hnsnexact hold_nhave heq_i : forall u v. u = v \/ ~(u = v)exact eq_decidablehave heq_n : forall u v. u = v \/ ~(u = v)exact eq_decidablerewrite hsnrewrite hsnintro jintro hjspecialize heq_i jspecialize heq_i icases heq_iexists ysplitrewrite heq_i_leftrewrite heq_i_leftexact hnew_iexact hybspecialize heq_n jspecialize heq_n ncases heq_nexists xsplitrewrite heq_n_leftrewrite heq_n_leftexact hnew_nexact hxbspecialize hbounded jhave hold : exists a. (((exists h. h + S a = S ((S j) * c)) /\ exists q. b = q * S ((S j) * c) + a) /\ exists h. h + S a = S n)apply hboundedexact hjcases holdcases hold_witnessexists x1splitspecialize hpreserve jspecialize hpreserve x1apply hpreserveexact hjexact heq_i_rightexact heq_n_rightexact hold_witness_leftexact hold_witness_right
finite_swap_last_injective · unchanged support, not a new admission
forall b c z d n sn i x y. sn = S n -> (exists h. h + S i = n) -> (forall fp_i_swap_inj_old fp_j_swap_inj_old fp_value_swap_inj_old. (exists fp_gap_swap_inj_old_i. fp_gap_swap_inj_old_i + S fp_i_swap_inj_old = sn) -> (exists fp_gap_swap_inj_old_j. fp_gap_swap_inj_old_j + S fp_j_swap_inj_old = sn) -> (((exists ff_h_swap_inj_old_left. ff_h_swap_inj_old_left + S (fp_value_swap_inj_old) = S ((S (fp_i_swap_inj_old)) * c)) /\ exists ff_q_swap_inj_old_left. b = ff_q_swap_inj_old_left * S ((S (fp_i_swap_inj_old)) * c) + (fp_value_swap_inj_old))) -> (((exists ff_h_swap_inj_old_right. ff_h_swap_inj_old_right + S (fp_value_swap_inj_old) = S ((S (fp_j_swap_inj_old)) * c)) /\ exists ff_q_swap_inj_old_right. b = ff_q_swap_inj_old_right * S ((S (fp_j_swap_inj_old)) * c) + (fp_value_swap_inj_old))) -> fp_i_swap_inj_old = fp_j_swap_inj_old) -> (((exists ff_h_swap_inj_old_i. ff_h_swap_inj_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_swap_inj_old_i. b = ff_q_swap_inj_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_swap_inj_old_n. ff_h_swap_inj_old_n + S (y) = S ((S (n)) * c)) /\ exists ff_q_swap_inj_old_n. b = ff_q_swap_inj_old_n * S ((S (n)) * c) + (y))) -> (((exists ff_h_swap_inj_new_i. ff_h_swap_inj_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_swap_inj_new_i. z = ff_q_swap_inj_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_swap_inj_new_n. ff_h_swap_inj_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_swap_inj_new_n. z = ff_q_swap_inj_new_n * S ((S (n)) * d) + (x))) -> (forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ~(j = n) -> (((exists ff_h_swap_inj_old_j. ff_h_swap_inj_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_swap_inj_old_j. b = ff_q_swap_inj_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_swap_inj_new_j. ff_h_swap_inj_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_swap_inj_new_j. z = ff_q_swap_inj_new_j * S ((S (j)) * d) + (a)))) -> (forall fp_i_swap_inj_new fp_j_swap_inj_new fp_value_swap_inj_new. (exists fp_gap_swap_inj_new_i. fp_gap_swap_inj_new_i + S fp_i_swap_inj_new = sn) -> (exists fp_gap_swap_inj_new_j. fp_gap_swap_inj_new_j + S fp_j_swap_inj_new = sn) -> (((exists ff_h_swap_inj_new_left. ff_h_swap_inj_new_left + S (fp_value_swap_inj_new) = S ((S (fp_i_swap_inj_new)) * d)) /\ exists ff_q_swap_inj_new_left. z = ff_q_swap_inj_new_left * S ((S (fp_i_swap_inj_new)) * d) + (fp_value_swap_inj_new))) -> (((exists ff_h_swap_inj_new_right. ff_h_swap_inj_new_right + S (fp_value_swap_inj_new) = S ((S (fp_j_swap_inj_new)) * d)) /\ exists ff_q_swap_inj_new_right. z = ff_q_swap_inj_new_right * S ((S (fp_j_swap_inj_new)) * d) + (fp_value_swap_inj_new))) -> fp_i_swap_inj_new = fp_j_swap_inj_new)
intro bintro cintro zintro dintro nintro snintro iintro xintro yintro hsnintro hiintro hinjectiveintro hold_iintro hold_nintro hnew_iintro hnew_nintro hpreserverewrite hsn at hinjectiverewrite hsn at hinjectivehave hisn : exists h. h + S i = S nspecialize le_succ (S i)specialize le_succ napply le_succexact hihave hnsn : exists h. h + S n = S nspecialize le_refl (S n)exact le_reflhave hreflect_j : forall b c z d n i x y. (((exists ff_h_reflect_new_i. ff_h_reflect_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_reflect_new_i. z = ff_q_reflect_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_reflect_new_n. ff_h_reflect_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_reflect_new_n. z = ff_q_reflect_new_n * S ((S (n)) * d) + (x))) -> (forall k v. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_reflect_old_k. ff_h_reflect_old_k + S (v) = S ((S (k)) * c)) /\ exists ff_q_reflect_old_k. b = ff_q_reflect_old_k * S ((S (k)) * c) + (v))) -> (((exists ff_h_reflect_new_k. ff_h_reflect_new_k + S (v) = S ((S (k)) * d)) /\ exists ff_q_reflect_new_k. z = ff_q_reflect_new_k * S ((S (k)) * d) + (v)))) -> forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a)))))))exact beta_prefix_swap_last_reflecthave hreflect_k : forall b c z d n i x y. (((exists ff_h_reflect_new_i. ff_h_reflect_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_reflect_new_i. z = ff_q_reflect_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_reflect_new_n. ff_h_reflect_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_reflect_new_n. z = ff_q_reflect_new_n * S ((S (n)) * d) + (x))) -> (forall k v. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_reflect_old_k. ff_h_reflect_old_k + S (v) = S ((S (k)) * c)) /\ exists ff_q_reflect_old_k. b = ff_q_reflect_old_k * S ((S (k)) * c) + (v))) -> (((exists ff_h_reflect_new_k. ff_h_reflect_new_k + S (v) = S ((S (k)) * d)) /\ exists ff_q_reflect_new_k. z = ff_q_reflect_new_k * S ((S (k)) * d) + (v)))) -> forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a)))))))exact beta_prefix_swap_last_reflectrewrite hsnrewrite hsnintro jintro kintro aintro hjintro hkintro hnew_jintro hnew_kspecialize hreflect_j bspecialize hreflect_j cspecialize hreflect_j zspecialize hreflect_j dspecialize hreflect_j nspecialize hreflect_j ispecialize hreflect_j xspecialize hreflect_j yhave hreflect_entries_j : forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a)))))))apply hreflect_jexact hnew_iexact hnew_nexact hpreservespecialize hreflect_entries_j jspecialize hreflect_entries_j ahave hclass_j : ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ ((exists h. h + S a = S ((S j) * c)) /\ exists q. b = q * S ((S j) * c) + a)))))apply hreflect_entries_jexact hjexact hnew_jspecialize hreflect_k bspecialize hreflect_k cspecialize hreflect_k zspecialize hreflect_k dspecialize hreflect_k nspecialize hreflect_k ispecialize hreflect_k xspecialize hreflect_k yhave hreflect_entries_k : forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a)))))))apply hreflect_kexact hnew_iexact hnew_nexact hpreservespecialize hreflect_entries_k kspecialize hreflect_entries_k ahave hclass_k : ((k = i /\ a = y) \/ ((k = n /\ a = x) \/ (~(k = i) /\ (~(k = n) /\ ((exists h. h + S a = S ((S k) * c)) /\ exists q. b = q * S ((S k) * c) + a)))))apply hreflect_entries_kexact hkexact hnew_kcases hclass_jcases hclass_j_leftcases hclass_kcases hclass_k_lefttrans iexact hclass_j_left_leftsymmexact hclass_k_left_leftcases hclass_k_rightcases hclass_k_right_lefthave hxy : x = ytrans asymmexact hclass_k_right_left_rightexact hclass_j_left_righthave hin : i = nspecialize hinjective ispecialize hinjective nspecialize hinjective xapply hinjectiveexact hisnexact hnsnexact hold_irewrite hxyrewrite hxyexact hold_ntrans iexact hclass_j_left_lefttrans nexact hinsymmexact hclass_k_right_left_leftcases hclass_k_right_rightcases hclass_k_right_right_righthave hnk : n = kspecialize hinjective nspecialize hinjective kspecialize hinjective yapply hinjectiveexact hnsnexact hkexact hold_nrewrite <- hclass_j_left_rightrewrite <- hclass_j_left_rightexact hclass_k_right_right_right_rightexfalsoapply hclass_k_right_right_right_leftsymmexact hnkcases hclass_j_rightcases hclass_j_right_leftcases hclass_kcases hclass_k_lefthave hxy2 : x = ytrans asymmexact hclass_j_right_left_rightexact hclass_k_left_righthave hin2 : n = ispecialize hinjective nspecialize hinjective ispecialize hinjective yapply hinjectiveexact hnsnexact hisnexact hold_nrewrite <- hxy2rewrite <- hxy2exact hold_itrans nexact hclass_j_right_left_lefttrans iexact hin2symmexact hclass_k_left_leftcases hclass_k_rightcases hclass_k_right_lefttrans nexact hclass_j_right_left_leftsymmexact hclass_k_right_left_leftcases hclass_k_right_rightcases hclass_k_right_right_righthave hik : i = kspecialize hinjective ispecialize hinjective kspecialize hinjective xapply hinjectiveexact hisnexact hkexact hold_irewrite <- hclass_j_right_left_rightrewrite <- hclass_j_right_left_rightexact hclass_k_right_right_right_rightexfalsoapply hclass_k_right_right_leftsymmexact hikcases hclass_j_right_rightcases hclass_j_right_right_rightcases hclass_kcases hclass_k_lefthave hjn : j = nspecialize hinjective jspecialize hinjective nspecialize hinjective yapply hinjectiveexact hjexact hnsnrewrite <- hclass_k_left_rightrewrite <- hclass_k_left_rightexact hclass_j_right_right_right_rightexact hold_nexfalsoapply hclass_j_right_right_right_leftexact hjncases hclass_k_rightcases hclass_k_right_lefthave hji : j = ispecialize hinjective jspecialize hinjective ispecialize hinjective xapply hinjectiveexact hjexact hisnrewrite <- hclass_k_right_left_rightrewrite <- hclass_k_right_left_rightexact hclass_j_right_right_right_rightexact hold_iexfalsoapply hclass_j_right_right_leftexact hjicases hclass_k_right_rightcases hclass_k_right_right_rightspecialize hinjective jspecialize hinjective kspecialize hinjective aapply hinjectiveexact hjexact hkexact hclass_j_right_right_right_rightexact hclass_k_right_right_right_right
finite_swap_last_surjective_back · unchanged support, not a new admission
forall b c z d n sn i x y. sn = S n -> (exists h. h + S i = n) -> (((exists ff_h_swap_surj_old_i. ff_h_swap_surj_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_swap_surj_old_i. b = ff_q_swap_surj_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_swap_surj_old_n. ff_h_swap_surj_old_n + S (y) = S ((S (n)) * c)) /\ exists ff_q_swap_surj_old_n. b = ff_q_swap_surj_old_n * S ((S (n)) * c) + (y))) -> (((exists ff_h_swap_surj_new_i. ff_h_swap_surj_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_swap_surj_new_i. z = ff_q_swap_surj_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_swap_surj_new_n. ff_h_swap_surj_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_swap_surj_new_n. z = ff_q_swap_surj_new_n * S ((S (n)) * d) + (x))) -> (forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ~(j = n) -> (((exists ff_h_swap_surj_old_j. ff_h_swap_surj_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_swap_surj_old_j. b = ff_q_swap_surj_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_swap_surj_new_j. ff_h_swap_surj_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_swap_surj_new_j. z = ff_q_swap_surj_new_j * S ((S (j)) * d) + (a)))) -> (forall fp_value_swap_surj_new. (exists fp_gap_swap_surj_new_value. fp_gap_swap_surj_new_value + S fp_value_swap_surj_new = sn) -> exists fp_i_swap_surj_new. ((exists fp_gap_swap_surj_new_index. fp_gap_swap_surj_new_index + S fp_i_swap_surj_new = sn) /\ (((exists ff_h_swap_surj_new_entry. ff_h_swap_surj_new_entry + S (fp_value_swap_surj_new) = S ((S (fp_i_swap_surj_new)) * d)) /\ exists ff_q_swap_surj_new_entry. z = ff_q_swap_surj_new_entry * S ((S (fp_i_swap_surj_new)) * d) + (fp_value_swap_surj_new))))) -> (forall fp_value_swap_surj_old. (exists fp_gap_swap_surj_old_value. fp_gap_swap_surj_old_value + S fp_value_swap_surj_old = sn) -> exists fp_i_swap_surj_old. ((exists fp_gap_swap_surj_old_index. fp_gap_swap_surj_old_index + S fp_i_swap_surj_old = sn) /\ (((exists ff_h_swap_surj_old_entry. ff_h_swap_surj_old_entry + S (fp_value_swap_surj_old) = S ((S (fp_i_swap_surj_old)) * c)) /\ exists ff_q_swap_surj_old_entry. b = ff_q_swap_surj_old_entry * S ((S (fp_i_swap_surj_old)) * c) + (fp_value_swap_surj_old)))))
intro bintro cintro zintro dintro nintro snintro iintro xintro yintro hsnintro hiintro hold_iintro hold_nintro hnew_iintro hnew_nintro hpreserveintro hsurjectiverewrite hsn at hsurjectiverewrite hsn at hsurjectivehave hisn : exists h. h + S i = S nspecialize le_succ (S i)specialize le_succ napply le_succexact hihave hnsn : exists h. h + S n = S nspecialize le_refl (S n)exact le_reflhave hreflect : forall b c z d n i x y. (((exists ff_h_reflect_new_i. ff_h_reflect_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_reflect_new_i. z = ff_q_reflect_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_reflect_new_n. ff_h_reflect_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_reflect_new_n. z = ff_q_reflect_new_n * S ((S (n)) * d) + (x))) -> (forall k v. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_reflect_old_k. ff_h_reflect_old_k + S (v) = S ((S (k)) * c)) /\ exists ff_q_reflect_old_k. b = ff_q_reflect_old_k * S ((S (k)) * c) + (v))) -> (((exists ff_h_reflect_new_k. ff_h_reflect_new_k + S (v) = S ((S (k)) * d)) /\ exists ff_q_reflect_new_k. z = ff_q_reflect_new_k * S ((S (k)) * d) + (v)))) -> forall j a. (exists h. h + S j = S n) -> (((exists ff_h_reflect_new_j. ff_h_reflect_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_reflect_new_j. z = ff_q_reflect_new_j * S ((S (j)) * d) + (a))) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ (((exists ff_h_reflect_old_j. ff_h_reflect_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_reflect_old_j. b = ff_q_reflect_old_j * S ((S (j)) * c) + (a)))))))exact beta_prefix_swap_last_reflectspecialize hreflect bspecialize hreflect cspecialize hreflect zspecialize hreflect dspecialize hreflect nspecialize hreflect ispecialize hreflect xspecialize hreflect yhave hreflect_entries : forall j a. (exists h. h + S j = S n) -> ((exists h. h + S a = S ((S j) * d)) /\ exists q. z = q * S ((S j) * d) + a) -> ((j = i /\ a = y) \/ ((j = n /\ a = x) \/ (~(j = i) /\ (~(j = n) /\ ((exists h. h + S a = S ((S j) * c)) /\ exists q. b = q * S ((S j) * c) + a)))))apply hreflectexact hnew_iexact hnew_nexact hpreserverewrite hsnrewrite hsnintro aintro haspecialize hsurjective ahave hoccurs : exists j. ((exists h. h + S j = S n) /\ ((exists h. h + S a = S ((S j) * d)) /\ exists q. z = q * S ((S j) * d) + a))apply hsurjectiveexact hacases hoccurscases hoccurs_witnessspecialize hreflect_entries x1specialize hreflect_entries ahave hsource : ((x1 = i /\ a = y) \/ ((x1 = n /\ a = x) \/ (~(x1 = i) /\ (~(x1 = n) /\ ((exists h. h + S a = S ((S x1) * c)) /\ exists q. b = q * S ((S x1) * c) + a)))))apply hreflect_entriesexact hoccurs_witness_leftexact hoccurs_witness_rightcases hsourcecases hsource_leftexists nsplitexact hnsnrewrite hsource_left_rightrewrite hsource_left_rightexact hold_ncases hsource_rightcases hsource_right_leftexists isplitexact hisnrewrite hsource_right_left_rightrewrite hsource_right_left_rightexact hold_icases hsource_right_rightcases hsource_right_right_rightexists x1splitexact hoccurs_witness_leftexact hsource_right_right_right_right
finite_contains_decidable · unchanged support, not a new admission
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))))))
intro bintro cinduction lintro yrightintro hcontainscases hcontainscases hcontains_witnesscases hcontains_witness_lefthave hsi : S x = 0specialize add_eq_zero_right x1specialize add_eq_zero_right (S x)apply add_eq_zero_rightexact hcontains_witness_left_witnessspecialize succ_ne_zero xapply succ_ne_zeroexact hsiintro yhave 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)))specialize IH yexact IHcases hpresentleftcases hpresent_leftcases hpresent_left_witnessexists xsplitspecialize le_succ (S x)specialize le_succ lapply le_succexact hpresent_left_witness_leftexact hpresent_left_witness_rightspecialize beta_at_exists bspecialize beta_at_exists cspecialize beta_at_exists lcases beta_at_existsspecialize eq_decidable xspecialize eq_decidable ycases eq_decidableleftexists lsplitspecialize le_refl (S l)exact le_reflrewrite eq_decidable_left at beta_at_exists_witnessrewrite eq_decidable_left at beta_at_exists_witnessexact beta_at_exists_witnessrightintro hfullcases hfullcases hfull_witnesshave hindex : x1 = l \/ exists h. h + S x1 = lspecialize finite_lt_succ_eq_or_lt lspecialize finite_lt_succ_eq_or_lt x1apply finite_lt_succ_eq_or_ltexact hfull_witness_leftcases hindexhave hentry : ((exists h. h + S y = S ((S l) * c)) /\ exists q. b = q * S ((S l) * c) + y)rewrite hindex_left at hfull_witness_rightrewrite hindex_left at hfull_witness_rightexact hfull_witness_righthave hxy : x = yspecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique lspecialize beta_at_unique xspecialize beta_at_unique yapply beta_at_uniqueexact beta_at_exists_witnessexact hentryapply eq_decidable_rightexact hxyapply hpresent_rightexists x1splitexact hindex_rightexact hfull_witness_right
finite_bounded_prefix_without_top · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_i_bounded_succ. (exists fp_gap_bounded_succ_index. fp_gap_bounded_succ_index + S fp_i_bounded_succ = sn) -> exists fp_value_bounded_succ. ((((exists ff_h_bounded_succ_entry. ff_h_bounded_succ_entry + S (fp_value_bounded_succ) = S ((S (fp_i_bounded_succ)) * c)) /\ exists ff_q_bounded_succ_entry. b = ff_q_bounded_succ_entry * S ((S (fp_i_bounded_succ)) * c) + (fp_value_bounded_succ))) /\ (exists fp_gap_bounded_succ_value. fp_gap_bounded_succ_value + S fp_value_bounded_succ = sn))) -> (forall i. (exists h. h + S i = n) -> ~(((exists ff_h_top_i. ff_h_top_i + S (n) = S ((S (i)) * c)) /\ exists ff_q_top_i. b = ff_q_top_i * S ((S (i)) * c) + (n)))) -> (forall fp_i_bounded_prefix. (exists fp_gap_bounded_prefix_index. fp_gap_bounded_prefix_index + S fp_i_bounded_prefix = n) -> exists fp_value_bounded_prefix. ((((exists ff_h_bounded_prefix_entry. ff_h_bounded_prefix_entry + S (fp_value_bounded_prefix) = S ((S (fp_i_bounded_prefix)) * c)) /\ exists ff_q_bounded_prefix_entry. b = ff_q_bounded_prefix_entry * S ((S (fp_i_bounded_prefix)) * c) + (fp_value_bounded_prefix))) /\ (exists fp_gap_bounded_prefix_value. fp_gap_bounded_prefix_value + S fp_value_bounded_prefix = n)))
intro bintro cintro nintro snintro hsnintro hboundedintro hnotoprewrite hsn at hboundedrewrite hsn at hboundedintro iintro hispecialize hbounded ihave hfull : exists x. (((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x) /\ exists h. h + S x = S n)apply hboundedspecialize le_succ (S i)specialize le_succ napply le_succexact hicases hfullcases hfull_witnesshave hsplit : x = n \/ exists h. h + S x = nspecialize finite_lt_succ_eq_or_lt nspecialize finite_lt_succ_eq_or_lt xapply finite_lt_succ_eq_or_ltexact hfull_witness_rightcases hsplitexfalsospecialize hnotop iapply hnotopexact hirewrite <- hsplit_leftrewrite <- hsplit_leftexact hfull_witness_leftexists xsplitexact hfull_witness_leftexact hsplit_right
finite_bounded_last_succ · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_i_bounded_succ. (exists fp_gap_bounded_succ_index. fp_gap_bounded_succ_index + S fp_i_bounded_succ = sn) -> exists fp_value_bounded_succ. ((((exists ff_h_bounded_succ_entry. ff_h_bounded_succ_entry + S (fp_value_bounded_succ) = S ((S (fp_i_bounded_succ)) * c)) /\ exists ff_q_bounded_succ_entry. b = ff_q_bounded_succ_entry * S ((S (fp_i_bounded_succ)) * c) + (fp_value_bounded_succ))) /\ (exists fp_gap_bounded_succ_value. fp_gap_bounded_succ_value + S fp_value_bounded_succ = sn))) -> exists x. ((((exists ff_h_last_x. ff_h_last_x + S (x) = S ((S (n)) * c)) /\ exists ff_q_last_x. b = ff_q_last_x * S ((S (n)) * c) + (x))) /\ exists h. h + S x = S n)
intro bintro cintro nintro snintro hsnintro hboundedrewrite hsn at hboundedrewrite hsn at hboundedspecialize hbounded napply hboundedspecialize le_refl (S n)exact le_refl
finite_surjective_succ_intro · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_value_surj_n. (exists fp_gap_surj_n_value. fp_gap_surj_n_value + S fp_value_surj_n = n) -> exists fp_i_surj_n. ((exists fp_gap_surj_n_index. fp_gap_surj_n_index + S fp_i_surj_n = n) /\ (((exists ff_h_surj_n_entry. ff_h_surj_n_entry + S (fp_value_surj_n) = S ((S (fp_i_surj_n)) * c)) /\ exists ff_q_surj_n_entry. b = ff_q_surj_n_entry * S ((S (fp_i_surj_n)) * c) + (fp_value_surj_n))))) -> (((exists ff_h_last_n. ff_h_last_n + S (n) = S ((S (n)) * c)) /\ exists ff_q_last_n. b = ff_q_last_n * S ((S (n)) * c) + (n))) -> (forall fp_value_surj_succ. (exists fp_gap_surj_succ_value. fp_gap_surj_succ_value + S fp_value_surj_succ = sn) -> exists fp_i_surj_succ. ((exists fp_gap_surj_succ_index. fp_gap_surj_succ_index + S fp_i_surj_succ = sn) /\ (((exists ff_h_surj_succ_entry. ff_h_surj_succ_entry + S (fp_value_surj_succ) = S ((S (fp_i_surj_succ)) * c)) /\ exists ff_q_surj_succ_entry. b = ff_q_surj_succ_entry * S ((S (fp_i_surj_succ)) * c) + (fp_value_surj_succ)))))
intro bintro cintro nintro snintro hsnintro hsurjintro hlastrewrite hsnrewrite hsnintro yintro hyhave hsplit : y = n \/ exists h. h + S y = nspecialize finite_lt_succ_eq_or_lt nspecialize finite_lt_succ_eq_or_lt yapply finite_lt_succ_eq_or_ltexact hycases hsplitexists nsplitspecialize le_refl (S n)exact le_reflrewrite hsplit_leftrewrite hsplit_leftexact hlastspecialize hsurj yhave hpre : exists i. ((exists h. h + S i = n) /\ ((exists h. h + S y = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + y))apply hsurjexact hsplit_rightcases hprecases hpre_witnessexists xsplitspecialize le_succ (S x)specialize le_succ napply le_succexact hpre_witness_leftexact hpre_witness_right
finite_last_is_top_from_prefix_surjective · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_i_bounded_succ. (exists fp_gap_bounded_succ_index. fp_gap_bounded_succ_index + S fp_i_bounded_succ = sn) -> exists fp_value_bounded_succ. ((((exists ff_h_bounded_succ_entry. ff_h_bounded_succ_entry + S (fp_value_bounded_succ) = S ((S (fp_i_bounded_succ)) * c)) /\ exists ff_q_bounded_succ_entry. b = ff_q_bounded_succ_entry * S ((S (fp_i_bounded_succ)) * c) + (fp_value_bounded_succ))) /\ (exists fp_gap_bounded_succ_value. fp_gap_bounded_succ_value + S fp_value_bounded_succ = sn))) -> (forall fp_i_inj_succ fp_j_inj_succ fp_value_inj_succ. (exists fp_gap_inj_succ_i. fp_gap_inj_succ_i + S fp_i_inj_succ = sn) -> (exists fp_gap_inj_succ_j. fp_gap_inj_succ_j + S fp_j_inj_succ = sn) -> (((exists ff_h_inj_succ_left. ff_h_inj_succ_left + S (fp_value_inj_succ) = S ((S (fp_i_inj_succ)) * c)) /\ exists ff_q_inj_succ_left. b = ff_q_inj_succ_left * S ((S (fp_i_inj_succ)) * c) + (fp_value_inj_succ))) -> (((exists ff_h_inj_succ_right. ff_h_inj_succ_right + S (fp_value_inj_succ) = S ((S (fp_j_inj_succ)) * c)) /\ exists ff_q_inj_succ_right. b = ff_q_inj_succ_right * S ((S (fp_j_inj_succ)) * c) + (fp_value_inj_succ))) -> fp_i_inj_succ = fp_j_inj_succ) -> (forall fp_value_surj_n. (exists fp_gap_surj_n_value. fp_gap_surj_n_value + S fp_value_surj_n = n) -> exists fp_i_surj_n. ((exists fp_gap_surj_n_index. fp_gap_surj_n_index + S fp_i_surj_n = n) /\ (((exists ff_h_surj_n_entry. ff_h_surj_n_entry + S (fp_value_surj_n) = S ((S (fp_i_surj_n)) * c)) /\ exists ff_q_surj_n_entry. b = ff_q_surj_n_entry * S ((S (fp_i_surj_n)) * c) + (fp_value_surj_n))))) -> (((exists ff_h_last_n. ff_h_last_n + S (n) = S ((S (n)) * c)) /\ exists ff_q_last_n. b = ff_q_last_n * S ((S (n)) * c) + (n)))
intro bintro cintro nintro snintro hsnintro hboundedintro hinjintro hsurjrewrite hsn at hinjrewrite hsn at hinjhave hlast : exists x. (((exists h. h + S x = S ((S n) * c)) /\ exists q. b = q * S ((S n) * c) + x) /\ exists h. h + S x = S n)specialize finite_bounded_last_succ bspecialize finite_bounded_last_succ cspecialize finite_bounded_last_succ nspecialize finite_bounded_last_succ snapply finite_bounded_last_succexact hsnexact hboundedcases hlastcases hlast_witnesshave hsplit : x = n \/ exists h. h + S x = nspecialize finite_lt_succ_eq_or_lt nspecialize finite_lt_succ_eq_or_lt xapply finite_lt_succ_eq_or_ltexact hlast_witness_rightcases hsplitrewrite hsplit_left at hlast_witness_leftrewrite hsplit_left at hlast_witness_leftexact hlast_witness_leftspecialize hsurj xhave hpre : exists i. ((exists h. h + S i = n) /\ ((exists h. h + S x = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + x))apply hsurjexact hsplit_rightcases hprecases hpre_witnesshave hni : n = x1specialize hinj nspecialize hinj x1specialize hinj xapply hinjspecialize le_refl (S n)exact le_reflspecialize le_succ (S x1)specialize le_succ napply le_succexact hpre_witness_leftexact hlast_witness_leftexact hpre_witness_rightexfalsospecialize lt_irrefl_expanded napply lt_irrefl_expandedrewrite hniexact hpre_witness_left
finite_surjective_succ_from_prefix · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_i_bounded_succ. (exists fp_gap_bounded_succ_index. fp_gap_bounded_succ_index + S fp_i_bounded_succ = sn) -> exists fp_value_bounded_succ. ((((exists ff_h_bounded_succ_entry. ff_h_bounded_succ_entry + S (fp_value_bounded_succ) = S ((S (fp_i_bounded_succ)) * c)) /\ exists ff_q_bounded_succ_entry. b = ff_q_bounded_succ_entry * S ((S (fp_i_bounded_succ)) * c) + (fp_value_bounded_succ))) /\ (exists fp_gap_bounded_succ_value. fp_gap_bounded_succ_value + S fp_value_bounded_succ = sn))) -> (forall fp_i_inj_succ fp_j_inj_succ fp_value_inj_succ. (exists fp_gap_inj_succ_i. fp_gap_inj_succ_i + S fp_i_inj_succ = sn) -> (exists fp_gap_inj_succ_j. fp_gap_inj_succ_j + S fp_j_inj_succ = sn) -> (((exists ff_h_inj_succ_left. ff_h_inj_succ_left + S (fp_value_inj_succ) = S ((S (fp_i_inj_succ)) * c)) /\ exists ff_q_inj_succ_left. b = ff_q_inj_succ_left * S ((S (fp_i_inj_succ)) * c) + (fp_value_inj_succ))) -> (((exists ff_h_inj_succ_right. ff_h_inj_succ_right + S (fp_value_inj_succ) = S ((S (fp_j_inj_succ)) * c)) /\ exists ff_q_inj_succ_right. b = ff_q_inj_succ_right * S ((S (fp_j_inj_succ)) * c) + (fp_value_inj_succ))) -> fp_i_inj_succ = fp_j_inj_succ) -> (forall fp_value_surj_n. (exists fp_gap_surj_n_value. fp_gap_surj_n_value + S fp_value_surj_n = n) -> exists fp_i_surj_n. ((exists fp_gap_surj_n_index. fp_gap_surj_n_index + S fp_i_surj_n = n) /\ (((exists ff_h_surj_n_entry. ff_h_surj_n_entry + S (fp_value_surj_n) = S ((S (fp_i_surj_n)) * c)) /\ exists ff_q_surj_n_entry. b = ff_q_surj_n_entry * S ((S (fp_i_surj_n)) * c) + (fp_value_surj_n))))) -> (forall fp_value_surj_succ. (exists fp_gap_surj_succ_value. fp_gap_surj_succ_value + S fp_value_surj_succ = sn) -> exists fp_i_surj_succ. ((exists fp_gap_surj_succ_index. fp_gap_surj_succ_index + S fp_i_surj_succ = sn) /\ (((exists ff_h_surj_succ_entry. ff_h_surj_succ_entry + S (fp_value_surj_succ) = S ((S (fp_i_surj_succ)) * c)) /\ exists ff_q_surj_succ_entry. b = ff_q_surj_succ_entry * S ((S (fp_i_surj_succ)) * c) + (fp_value_surj_succ)))))
intro bintro cintro nintro snintro hsnintro hboundedintro hinjintro hsurjhave hlast : ((exists ff_h_last_n. ff_h_last_n + S (n) = S ((S (n)) * c)) /\ exists ff_q_last_n. b = ff_q_last_n * S ((S (n)) * c) + (n))specialize finite_last_is_top_from_prefix_surjective bspecialize finite_last_is_top_from_prefix_surjective cspecialize finite_last_is_top_from_prefix_surjective nspecialize finite_last_is_top_from_prefix_surjective snapply finite_last_is_top_from_prefix_surjectiveexact hsnexact hboundedexact hinjexact hsurjspecialize finite_surjective_succ_intro bspecialize finite_surjective_succ_intro cspecialize finite_surjective_succ_intro nspecialize finite_surjective_succ_intro snapply finite_surjective_succ_introexact hsnexact hsurjexact hlast
finite_no_top_successor_gate · unchanged support, not a new admission
forall b c n sn. sn = S n -> (forall fp_i_bounded_succ. (exists fp_gap_bounded_succ_index. fp_gap_bounded_succ_index + S fp_i_bounded_succ = sn) -> exists fp_value_bounded_succ. ((((exists ff_h_bounded_succ_entry. ff_h_bounded_succ_entry + S (fp_value_bounded_succ) = S ((S (fp_i_bounded_succ)) * c)) /\ exists ff_q_bounded_succ_entry. b = ff_q_bounded_succ_entry * S ((S (fp_i_bounded_succ)) * c) + (fp_value_bounded_succ))) /\ (exists fp_gap_bounded_succ_value. fp_gap_bounded_succ_value + S fp_value_bounded_succ = sn))) -> (forall fp_i_inj_succ fp_j_inj_succ fp_value_inj_succ. (exists fp_gap_inj_succ_i. fp_gap_inj_succ_i + S fp_i_inj_succ = sn) -> (exists fp_gap_inj_succ_j. fp_gap_inj_succ_j + S fp_j_inj_succ = sn) -> (((exists ff_h_inj_succ_left. ff_h_inj_succ_left + S (fp_value_inj_succ) = S ((S (fp_i_inj_succ)) * c)) /\ exists ff_q_inj_succ_left. b = ff_q_inj_succ_left * S ((S (fp_i_inj_succ)) * c) + (fp_value_inj_succ))) -> (((exists ff_h_inj_succ_right. ff_h_inj_succ_right + S (fp_value_inj_succ) = S ((S (fp_j_inj_succ)) * c)) /\ exists ff_q_inj_succ_right. b = ff_q_inj_succ_right * S ((S (fp_j_inj_succ)) * c) + (fp_value_inj_succ))) -> fp_i_inj_succ = fp_j_inj_succ) -> ~(exists fp_i_contains_top. ((exists fp_gap_contains_top_index. fp_gap_contains_top_index + S fp_i_contains_top = n) /\ (((exists ff_h_contains_top_entry. ff_h_contains_top_entry + S (n) = S ((S (fp_i_contains_top)) * c)) /\ exists ff_q_contains_top_entry. b = ff_q_contains_top_entry * S ((S (fp_i_contains_top)) * c) + (n))))) -> ((forall fp_i_bounded_prefix. (exists fp_gap_bounded_prefix_index. fp_gap_bounded_prefix_index + S fp_i_bounded_prefix = n) -> exists fp_value_bounded_prefix. ((((exists ff_h_bounded_prefix_entry. ff_h_bounded_prefix_entry + S (fp_value_bounded_prefix) = S ((S (fp_i_bounded_prefix)) * c)) /\ exists ff_q_bounded_prefix_entry. b = ff_q_bounded_prefix_entry * S ((S (fp_i_bounded_prefix)) * c) + (fp_value_bounded_prefix))) /\ (exists fp_gap_bounded_prefix_value. fp_gap_bounded_prefix_value + S fp_value_bounded_prefix = n))) -> (forall fp_i_inj_prefix fp_j_inj_prefix fp_value_inj_prefix. (exists fp_gap_inj_prefix_i. fp_gap_inj_prefix_i + S fp_i_inj_prefix = n) -> (exists fp_gap_inj_prefix_j. fp_gap_inj_prefix_j + S fp_j_inj_prefix = n) -> (((exists ff_h_inj_prefix_left. ff_h_inj_prefix_left + S (fp_value_inj_prefix) = S ((S (fp_i_inj_prefix)) * c)) /\ exists ff_q_inj_prefix_left. b = ff_q_inj_prefix_left * S ((S (fp_i_inj_prefix)) * c) + (fp_value_inj_prefix))) -> (((exists ff_h_inj_prefix_right. ff_h_inj_prefix_right + S (fp_value_inj_prefix) = S ((S (fp_j_inj_prefix)) * c)) /\ exists ff_q_inj_prefix_right. b = ff_q_inj_prefix_right * S ((S (fp_j_inj_prefix)) * c) + (fp_value_inj_prefix))) -> fp_i_inj_prefix = fp_j_inj_prefix) -> (forall fp_value_surj_n. (exists fp_gap_surj_n_value. fp_gap_surj_n_value + S fp_value_surj_n = n) -> exists fp_i_surj_n. ((exists fp_gap_surj_n_index. fp_gap_surj_n_index + S fp_i_surj_n = n) /\ (((exists ff_h_surj_n_entry. ff_h_surj_n_entry + S (fp_value_surj_n) = S ((S (fp_i_surj_n)) * c)) /\ exists ff_q_surj_n_entry. b = ff_q_surj_n_entry * S ((S (fp_i_surj_n)) * c) + (fp_value_surj_n)))))) -> (forall fp_value_surj_succ. (exists fp_gap_surj_succ_value. fp_gap_surj_succ_value + S fp_value_surj_succ = sn) -> exists fp_i_surj_succ. ((exists fp_gap_surj_succ_index. fp_gap_surj_succ_index + S fp_i_surj_succ = sn) /\ (((exists ff_h_surj_succ_entry. ff_h_surj_succ_entry + S (fp_value_surj_succ) = S ((S (fp_i_surj_succ)) * c)) /\ exists ff_q_surj_succ_entry. b = ff_q_surj_succ_entry * S ((S (fp_i_surj_succ)) * c) + (fp_value_surj_succ)))))
intro bintro cintro nintro snintro hsnintro hboundedintro hinjintro hmissingintro hinductionhave hnotop : forall i. (exists h. h + S i = n) -> ~((exists h. h + S n = S ((S i) * c)) /\ exists q. b = q * S ((S i) * c) + n)intro iintro hiintro hentryapply hmissingexists isplitexact hiexact hentryhave hprefix_bounded : forall fp_i_bounded_prefix. (exists fp_gap_bounded_prefix_index. fp_gap_bounded_prefix_index + S fp_i_bounded_prefix = n) -> exists fp_value_bounded_prefix. ((((exists ff_h_bounded_prefix_entry. ff_h_bounded_prefix_entry + S (fp_value_bounded_prefix) = S ((S (fp_i_bounded_prefix)) * c)) /\ exists ff_q_bounded_prefix_entry. b = ff_q_bounded_prefix_entry * S ((S (fp_i_bounded_prefix)) * c) + (fp_value_bounded_prefix))) /\ (exists fp_gap_bounded_prefix_value. fp_gap_bounded_prefix_value + S fp_value_bounded_prefix = n))specialize finite_bounded_prefix_without_top bspecialize finite_bounded_prefix_without_top cspecialize finite_bounded_prefix_without_top nspecialize finite_bounded_prefix_without_top snapply finite_bounded_prefix_without_topexact hsnexact hboundedexact hnotophave hprefix_injective : forall fp_i_inj_prefix fp_j_inj_prefix fp_value_inj_prefix. (exists fp_gap_inj_prefix_i. fp_gap_inj_prefix_i + S fp_i_inj_prefix = n) -> (exists fp_gap_inj_prefix_j. fp_gap_inj_prefix_j + S fp_j_inj_prefix = n) -> (((exists ff_h_inj_prefix_left. ff_h_inj_prefix_left + S (fp_value_inj_prefix) = S ((S (fp_i_inj_prefix)) * c)) /\ exists ff_q_inj_prefix_left. b = ff_q_inj_prefix_left * S ((S (fp_i_inj_prefix)) * c) + (fp_value_inj_prefix))) -> (((exists ff_h_inj_prefix_right. ff_h_inj_prefix_right + S (fp_value_inj_prefix) = S ((S (fp_j_inj_prefix)) * c)) /\ exists ff_q_inj_prefix_right. b = ff_q_inj_prefix_right * S ((S (fp_j_inj_prefix)) * c) + (fp_value_inj_prefix))) -> fp_i_inj_prefix = fp_j_inj_prefixspecialize finite_injective_prefix_succ bspecialize finite_injective_prefix_succ cspecialize finite_injective_prefix_succ nspecialize finite_injective_prefix_succ snapply finite_injective_prefix_succexact hsnexact hinjhave hprefix_surjective : forall fp_value_surj_n. (exists fp_gap_surj_n_value. fp_gap_surj_n_value + S fp_value_surj_n = n) -> exists fp_i_surj_n. ((exists fp_gap_surj_n_index. fp_gap_surj_n_index + S fp_i_surj_n = n) /\ (((exists ff_h_surj_n_entry. ff_h_surj_n_entry + S (fp_value_surj_n) = S ((S (fp_i_surj_n)) * c)) /\ exists ff_q_surj_n_entry. b = ff_q_surj_n_entry * S ((S (fp_i_surj_n)) * c) + (fp_value_surj_n))))apply hinductionexact hprefix_boundedexact hprefix_injectivespecialize finite_surjective_succ_from_prefix bspecialize finite_surjective_succ_from_prefix cspecialize finite_surjective_succ_from_prefix nspecialize finite_surjective_succ_from_prefix snapply finite_surjective_succ_from_prefixexact hsnexact hboundedexact hinjexact hprefix_surjective
finite_bounded_injective_surjective · unchanged support, not a new admission
forall n b c. (forall fp_i_pigeon_bounded. (exists fp_gap_pigeon_bounded_index. fp_gap_pigeon_bounded_index + S fp_i_pigeon_bounded = n) -> exists fp_value_pigeon_bounded. ((((exists ff_h_pigeon_bounded_entry. ff_h_pigeon_bounded_entry + S (fp_value_pigeon_bounded) = S ((S (fp_i_pigeon_bounded)) * c)) /\ exists ff_q_pigeon_bounded_entry. b = ff_q_pigeon_bounded_entry * S ((S (fp_i_pigeon_bounded)) * c) + (fp_value_pigeon_bounded))) /\ (exists fp_gap_pigeon_bounded_value. fp_gap_pigeon_bounded_value + S fp_value_pigeon_bounded = n))) -> (forall fp_i_pigeon_injective fp_j_pigeon_injective fp_value_pigeon_injective. (exists fp_gap_pigeon_injective_i. fp_gap_pigeon_injective_i + S fp_i_pigeon_injective = n) -> (exists fp_gap_pigeon_injective_j. fp_gap_pigeon_injective_j + S fp_j_pigeon_injective = n) -> (((exists ff_h_pigeon_injective_left. ff_h_pigeon_injective_left + S (fp_value_pigeon_injective) = S ((S (fp_i_pigeon_injective)) * c)) /\ exists ff_q_pigeon_injective_left. b = ff_q_pigeon_injective_left * S ((S (fp_i_pigeon_injective)) * c) + (fp_value_pigeon_injective))) -> (((exists ff_h_pigeon_injective_right. ff_h_pigeon_injective_right + S (fp_value_pigeon_injective) = S ((S (fp_j_pigeon_injective)) * c)) /\ exists ff_q_pigeon_injective_right. b = ff_q_pigeon_injective_right * S ((S (fp_j_pigeon_injective)) * c) + (fp_value_pigeon_injective))) -> fp_i_pigeon_injective = fp_j_pigeon_injective) -> (forall fp_value_pigeon_surjective. (exists fp_gap_pigeon_surjective_value. fp_gap_pigeon_surjective_value + S fp_value_pigeon_surjective = n) -> exists fp_i_pigeon_surjective. ((exists fp_gap_pigeon_surjective_index. fp_gap_pigeon_surjective_index + S fp_i_pigeon_surjective = n) /\ (((exists ff_h_pigeon_surjective_entry. ff_h_pigeon_surjective_entry + S (fp_value_pigeon_surjective) = S ((S (fp_i_pigeon_surjective)) * c)) /\ exists ff_q_pigeon_surjective_entry. b = ff_q_pigeon_surjective_entry * S ((S (fp_i_pigeon_surjective)) * c) + (fp_value_pigeon_surjective)))))
induction nintro bintro cintro hboundedintro hinjectivespecialize finite_surjective_zero bspecialize finite_surjective_zero cspecialize finite_surjective_zero 0apply finite_surjective_zeroreflintro bintro cintro hboundedintro hinjectivehave hcontains : (exists fp_i_contains_top. ((exists fp_gap_contains_top_index. fp_gap_contains_top_index + S fp_i_contains_top = n) /\ (((exists ff_h_contains_top_entry. ff_h_contains_top_entry + S (n) = S ((S (fp_i_contains_top)) * c)) /\ exists ff_q_contains_top_entry. b = ff_q_contains_top_entry * S ((S (fp_i_contains_top)) * c) + (n))))) \/ ~(exists fp_i_contains_top. ((exists fp_gap_contains_top_index. fp_gap_contains_top_index + S fp_i_contains_top = n) /\ (((exists ff_h_contains_top_entry. ff_h_contains_top_entry + S (n) = S ((S (fp_i_contains_top)) * c)) /\ exists ff_q_contains_top_entry. b = ff_q_contains_top_entry * S ((S (fp_i_contains_top)) * c) + (n)))))specialize finite_contains_decidable bspecialize finite_contains_decidable cspecialize finite_contains_decidable nspecialize finite_contains_decidable nexact finite_contains_decidablecases hcontainscases hcontains_leftcases hcontains_left_witnesshave hlast : exists y. (((exists h. h + S y = S ((S n) * c)) /\ exists q. b = q * S ((S n) * c) + y) /\ exists h. h + S y = S n)specialize finite_bounded_last_succ bspecialize finite_bounded_last_succ cspecialize finite_bounded_last_succ nspecialize finite_bounded_last_succ (S n)apply finite_bounded_last_succreflexact hboundedcases hlastcases hlast_witnesshave hswap : exists z d. ((((exists ff_h_pigeon_swap_new_i. ff_h_pigeon_swap_new_i + S (x1) = S ((S (x)) * d)) /\ exists ff_q_pigeon_swap_new_i. z = ff_q_pigeon_swap_new_i * S ((S (x)) * d) + (x1))) /\ ((((exists ff_h_pigeon_swap_new_n. ff_h_pigeon_swap_new_n + S (n) = S ((S (n)) * d)) /\ exists ff_q_pigeon_swap_new_n. z = ff_q_pigeon_swap_new_n * S ((S (n)) * d) + (n))) /\ forall j a. (exists h. h + S j = S n) -> ~(j = x) -> ~(j = n) -> (((exists ff_h_pigeon_swap_old_other. ff_h_pigeon_swap_old_other + S (a) = S ((S (j)) * c)) /\ exists ff_q_pigeon_swap_old_other. b = ff_q_pigeon_swap_old_other * S ((S (j)) * c) + (a))) -> (((exists ff_h_pigeon_swap_new_other. ff_h_pigeon_swap_new_other + S (a) = S ((S (j)) * d)) /\ exists ff_q_pigeon_swap_new_other. z = ff_q_pigeon_swap_new_other * S ((S (j)) * d) + (a)))))specialize beta_prefix_swap_last_from_entries bspecialize beta_prefix_swap_last_from_entries cspecialize beta_prefix_swap_last_from_entries nspecialize beta_prefix_swap_last_from_entries xspecialize beta_prefix_swap_last_from_entries nspecialize beta_prefix_swap_last_from_entries x1apply beta_prefix_swap_last_from_entriesexact hcontains_left_witness_leftexact hcontains_left_witness_rightexact hlast_witness_leftcases hswapcases hswap_witnesscases hswap_witness_witnesscases hswap_witness_witness_righthave hswap_bounded : forall fp_i_pigeon_swapped_bounded. (exists fp_gap_pigeon_swapped_bounded_index. fp_gap_pigeon_swapped_bounded_index + S fp_i_pigeon_swapped_bounded = S n) -> exists fp_value_pigeon_swapped_bounded. ((((exists ff_h_pigeon_swapped_bounded_entry. ff_h_pigeon_swapped_bounded_entry + S (fp_value_pigeon_swapped_bounded) = S ((S (fp_i_pigeon_swapped_bounded)) * x3)) /\ exists ff_q_pigeon_swapped_bounded_entry. x2 = ff_q_pigeon_swapped_bounded_entry * S ((S (fp_i_pigeon_swapped_bounded)) * x3) + (fp_value_pigeon_swapped_bounded))) /\ (exists fp_gap_pigeon_swapped_bounded_value. fp_gap_pigeon_swapped_bounded_value + S fp_value_pigeon_swapped_bounded = S n))specialize finite_swap_last_bounded bspecialize finite_swap_last_bounded cspecialize finite_swap_last_bounded x2specialize finite_swap_last_bounded x3specialize finite_swap_last_bounded nspecialize finite_swap_last_bounded (S n)specialize finite_swap_last_bounded xspecialize finite_swap_last_bounded nspecialize finite_swap_last_bounded x1apply finite_swap_last_boundedreflexact hcontains_left_witness_leftexact hboundedexact hcontains_left_witness_rightexact hlast_witness_leftexact hswap_witness_witness_leftexact hswap_witness_witness_right_leftexact hswap_witness_witness_right_righthave hswap_injective : forall fp_i_pigeon_swapped_injective fp_j_pigeon_swapped_injective fp_value_pigeon_swapped_injective. (exists fp_gap_pigeon_swapped_injective_i. fp_gap_pigeon_swapped_injective_i + S fp_i_pigeon_swapped_injective = S n) -> (exists fp_gap_pigeon_swapped_injective_j. fp_gap_pigeon_swapped_injective_j + S fp_j_pigeon_swapped_injective = S n) -> (((exists ff_h_pigeon_swapped_injective_left. ff_h_pigeon_swapped_injective_left + S (fp_value_pigeon_swapped_injective) = S ((S (fp_i_pigeon_swapped_injective)) * x3)) /\ exists ff_q_pigeon_swapped_injective_left. x2 = ff_q_pigeon_swapped_injective_left * S ((S (fp_i_pigeon_swapped_injective)) * x3) + (fp_value_pigeon_swapped_injective))) -> (((exists ff_h_pigeon_swapped_injective_right. ff_h_pigeon_swapped_injective_right + S (fp_value_pigeon_swapped_injective) = S ((S (fp_j_pigeon_swapped_injective)) * x3)) /\ exists ff_q_pigeon_swapped_injective_right. x2 = ff_q_pigeon_swapped_injective_right * S ((S (fp_j_pigeon_swapped_injective)) * x3) + (fp_value_pigeon_swapped_injective))) -> fp_i_pigeon_swapped_injective = fp_j_pigeon_swapped_injectivespecialize finite_swap_last_injective bspecialize finite_swap_last_injective cspecialize finite_swap_last_injective x2specialize finite_swap_last_injective x3specialize finite_swap_last_injective nspecialize finite_swap_last_injective (S n)specialize finite_swap_last_injective xspecialize finite_swap_last_injective nspecialize finite_swap_last_injective x1apply finite_swap_last_injectivereflexact hcontains_left_witness_leftexact hinjectiveexact hcontains_left_witness_rightexact hlast_witness_leftexact hswap_witness_witness_leftexact hswap_witness_witness_right_leftexact hswap_witness_witness_right_righthave hnotop : forall j. (exists h. h + S j = n) -> ~(((exists ff_h_pigeon_top_j. ff_h_pigeon_top_j + S (n) = S ((S (j)) * x3)) /\ exists ff_q_pigeon_top_j. x2 = ff_q_pigeon_top_j * S ((S (j)) * x3) + (n)))intro jintro hjintro htophave hjsn : exists h. h + S j = S nspecialize le_succ (S j)specialize le_succ napply le_succexact hjhave hnsn : exists h. h + S n = S nspecialize le_refl (S n)exact le_reflhave hjneq : j = nspecialize hswap_injective jspecialize hswap_injective nspecialize hswap_injective napply hswap_injectiveexact hjsnexact hnsnexact htopexact hswap_witness_witness_right_leftspecialize lt_irrefl_expanded napply lt_irrefl_expandedrewrite hjneq at hjexact hjhave hprefix_bounded : forall fp_i_pigeon_swapped_prefix_bounded. (exists fp_gap_pigeon_swapped_prefix_bounded_index. fp_gap_pigeon_swapped_prefix_bounded_index + S fp_i_pigeon_swapped_prefix_bounded = n) -> exists fp_value_pigeon_swapped_prefix_bounded. ((((exists ff_h_pigeon_swapped_prefix_bounded_entry. ff_h_pigeon_swapped_prefix_bounded_entry + S (fp_value_pigeon_swapped_prefix_bounded) = S ((S (fp_i_pigeon_swapped_prefix_bounded)) * x3)) /\ exists ff_q_pigeon_swapped_prefix_bounded_entry. x2 = ff_q_pigeon_swapped_prefix_bounded_entry * S ((S (fp_i_pigeon_swapped_prefix_bounded)) * x3) + (fp_value_pigeon_swapped_prefix_bounded))) /\ (exists fp_gap_pigeon_swapped_prefix_bounded_value. fp_gap_pigeon_swapped_prefix_bounded_value + S fp_value_pigeon_swapped_prefix_bounded = n))specialize finite_bounded_prefix_without_top x2specialize finite_bounded_prefix_without_top x3specialize finite_bounded_prefix_without_top nspecialize finite_bounded_prefix_without_top (S n)apply finite_bounded_prefix_without_topreflexact hswap_boundedexact hnotophave hprefix_injective : forall fp_i_pigeon_swapped_prefix_injective fp_j_pigeon_swapped_prefix_injective fp_value_pigeon_swapped_prefix_injective. (exists fp_gap_pigeon_swapped_prefix_injective_i. fp_gap_pigeon_swapped_prefix_injective_i + S fp_i_pigeon_swapped_prefix_injective = n) -> (exists fp_gap_pigeon_swapped_prefix_injective_j. fp_gap_pigeon_swapped_prefix_injective_j + S fp_j_pigeon_swapped_prefix_injective = n) -> (((exists ff_h_pigeon_swapped_prefix_injective_left. ff_h_pigeon_swapped_prefix_injective_left + S (fp_value_pigeon_swapped_prefix_injective) = S ((S (fp_i_pigeon_swapped_prefix_injective)) * x3)) /\ exists ff_q_pigeon_swapped_prefix_injective_left. x2 = ff_q_pigeon_swapped_prefix_injective_left * S ((S (fp_i_pigeon_swapped_prefix_injective)) * x3) + (fp_value_pigeon_swapped_prefix_injective))) -> (((exists ff_h_pigeon_swapped_prefix_injective_right. ff_h_pigeon_swapped_prefix_injective_right + S (fp_value_pigeon_swapped_prefix_injective) = S ((S (fp_j_pigeon_swapped_prefix_injective)) * x3)) /\ exists ff_q_pigeon_swapped_prefix_injective_right. x2 = ff_q_pigeon_swapped_prefix_injective_right * S ((S (fp_j_pigeon_swapped_prefix_injective)) * x3) + (fp_value_pigeon_swapped_prefix_injective))) -> fp_i_pigeon_swapped_prefix_injective = fp_j_pigeon_swapped_prefix_injectivespecialize finite_injective_prefix_succ x2specialize finite_injective_prefix_succ x3specialize finite_injective_prefix_succ nspecialize finite_injective_prefix_succ (S n)apply finite_injective_prefix_succreflexact hswap_injectivehave hprefix_surjective : forall fp_value_pigeon_swapped_prefix_surjective. (exists fp_gap_pigeon_swapped_prefix_surjective_value. fp_gap_pigeon_swapped_prefix_surjective_value + S fp_value_pigeon_swapped_prefix_surjective = n) -> exists fp_i_pigeon_swapped_prefix_surjective. ((exists fp_gap_pigeon_swapped_prefix_surjective_index. fp_gap_pigeon_swapped_prefix_surjective_index + S fp_i_pigeon_swapped_prefix_surjective = n) /\ (((exists ff_h_pigeon_swapped_prefix_surjective_entry. ff_h_pigeon_swapped_prefix_surjective_entry + S (fp_value_pigeon_swapped_prefix_surjective) = S ((S (fp_i_pigeon_swapped_prefix_surjective)) * x3)) /\ exists ff_q_pigeon_swapped_prefix_surjective_entry. x2 = ff_q_pigeon_swapped_prefix_surjective_entry * S ((S (fp_i_pigeon_swapped_prefix_surjective)) * x3) + (fp_value_pigeon_swapped_prefix_surjective))))specialize IH x2specialize IH x3apply IHexact hprefix_boundedexact hprefix_injectivehave hswap_surjective : forall fp_value_pigeon_swapped_surjective. (exists fp_gap_pigeon_swapped_surjective_value. fp_gap_pigeon_swapped_surjective_value + S fp_value_pigeon_swapped_surjective = S n) -> exists fp_i_pigeon_swapped_surjective. ((exists fp_gap_pigeon_swapped_surjective_index. fp_gap_pigeon_swapped_surjective_index + S fp_i_pigeon_swapped_surjective = S n) /\ (((exists ff_h_pigeon_swapped_surjective_entry. ff_h_pigeon_swapped_surjective_entry + S (fp_value_pigeon_swapped_surjective) = S ((S (fp_i_pigeon_swapped_surjective)) * x3)) /\ exists ff_q_pigeon_swapped_surjective_entry. x2 = ff_q_pigeon_swapped_surjective_entry * S ((S (fp_i_pigeon_swapped_surjective)) * x3) + (fp_value_pigeon_swapped_surjective))))specialize finite_surjective_succ_from_prefix x2specialize finite_surjective_succ_from_prefix x3specialize finite_surjective_succ_from_prefix nspecialize finite_surjective_succ_from_prefix (S n)apply finite_surjective_succ_from_prefixreflexact hswap_boundedexact hswap_injectiveexact hprefix_surjectivespecialize finite_swap_last_surjective_back bspecialize finite_swap_last_surjective_back cspecialize finite_swap_last_surjective_back x2specialize finite_swap_last_surjective_back x3specialize finite_swap_last_surjective_back nspecialize finite_swap_last_surjective_back (S n)specialize finite_swap_last_surjective_back xspecialize finite_swap_last_surjective_back nspecialize finite_swap_last_surjective_back x1apply finite_swap_last_surjective_backreflexact hcontains_left_witness_leftexact hcontains_left_witness_rightexact hlast_witness_leftexact hswap_witness_witness_leftexact hswap_witness_witness_right_leftexact hswap_witness_witness_right_rightexact hswap_surjectivespecialize finite_no_top_successor_gate bspecialize finite_no_top_successor_gate cspecialize finite_no_top_successor_gate nspecialize finite_no_top_successor_gate (S n)apply finite_no_top_successor_gatereflexact hboundedexact hinjectiveexact hcontains_rightintro hprefix_boundedintro hprefix_injectivespecialize IH bspecialize IH capply IHexact hprefix_boundedexact hprefix_injective
beta_product_replace_balance · unchanged support, not a new admission
forall k b c z d i x y p q. (exists h. h + S i = k) -> (((exists ff_h_balance_old_i. ff_h_balance_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_balance_old_i. b = ff_q_balance_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_balance_new_i. ff_h_balance_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_balance_new_i. z = ff_q_balance_new_i * S ((S (i)) * d) + (y))) -> (forall j a. (exists h. h + S j = k) -> ~(j = i) -> (((exists ff_h_balance_old_j. ff_h_balance_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_balance_old_j. b = ff_q_balance_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_balance_new_j. ff_h_balance_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_balance_new_j. z = ff_q_balance_new_j * S ((S (j)) * d) + (a)))) -> (exists ff_u_balance_old ff_v_balance_old. ((((exists ff_h_balance_old_start. ff_h_balance_old_start + S (1) = S ((S (0)) * ff_v_balance_old)) /\ exists ff_q_balance_old_start. ff_u_balance_old = ff_q_balance_old_start * S ((S (0)) * ff_v_balance_old) + (1))) /\ ((((exists ff_h_balance_old_terminal. ff_h_balance_old_terminal + S (p) = S ((S (k)) * ff_v_balance_old)) /\ exists ff_q_balance_old_terminal. ff_u_balance_old = ff_q_balance_old_terminal * S ((S (k)) * ff_v_balance_old) + (p))) /\ forall ff_i_balance_old. (exists ff_lt_balance_old_bound. ff_lt_balance_old_bound + S ff_i_balance_old = k) -> exists ff_p_balance_old ff_r_balance_old ff_s_balance_old. ((((exists ff_h_balance_old_factor. ff_h_balance_old_factor + S (ff_p_balance_old) = S ((S (ff_i_balance_old)) * c)) /\ exists ff_q_balance_old_factor. b = ff_q_balance_old_factor * S ((S (ff_i_balance_old)) * c) + (ff_p_balance_old))) /\ ((((exists ff_h_balance_old_partial. ff_h_balance_old_partial + S (ff_r_balance_old) = S ((S (ff_i_balance_old)) * ff_v_balance_old)) /\ exists ff_q_balance_old_partial. ff_u_balance_old = ff_q_balance_old_partial * S ((S (ff_i_balance_old)) * ff_v_balance_old) + (ff_r_balance_old))) /\ ((((exists ff_h_balance_old_successor. ff_h_balance_old_successor + S (ff_s_balance_old) = S ((S (S ff_i_balance_old)) * ff_v_balance_old)) /\ exists ff_q_balance_old_successor. ff_u_balance_old = ff_q_balance_old_successor * S ((S (S ff_i_balance_old)) * ff_v_balance_old) + (ff_s_balance_old))) /\ ff_s_balance_old = ff_r_balance_old * ff_p_balance_old)))))) -> (exists ff_u_balance_new ff_v_balance_new. ((((exists ff_h_balance_new_start. ff_h_balance_new_start + S (1) = S ((S (0)) * ff_v_balance_new)) /\ exists ff_q_balance_new_start. ff_u_balance_new = ff_q_balance_new_start * S ((S (0)) * ff_v_balance_new) + (1))) /\ ((((exists ff_h_balance_new_terminal. ff_h_balance_new_terminal + S (q) = S ((S (k)) * ff_v_balance_new)) /\ exists ff_q_balance_new_terminal. ff_u_balance_new = ff_q_balance_new_terminal * S ((S (k)) * ff_v_balance_new) + (q))) /\ forall ff_i_balance_new. (exists ff_lt_balance_new_bound. ff_lt_balance_new_bound + S ff_i_balance_new = k) -> exists ff_p_balance_new ff_r_balance_new ff_s_balance_new. ((((exists ff_h_balance_new_factor. ff_h_balance_new_factor + S (ff_p_balance_new) = S ((S (ff_i_balance_new)) * d)) /\ exists ff_q_balance_new_factor. z = ff_q_balance_new_factor * S ((S (ff_i_balance_new)) * d) + (ff_p_balance_new))) /\ ((((exists ff_h_balance_new_partial. ff_h_balance_new_partial + S (ff_r_balance_new) = S ((S (ff_i_balance_new)) * ff_v_balance_new)) /\ exists ff_q_balance_new_partial. ff_u_balance_new = ff_q_balance_new_partial * S ((S (ff_i_balance_new)) * ff_v_balance_new) + (ff_r_balance_new))) /\ ((((exists ff_h_balance_new_successor. ff_h_balance_new_successor + S (ff_s_balance_new) = S ((S (S ff_i_balance_new)) * ff_v_balance_new)) /\ exists ff_q_balance_new_successor. ff_u_balance_new = ff_q_balance_new_successor * S ((S (S ff_i_balance_new)) * ff_v_balance_new) + (ff_s_balance_new))) /\ ff_s_balance_new = ff_r_balance_new * ff_p_balance_new)))))) -> q * x = p * y
induction kintro bintro cintro zintro dintro iintro xintro yintro pintro qintro hiexfalsocases hihave hsi : S i = 0specialize add_eq_zero_right x1specialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsiintro bintro cintro zintro dintro iintro xintro yintro pintro qintro hiintro hold_iintro hnew_iintro hpreserveintro hproduct_oldintro hproduct_newhave hisplit : i = k \/ exists h. h + S i = kspecialize finite_lt_succ_eq_or_lt kspecialize finite_lt_succ_eq_or_lt iapply finite_lt_succ_eq_or_ltexact hihave hold_decomp : exists a r. (((exists ff_h_balance_old_last. ff_h_balance_old_last + S (a) = S ((S (k)) * c)) /\ exists ff_q_balance_old_last. b = ff_q_balance_old_last * S ((S (k)) * c) + (a))) /\ ((exists ff_u_balance_old_prefix ff_v_balance_old_prefix. ((((exists ff_h_balance_old_prefix_start. ff_h_balance_old_prefix_start + S (1) = S ((S (0)) * ff_v_balance_old_prefix)) /\ exists ff_q_balance_old_prefix_start. ff_u_balance_old_prefix = ff_q_balance_old_prefix_start * S ((S (0)) * ff_v_balance_old_prefix) + (1))) /\ ((((exists ff_h_balance_old_prefix_terminal. ff_h_balance_old_prefix_terminal + S (r) = S ((S (k)) * ff_v_balance_old_prefix)) /\ exists ff_q_balance_old_prefix_terminal. ff_u_balance_old_prefix = ff_q_balance_old_prefix_terminal * S ((S (k)) * ff_v_balance_old_prefix) + (r))) /\ forall ff_i_balance_old_prefix. (exists ff_lt_balance_old_prefix_bound. ff_lt_balance_old_prefix_bound + S ff_i_balance_old_prefix = k) -> exists ff_p_balance_old_prefix ff_r_balance_old_prefix ff_s_balance_old_prefix. ((((exists ff_h_balance_old_prefix_factor. ff_h_balance_old_prefix_factor + S (ff_p_balance_old_prefix) = S ((S (ff_i_balance_old_prefix)) * c)) /\ exists ff_q_balance_old_prefix_factor. b = ff_q_balance_old_prefix_factor * S ((S (ff_i_balance_old_prefix)) * c) + (ff_p_balance_old_prefix))) /\ ((((exists ff_h_balance_old_prefix_partial. ff_h_balance_old_prefix_partial + S (ff_r_balance_old_prefix) = S ((S (ff_i_balance_old_prefix)) * ff_v_balance_old_prefix)) /\ exists ff_q_balance_old_prefix_partial. ff_u_balance_old_prefix = ff_q_balance_old_prefix_partial * S ((S (ff_i_balance_old_prefix)) * ff_v_balance_old_prefix) + (ff_r_balance_old_prefix))) /\ ((((exists ff_h_balance_old_prefix_successor. ff_h_balance_old_prefix_successor + S (ff_s_balance_old_prefix) = S ((S (S ff_i_balance_old_prefix)) * ff_v_balance_old_prefix)) /\ exists ff_q_balance_old_prefix_successor. ff_u_balance_old_prefix = ff_q_balance_old_prefix_successor * S ((S (S ff_i_balance_old_prefix)) * ff_v_balance_old_prefix) + (ff_s_balance_old_prefix))) /\ ff_s_balance_old_prefix = ff_r_balance_old_prefix * ff_p_balance_old_prefix)))))) /\ p = r * a)specialize beta_product_succ_decompose bspecialize beta_product_succ_decompose cspecialize beta_product_succ_decompose kspecialize beta_product_succ_decompose papply beta_product_succ_decomposeexact hproduct_oldhave hnew_decomp : exists a r. (((exists ff_h_balance_new_last. ff_h_balance_new_last + S (a) = S ((S (k)) * d)) /\ exists ff_q_balance_new_last. z = ff_q_balance_new_last * S ((S (k)) * d) + (a))) /\ ((exists ff_u_balance_new_prefix ff_v_balance_new_prefix. ((((exists ff_h_balance_new_prefix_start. ff_h_balance_new_prefix_start + S (1) = S ((S (0)) * ff_v_balance_new_prefix)) /\ exists ff_q_balance_new_prefix_start. ff_u_balance_new_prefix = ff_q_balance_new_prefix_start * S ((S (0)) * ff_v_balance_new_prefix) + (1))) /\ ((((exists ff_h_balance_new_prefix_terminal. ff_h_balance_new_prefix_terminal + S (r) = S ((S (k)) * ff_v_balance_new_prefix)) /\ exists ff_q_balance_new_prefix_terminal. ff_u_balance_new_prefix = ff_q_balance_new_prefix_terminal * S ((S (k)) * ff_v_balance_new_prefix) + (r))) /\ forall ff_i_balance_new_prefix. (exists ff_lt_balance_new_prefix_bound. ff_lt_balance_new_prefix_bound + S ff_i_balance_new_prefix = k) -> exists ff_p_balance_new_prefix ff_r_balance_new_prefix ff_s_balance_new_prefix. ((((exists ff_h_balance_new_prefix_factor. ff_h_balance_new_prefix_factor + S (ff_p_balance_new_prefix) = S ((S (ff_i_balance_new_prefix)) * d)) /\ exists ff_q_balance_new_prefix_factor. z = ff_q_balance_new_prefix_factor * S ((S (ff_i_balance_new_prefix)) * d) + (ff_p_balance_new_prefix))) /\ ((((exists ff_h_balance_new_prefix_partial. ff_h_balance_new_prefix_partial + S (ff_r_balance_new_prefix) = S ((S (ff_i_balance_new_prefix)) * ff_v_balance_new_prefix)) /\ exists ff_q_balance_new_prefix_partial. ff_u_balance_new_prefix = ff_q_balance_new_prefix_partial * S ((S (ff_i_balance_new_prefix)) * ff_v_balance_new_prefix) + (ff_r_balance_new_prefix))) /\ ((((exists ff_h_balance_new_prefix_successor. ff_h_balance_new_prefix_successor + S (ff_s_balance_new_prefix) = S ((S (S ff_i_balance_new_prefix)) * ff_v_balance_new_prefix)) /\ exists ff_q_balance_new_prefix_successor. ff_u_balance_new_prefix = ff_q_balance_new_prefix_successor * S ((S (S ff_i_balance_new_prefix)) * ff_v_balance_new_prefix) + (ff_s_balance_new_prefix))) /\ ff_s_balance_new_prefix = ff_r_balance_new_prefix * ff_p_balance_new_prefix)))))) /\ q = r * a)specialize beta_product_succ_decompose zspecialize beta_product_succ_decompose dspecialize beta_product_succ_decompose kspecialize beta_product_succ_decompose qapply beta_product_succ_decomposeexact hproduct_newcases hold_decompcases hold_decomp_witnesscases hold_decomp_witness_witnesscases hold_decomp_witness_witness_rightcases hnew_decompcases hnew_decomp_witnesscases hnew_decomp_witness_witnesscases hnew_decomp_witness_witness_rightcases hisplithave hax : x1 = xspecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique kspecialize beta_at_unique x1specialize beta_at_unique xapply beta_at_uniqueexact hold_decomp_witness_witness_leftrewrite hisplit_left at hold_irewrite hisplit_left at hold_iexact hold_ihave hby : x3 = yspecialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique kspecialize beta_at_unique x3specialize beta_at_unique yapply beta_at_uniqueexact hnew_decomp_witness_witness_leftrewrite hisplit_left at hnew_irewrite hisplit_left at hnew_iexact hnew_ihave hprefix_transport : exists ff_u_balance_transported_prefix ff_v_balance_transported_prefix. ((((exists ff_h_balance_transported_prefix_start. ff_h_balance_transported_prefix_start + S (1) = S ((S (0)) * ff_v_balance_transported_prefix)) /\ exists ff_q_balance_transported_prefix_start. ff_u_balance_transported_prefix = ff_q_balance_transported_prefix_start * S ((S (0)) * ff_v_balance_transported_prefix) + (1))) /\ ((((exists ff_h_balance_transported_prefix_terminal. ff_h_balance_transported_prefix_terminal + S (x2) = S ((S (k)) * ff_v_balance_transported_prefix)) /\ exists ff_q_balance_transported_prefix_terminal. ff_u_balance_transported_prefix = ff_q_balance_transported_prefix_terminal * S ((S (k)) * ff_v_balance_transported_prefix) + (x2))) /\ forall ff_i_balance_transported_prefix. (exists ff_lt_balance_transported_prefix_bound. ff_lt_balance_transported_prefix_bound + S ff_i_balance_transported_prefix = k) -> exists ff_p_balance_transported_prefix ff_r_balance_transported_prefix ff_s_balance_transported_prefix. ((((exists ff_h_balance_transported_prefix_factor. ff_h_balance_transported_prefix_factor + S (ff_p_balance_transported_prefix) = S ((S (ff_i_balance_transported_prefix)) * d)) /\ exists ff_q_balance_transported_prefix_factor. z = ff_q_balance_transported_prefix_factor * S ((S (ff_i_balance_transported_prefix)) * d) + (ff_p_balance_transported_prefix))) /\ ((((exists ff_h_balance_transported_prefix_partial. ff_h_balance_transported_prefix_partial + S (ff_r_balance_transported_prefix) = S ((S (ff_i_balance_transported_prefix)) * ff_v_balance_transported_prefix)) /\ exists ff_q_balance_transported_prefix_partial. ff_u_balance_transported_prefix = ff_q_balance_transported_prefix_partial * S ((S (ff_i_balance_transported_prefix)) * ff_v_balance_transported_prefix) + (ff_r_balance_transported_prefix))) /\ ((((exists ff_h_balance_transported_prefix_successor. ff_h_balance_transported_prefix_successor + S (ff_s_balance_transported_prefix) = S ((S (S ff_i_balance_transported_prefix)) * ff_v_balance_transported_prefix)) /\ exists ff_q_balance_transported_prefix_successor. ff_u_balance_transported_prefix = ff_q_balance_transported_prefix_successor * S ((S (S ff_i_balance_transported_prefix)) * ff_v_balance_transported_prefix) + (ff_s_balance_transported_prefix))) /\ ff_s_balance_transported_prefix = ff_r_balance_transported_prefix * ff_p_balance_transported_prefix)))))specialize beta_product_transport_prefix bspecialize beta_product_transport_prefix cspecialize beta_product_transport_prefix zspecialize beta_product_transport_prefix dspecialize beta_product_transport_prefix kspecialize beta_product_transport_prefix x2apply beta_product_transport_prefixexact hold_decomp_witness_witness_right_leftintro jintro aintro hjintro holdspecialize hpreserve jspecialize hpreserve aapply hpreservespecialize le_succ (S j)specialize le_succ kapply le_succexact hjintro hjkspecialize lt_irrefl_expanded kapply lt_irrefl_expandedrewrite hjk at hjrewrite hisplit_left at hjexact hjexact holdcases hprefix_transportcases hprefix_transport_witnesscases hnew_decomp_witness_witness_right_leftcases hnew_decomp_witness_witness_right_left_witnessrewrite hold_decomp_witness_witness_right_rightrewrite hnew_decomp_witness_witness_right_rightrewrite haxrewrite hbytrans (x4 * x) * ysimp [mul_assoc, mul_comm]congrcongrsymmspecialize beta_product_functional zspecialize beta_product_functional dspecialize beta_product_functional kspecialize beta_product_functional x2specialize beta_product_functional x5specialize beta_product_functional x6specialize beta_product_functional x4specialize beta_product_functional x7specialize beta_product_functional x8apply beta_product_functionalexact hprefix_transport_witness_witnessexact hnew_decomp_witness_witness_right_left_witness_witnessreflreflhave hki : ~(k = i)intro hki_eqspecialize lt_irrefl_expanded kapply lt_irrefl_expandedrewrite <- hki_eq at hisplit_rightexact hisplit_righthave hlast_new : ((exists h. h + S x1 = S ((S k) * d)) /\ exists w. z = w * S ((S k) * d) + x1)specialize hpreserve kspecialize hpreserve x1apply hpreservespecialize le_refl (S k)exact le_reflexact hkiexact hold_decomp_witness_witness_lefthave hlast_eq : x3 = x1specialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique kspecialize beta_at_unique x3specialize beta_at_unique x1apply beta_at_uniqueexact hnew_decomp_witness_witness_leftexact hlast_newhave hprefix_preserve : forall j a. (exists h. h + S j = k) -> ~(j = i) -> ((exists h. h + S a = S ((S j) * c)) /\ exists w. b = w * S ((S j) * c) + a) -> ((exists h. h + S a = S ((S j) * d)) /\ exists w. z = w * S ((S j) * d) + a)intro jintro aintro hjintro hjiintro holdspecialize hpreserve jspecialize hpreserve aapply hpreservespecialize le_succ (S j)specialize le_succ kapply le_succexact hjexact hjiexact holdhave hbalance : x4 * x = x2 * yspecialize IH bspecialize IH cspecialize IH zspecialize IH dspecialize IH ispecialize IH xspecialize IH yspecialize IH x2specialize IH x4apply IHexact hisplit_rightexact hold_iexact hnew_iexact hprefix_preserveexact hold_decomp_witness_witness_right_leftexact hnew_decomp_witness_witness_right_leftrewrite hold_decomp_witness_witness_right_rightrewrite hnew_decomp_witness_witness_right_rightrewrite hlast_eqtrans (x4 * x) * x1simp [mul_assoc, mul_comm]rewrite hbalancesimp [mul_assoc, mul_comm]
beta_product_swap_last_invariant · unchanged support, not a new admission
forall b c z d n i x y p q. (exists h. h + S i = n) -> (((exists ff_h_product_swap_old_i. ff_h_product_swap_old_i + S (x) = S ((S (i)) * c)) /\ exists ff_q_product_swap_old_i. b = ff_q_product_swap_old_i * S ((S (i)) * c) + (x))) -> (((exists ff_h_product_swap_old_n. ff_h_product_swap_old_n + S (y) = S ((S (n)) * c)) /\ exists ff_q_product_swap_old_n. b = ff_q_product_swap_old_n * S ((S (n)) * c) + (y))) -> (((exists ff_h_product_swap_new_i. ff_h_product_swap_new_i + S (y) = S ((S (i)) * d)) /\ exists ff_q_product_swap_new_i. z = ff_q_product_swap_new_i * S ((S (i)) * d) + (y))) -> (((exists ff_h_product_swap_new_n. ff_h_product_swap_new_n + S (x) = S ((S (n)) * d)) /\ exists ff_q_product_swap_new_n. z = ff_q_product_swap_new_n * S ((S (n)) * d) + (x))) -> (forall j a. (exists h. h + S j = S n) -> ~(j = i) -> ~(j = n) -> (((exists ff_h_product_swap_old_j. ff_h_product_swap_old_j + S (a) = S ((S (j)) * c)) /\ exists ff_q_product_swap_old_j. b = ff_q_product_swap_old_j * S ((S (j)) * c) + (a))) -> (((exists ff_h_product_swap_new_j. ff_h_product_swap_new_j + S (a) = S ((S (j)) * d)) /\ exists ff_q_product_swap_new_j. z = ff_q_product_swap_new_j * S ((S (j)) * d) + (a)))) -> (exists ff_u_product_swap_old ff_v_product_swap_old. ((((exists ff_h_product_swap_old_start. ff_h_product_swap_old_start + S (1) = S ((S (0)) * ff_v_product_swap_old)) /\ exists ff_q_product_swap_old_start. ff_u_product_swap_old = ff_q_product_swap_old_start * S ((S (0)) * ff_v_product_swap_old) + (1))) /\ ((((exists ff_h_product_swap_old_terminal. ff_h_product_swap_old_terminal + S (p) = S ((S (S n)) * ff_v_product_swap_old)) /\ exists ff_q_product_swap_old_terminal. ff_u_product_swap_old = ff_q_product_swap_old_terminal * S ((S (S n)) * ff_v_product_swap_old) + (p))) /\ forall ff_i_product_swap_old. (exists ff_lt_product_swap_old_bound. ff_lt_product_swap_old_bound + S ff_i_product_swap_old = S n) -> exists ff_p_product_swap_old ff_r_product_swap_old ff_s_product_swap_old. ((((exists ff_h_product_swap_old_factor. ff_h_product_swap_old_factor + S (ff_p_product_swap_old) = S ((S (ff_i_product_swap_old)) * c)) /\ exists ff_q_product_swap_old_factor. b = ff_q_product_swap_old_factor * S ((S (ff_i_product_swap_old)) * c) + (ff_p_product_swap_old))) /\ ((((exists ff_h_product_swap_old_partial. ff_h_product_swap_old_partial + S (ff_r_product_swap_old) = S ((S (ff_i_product_swap_old)) * ff_v_product_swap_old)) /\ exists ff_q_product_swap_old_partial. ff_u_product_swap_old = ff_q_product_swap_old_partial * S ((S (ff_i_product_swap_old)) * ff_v_product_swap_old) + (ff_r_product_swap_old))) /\ ((((exists ff_h_product_swap_old_successor. ff_h_product_swap_old_successor + S (ff_s_product_swap_old) = S ((S (S ff_i_product_swap_old)) * ff_v_product_swap_old)) /\ exists ff_q_product_swap_old_successor. ff_u_product_swap_old = ff_q_product_swap_old_successor * S ((S (S ff_i_product_swap_old)) * ff_v_product_swap_old) + (ff_s_product_swap_old))) /\ ff_s_product_swap_old = ff_r_product_swap_old * ff_p_product_swap_old)))))) -> (exists ff_u_product_swap_new ff_v_product_swap_new. ((((exists ff_h_product_swap_new_start. ff_h_product_swap_new_start + S (1) = S ((S (0)) * ff_v_product_swap_new)) /\ exists ff_q_product_swap_new_start. ff_u_product_swap_new = ff_q_product_swap_new_start * S ((S (0)) * ff_v_product_swap_new) + (1))) /\ ((((exists ff_h_product_swap_new_terminal. ff_h_product_swap_new_terminal + S (q) = S ((S (S n)) * ff_v_product_swap_new)) /\ exists ff_q_product_swap_new_terminal. ff_u_product_swap_new = ff_q_product_swap_new_terminal * S ((S (S n)) * ff_v_product_swap_new) + (q))) /\ forall ff_i_product_swap_new. (exists ff_lt_product_swap_new_bound. ff_lt_product_swap_new_bound + S ff_i_product_swap_new = S n) -> exists ff_p_product_swap_new ff_r_product_swap_new ff_s_product_swap_new. ((((exists ff_h_product_swap_new_factor. ff_h_product_swap_new_factor + S (ff_p_product_swap_new) = S ((S (ff_i_product_swap_new)) * d)) /\ exists ff_q_product_swap_new_factor. z = ff_q_product_swap_new_factor * S ((S (ff_i_product_swap_new)) * d) + (ff_p_product_swap_new))) /\ ((((exists ff_h_product_swap_new_partial. ff_h_product_swap_new_partial + S (ff_r_product_swap_new) = S ((S (ff_i_product_swap_new)) * ff_v_product_swap_new)) /\ exists ff_q_product_swap_new_partial. ff_u_product_swap_new = ff_q_product_swap_new_partial * S ((S (ff_i_product_swap_new)) * ff_v_product_swap_new) + (ff_r_product_swap_new))) /\ ((((exists ff_h_product_swap_new_successor. ff_h_product_swap_new_successor + S (ff_s_product_swap_new) = S ((S (S ff_i_product_swap_new)) * ff_v_product_swap_new)) /\ exists ff_q_product_swap_new_successor. ff_u_product_swap_new = ff_q_product_swap_new_successor * S ((S (S ff_i_product_swap_new)) * ff_v_product_swap_new) + (ff_s_product_swap_new))) /\ ff_s_product_swap_new = ff_r_product_swap_new * ff_p_product_swap_new)))))) -> p = q
intro bintro cintro zintro dintro nintro iintro xintro yintro pintro qintro hiintro hold_iintro hold_nintro hnew_iintro hnew_nintro hpreserveintro hproduct_oldintro hproduct_newhave hold_decomp : exists a r. (((exists ff_h_swap_old_last. ff_h_swap_old_last + S (a) = S ((S (n)) * c)) /\ exists ff_q_swap_old_last. b = ff_q_swap_old_last * S ((S (n)) * c) + (a))) /\ ((exists ff_u_swap_old_prefix ff_v_swap_old_prefix. ((((exists ff_h_swap_old_prefix_start. ff_h_swap_old_prefix_start + S (1) = S ((S (0)) * ff_v_swap_old_prefix)) /\ exists ff_q_swap_old_prefix_start. ff_u_swap_old_prefix = ff_q_swap_old_prefix_start * S ((S (0)) * ff_v_swap_old_prefix) + (1))) /\ ((((exists ff_h_swap_old_prefix_terminal. ff_h_swap_old_prefix_terminal + S (r) = S ((S (n)) * ff_v_swap_old_prefix)) /\ exists ff_q_swap_old_prefix_terminal. ff_u_swap_old_prefix = ff_q_swap_old_prefix_terminal * S ((S (n)) * ff_v_swap_old_prefix) + (r))) /\ forall ff_i_swap_old_prefix. (exists ff_lt_swap_old_prefix_bound. ff_lt_swap_old_prefix_bound + S ff_i_swap_old_prefix = n) -> exists ff_p_swap_old_prefix ff_r_swap_old_prefix ff_s_swap_old_prefix. ((((exists ff_h_swap_old_prefix_factor. ff_h_swap_old_prefix_factor + S (ff_p_swap_old_prefix) = S ((S (ff_i_swap_old_prefix)) * c)) /\ exists ff_q_swap_old_prefix_factor. b = ff_q_swap_old_prefix_factor * S ((S (ff_i_swap_old_prefix)) * c) + (ff_p_swap_old_prefix))) /\ ((((exists ff_h_swap_old_prefix_partial. ff_h_swap_old_prefix_partial + S (ff_r_swap_old_prefix) = S ((S (ff_i_swap_old_prefix)) * ff_v_swap_old_prefix)) /\ exists ff_q_swap_old_prefix_partial. ff_u_swap_old_prefix = ff_q_swap_old_prefix_partial * S ((S (ff_i_swap_old_prefix)) * ff_v_swap_old_prefix) + (ff_r_swap_old_prefix))) /\ ((((exists ff_h_swap_old_prefix_successor. ff_h_swap_old_prefix_successor + S (ff_s_swap_old_prefix) = S ((S (S ff_i_swap_old_prefix)) * ff_v_swap_old_prefix)) /\ exists ff_q_swap_old_prefix_successor. ff_u_swap_old_prefix = ff_q_swap_old_prefix_successor * S ((S (S ff_i_swap_old_prefix)) * ff_v_swap_old_prefix) + (ff_s_swap_old_prefix))) /\ ff_s_swap_old_prefix = ff_r_swap_old_prefix * ff_p_swap_old_prefix)))))) /\ p = r * a)specialize beta_product_succ_decompose bspecialize beta_product_succ_decompose cspecialize beta_product_succ_decompose nspecialize beta_product_succ_decompose papply beta_product_succ_decomposeexact hproduct_oldhave hnew_decomp : exists a r. (((exists ff_h_swap_new_last. ff_h_swap_new_last + S (a) = S ((S (n)) * d)) /\ exists ff_q_swap_new_last. z = ff_q_swap_new_last * S ((S (n)) * d) + (a))) /\ ((exists ff_u_swap_new_prefix ff_v_swap_new_prefix. ((((exists ff_h_swap_new_prefix_start. ff_h_swap_new_prefix_start + S (1) = S ((S (0)) * ff_v_swap_new_prefix)) /\ exists ff_q_swap_new_prefix_start. ff_u_swap_new_prefix = ff_q_swap_new_prefix_start * S ((S (0)) * ff_v_swap_new_prefix) + (1))) /\ ((((exists ff_h_swap_new_prefix_terminal. ff_h_swap_new_prefix_terminal + S (r) = S ((S (n)) * ff_v_swap_new_prefix)) /\ exists ff_q_swap_new_prefix_terminal. ff_u_swap_new_prefix = ff_q_swap_new_prefix_terminal * S ((S (n)) * ff_v_swap_new_prefix) + (r))) /\ forall ff_i_swap_new_prefix. (exists ff_lt_swap_new_prefix_bound. ff_lt_swap_new_prefix_bound + S ff_i_swap_new_prefix = n) -> exists ff_p_swap_new_prefix ff_r_swap_new_prefix ff_s_swap_new_prefix. ((((exists ff_h_swap_new_prefix_factor. ff_h_swap_new_prefix_factor + S (ff_p_swap_new_prefix) = S ((S (ff_i_swap_new_prefix)) * d)) /\ exists ff_q_swap_new_prefix_factor. z = ff_q_swap_new_prefix_factor * S ((S (ff_i_swap_new_prefix)) * d) + (ff_p_swap_new_prefix))) /\ ((((exists ff_h_swap_new_prefix_partial. ff_h_swap_new_prefix_partial + S (ff_r_swap_new_prefix) = S ((S (ff_i_swap_new_prefix)) * ff_v_swap_new_prefix)) /\ exists ff_q_swap_new_prefix_partial. ff_u_swap_new_prefix = ff_q_swap_new_prefix_partial * S ((S (ff_i_swap_new_prefix)) * ff_v_swap_new_prefix) + (ff_r_swap_new_prefix))) /\ ((((exists ff_h_swap_new_prefix_successor. ff_h_swap_new_prefix_successor + S (ff_s_swap_new_prefix) = S ((S (S ff_i_swap_new_prefix)) * ff_v_swap_new_prefix)) /\ exists ff_q_swap_new_prefix_successor. ff_u_swap_new_prefix = ff_q_swap_new_prefix_successor * S ((S (S ff_i_swap_new_prefix)) * ff_v_swap_new_prefix) + (ff_s_swap_new_prefix))) /\ ff_s_swap_new_prefix = ff_r_swap_new_prefix * ff_p_swap_new_prefix)))))) /\ q = r * a)specialize beta_product_succ_decompose zspecialize beta_product_succ_decompose dspecialize beta_product_succ_decompose nspecialize beta_product_succ_decompose qapply beta_product_succ_decomposeexact hproduct_newcases hold_decompcases hold_decomp_witnesscases hold_decomp_witness_witnesscases hold_decomp_witness_witness_rightcases hnew_decompcases hnew_decomp_witnesscases hnew_decomp_witness_witnesscases hnew_decomp_witness_witness_righthave hold_last : x1 = yspecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique nspecialize beta_at_unique x1specialize beta_at_unique yapply beta_at_uniqueexact hold_decomp_witness_witness_leftexact hold_nhave hnew_last : x3 = xspecialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique nspecialize beta_at_unique x3specialize beta_at_unique xapply beta_at_uniqueexact hnew_decomp_witness_witness_leftexact hnew_nhave hprefix_preserve : forall j a. (exists h. h + S j = n) -> ~(j = i) -> ((exists h. h + S a = S ((S j) * c)) /\ exists w. b = w * S ((S j) * c) + a) -> ((exists h. h + S a = S ((S j) * d)) /\ exists w. z = w * S ((S j) * d) + a)intro jintro aintro hjintro hjiintro holdspecialize hpreserve jspecialize hpreserve aapply hpreservespecialize le_succ (S j)specialize le_succ napply le_succexact hjexact hjiintro hjnspecialize lt_irrefl_expanded napply lt_irrefl_expandedrewrite hjn at hjexact hjexact holdhave hbalance : x4 * x = x2 * yspecialize beta_product_replace_balance nspecialize beta_product_replace_balance bspecialize beta_product_replace_balance cspecialize beta_product_replace_balance zspecialize beta_product_replace_balance dspecialize beta_product_replace_balance ispecialize beta_product_replace_balance xspecialize beta_product_replace_balance yspecialize beta_product_replace_balance x2specialize beta_product_replace_balance x4apply beta_product_replace_balanceexact hiexact hold_iexact hnew_iexact hprefix_preserveexact hold_decomp_witness_witness_right_leftexact hnew_decomp_witness_witness_right_leftrewrite hold_decomp_witness_witness_right_rightrewrite hnew_decomp_witness_witness_right_rightrewrite hold_lastrewrite hnew_lastsymmexact hbalance
finite_fixed_last_prefix_bounded · unchanged support, not a new admission
forall r s n. (forall fp_i_fixed_last_bounded_succ. (exists fp_gap_fixed_last_bounded_succ_index. fp_gap_fixed_last_bounded_succ_index + S fp_i_fixed_last_bounded_succ = S n) -> exists fp_value_fixed_last_bounded_succ. ((((exists ff_h_fixed_last_bounded_succ_entry. ff_h_fixed_last_bounded_succ_entry + S (fp_value_fixed_last_bounded_succ) = S ((S (fp_i_fixed_last_bounded_succ)) * s)) /\ exists ff_q_fixed_last_bounded_succ_entry. r = ff_q_fixed_last_bounded_succ_entry * S ((S (fp_i_fixed_last_bounded_succ)) * s) + (fp_value_fixed_last_bounded_succ))) /\ (exists fp_gap_fixed_last_bounded_succ_value. fp_gap_fixed_last_bounded_succ_value + S fp_value_fixed_last_bounded_succ = S n))) -> (forall fp_i_fixed_last_injective_succ fp_j_fixed_last_injective_succ fp_value_fixed_last_injective_succ. (exists fp_gap_fixed_last_injective_succ_i. fp_gap_fixed_last_injective_succ_i + S fp_i_fixed_last_injective_succ = S n) -> (exists fp_gap_fixed_last_injective_succ_j. fp_gap_fixed_last_injective_succ_j + S fp_j_fixed_last_injective_succ = S n) -> (((exists ff_h_fixed_last_injective_succ_left. ff_h_fixed_last_injective_succ_left + S (fp_value_fixed_last_injective_succ) = S ((S (fp_i_fixed_last_injective_succ)) * s)) /\ exists ff_q_fixed_last_injective_succ_left. r = ff_q_fixed_last_injective_succ_left * S ((S (fp_i_fixed_last_injective_succ)) * s) + (fp_value_fixed_last_injective_succ))) -> (((exists ff_h_fixed_last_injective_succ_right. ff_h_fixed_last_injective_succ_right + S (fp_value_fixed_last_injective_succ) = S ((S (fp_j_fixed_last_injective_succ)) * s)) /\ exists ff_q_fixed_last_injective_succ_right. r = ff_q_fixed_last_injective_succ_right * S ((S (fp_j_fixed_last_injective_succ)) * s) + (fp_value_fixed_last_injective_succ))) -> fp_i_fixed_last_injective_succ = fp_j_fixed_last_injective_succ) -> (((exists ff_h_fixed_last_entry. ff_h_fixed_last_entry + S (n) = S ((S (n)) * s)) /\ exists ff_q_fixed_last_entry. r = ff_q_fixed_last_entry * S ((S (n)) * s) + (n))) -> (forall fp_i_fixed_last_bounded_prefix. (exists fp_gap_fixed_last_bounded_prefix_index. fp_gap_fixed_last_bounded_prefix_index + S fp_i_fixed_last_bounded_prefix = n) -> exists fp_value_fixed_last_bounded_prefix. ((((exists ff_h_fixed_last_bounded_prefix_entry. ff_h_fixed_last_bounded_prefix_entry + S (fp_value_fixed_last_bounded_prefix) = S ((S (fp_i_fixed_last_bounded_prefix)) * s)) /\ exists ff_q_fixed_last_bounded_prefix_entry. r = ff_q_fixed_last_bounded_prefix_entry * S ((S (fp_i_fixed_last_bounded_prefix)) * s) + (fp_value_fixed_last_bounded_prefix))) /\ (exists fp_gap_fixed_last_bounded_prefix_value. fp_gap_fixed_last_bounded_prefix_value + S fp_value_fixed_last_bounded_prefix = n)))
intro rintro sintro nintro hboundedintro hinjectiveintro hlasthave hnotop : forall i. (exists h. h + S i = n) -> ~((exists h. h + S n = S ((S i) * s)) /\ exists q. r = q * S ((S i) * s) + n)intro iintro hiintro htophave hisn : exists h. h + S i = S nspecialize le_succ (S i)specialize le_succ napply le_succexact hihave hnsn : exists h. h + S n = S nspecialize le_refl (S n)exact le_reflhave hin : i = nspecialize hinjective ispecialize hinjective nspecialize hinjective napply hinjectiveexact hisnexact hnsnexact htopexact hlastspecialize lt_irrefl_expanded napply lt_irrefl_expandedrewrite hin at hiexact hispecialize finite_bounded_prefix_without_top rspecialize finite_bounded_prefix_without_top sspecialize finite_bounded_prefix_without_top nspecialize finite_bounded_prefix_without_top (S n)apply finite_bounded_prefix_without_topreflexact hboundedexact hnotop
beta_reindex_alignment_swap_last · unchanged support, not a new admission
forall r s u v b c z d w e n i m x y. (((exists ff_h_align_swap_map_i. ff_h_align_swap_map_i + S (m) = S ((S (i)) * v)) /\ exists ff_q_align_swap_map_i. u = ff_q_align_swap_map_i * S ((S (i)) * v) + (m))) -> (((exists ff_h_align_swap_map_n. ff_h_align_swap_map_n + S (n) = S ((S (n)) * v)) /\ exists ff_q_align_swap_map_n. u = ff_q_align_swap_map_n * S ((S (n)) * v) + (n))) -> (forall k j. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_align_swap_map_old. ff_h_align_swap_map_old + S (j) = S ((S (k)) * s)) /\ exists ff_q_align_swap_map_old. r = ff_q_align_swap_map_old * S ((S (k)) * s) + (j))) -> (((exists ff_h_align_swap_map_new. ff_h_align_swap_map_new + S (j) = S ((S (k)) * v)) /\ exists ff_q_align_swap_map_new. u = ff_q_align_swap_map_new * S ((S (k)) * v) + (j)))) -> (((exists ff_h_align_swap_source_m. ff_h_align_swap_source_m + S (y) = S ((S (m)) * c)) /\ exists ff_q_align_swap_source_m. b = ff_q_align_swap_source_m * S ((S (m)) * c) + (y))) -> (((exists ff_h_align_swap_source_n. ff_h_align_swap_source_n + S (x) = S ((S (n)) * c)) /\ exists ff_q_align_swap_source_n. b = ff_q_align_swap_source_n * S ((S (n)) * c) + (x))) -> (((exists ff_h_align_swap_target_i. ff_h_align_swap_target_i + S (y) = S ((S (i)) * e)) /\ exists ff_q_align_swap_target_i. w = ff_q_align_swap_target_i * S ((S (i)) * e) + (y))) -> (((exists ff_h_align_swap_target_n. ff_h_align_swap_target_n + S (x) = S ((S (n)) * e)) /\ exists ff_q_align_swap_target_n. w = ff_q_align_swap_target_n * S ((S (n)) * e) + (x))) -> (forall k a. (exists h. h + S k = S n) -> ~(k = i) -> ~(k = n) -> (((exists ff_h_align_swap_target_old. ff_h_align_swap_target_old + S (a) = S ((S (k)) * d)) /\ exists ff_q_align_swap_target_old. z = ff_q_align_swap_target_old * S ((S (k)) * d) + (a))) -> (((exists ff_h_align_swap_target_new. ff_h_align_swap_target_new + S (a) = S ((S (k)) * e)) /\ exists ff_q_align_swap_target_new. w = ff_q_align_swap_target_new * S ((S (k)) * e) + (a)))) -> (forall fpr_i_align_swap_old fpr_j_align_swap_old fpr_x_align_swap_old. (exists fpr_h_align_swap_old. fpr_h_align_swap_old + S fpr_i_align_swap_old = S n) -> (((exists ff_h_align_swap_old_map. ff_h_align_swap_old_map + S (fpr_j_align_swap_old) = S ((S (fpr_i_align_swap_old)) * s)) /\ exists ff_q_align_swap_old_map. r = ff_q_align_swap_old_map * S ((S (fpr_i_align_swap_old)) * s) + (fpr_j_align_swap_old))) -> (((exists ff_h_align_swap_old_source. ff_h_align_swap_old_source + S (fpr_x_align_swap_old) = S ((S (fpr_j_align_swap_old)) * c)) /\ exists ff_q_align_swap_old_source. b = ff_q_align_swap_old_source * S ((S (fpr_j_align_swap_old)) * c) + (fpr_x_align_swap_old))) -> (((exists ff_h_align_swap_old_target. ff_h_align_swap_old_target + S (fpr_x_align_swap_old) = S ((S (fpr_i_align_swap_old)) * d)) /\ exists ff_q_align_swap_old_target. z = ff_q_align_swap_old_target * S ((S (fpr_i_align_swap_old)) * d) + (fpr_x_align_swap_old)))) -> (forall fpr_i_align_swap_new fpr_j_align_swap_new fpr_x_align_swap_new. (exists fpr_h_align_swap_new. fpr_h_align_swap_new + S fpr_i_align_swap_new = S n) -> (((exists ff_h_align_swap_new_map. ff_h_align_swap_new_map + S (fpr_j_align_swap_new) = S ((S (fpr_i_align_swap_new)) * v)) /\ exists ff_q_align_swap_new_map. u = ff_q_align_swap_new_map * S ((S (fpr_i_align_swap_new)) * v) + (fpr_j_align_swap_new))) -> (((exists ff_h_align_swap_new_source. ff_h_align_swap_new_source + S (fpr_x_align_swap_new) = S ((S (fpr_j_align_swap_new)) * c)) /\ exists ff_q_align_swap_new_source. b = ff_q_align_swap_new_source * S ((S (fpr_j_align_swap_new)) * c) + (fpr_x_align_swap_new))) -> (((exists ff_h_align_swap_new_target. ff_h_align_swap_new_target + S (fpr_x_align_swap_new) = S ((S (fpr_i_align_swap_new)) * e)) /\ exists ff_q_align_swap_new_target. w = ff_q_align_swap_new_target * S ((S (fpr_i_align_swap_new)) * e) + (fpr_x_align_swap_new))))
intro rintro sintro uintro vintro bintro cintro zintro dintro wintro eintro nintro iintro mintro xintro yintro hmap_iintro hmap_nintro hmap_preserveintro hsource_mintro hsource_nintro htarget_iintro htarget_nintro htarget_preserveintro halignedhave hreflect : forall k j. (exists h. h + S k = S n) -> ((exists h. h + S j = S ((S k) * v)) /\ exists q. u = q * S ((S k) * v) + j) -> (k = i /\ j = m) \/ ((k = n /\ j = n) \/ (~(k = i) /\ (~(k = n) /\ ((exists h. h + S j = S ((S k) * s)) /\ exists q. r = q * S ((S k) * s) + j))))specialize beta_prefix_swap_last_reflect rspecialize beta_prefix_swap_last_reflect sspecialize beta_prefix_swap_last_reflect uspecialize beta_prefix_swap_last_reflect vspecialize beta_prefix_swap_last_reflect nspecialize beta_prefix_swap_last_reflect ispecialize beta_prefix_swap_last_reflect nspecialize beta_prefix_swap_last_reflect mapply beta_prefix_swap_last_reflectexact hmap_iexact hmap_nexact hmap_preserveintro kintro jintro aintro hkintro hmapintro hsourcespecialize hreflect kspecialize hreflect jhave hcases : (k = i /\ j = m) \/ ((k = n /\ j = n) \/ (~(k = i) /\ (~(k = n) /\ ((exists h. h + S j = S ((S k) * s)) /\ exists q. r = q * S ((S k) * s) + j))))apply hreflectexact hkexact hmapcases hcasescases hcases_lefthave hay : a = yspecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique mspecialize beta_at_unique aspecialize beta_at_unique yapply beta_at_uniquerewrite hcases_left_right at hsourcerewrite hcases_left_right at hsourceexact hsourceexact hsource_mrewrite hcases_left_leftrewrite hcases_left_leftrewrite hayrewrite hayexact htarget_icases hcases_rightcases hcases_right_lefthave hax : a = xspecialize beta_at_unique bspecialize beta_at_unique cspecialize beta_at_unique nspecialize beta_at_unique aspecialize beta_at_unique xapply beta_at_uniquerewrite hcases_right_left_right at hsourcerewrite hcases_right_left_right at hsourceexact hsourceexact hsource_nrewrite hcases_right_left_leftrewrite hcases_right_left_leftrewrite haxrewrite haxexact htarget_ncases hcases_right_rightcases hcases_right_right_righthave hold_target : ((exists h. h + S a = S ((S k) * d)) /\ exists q. z = q * S ((S k) * d) + a)specialize haligned kspecialize haligned jspecialize haligned aapply halignedexact hkexact hcases_right_right_right_rightexact hsourcespecialize htarget_preserve kspecialize htarget_preserve aapply htarget_preserveexact hkexact hcases_right_right_leftexact hcases_right_right_right_leftexact hold_target
mod_eq_zero_iff_eq · unchanged support, not a new admission
forall a b. (((exists hgcrt_mod_left_zero_source hgcrt_mod_right_zero_source. a + 0 * hgcrt_mod_left_zero_source = b + 0 * hgcrt_mod_right_zero_source) -> a = b) /\ (a = b -> (exists hgcrt_mod_left_zero_result hgcrt_mod_right_zero_result. a + 0 * hgcrt_mod_left_zero_result = b + 0 * hgcrt_mod_right_zero_result)))
intro aintro bsplitintro hcases hcases h_witnesstrans a + 0 * xsymmtrans a + 0congrreflapply mul_zero_leftapply PA3trans b + 0 * x1exact h_witness_witnesstrans b + 0congrreflapply mul_zero_leftapply PA3intro hexists 0exists 0rewrite hrefl
mod_eq_scale · unchanged support, not a new admission
forall k m a b. (exists hgcrt_mod_left_scale_source hgcrt_mod_right_scale_source. a + m * hgcrt_mod_left_scale_source = b + m * hgcrt_mod_right_scale_source) -> (exists hgcrt_mod_left_scale_result hgcrt_mod_right_scale_result. (k * a) + (k * m) * hgcrt_mod_left_scale_result = (k * b) + (k * m) * hgcrt_mod_right_scale_result)
intro kintro mintro aintro bintro hcases hcases h_witnessexists xexists x1trans k * a + k * (m * x)congrreflapply mul_assoctrans k * (a + m * x)symmapply mul_addtrans k * (b + m * x1)congrreflexact h_witness_witnesstrans k * b + k * (m * x1)apply mul_addcongrreflsymmapply mul_assoc
is_gcd_quotients_coprime_nonzero · unchanged support, not a new admission
forall g m n M N. ((((exists hag_left_factor_quotient_assumption. m = g * hag_left_factor_quotient_assumption) /\ (exists hag_right_factor_quotient_assumption. n = g * hag_right_factor_quotient_assumption)) /\ forall hag_divisor_quotient_assumption. (exists hag_common_left_quotient_assumption. m = hag_divisor_quotient_assumption * hag_common_left_quotient_assumption) -> (exists hag_common_right_quotient_assumption. n = hag_divisor_quotient_assumption * hag_common_right_quotient_assumption) -> exists hag_greatest_factor_quotient_assumption. g = hag_divisor_quotient_assumption * hag_greatest_factor_quotient_assumption)) -> ~(g = 0) -> m = g * M -> n = g * N -> (forall hmi_divisor_quotient_result. (exists hmi_left_factor_quotient_result. M = hmi_divisor_quotient_result * hmi_left_factor_quotient_result) -> (exists hmi_right_factor_quotient_result. N = hmi_divisor_quotient_result * hmi_right_factor_quotient_result) -> hmi_divisor_quotient_result = 1)
intro gintro mintro nintro Mintro Nintro hgintro hg0intro hmintro hnintro dintro hdMintro hdNcases hdMcases hdNhave hdm : exists u. m = (g * d) * uexists xtrans g * Mexact hmtrans g * (d * x)congrreflexact hdM_witnesssymmapply mul_assochave hdn : exists v. n = (g * d) * vexists x1trans g * Nexact hntrans g * (d * x1)congrreflexact hdN_witnesssymmapply mul_assochave hdg : exists w. g = (g * d) * wspecialize is_gcd_greatest gspecialize is_gcd_greatest mspecialize is_gcd_greatest nspecialize is_gcd_greatest (g * d)apply is_gcd_greatestexact hgexact hdmexact hdncases hdghave hnorm : g = g * (d * x2)trans (g * d) * x2exact hdg_witnessapply mul_assochave hone : 1 = d * x2specialize mul_left_cancel_nonzero gspecialize mul_left_cancel_nonzero 1specialize mul_left_cancel_nonzero (d * x2)apply mul_left_cancel_nonzeroexact hg0trans gapply mul_oneexact hnormspecialize divisor_one dapply divisor_oneexists x2exact hone
mod_eq_common_remainder_decomposition · unchanged support, not a new admission
forall g a b. ~(g = 0) -> (exists hgcrt_mod_left_common_remainder_assumption hgcrt_mod_right_common_remainder_assumption. a + g * hgcrt_mod_left_common_remainder_assumption = b + g * hgcrt_mod_right_common_remainder_assumption) -> exists A B r. ((a = g * A + r /\ b = g * B + r) /\ (exists hmi_gap_common_remainder_bound. hmi_gap_common_remainder_bound + S r = g))
intro gintro aintro bintro hg0intro habhave hdiva : exists q r. a = g * q + r /\ exists h. h + S r = gspecialize division_remainder_exists gspecialize division_remainder_exists aapply division_remainder_existsexact hg0cases hdivacases hdiva_witnesscases hdiva_witness_witnesshave haqr : a = x * g + x1trans g * x + x1exact hdiva_witness_witness_leftcongrapply mul_commreflhave har : exists hgcrt_mod_left_common_remainder_a_r hgcrt_mod_right_common_remainder_a_r. a + g * hgcrt_mod_left_common_remainder_a_r = x1 + g * hgcrt_mod_right_common_remainder_a_rspecialize remainder_decomposition_to_mod_eq gspecialize remainder_decomposition_to_mod_eq aspecialize remainder_decomposition_to_mod_eq xspecialize remainder_decomposition_to_mod_eq x1apply remainder_decomposition_to_mod_eqexact haqrhave hba : exists hgcrt_mod_left_common_remainder_b_a hgcrt_mod_right_common_remainder_b_a. b + g * hgcrt_mod_left_common_remainder_b_a = a + g * hgcrt_mod_right_common_remainder_b_aspecialize mod_eq_symm gspecialize mod_eq_symm aspecialize mod_eq_symm bapply mod_eq_symmexact habhave hbr : exists hgcrt_mod_left_common_remainder_b_r hgcrt_mod_right_common_remainder_b_r. b + g * hgcrt_mod_left_common_remainder_b_r = x1 + g * hgcrt_mod_right_common_remainder_b_rspecialize mod_eq_trans gspecialize mod_eq_trans bspecialize mod_eq_trans aspecialize mod_eq_trans x1apply mod_eq_transexact hbaexact harhave hqb : exists q. b = q * g + x1specialize mod_eq_to_remainder_decomposition gspecialize mod_eq_to_remainder_decomposition bspecialize mod_eq_to_remainder_decomposition x1apply mod_eq_to_remainder_decompositionexact hg0exact hdiva_witness_witness_rightexact hbrcases hqbexists xexists x2exists x1splitsplitexact hdiva_witness_witness_lefttrans x2 * g + x1exact hqb_witnesscongrapply mul_commreflexact hdiva_witness_witness_right
crt_scaled_common_remainder_lift · unchanged support, not a new admission
forall g m n a b M N A B r. m = g * M -> n = g * N -> a = g * A + r -> b = g * B + r -> ~(M = 0) -> ~(N = 0) -> (forall hmi_divisor_lift_assumption. (exists hmi_left_factor_lift_assumption. M = hmi_divisor_lift_assumption * hmi_left_factor_lift_assumption) -> (exists hmi_right_factor_lift_assumption. N = hmi_divisor_lift_assumption * hmi_right_factor_lift_assumption) -> hmi_divisor_lift_assumption = 1) -> exists x. (((exists hgcrt_mod_left_lift_result_left hgcrt_mod_right_lift_result_left. x + m * hgcrt_mod_left_lift_result_left = a + m * hgcrt_mod_right_lift_result_left) /\ (exists hgcrt_mod_left_lift_result_right hgcrt_mod_right_lift_result_right. x + n * hgcrt_mod_left_lift_result_right = b + n * hgcrt_mod_right_lift_result_right)))
intro gintro mintro nintro aintro bintro Mintro Nintro Aintro Bintro rintro hmintro hnintro haintro hbintro hMintro hNintro hcophave hcrt : exists x. (((exists hgcrt_mod_left_lift_reduced_left hgcrt_mod_right_lift_reduced_left. x + M * hgcrt_mod_left_lift_reduced_left = A + M * hgcrt_mod_right_lift_reduced_left) /\ (exists hgcrt_mod_left_lift_reduced_right hgcrt_mod_right_lift_reduced_right. x + N * hgcrt_mod_left_lift_reduced_right = B + N * hgcrt_mod_right_lift_reduced_right)))specialize binary_crt Mspecialize binary_crt Nspecialize binary_crt Aspecialize binary_crt Bapply binary_crtexact hMexact hNexact hcopcases hcrtcases hcrt_witnesshave hls : exists hgcrt_mod_left_lift_ls hgcrt_mod_right_lift_ls. (g * x) + (g * M) * hgcrt_mod_left_lift_ls = (g * A) + (g * M) * hgcrt_mod_right_lift_lsspecialize mod_eq_scale gspecialize mod_eq_scale Mspecialize mod_eq_scale xspecialize mod_eq_scale Aapply mod_eq_scaleexact hcrt_witness_lefthave hrs : exists hgcrt_mod_left_lift_rs hgcrt_mod_right_lift_rs. (g * x) + (g * N) * hgcrt_mod_left_lift_rs = (g * B) + (g * N) * hgcrt_mod_right_lift_rsspecialize mod_eq_scale gspecialize mod_eq_scale Nspecialize mod_eq_scale xspecialize mod_eq_scale Bapply mod_eq_scaleexact hcrt_witness_righthave hlr : exists hgcrt_mod_left_lift_lr hgcrt_mod_right_lift_lr. r + (g * M) * hgcrt_mod_left_lift_lr = r + (g * M) * hgcrt_mod_right_lift_lrspecialize mod_eq_refl (g * M)specialize mod_eq_refl rapply mod_eq_reflhave hrr : exists hgcrt_mod_left_lift_rr hgcrt_mod_right_lift_rr. r + (g * N) * hgcrt_mod_left_lift_rr = r + (g * N) * hgcrt_mod_right_lift_rrspecialize mod_eq_refl (g * N)specialize mod_eq_refl rapply mod_eq_reflhave hll : exists hgcrt_mod_left_lift_ll hgcrt_mod_right_lift_ll. (g * x + r) + (g * M) * hgcrt_mod_left_lift_ll = (g * A + r) + (g * M) * hgcrt_mod_right_lift_llspecialize mod_eq_add (g * M)specialize mod_eq_add (g * x)specialize mod_eq_add (g * A)specialize mod_eq_add rspecialize mod_eq_add rapply mod_eq_addexact hlsexact hlrhave hrl : exists hgcrt_mod_left_lift_rl hgcrt_mod_right_lift_rl. (g * x + r) + (g * N) * hgcrt_mod_left_lift_rl = (g * B + r) + (g * N) * hgcrt_mod_right_lift_rlspecialize mod_eq_add (g * N)specialize mod_eq_add (g * x)specialize mod_eq_add (g * B)specialize mod_eq_add rspecialize mod_eq_add rapply mod_eq_addexact hrsexact hrrexists g * x + rsplitrewrite <- hm at hllrewrite <- hm at hllrewrite <- ha at hllexact hllrewrite <- hn at hrlrewrite <- hn at hrlrewrite <- hb at hrlexact hrl
generalized_binary_crt_sufficient_nonzero · unchanged support, not a new admission
forall g m n a b. ~(m = 0) -> ~(n = 0) -> ((((exists hag_left_factor_sufficient_assumption. m = g * hag_left_factor_sufficient_assumption) /\ (exists hag_right_factor_sufficient_assumption. n = g * hag_right_factor_sufficient_assumption)) /\ forall hag_divisor_sufficient_assumption. (exists hag_common_left_sufficient_assumption. m = hag_divisor_sufficient_assumption * hag_common_left_sufficient_assumption) -> (exists hag_common_right_sufficient_assumption. n = hag_divisor_sufficient_assumption * hag_common_right_sufficient_assumption) -> exists hag_greatest_factor_sufficient_assumption. g = hag_divisor_sufficient_assumption * hag_greatest_factor_sufficient_assumption)) -> (exists hgcrt_mod_left_sufficient_compatibility hgcrt_mod_right_sufficient_compatibility. a + g * hgcrt_mod_left_sufficient_compatibility = b + g * hgcrt_mod_right_sufficient_compatibility) -> exists x. (((exists hgcrt_mod_left_sufficient_result_left hgcrt_mod_right_sufficient_result_left. x + m * hgcrt_mod_left_sufficient_result_left = a + m * hgcrt_mod_right_sufficient_result_left) /\ (exists hgcrt_mod_left_sufficient_result_right hgcrt_mod_right_sufficient_result_right. x + n * hgcrt_mod_left_sufficient_result_right = b + n * hgcrt_mod_right_sufficient_result_right)))
intro gintro mintro nintro aintro bintro hm0intro hn0intro hgcdintro hcompathave hmfactor : exists M. m = g * Mspecialize is_gcd_dvd_left gspecialize is_gcd_dvd_left mspecialize is_gcd_dvd_left napply is_gcd_dvd_leftexact hgcdhave hnfactor : exists N. n = g * Nspecialize is_gcd_dvd_right gspecialize is_gcd_dvd_right mspecialize is_gcd_dvd_right napply is_gcd_dvd_rightexact hgcdcases hmfactorcases hnfactorhave hg0 : ~(g = 0)intro hgzapply hm0trans g * xexact hmfactor_witnessrewrite hgzapply mul_zero_lefthave hM0 : ~(x = 0)intro hx0apply hm0trans g * xexact hmfactor_witnessrewrite hx0apply PA5have hN0 : ~(x1 = 0)intro hx10apply hn0trans g * x1exact hnfactor_witnessrewrite hx10apply PA5have hcop : forall hmi_divisor_main_cofactors. (exists hmi_left_factor_main_cofactors. x = hmi_divisor_main_cofactors * hmi_left_factor_main_cofactors) -> (exists hmi_right_factor_main_cofactors. x1 = hmi_divisor_main_cofactors * hmi_right_factor_main_cofactors) -> hmi_divisor_main_cofactors = 1specialize is_gcd_quotients_coprime_nonzero gspecialize is_gcd_quotients_coprime_nonzero mspecialize is_gcd_quotients_coprime_nonzero nspecialize is_gcd_quotients_coprime_nonzero xspecialize is_gcd_quotients_coprime_nonzero x1apply is_gcd_quotients_coprime_nonzeroexact hgcdexact hg0exact hmfactor_witnessexact hnfactor_witnesshave hrem : exists A B r. ((a = g * A + r /\ b = g * B + r) /\ exists h. h + S r = g)specialize mod_eq_common_remainder_decomposition gspecialize mod_eq_common_remainder_decomposition aspecialize mod_eq_common_remainder_decomposition bapply mod_eq_common_remainder_decompositionexact hg0exact hcompatcases hremcases hrem_witnesscases hrem_witness_witnesscases hrem_witness_witness_witnesscases hrem_witness_witness_witness_leftspecialize crt_scaled_common_remainder_lift gspecialize crt_scaled_common_remainder_lift mspecialize crt_scaled_common_remainder_lift nspecialize crt_scaled_common_remainder_lift aspecialize crt_scaled_common_remainder_lift bspecialize crt_scaled_common_remainder_lift xspecialize crt_scaled_common_remainder_lift x1specialize crt_scaled_common_remainder_lift x2specialize crt_scaled_common_remainder_lift x3specialize crt_scaled_common_remainder_lift x4apply crt_scaled_common_remainder_liftexact hmfactor_witnessexact hnfactor_witnessexact hrem_witness_witness_witness_left_leftexact hrem_witness_witness_witness_left_rightexact hM0exact hN0exact hcop
generalized_binary_crt_sufficient_zero_left · unchanged support, not a new admission
forall g n a b. ((((exists hage_left_factor_zero_left_gcd. 0 = g * hage_left_factor_zero_left_gcd) /\ (exists hage_right_factor_zero_left_gcd. n = g * hage_right_factor_zero_left_gcd)) /\ forall hage_divisor_zero_left_gcd. (exists hage_common_left_zero_left_gcd. 0 = hage_divisor_zero_left_gcd * hage_common_left_zero_left_gcd) -> (exists hage_common_right_zero_left_gcd. n = hage_divisor_zero_left_gcd * hage_common_right_zero_left_gcd) -> exists hage_greatest_factor_zero_left_gcd. g = hage_divisor_zero_left_gcd * hage_greatest_factor_zero_left_gcd)) -> (exists hgcrt_mod_left_zero_left_compatibility hgcrt_mod_right_zero_left_compatibility. a + g * hgcrt_mod_left_zero_left_compatibility = b + g * hgcrt_mod_right_zero_left_compatibility) -> exists x. (((exists hgcrt_mod_left_zero_left_solution_left hgcrt_mod_right_zero_left_solution_left. x + 0 * hgcrt_mod_left_zero_left_solution_left = a + 0 * hgcrt_mod_right_zero_left_solution_left) /\ (exists hgcrt_mod_left_zero_left_solution_right hgcrt_mod_right_zero_left_solution_right. x + n * hgcrt_mod_left_zero_left_solution_right = b + n * hgcrt_mod_right_zero_left_solution_right)))
intro gintro nintro aintro bintro hgintro habhave hsym : (((exists hage_left_factor_zero_left_gcd_swapped. n = g * hage_left_factor_zero_left_gcd_swapped) /\ (exists hage_right_factor_zero_left_gcd_swapped. 0 = g * hage_right_factor_zero_left_gcd_swapped)) /\ forall hage_divisor_zero_left_gcd_swapped. (exists hage_common_left_zero_left_gcd_swapped. n = hage_divisor_zero_left_gcd_swapped * hage_common_left_zero_left_gcd_swapped) -> (exists hage_common_right_zero_left_gcd_swapped. 0 = hage_divisor_zero_left_gcd_swapped * hage_common_right_zero_left_gcd_swapped) -> exists hage_greatest_factor_zero_left_gcd_swapped. g = hage_divisor_zero_left_gcd_swapped * hage_greatest_factor_zero_left_gcd_swapped)specialize is_gcd_symm gspecialize is_gcd_symm 0specialize is_gcd_symm napply is_gcd_symmexact hghave hn : (((exists hage_left_factor_zero_left_gcd_base. n = n * hage_left_factor_zero_left_gcd_base) /\ (exists hage_right_factor_zero_left_gcd_base. 0 = n * hage_right_factor_zero_left_gcd_base)) /\ forall hage_divisor_zero_left_gcd_base. (exists hage_common_left_zero_left_gcd_base. n = hage_divisor_zero_left_gcd_base * hage_common_left_zero_left_gcd_base) -> (exists hage_common_right_zero_left_gcd_base. 0 = hage_divisor_zero_left_gcd_base * hage_common_right_zero_left_gcd_base) -> exists hage_greatest_factor_zero_left_gcd_base. n = hage_divisor_zero_left_gcd_base * hage_greatest_factor_zero_left_gcd_base)specialize is_gcd_zero_right nexact is_gcd_zero_righthave hgn : g = nspecialize is_gcd_unique gspecialize is_gcd_unique nspecialize is_gcd_unique nspecialize is_gcd_unique 0apply is_gcd_uniqueexact hsymexact hnrewrite hgn at habrewrite hgn at habexists asplitspecialize mod_eq_refl 0specialize mod_eq_refl aexact mod_eq_reflexact hab
generalized_binary_crt_sufficient_zero_right · unchanged support, not a new admission
forall g m a b. ((((exists hage_left_factor_zero_right_gcd. m = g * hage_left_factor_zero_right_gcd) /\ (exists hage_right_factor_zero_right_gcd. 0 = g * hage_right_factor_zero_right_gcd)) /\ forall hage_divisor_zero_right_gcd. (exists hage_common_left_zero_right_gcd. m = hage_divisor_zero_right_gcd * hage_common_left_zero_right_gcd) -> (exists hage_common_right_zero_right_gcd. 0 = hage_divisor_zero_right_gcd * hage_common_right_zero_right_gcd) -> exists hage_greatest_factor_zero_right_gcd. g = hage_divisor_zero_right_gcd * hage_greatest_factor_zero_right_gcd)) -> (exists hgcrt_mod_left_zero_right_compatibility hgcrt_mod_right_zero_right_compatibility. a + g * hgcrt_mod_left_zero_right_compatibility = b + g * hgcrt_mod_right_zero_right_compatibility) -> exists x. (((exists hgcrt_mod_left_zero_right_solution_left hgcrt_mod_right_zero_right_solution_left. x + m * hgcrt_mod_left_zero_right_solution_left = a + m * hgcrt_mod_right_zero_right_solution_left) /\ (exists hgcrt_mod_left_zero_right_solution_right hgcrt_mod_right_zero_right_solution_right. x + 0 * hgcrt_mod_left_zero_right_solution_right = b + 0 * hgcrt_mod_right_zero_right_solution_right)))
intro gintro mintro aintro bintro hgintro habhave hm : (((exists hage_left_factor_zero_right_gcd_base. m = m * hage_left_factor_zero_right_gcd_base) /\ (exists hage_right_factor_zero_right_gcd_base. 0 = m * hage_right_factor_zero_right_gcd_base)) /\ forall hage_divisor_zero_right_gcd_base. (exists hage_common_left_zero_right_gcd_base. m = hage_divisor_zero_right_gcd_base * hage_common_left_zero_right_gcd_base) -> (exists hage_common_right_zero_right_gcd_base. 0 = hage_divisor_zero_right_gcd_base * hage_common_right_zero_right_gcd_base) -> exists hage_greatest_factor_zero_right_gcd_base. m = hage_divisor_zero_right_gcd_base * hage_greatest_factor_zero_right_gcd_base)specialize is_gcd_zero_right mexact is_gcd_zero_righthave hgm : g = mspecialize is_gcd_unique gspecialize is_gcd_unique mspecialize is_gcd_unique mspecialize is_gcd_unique 0apply is_gcd_uniqueexact hgexact hmrewrite hgm at habrewrite hgm at habexists bsplitspecialize mod_eq_symm mspecialize mod_eq_symm aspecialize mod_eq_symm bapply mod_eq_symmexact habspecialize mod_eq_refl 0specialize mod_eq_refl bexact mod_eq_refl
generalized_binary_crt_sufficient · unchanged support, not a new admission
forall g m n a b. ((((exists hag_left_factor_total_sufficiency_gcd. m = g * hag_left_factor_total_sufficiency_gcd) /\ (exists hag_right_factor_total_sufficiency_gcd. n = g * hag_right_factor_total_sufficiency_gcd)) /\ forall hag_divisor_total_sufficiency_gcd. (exists hag_common_left_total_sufficiency_gcd. m = hag_divisor_total_sufficiency_gcd * hag_common_left_total_sufficiency_gcd) -> (exists hag_common_right_total_sufficiency_gcd. n = hag_divisor_total_sufficiency_gcd * hag_common_right_total_sufficiency_gcd) -> exists hag_greatest_factor_total_sufficiency_gcd. g = hag_divisor_total_sufficiency_gcd * hag_greatest_factor_total_sufficiency_gcd)) -> (exists hgcrt_mod_left_total_sufficiency_compatibility hgcrt_mod_right_total_sufficiency_compatibility. a + g * hgcrt_mod_left_total_sufficiency_compatibility = b + g * hgcrt_mod_right_total_sufficiency_compatibility) -> exists x. (((exists hgcrt_mod_left_total_sufficiency_solution_left hgcrt_mod_right_total_sufficiency_solution_left. x + m * hgcrt_mod_left_total_sufficiency_solution_left = a + m * hgcrt_mod_right_total_sufficiency_solution_left) /\ (exists hgcrt_mod_left_total_sufficiency_solution_right hgcrt_mod_right_total_sufficiency_solution_right. x + n * hgcrt_mod_left_total_sufficiency_solution_right = b + n * hgcrt_mod_right_total_sufficiency_solution_right)))
intro gintro mintro nintro aintro bintro hgintro habhave hmzero : m = 0 \/ ~(m = 0)specialize eq_decidable mspecialize eq_decidable 0exact eq_decidablecases hmzerorewrite hmzero_left at hgrewrite hmzero_left at hgrewrite hmzero_leftrewrite hmzero_leftspecialize generalized_binary_crt_sufficient_zero_left gspecialize generalized_binary_crt_sufficient_zero_left nspecialize generalized_binary_crt_sufficient_zero_left aspecialize generalized_binary_crt_sufficient_zero_left bapply generalized_binary_crt_sufficient_zero_leftexact hgexact habhave hnzero : n = 0 \/ ~(n = 0)specialize eq_decidable nspecialize eq_decidable 0exact eq_decidablecases hnzerorewrite hnzero_left at hgrewrite hnzero_left at hgrewrite hnzero_leftrewrite hnzero_leftspecialize generalized_binary_crt_sufficient_zero_right gspecialize generalized_binary_crt_sufficient_zero_right mspecialize generalized_binary_crt_sufficient_zero_right aspecialize generalized_binary_crt_sufficient_zero_right bapply generalized_binary_crt_sufficient_zero_rightexact hgexact habspecialize generalized_binary_crt_sufficient_nonzero gspecialize generalized_binary_crt_sufficient_nonzero mspecialize generalized_binary_crt_sufficient_nonzero nspecialize generalized_binary_crt_sufficient_nonzero aspecialize generalized_binary_crt_sufficient_nonzero bapply generalized_binary_crt_sufficient_nonzeroexact hmzero_rightexact hnzero_rightexact hgexact hab
beta_product_pointwise_scale_mod · unchanged support, not a new admission
forall m a b c z d l P Q A. (forall fsp_index_pointwise fsp_source_pointwise fsp_target_pointwise. (exists fsp_gap_pointwise. fsp_gap_pointwise + S fsp_index_pointwise = l) -> (((exists fsp_source_height_pointwise. fsp_source_height_pointwise + S (fsp_source_pointwise) = S ((S (fsp_index_pointwise)) * c)) /\ exists fsp_source_quotient_pointwise. b = fsp_source_quotient_pointwise * S ((S (fsp_index_pointwise)) * c) + (fsp_source_pointwise))) -> (((exists fsp_target_height_pointwise. fsp_target_height_pointwise + S (fsp_target_pointwise) = S ((S (fsp_index_pointwise)) * d)) /\ exists fsp_target_quotient_pointwise. z = fsp_target_quotient_pointwise * S ((S (fsp_index_pointwise)) * d) + (fsp_target_pointwise))) -> (exists fsp_mod_left_pointwise fsp_mod_right_pointwise. a * fsp_source_pointwise + m * fsp_mod_left_pointwise = fsp_target_pointwise + m * fsp_mod_right_pointwise)) -> (exists ff_u_source ff_v_source. ((((exists ff_h_source_start. ff_h_source_start + S (1) = S ((S (0)) * ff_v_source)) /\ exists ff_q_source_start. ff_u_source = ff_q_source_start * S ((S (0)) * ff_v_source) + (1))) /\ ((((exists ff_h_source_terminal. ff_h_source_terminal + S (P) = S ((S (l)) * ff_v_source)) /\ exists ff_q_source_terminal. ff_u_source = ff_q_source_terminal * S ((S (l)) * ff_v_source) + (P))) /\ forall ff_i_source. (exists ff_lt_source_bound. ff_lt_source_bound + S ff_i_source = l) -> exists ff_p_source ff_r_source ff_s_source. ((((exists ff_h_source_factor. ff_h_source_factor + S (ff_p_source) = S ((S (ff_i_source)) * c)) /\ exists ff_q_source_factor. b = ff_q_source_factor * S ((S (ff_i_source)) * c) + (ff_p_source))) /\ ((((exists ff_h_source_partial. ff_h_source_partial + S (ff_r_source) = S ((S (ff_i_source)) * ff_v_source)) /\ exists ff_q_source_partial. ff_u_source = ff_q_source_partial * S ((S (ff_i_source)) * ff_v_source) + (ff_r_source))) /\ ((((exists ff_h_source_successor. ff_h_source_successor + S (ff_s_source) = S ((S (S ff_i_source)) * ff_v_source)) /\ exists ff_q_source_successor. ff_u_source = ff_q_source_successor * S ((S (S ff_i_source)) * ff_v_source) + (ff_s_source))) /\ ff_s_source = ff_r_source * ff_p_source)))))) -> (exists ff_u_target ff_v_target. ((((exists ff_h_target_start. ff_h_target_start + S (1) = S ((S (0)) * ff_v_target)) /\ exists ff_q_target_start. ff_u_target = ff_q_target_start * S ((S (0)) * ff_v_target) + (1))) /\ ((((exists ff_h_target_terminal. ff_h_target_terminal + S (Q) = S ((S (l)) * ff_v_target)) /\ exists ff_q_target_terminal. ff_u_target = ff_q_target_terminal * S ((S (l)) * ff_v_target) + (Q))) /\ forall ff_i_target. (exists ff_lt_target_bound. ff_lt_target_bound + S ff_i_target = l) -> exists ff_p_target ff_r_target ff_s_target. ((((exists ff_h_target_factor. ff_h_target_factor + S (ff_p_target) = S ((S (ff_i_target)) * d)) /\ exists ff_q_target_factor. z = ff_q_target_factor * S ((S (ff_i_target)) * d) + (ff_p_target))) /\ ((((exists ff_h_target_partial. ff_h_target_partial + S (ff_r_target) = S ((S (ff_i_target)) * ff_v_target)) /\ exists ff_q_target_partial. ff_u_target = ff_q_target_partial * S ((S (ff_i_target)) * ff_v_target) + (ff_r_target))) /\ ((((exists ff_h_target_successor. ff_h_target_successor + S (ff_s_target) = S ((S (S ff_i_target)) * ff_v_target)) /\ exists ff_q_target_successor. ff_u_target = ff_q_target_successor * S ((S (S ff_i_target)) * ff_v_target) + (ff_s_target))) /\ ff_s_target = ff_r_target * ff_p_target)))))) -> (exists ff_b_scale_power ff_c_scale_power. ((forall ff_i_scale_power_repeat. (exists ff_lt_scale_power_repeat_bound. ff_lt_scale_power_repeat_bound + S ff_i_scale_power_repeat = l) -> (((exists ff_h_scale_power_repeat_decoded. ff_h_scale_power_repeat_decoded + S (a) = S ((S (ff_i_scale_power_repeat)) * ff_c_scale_power)) /\ exists ff_q_scale_power_repeat_decoded. ff_b_scale_power = ff_q_scale_power_repeat_decoded * S ((S (ff_i_scale_power_repeat)) * ff_c_scale_power) + (a)))) /\ (exists ff_u_scale_power_product ff_v_scale_power_product. ((((exists ff_h_scale_power_product_start. ff_h_scale_power_product_start + S (1) = S ((S (0)) * ff_v_scale_power_product)) /\ exists ff_q_scale_power_product_start. ff_u_scale_power_product = ff_q_scale_power_product_start * S ((S (0)) * ff_v_scale_power_product) + (1))) /\ ((((exists ff_h_scale_power_product_terminal. ff_h_scale_power_product_terminal + S (A) = S ((S (l)) * ff_v_scale_power_product)) /\ exists ff_q_scale_power_product_terminal. ff_u_scale_power_product = ff_q_scale_power_product_terminal * S ((S (l)) * ff_v_scale_power_product) + (A))) /\ forall ff_i_scale_power_product. (exists ff_lt_scale_power_product_bound. ff_lt_scale_power_product_bound + S ff_i_scale_power_product = l) -> exists ff_p_scale_power_product ff_r_scale_power_product ff_s_scale_power_product. ((((exists ff_h_scale_power_product_factor. ff_h_scale_power_product_factor + S (ff_p_scale_power_product) = S ((S (ff_i_scale_power_product)) * ff_c_scale_power)) /\ exists ff_q_scale_power_product_factor. ff_b_scale_power = ff_q_scale_power_product_factor * S ((S (ff_i_scale_power_product)) * ff_c_scale_power) + (ff_p_scale_power_product))) /\ ((((exists ff_h_scale_power_product_partial. ff_h_scale_power_product_partial + S (ff_r_scale_power_product) = S ((S (ff_i_scale_power_product)) * ff_v_scale_power_product)) /\ exists ff_q_scale_power_product_partial. ff_u_scale_power_product = ff_q_scale_power_product_partial * S ((S (ff_i_scale_power_product)) * ff_v_scale_power_product) + (ff_r_scale_power_product))) /\ ((((exists ff_h_scale_power_product_successor. ff_h_scale_power_product_successor + S (ff_s_scale_power_product) = S ((S (S ff_i_scale_power_product)) * ff_v_scale_power_product)) /\ exists ff_q_scale_power_product_successor. ff_u_scale_power_product = ff_q_scale_power_product_successor * S ((S (S ff_i_scale_power_product)) * ff_v_scale_power_product) + (ff_s_scale_power_product))) /\ ff_s_scale_power_product = ff_r_scale_power_product * ff_p_scale_power_product)))))))) -> (exists fsp_product_mod_left_result fsp_product_mod_right_result. (A * P) + m * fsp_product_mod_left_result = Q + m * fsp_product_mod_right_result)
intro mintro aintro bintro cintro zintro dinduction lintro Pintro Qintro Aintro hpwintro hPintro hQintro hAhave hP1 : P = 1specialize beta_product_zero bspecialize beta_product_zero cspecialize beta_product_zero Papply beta_product_zeroexact hPhave hQ1 : Q = 1specialize beta_product_zero zspecialize beta_product_zero dspecialize beta_product_zero Qapply beta_product_zeroexact hQhave hA1 : A = 1specialize pow_zero aspecialize pow_zero 0specialize pow_zero Aapply pow_zeroreflexact hArewrite hA1rewrite hP1rewrite hQ1have hone : 1 * 1 = 1specialize one_mul 1exact one_mulrewrite honespecialize mod_eq_refl mspecialize mod_eq_refl 1exact mod_eq_reflintro Pintro Qintro Aintro hpwintro hPintro hQintro hAhave hPd : exists fsp_decomposition_factor_source_decomposition fsp_decomposition_prefix_source_decomposition. (((exists ff_h_source_decomposition_factor. ff_h_source_decomposition_factor + S (fsp_decomposition_factor_source_decomposition) = S ((S (l)) * c)) /\ exists ff_q_source_decomposition_factor. b = ff_q_source_decomposition_factor * S ((S (l)) * c) + (fsp_decomposition_factor_source_decomposition))) /\ ((exists ff_u_source_decomposition_prefix ff_v_source_decomposition_prefix. ((((exists ff_h_source_decomposition_prefix_start. ff_h_source_decomposition_prefix_start + S (1) = S ((S (0)) * ff_v_source_decomposition_prefix)) /\ exists ff_q_source_decomposition_prefix_start. ff_u_source_decomposition_prefix = ff_q_source_decomposition_prefix_start * S ((S (0)) * ff_v_source_decomposition_prefix) + (1))) /\ ((((exists ff_h_source_decomposition_prefix_terminal. ff_h_source_decomposition_prefix_terminal + S (fsp_decomposition_prefix_source_decomposition) = S ((S (l)) * ff_v_source_decomposition_prefix)) /\ exists ff_q_source_decomposition_prefix_terminal. ff_u_source_decomposition_prefix = ff_q_source_decomposition_prefix_terminal * S ((S (l)) * ff_v_source_decomposition_prefix) + (fsp_decomposition_prefix_source_decomposition))) /\ forall ff_i_source_decomposition_prefix. (exists ff_lt_source_decomposition_prefix_bound. ff_lt_source_decomposition_prefix_bound + S ff_i_source_decomposition_prefix = l) -> exists ff_p_source_decomposition_prefix ff_r_source_decomposition_prefix ff_s_source_decomposition_prefix. ((((exists ff_h_source_decomposition_prefix_factor. ff_h_source_decomposition_prefix_factor + S (ff_p_source_decomposition_prefix) = S ((S (ff_i_source_decomposition_prefix)) * c)) /\ exists ff_q_source_decomposition_prefix_factor. b = ff_q_source_decomposition_prefix_factor * S ((S (ff_i_source_decomposition_prefix)) * c) + (ff_p_source_decomposition_prefix))) /\ ((((exists ff_h_source_decomposition_prefix_partial. ff_h_source_decomposition_prefix_partial + S (ff_r_source_decomposition_prefix) = S ((S (ff_i_source_decomposition_prefix)) * ff_v_source_decomposition_prefix)) /\ exists ff_q_source_decomposition_prefix_partial. ff_u_source_decomposition_prefix = ff_q_source_decomposition_prefix_partial * S ((S (ff_i_source_decomposition_prefix)) * ff_v_source_decomposition_prefix) + (ff_r_source_decomposition_prefix))) /\ ((((exists ff_h_source_decomposition_prefix_successor. ff_h_source_decomposition_prefix_successor + S (ff_s_source_decomposition_prefix) = S ((S (S ff_i_source_decomposition_prefix)) * ff_v_source_decomposition_prefix)) /\ exists ff_q_source_decomposition_prefix_successor. ff_u_source_decomposition_prefix = ff_q_source_decomposition_prefix_successor * S ((S (S ff_i_source_decomposition_prefix)) * ff_v_source_decomposition_prefix) + (ff_s_source_decomposition_prefix))) /\ ff_s_source_decomposition_prefix = ff_r_source_decomposition_prefix * ff_p_source_decomposition_prefix)))))) /\ P = fsp_decomposition_prefix_source_decomposition * fsp_decomposition_factor_source_decomposition)specialize beta_product_succ_decompose bspecialize beta_product_succ_decompose cspecialize beta_product_succ_decompose lspecialize beta_product_succ_decompose Papply beta_product_succ_decomposeexact hPcases hPdcases hPd_witnesscases hPd_witness_witnesscases hPd_witness_witness_righthave hQd : exists fsp_decomposition_factor_target_decomposition fsp_decomposition_prefix_target_decomposition. (((exists ff_h_target_decomposition_factor. ff_h_target_decomposition_factor + S (fsp_decomposition_factor_target_decomposition) = S ((S (l)) * d)) /\ exists ff_q_target_decomposition_factor. z = ff_q_target_decomposition_factor * S ((S (l)) * d) + (fsp_decomposition_factor_target_decomposition))) /\ ((exists ff_u_target_decomposition_prefix ff_v_target_decomposition_prefix. ((((exists ff_h_target_decomposition_prefix_start. ff_h_target_decomposition_prefix_start + S (1) = S ((S (0)) * ff_v_target_decomposition_prefix)) /\ exists ff_q_target_decomposition_prefix_start. ff_u_target_decomposition_prefix = ff_q_target_decomposition_prefix_start * S ((S (0)) * ff_v_target_decomposition_prefix) + (1))) /\ ((((exists ff_h_target_decomposition_prefix_terminal. ff_h_target_decomposition_prefix_terminal + S (fsp_decomposition_prefix_target_decomposition) = S ((S (l)) * ff_v_target_decomposition_prefix)) /\ exists ff_q_target_decomposition_prefix_terminal. ff_u_target_decomposition_prefix = ff_q_target_decomposition_prefix_terminal * S ((S (l)) * ff_v_target_decomposition_prefix) + (fsp_decomposition_prefix_target_decomposition))) /\ forall ff_i_target_decomposition_prefix. (exists ff_lt_target_decomposition_prefix_bound. ff_lt_target_decomposition_prefix_bound + S ff_i_target_decomposition_prefix = l) -> exists ff_p_target_decomposition_prefix ff_r_target_decomposition_prefix ff_s_target_decomposition_prefix. ((((exists ff_h_target_decomposition_prefix_factor. ff_h_target_decomposition_prefix_factor + S (ff_p_target_decomposition_prefix) = S ((S (ff_i_target_decomposition_prefix)) * d)) /\ exists ff_q_target_decomposition_prefix_factor. z = ff_q_target_decomposition_prefix_factor * S ((S (ff_i_target_decomposition_prefix)) * d) + (ff_p_target_decomposition_prefix))) /\ ((((exists ff_h_target_decomposition_prefix_partial. ff_h_target_decomposition_prefix_partial + S (ff_r_target_decomposition_prefix) = S ((S (ff_i_target_decomposition_prefix)) * ff_v_target_decomposition_prefix)) /\ exists ff_q_target_decomposition_prefix_partial. ff_u_target_decomposition_prefix = ff_q_target_decomposition_prefix_partial * S ((S (ff_i_target_decomposition_prefix)) * ff_v_target_decomposition_prefix) + (ff_r_target_decomposition_prefix))) /\ ((((exists ff_h_target_decomposition_prefix_successor. ff_h_target_decomposition_prefix_successor + S (ff_s_target_decomposition_prefix) = S ((S (S ff_i_target_decomposition_prefix)) * ff_v_target_decomposition_prefix)) /\ exists ff_q_target_decomposition_prefix_successor. ff_u_target_decomposition_prefix = ff_q_target_decomposition_prefix_successor * S ((S (S ff_i_target_decomposition_prefix)) * ff_v_target_decomposition_prefix) + (ff_s_target_decomposition_prefix))) /\ ff_s_target_decomposition_prefix = ff_r_target_decomposition_prefix * ff_p_target_decomposition_prefix)))))) /\ Q = fsp_decomposition_prefix_target_decomposition * fsp_decomposition_factor_target_decomposition)specialize beta_product_succ_decompose zspecialize beta_product_succ_decompose dspecialize beta_product_succ_decompose lspecialize beta_product_succ_decompose Qapply beta_product_succ_decomposeexact hQcases hQdcases hQd_witnesscases hQd_witness_witnesscases hQd_witness_witness_righthave hAd : exists fsp_power_prefix_power_decomposition. (exists ff_b_power_decomposition_relation ff_c_power_decomposition_relation. ((forall ff_i_power_decomposition_relation_repeat. (exists ff_lt_power_decomposition_relation_repeat_bound. ff_lt_power_decomposition_relation_repeat_bound + S ff_i_power_decomposition_relation_repeat = l) -> (((exists ff_h_power_decomposition_relation_repeat_decoded. ff_h_power_decomposition_relation_repeat_decoded + S (a) = S ((S (ff_i_power_decomposition_relation_repeat)) * ff_c_power_decomposition_relation)) /\ exists ff_q_power_decomposition_relation_repeat_decoded. ff_b_power_decomposition_relation = ff_q_power_decomposition_relation_repeat_decoded * S ((S (ff_i_power_decomposition_relation_repeat)) * ff_c_power_decomposition_relation) + (a)))) /\ (exists ff_u_power_decomposition_relation_product ff_v_power_decomposition_relation_product. ((((exists ff_h_power_decomposition_relation_product_start. ff_h_power_decomposition_relation_product_start + S (1) = S ((S (0)) * ff_v_power_decomposition_relation_product)) /\ exists ff_q_power_decomposition_relation_product_start. ff_u_power_decomposition_relation_product = ff_q_power_decomposition_relation_product_start * S ((S (0)) * ff_v_power_decomposition_relation_product) + (1))) /\ ((((exists ff_h_power_decomposition_relation_product_terminal. ff_h_power_decomposition_relation_product_terminal + S (fsp_power_prefix_power_decomposition) = S ((S (l)) * ff_v_power_decomposition_relation_product)) /\ exists ff_q_power_decomposition_relation_product_terminal. ff_u_power_decomposition_relation_product = ff_q_power_decomposition_relation_product_terminal * S ((S (l)) * ff_v_power_decomposition_relation_product) + (fsp_power_prefix_power_decomposition))) /\ forall ff_i_power_decomposition_relation_product. (exists ff_lt_power_decomposition_relation_product_bound. ff_lt_power_decomposition_relation_product_bound + S ff_i_power_decomposition_relation_product = l) -> exists ff_p_power_decomposition_relation_product ff_r_power_decomposition_relation_product ff_s_power_decomposition_relation_product. ((((exists ff_h_power_decomposition_relation_product_factor. ff_h_power_decomposition_relation_product_factor + S (ff_p_power_decomposition_relation_product) = S ((S (ff_i_power_decomposition_relation_product)) * ff_c_power_decomposition_relation)) /\ exists ff_q_power_decomposition_relation_product_factor. ff_b_power_decomposition_relation = ff_q_power_decomposition_relation_product_factor * S ((S (ff_i_power_decomposition_relation_product)) * ff_c_power_decomposition_relation) + (ff_p_power_decomposition_relation_product))) /\ ((((exists ff_h_power_decomposition_relation_product_partial. ff_h_power_decomposition_relation_product_partial + S (ff_r_power_decomposition_relation_product) = S ((S (ff_i_power_decomposition_relation_product)) * ff_v_power_decomposition_relation_product)) /\ exists ff_q_power_decomposition_relation_product_partial. ff_u_power_decomposition_relation_product = ff_q_power_decomposition_relation_product_partial * S ((S (ff_i_power_decomposition_relation_product)) * ff_v_power_decomposition_relation_product) + (ff_r_power_decomposition_relation_product))) /\ ((((exists ff_h_power_decomposition_relation_product_successor. ff_h_power_decomposition_relation_product_successor + S (ff_s_power_decomposition_relation_product) = S ((S (S ff_i_power_decomposition_relation_product)) * ff_v_power_decomposition_relation_product)) /\ exists ff_q_power_decomposition_relation_product_successor. ff_u_power_decomposition_relation_product = ff_q_power_decomposition_relation_product_successor * S ((S (S ff_i_power_decomposition_relation_product)) * ff_v_power_decomposition_relation_product) + (ff_s_power_decomposition_relation_product))) /\ ff_s_power_decomposition_relation_product = ff_r_power_decomposition_relation_product * ff_p_power_decomposition_relation_product)))))))) /\ A = fsp_power_prefix_power_decomposition * aspecialize pow_successor_decompose aspecialize pow_successor_decompose lspecialize pow_successor_decompose (S l)specialize pow_successor_decompose Aapply pow_successor_decomposereflexact hAcases hAdcases hAd_witnesshave hpw_prefix : forall fsp_index_pointwise_prefix fsp_source_pointwise_prefix fsp_target_pointwise_prefix. (exists fsp_gap_pointwise_prefix. fsp_gap_pointwise_prefix + S fsp_index_pointwise_prefix = l) -> (((exists fsp_source_height_pointwise_prefix. fsp_source_height_pointwise_prefix + S (fsp_source_pointwise_prefix) = S ((S (fsp_index_pointwise_prefix)) * c)) /\ exists fsp_source_quotient_pointwise_prefix. b = fsp_source_quotient_pointwise_prefix * S ((S (fsp_index_pointwise_prefix)) * c) + (fsp_source_pointwise_prefix))) -> (((exists fsp_target_height_pointwise_prefix. fsp_target_height_pointwise_prefix + S (fsp_target_pointwise_prefix) = S ((S (fsp_index_pointwise_prefix)) * d)) /\ exists fsp_target_quotient_pointwise_prefix. z = fsp_target_quotient_pointwise_prefix * S ((S (fsp_index_pointwise_prefix)) * d) + (fsp_target_pointwise_prefix))) -> (exists fsp_mod_left_pointwise_prefix fsp_mod_right_pointwise_prefix. a * fsp_source_pointwise_prefix + m * fsp_mod_left_pointwise_prefix = fsp_target_pointwise_prefix + m * fsp_mod_right_pointwise_prefix)intro iintro vintro wintro hiintro hvintro hwspecialize hpw ispecialize hpw vspecialize hpw wapply hpwspecialize le_succ (S i)specialize le_succ lapply le_succexact hiexact hvexact hwhave hprefix : exists u v. (x4 * x1) + m * u = x3 + m * vspecialize IH x1specialize IH x3specialize IH x4apply IHexact hpw_prefixexact hPd_witness_witness_right_leftexact hQd_witness_witness_right_leftexact hAd_witness_lefthave hentry : exists u v. (a * x) + m * u = x2 + m * vspecialize hpw lspecialize hpw xspecialize hpw x2apply hpwspecialize le_refl (S l)exact le_reflexact hPd_witness_witness_leftexact hQd_witness_witness_lefthave hfold : exists u v. ((x4 * x1) * (a * x)) + m * u = (x3 * x2) + m * vspecialize mod_eq_mul mspecialize mod_eq_mul (x4 * x1)specialize mod_eq_mul x3specialize mod_eq_mul (a * x)specialize mod_eq_mul x2apply mod_eq_mulexact hprefixexact hentryhave hshuffle : (x4 * a) * (x1 * x) = (x4 * x1) * (a * x)simp [mul_assoc, mul_comm]rewrite hAd_witness_rightrewrite hPd_witness_witness_right_rightrewrite hQd_witness_witness_right_rightrewrite hshuffleexact hfold
beta_product_reindex_fixed_last · unchanged support, not a new admission
forall r s b c z d n p q. (forall fpr_i_fra fpr_j_fra fpr_x_fra. (exists fpr_h_fra. fpr_h_fra + S fpr_i_fra = S n) -> (((exists ff_h_fra_map. ff_h_fra_map + S (fpr_j_fra) = S ((S (fpr_i_fra)) * s)) /\ exists ff_q_fra_map. r = ff_q_fra_map * S ((S (fpr_i_fra)) * s) + (fpr_j_fra))) -> (((exists ff_h_fra_source. ff_h_fra_source + S (fpr_x_fra) = S ((S (fpr_j_fra)) * c)) /\ exists ff_q_fra_source. b = ff_q_fra_source * S ((S (fpr_j_fra)) * c) + (fpr_x_fra))) -> (((exists ff_h_fra_target. ff_h_fra_target + S (fpr_x_fra) = S ((S (fpr_i_fra)) * d)) /\ exists ff_q_fra_target. z = ff_q_fra_target * S ((S (fpr_i_fra)) * d) + (fpr_x_fra)))) -> (((exists ff_h_frm. ff_h_frm + S (n) = S ((S (n)) * s)) /\ exists ff_q_frm. r = ff_q_frm * S ((S (n)) * s) + (n))) -> (exists ff_u_frs ff_v_frs. ((((exists ff_h_frs_start. ff_h_frs_start + S (1) = S ((S (0)) * ff_v_frs)) /\ exists ff_q_frs_start. ff_u_frs = ff_q_frs_start * S ((S (0)) * ff_v_frs) + (1))) /\ ((((exists ff_h_frs_terminal. ff_h_frs_terminal + S (p) = S ((S (S n)) * ff_v_frs)) /\ exists ff_q_frs_terminal. ff_u_frs = ff_q_frs_terminal * S ((S (S n)) * ff_v_frs) + (p))) /\ forall ff_i_frs. (exists ff_lt_frs_bound. ff_lt_frs_bound + S ff_i_frs = S n) -> exists ff_p_frs ff_r_frs ff_s_frs. ((((exists ff_h_frs_factor. ff_h_frs_factor + S (ff_p_frs) = S ((S (ff_i_frs)) * c)) /\ exists ff_q_frs_factor. b = ff_q_frs_factor * S ((S (ff_i_frs)) * c) + (ff_p_frs))) /\ ((((exists ff_h_frs_partial. ff_h_frs_partial + S (ff_r_frs) = S ((S (ff_i_frs)) * ff_v_frs)) /\ exists ff_q_frs_partial. ff_u_frs = ff_q_frs_partial * S ((S (ff_i_frs)) * ff_v_frs) + (ff_r_frs))) /\ ((((exists ff_h_frs_successor. ff_h_frs_successor + S (ff_s_frs) = S ((S (S ff_i_frs)) * ff_v_frs)) /\ exists ff_q_frs_successor. ff_u_frs = ff_q_frs_successor * S ((S (S ff_i_frs)) * ff_v_frs) + (ff_s_frs))) /\ ff_s_frs = ff_r_frs * ff_p_frs)))))) -> (exists ff_u_frt ff_v_frt. ((((exists ff_h_frt_start. ff_h_frt_start + S (1) = S ((S (0)) * ff_v_frt)) /\ exists ff_q_frt_start. ff_u_frt = ff_q_frt_start * S ((S (0)) * ff_v_frt) + (1))) /\ ((((exists ff_h_frt_terminal. ff_h_frt_terminal + S (q) = S ((S (S n)) * ff_v_frt)) /\ exists ff_q_frt_terminal. ff_u_frt = ff_q_frt_terminal * S ((S (S n)) * ff_v_frt) + (q))) /\ forall ff_i_frt. (exists ff_lt_frt_bound. ff_lt_frt_bound + S ff_i_frt = S n) -> exists ff_p_frt ff_r_frt ff_s_frt. ((((exists ff_h_frt_factor. ff_h_frt_factor + S (ff_p_frt) = S ((S (ff_i_frt)) * d)) /\ exists ff_q_frt_factor. z = ff_q_frt_factor * S ((S (ff_i_frt)) * d) + (ff_p_frt))) /\ ((((exists ff_h_frt_partial. ff_h_frt_partial + S (ff_r_frt) = S ((S (ff_i_frt)) * ff_v_frt)) /\ exists ff_q_frt_partial. ff_u_frt = ff_q_frt_partial * S ((S (ff_i_frt)) * ff_v_frt) + (ff_r_frt))) /\ ((((exists ff_h_frt_successor. ff_h_frt_successor + S (ff_s_frt) = S ((S (S ff_i_frt)) * ff_v_frt)) /\ exists ff_q_frt_successor. ff_u_frt = ff_q_frt_successor * S ((S (S ff_i_frt)) * ff_v_frt) + (ff_s_frt))) /\ ff_s_frt = ff_r_frt * ff_p_frt)))))) -> (forall u v. (exists ff_u_fru ff_v_fru. ((((exists ff_h_fru_start. ff_h_fru_start + S (1) = S ((S (0)) * ff_v_fru)) /\ exists ff_q_fru_start. ff_u_fru = ff_q_fru_start * S ((S (0)) * ff_v_fru) + (1))) /\ ((((exists ff_h_fru_terminal. ff_h_fru_terminal + S (u) = S ((S (n)) * ff_v_fru)) /\ exists ff_q_fru_terminal. ff_u_fru = ff_q_fru_terminal * S ((S (n)) * ff_v_fru) + (u))) /\ forall ff_i_fru. (exists ff_lt_fru_bound. ff_lt_fru_bound + S ff_i_fru = n) -> exists ff_p_fru ff_r_fru ff_s_fru. ((((exists ff_h_fru_factor. ff_h_fru_factor + S (ff_p_fru) = S ((S (ff_i_fru)) * c)) /\ exists ff_q_fru_factor. b = ff_q_fru_factor * S ((S (ff_i_fru)) * c) + (ff_p_fru))) /\ ((((exists ff_h_fru_partial. ff_h_fru_partial + S (ff_r_fru) = S ((S (ff_i_fru)) * ff_v_fru)) /\ exists ff_q_fru_partial. ff_u_fru = ff_q_fru_partial * S ((S (ff_i_fru)) * ff_v_fru) + (ff_r_fru))) /\ ((((exists ff_h_fru_successor. ff_h_fru_successor + S (ff_s_fru) = S ((S (S ff_i_fru)) * ff_v_fru)) /\ exists ff_q_fru_successor. ff_u_fru = ff_q_fru_successor * S ((S (S ff_i_fru)) * ff_v_fru) + (ff_s_fru))) /\ ff_s_fru = ff_r_fru * ff_p_fru)))))) -> (exists ff_u_frv ff_v_frv. ((((exists ff_h_frv_start. ff_h_frv_start + S (1) = S ((S (0)) * ff_v_frv)) /\ exists ff_q_frv_start. ff_u_frv = ff_q_frv_start * S ((S (0)) * ff_v_frv) + (1))) /\ ((((exists ff_h_frv_terminal. ff_h_frv_terminal + S (v) = S ((S (n)) * ff_v_frv)) /\ exists ff_q_frv_terminal. ff_u_frv = ff_q_frv_terminal * S ((S (n)) * ff_v_frv) + (v))) /\ forall ff_i_frv. (exists ff_lt_frv_bound. ff_lt_frv_bound + S ff_i_frv = n) -> exists ff_p_frv ff_r_frv ff_s_frv. ((((exists ff_h_frv_factor. ff_h_frv_factor + S (ff_p_frv) = S ((S (ff_i_frv)) * d)) /\ exists ff_q_frv_factor. z = ff_q_frv_factor * S ((S (ff_i_frv)) * d) + (ff_p_frv))) /\ ((((exists ff_h_frv_partial. ff_h_frv_partial + S (ff_r_frv) = S ((S (ff_i_frv)) * ff_v_frv)) /\ exists ff_q_frv_partial. ff_u_frv = ff_q_frv_partial * S ((S (ff_i_frv)) * ff_v_frv) + (ff_r_frv))) /\ ((((exists ff_h_frv_successor. ff_h_frv_successor + S (ff_s_frv) = S ((S (S ff_i_frv)) * ff_v_frv)) /\ exists ff_q_frv_successor. ff_u_frv = ff_q_frv_successor * S ((S (S ff_i_frv)) * ff_v_frv) + (ff_s_frv))) /\ ff_s_frv = ff_r_frv * ff_p_frv)))))) -> u = v) -> p = q
intro rintro sintro bintro cintro zintro dintro nintro pintro qintro halignedintro hmap_lastintro hsource_productintro htarget_productintro hprefix_equalhave hsource_decomp : exists a u. (((exists ff_h_fixed_reindex_source_last. ff_h_fixed_reindex_source_last + S (a) = S ((S (n)) * c)) /\ exists ff_q_fixed_reindex_source_last. b = ff_q_fixed_reindex_source_last * S ((S (n)) * c) + (a))) /\ ((exists ff_u_fixed_reindex_source_prefix_witness ff_v_fixed_reindex_source_prefix_witness. ((((exists ff_h_fixed_reindex_source_prefix_witness_start. ff_h_fixed_reindex_source_prefix_witness_start + S (1) = S ((S (0)) * ff_v_fixed_reindex_source_prefix_witness)) /\ exists ff_q_fixed_reindex_source_prefix_witness_start. ff_u_fixed_reindex_source_prefix_witness = ff_q_fixed_reindex_source_prefix_witness_start * S ((S (0)) * ff_v_fixed_reindex_source_prefix_witness) + (1))) /\ ((((exists ff_h_fixed_reindex_source_prefix_witness_terminal. ff_h_fixed_reindex_source_prefix_witness_terminal + S (u) = S ((S (n)) * ff_v_fixed_reindex_source_prefix_witness)) /\ exists ff_q_fixed_reindex_source_prefix_witness_terminal. ff_u_fixed_reindex_source_prefix_witness = ff_q_fixed_reindex_source_prefix_witness_terminal * S ((S (n)) * ff_v_fixed_reindex_source_prefix_witness) + (u))) /\ forall ff_i_fixed_reindex_source_prefix_witness. (exists ff_lt_fixed_reindex_source_prefix_witness_bound. ff_lt_fixed_reindex_source_prefix_witness_bound + S ff_i_fixed_reindex_source_prefix_witness = n) -> exists ff_p_fixed_reindex_source_prefix_witness ff_r_fixed_reindex_source_prefix_witness ff_s_fixed_reindex_source_prefix_witness. ((((exists ff_h_fixed_reindex_source_prefix_witness_factor. ff_h_fixed_reindex_source_prefix_witness_factor + S (ff_p_fixed_reindex_source_prefix_witness) = S ((S (ff_i_fixed_reindex_source_prefix_witness)) * c)) /\ exists ff_q_fixed_reindex_source_prefix_witness_factor. b = ff_q_fixed_reindex_source_prefix_witness_factor * S ((S (ff_i_fixed_reindex_source_prefix_witness)) * c) + (ff_p_fixed_reindex_source_prefix_witness))) /\ ((((exists ff_h_fixed_reindex_source_prefix_witness_partial. ff_h_fixed_reindex_source_prefix_witness_partial + S (ff_r_fixed_reindex_source_prefix_witness) = S ((S (ff_i_fixed_reindex_source_prefix_witness)) * ff_v_fixed_reindex_source_prefix_witness)) /\ exists ff_q_fixed_reindex_source_prefix_witness_partial. ff_u_fixed_reindex_source_prefix_witness = ff_q_fixed_reindex_source_prefix_witness_partial * S ((S (ff_i_fixed_reindex_source_prefix_witness)) * ff_v_fixed_reindex_source_prefix_witness) + (ff_r_fixed_reindex_source_prefix_witness))) /\ ((((exists ff_h_fixed_reindex_source_prefix_witness_successor. ff_h_fixed_reindex_source_prefix_witness_successor + S (ff_s_fixed_reindex_source_prefix_witness) = S ((S (S ff_i_fixed_reindex_source_prefix_witness)) * ff_v_fixed_reindex_source_prefix_witness)) /\ exists ff_q_fixed_reindex_source_prefix_witness_successor. ff_u_fixed_reindex_source_prefix_witness = ff_q_fixed_reindex_source_prefix_witness_successor * S ((S (S ff_i_fixed_reindex_source_prefix_witness)) * ff_v_fixed_reindex_source_prefix_witness) + (ff_s_fixed_reindex_source_prefix_witness))) /\ ff_s_fixed_reindex_source_prefix_witness = ff_r_fixed_reindex_source_prefix_witness * ff_p_fixed_reindex_source_prefix_witness)))))) /\ p = u * a)specialize beta_product_succ_decompose bspecialize beta_product_succ_decompose cspecialize beta_product_succ_decompose nspecialize beta_product_succ_decompose papply beta_product_succ_decomposeexact hsource_producthave htarget_decomp : exists a v. (((exists ff_h_fixed_reindex_target_last. ff_h_fixed_reindex_target_last + S (a) = S ((S (n)) * d)) /\ exists ff_q_fixed_reindex_target_last. z = ff_q_fixed_reindex_target_last * S ((S (n)) * d) + (a))) /\ ((exists ff_u_fixed_reindex_target_prefix_witness ff_v_fixed_reindex_target_prefix_witness. ((((exists ff_h_fixed_reindex_target_prefix_witness_start. ff_h_fixed_reindex_target_prefix_witness_start + S (1) = S ((S (0)) * ff_v_fixed_reindex_target_prefix_witness)) /\ exists ff_q_fixed_reindex_target_prefix_witness_start. ff_u_fixed_reindex_target_prefix_witness = ff_q_fixed_reindex_target_prefix_witness_start * S ((S (0)) * ff_v_fixed_reindex_target_prefix_witness) + (1))) /\ ((((exists ff_h_fixed_reindex_target_prefix_witness_terminal. ff_h_fixed_reindex_target_prefix_witness_terminal + S (v) = S ((S (n)) * ff_v_fixed_reindex_target_prefix_witness)) /\ exists ff_q_fixed_reindex_target_prefix_witness_terminal. ff_u_fixed_reindex_target_prefix_witness = ff_q_fixed_reindex_target_prefix_witness_terminal * S ((S (n)) * ff_v_fixed_reindex_target_prefix_witness) + (v))) /\ forall ff_i_fixed_reindex_target_prefix_witness. (exists ff_lt_fixed_reindex_target_prefix_witness_bound. ff_lt_fixed_reindex_target_prefix_witness_bound + S ff_i_fixed_reindex_target_prefix_witness = n) -> exists ff_p_fixed_reindex_target_prefix_witness ff_r_fixed_reindex_target_prefix_witness ff_s_fixed_reindex_target_prefix_witness. ((((exists ff_h_fixed_reindex_target_prefix_witness_factor. ff_h_fixed_reindex_target_prefix_witness_factor + S (ff_p_fixed_reindex_target_prefix_witness) = S ((S (ff_i_fixed_reindex_target_prefix_witness)) * d)) /\ exists ff_q_fixed_reindex_target_prefix_witness_factor. z = ff_q_fixed_reindex_target_prefix_witness_factor * S ((S (ff_i_fixed_reindex_target_prefix_witness)) * d) + (ff_p_fixed_reindex_target_prefix_witness))) /\ ((((exists ff_h_fixed_reindex_target_prefix_witness_partial. ff_h_fixed_reindex_target_prefix_witness_partial + S (ff_r_fixed_reindex_target_prefix_witness) = S ((S (ff_i_fixed_reindex_target_prefix_witness)) * ff_v_fixed_reindex_target_prefix_witness)) /\ exists ff_q_fixed_reindex_target_prefix_witness_partial. ff_u_fixed_reindex_target_prefix_witness = ff_q_fixed_reindex_target_prefix_witness_partial * S ((S (ff_i_fixed_reindex_target_prefix_witness)) * ff_v_fixed_reindex_target_prefix_witness) + (ff_r_fixed_reindex_target_prefix_witness))) /\ ((((exists ff_h_fixed_reindex_target_prefix_witness_successor. ff_h_fixed_reindex_target_prefix_witness_successor + S (ff_s_fixed_reindex_target_prefix_witness) = S ((S (S ff_i_fixed_reindex_target_prefix_witness)) * ff_v_fixed_reindex_target_prefix_witness)) /\ exists ff_q_fixed_reindex_target_prefix_witness_successor. ff_u_fixed_reindex_target_prefix_witness = ff_q_fixed_reindex_target_prefix_witness_successor * S ((S (S ff_i_fixed_reindex_target_prefix_witness)) * ff_v_fixed_reindex_target_prefix_witness) + (ff_s_fixed_reindex_target_prefix_witness))) /\ ff_s_fixed_reindex_target_prefix_witness = ff_r_fixed_reindex_target_prefix_witness * ff_p_fixed_reindex_target_prefix_witness)))))) /\ q = v * a)specialize beta_product_succ_decompose zspecialize beta_product_succ_decompose dspecialize beta_product_succ_decompose nspecialize beta_product_succ_decompose qapply beta_product_succ_decomposeexact htarget_productcases hsource_decompcases hsource_decomp_witnesscases hsource_decomp_witness_witnesscases hsource_decomp_witness_witness_rightcases htarget_decompcases htarget_decomp_witnesscases htarget_decomp_witness_witnesscases htarget_decomp_witness_witness_righthave htarget_source_last : ((exists ff_h_fixed_target_source_last. ff_h_fixed_target_source_last + S (x) = S ((S (n)) * d)) /\ exists ff_q_fixed_target_source_last. z = ff_q_fixed_target_source_last * S ((S (n)) * d) + (x))specialize haligned nspecialize haligned nspecialize haligned xapply halignedspecialize le_refl (S n)exact le_reflexact hmap_lastexact hsource_decomp_witness_witness_lefthave hlast_equal : x2 = xspecialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique nspecialize beta_at_unique x2specialize beta_at_unique xapply beta_at_uniqueexact htarget_decomp_witness_witness_leftexact htarget_source_lasthave hprefixes_equal : x1 = x3specialize hprefix_equal x1specialize hprefix_equal x3apply hprefix_equalexact hsource_decomp_witness_witness_right_leftexact htarget_decomp_witness_witness_right_leftrewrite hsource_decomp_witness_witness_right_rightrewrite htarget_decomp_witness_witness_right_rightrewrite hlast_equalrewrite hprefixes_equalrefl
beta_product_permutation_invariant · unchanged support, not a new admission
forall l r s b c z d p q. (forall fp_i_reindex_bounded. (exists fp_gap_reindex_bounded_index. fp_gap_reindex_bounded_index + S fp_i_reindex_bounded = l) -> exists fp_value_reindex_bounded. ((((exists ff_h_reindex_bounded_entry. ff_h_reindex_bounded_entry + S (fp_value_reindex_bounded) = S ((S (fp_i_reindex_bounded)) * s)) /\ exists ff_q_reindex_bounded_entry. r = ff_q_reindex_bounded_entry * S ((S (fp_i_reindex_bounded)) * s) + (fp_value_reindex_bounded))) /\ (exists fp_gap_reindex_bounded_value. fp_gap_reindex_bounded_value + S fp_value_reindex_bounded = l))) -> (forall fp_i_reindex_injective fp_j_reindex_injective fp_value_reindex_injective. (exists fp_gap_reindex_injective_i. fp_gap_reindex_injective_i + S fp_i_reindex_injective = l) -> (exists fp_gap_reindex_injective_j. fp_gap_reindex_injective_j + S fp_j_reindex_injective = l) -> (((exists ff_h_reindex_injective_left. ff_h_reindex_injective_left + S (fp_value_reindex_injective) = S ((S (fp_i_reindex_injective)) * s)) /\ exists ff_q_reindex_injective_left. r = ff_q_reindex_injective_left * S ((S (fp_i_reindex_injective)) * s) + (fp_value_reindex_injective))) -> (((exists ff_h_reindex_injective_right. ff_h_reindex_injective_right + S (fp_value_reindex_injective) = S ((S (fp_j_reindex_injective)) * s)) /\ exists ff_q_reindex_injective_right. r = ff_q_reindex_injective_right * S ((S (fp_j_reindex_injective)) * s) + (fp_value_reindex_injective))) -> fp_i_reindex_injective = fp_j_reindex_injective) -> (forall fpr_i_reindex_aligned fpr_j_reindex_aligned fpr_x_reindex_aligned. (exists fpr_h_reindex_aligned. fpr_h_reindex_aligned + S fpr_i_reindex_aligned = l) -> (((exists ff_h_reindex_aligned_map. ff_h_reindex_aligned_map + S (fpr_j_reindex_aligned) = S ((S (fpr_i_reindex_aligned)) * s)) /\ exists ff_q_reindex_aligned_map. r = ff_q_reindex_aligned_map * S ((S (fpr_i_reindex_aligned)) * s) + (fpr_j_reindex_aligned))) -> (((exists ff_h_reindex_aligned_source. ff_h_reindex_aligned_source + S (fpr_x_reindex_aligned) = S ((S (fpr_j_reindex_aligned)) * c)) /\ exists ff_q_reindex_aligned_source. b = ff_q_reindex_aligned_source * S ((S (fpr_j_reindex_aligned)) * c) + (fpr_x_reindex_aligned))) -> (((exists ff_h_reindex_aligned_target. ff_h_reindex_aligned_target + S (fpr_x_reindex_aligned) = S ((S (fpr_i_reindex_aligned)) * d)) /\ exists ff_q_reindex_aligned_target. z = ff_q_reindex_aligned_target * S ((S (fpr_i_reindex_aligned)) * d) + (fpr_x_reindex_aligned)))) -> (exists ff_u_reindex_source_product ff_v_reindex_source_product. ((((exists ff_h_reindex_source_product_start. ff_h_reindex_source_product_start + S (1) = S ((S (0)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_start. ff_u_reindex_source_product = ff_q_reindex_source_product_start * S ((S (0)) * ff_v_reindex_source_product) + (1))) /\ ((((exists ff_h_reindex_source_product_terminal. ff_h_reindex_source_product_terminal + S (p) = S ((S (l)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_terminal. ff_u_reindex_source_product = ff_q_reindex_source_product_terminal * S ((S (l)) * ff_v_reindex_source_product) + (p))) /\ forall ff_i_reindex_source_product. (exists ff_lt_reindex_source_product_bound. ff_lt_reindex_source_product_bound + S ff_i_reindex_source_product = l) -> exists ff_p_reindex_source_product ff_r_reindex_source_product ff_s_reindex_source_product. ((((exists ff_h_reindex_source_product_factor. ff_h_reindex_source_product_factor + S (ff_p_reindex_source_product) = S ((S (ff_i_reindex_source_product)) * c)) /\ exists ff_q_reindex_source_product_factor. b = ff_q_reindex_source_product_factor * S ((S (ff_i_reindex_source_product)) * c) + (ff_p_reindex_source_product))) /\ ((((exists ff_h_reindex_source_product_partial. ff_h_reindex_source_product_partial + S (ff_r_reindex_source_product) = S ((S (ff_i_reindex_source_product)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_partial. ff_u_reindex_source_product = ff_q_reindex_source_product_partial * S ((S (ff_i_reindex_source_product)) * ff_v_reindex_source_product) + (ff_r_reindex_source_product))) /\ ((((exists ff_h_reindex_source_product_successor. ff_h_reindex_source_product_successor + S (ff_s_reindex_source_product) = S ((S (S ff_i_reindex_source_product)) * ff_v_reindex_source_product)) /\ exists ff_q_reindex_source_product_successor. ff_u_reindex_source_product = ff_q_reindex_source_product_successor * S ((S (S ff_i_reindex_source_product)) * ff_v_reindex_source_product) + (ff_s_reindex_source_product))) /\ ff_s_reindex_source_product = ff_r_reindex_source_product * ff_p_reindex_source_product)))))) -> (exists ff_u_reindex_target_product ff_v_reindex_target_product. ((((exists ff_h_reindex_target_product_start. ff_h_reindex_target_product_start + S (1) = S ((S (0)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_start. ff_u_reindex_target_product = ff_q_reindex_target_product_start * S ((S (0)) * ff_v_reindex_target_product) + (1))) /\ ((((exists ff_h_reindex_target_product_terminal. ff_h_reindex_target_product_terminal + S (q) = S ((S (l)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_terminal. ff_u_reindex_target_product = ff_q_reindex_target_product_terminal * S ((S (l)) * ff_v_reindex_target_product) + (q))) /\ forall ff_i_reindex_target_product. (exists ff_lt_reindex_target_product_bound. ff_lt_reindex_target_product_bound + S ff_i_reindex_target_product = l) -> exists ff_p_reindex_target_product ff_r_reindex_target_product ff_s_reindex_target_product. ((((exists ff_h_reindex_target_product_factor. ff_h_reindex_target_product_factor + S (ff_p_reindex_target_product) = S ((S (ff_i_reindex_target_product)) * d)) /\ exists ff_q_reindex_target_product_factor. z = ff_q_reindex_target_product_factor * S ((S (ff_i_reindex_target_product)) * d) + (ff_p_reindex_target_product))) /\ ((((exists ff_h_reindex_target_product_partial. ff_h_reindex_target_product_partial + S (ff_r_reindex_target_product) = S ((S (ff_i_reindex_target_product)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_partial. ff_u_reindex_target_product = ff_q_reindex_target_product_partial * S ((S (ff_i_reindex_target_product)) * ff_v_reindex_target_product) + (ff_r_reindex_target_product))) /\ ((((exists ff_h_reindex_target_product_successor. ff_h_reindex_target_product_successor + S (ff_s_reindex_target_product) = S ((S (S ff_i_reindex_target_product)) * ff_v_reindex_target_product)) /\ exists ff_q_reindex_target_product_successor. ff_u_reindex_target_product = ff_q_reindex_target_product_successor * S ((S (S ff_i_reindex_target_product)) * ff_v_reindex_target_product) + (ff_s_reindex_target_product))) /\ ff_s_reindex_target_product = ff_r_reindex_target_product * ff_p_reindex_target_product)))))) -> p = q
induction lintro rintro sintro bintro cintro zintro dintro pintro qintro hboundedintro hinjectiveintro halignedintro hsource_productintro htarget_producthave hp : p = 1specialize beta_product_zero bspecialize beta_product_zero cspecialize beta_product_zero papply beta_product_zeroexact hsource_producthave hq : q = 1specialize beta_product_zero zspecialize beta_product_zero dspecialize beta_product_zero qapply beta_product_zeroexact htarget_producttrans 1exact hpsymmexact hqintro rintro sintro bintro cintro zintro dintro pintro qintro hboundedintro hinjectiveintro halignedintro hsource_productintro htarget_producthave hsurjective : forall fp_value_reindex_surjective_succ. (exists fp_gap_reindex_surjective_succ_value. fp_gap_reindex_surjective_succ_value + S fp_value_reindex_surjective_succ = S l) -> exists fp_i_reindex_surjective_succ. ((exists fp_gap_reindex_surjective_succ_index. fp_gap_reindex_surjective_succ_index + S fp_i_reindex_surjective_succ = S l) /\ (((exists ff_h_reindex_surjective_succ_entry. ff_h_reindex_surjective_succ_entry + S (fp_value_reindex_surjective_succ) = S ((S (fp_i_reindex_surjective_succ)) * s)) /\ exists ff_q_reindex_surjective_succ_entry. r = ff_q_reindex_surjective_succ_entry * S ((S (fp_i_reindex_surjective_succ)) * s) + (fp_value_reindex_surjective_succ))))specialize finite_bounded_injective_surjective (S l)specialize finite_bounded_injective_surjective rspecialize finite_bounded_injective_surjective sapply finite_bounded_injective_surjectiveexact hboundedexact hinjectivehave hlast_bound : exists h. h + S l = S lspecialize le_refl (S l)exact le_reflhave hpreimage : exists k. ((exists h. h + S k = S l) /\ (((exists ff_h_reindex_map_preimage. ff_h_reindex_map_preimage + S (l) = S ((S (k)) * s)) /\ exists ff_q_reindex_map_preimage. r = ff_q_reindex_map_preimage * S ((S (k)) * s) + (l))))specialize hsurjective lapply hsurjectiveexact hlast_boundcases hpreimagecases hpreimage_witnesshave hsource_last : exists a. (((exists ff_h_reindex_source_last. ff_h_reindex_source_last + S (a) = S ((S (l)) * c)) /\ exists ff_q_reindex_source_last. b = ff_q_reindex_source_last * S ((S (l)) * c) + (a)))specialize beta_at_exists bspecialize beta_at_exists cspecialize beta_at_exists lexact beta_at_existscases hsource_lasthave htarget_at_preimage : ((exists ff_h_reindex_target_preimage. ff_h_reindex_target_preimage + S (x1) = S ((S (x)) * d)) /\ exists ff_q_reindex_target_preimage. z = ff_q_reindex_target_preimage * S ((S (x)) * d) + (x1))specialize haligned xspecialize haligned lspecialize haligned x1apply halignedexact hpreimage_witness_leftexact hpreimage_witness_rightexact hsource_last_witnesshave hsplit : x = l \/ exists h. h + S x = lspecialize finite_lt_succ_eq_or_lt lspecialize finite_lt_succ_eq_or_lt xapply finite_lt_succ_eq_or_ltexact hpreimage_witness_leftcases hsplithave hmap_last : ((exists ff_h_reindex_map_last. ff_h_reindex_map_last + S (l) = S ((S (l)) * s)) /\ exists ff_q_reindex_map_last. r = ff_q_reindex_map_last * S ((S (l)) * s) + (l))rewrite hsplit_left at hpreimage_witness_rightrewrite hsplit_left at hpreimage_witness_rightexact hpreimage_witness_righthave hbounded_prefix : forall fp_i_reindex_bounded_prefix. (exists fp_gap_reindex_bounded_prefix_index. fp_gap_reindex_bounded_prefix_index + S fp_i_reindex_bounded_prefix = l) -> exists fp_value_reindex_bounded_prefix. ((((exists ff_h_reindex_bounded_prefix_entry. ff_h_reindex_bounded_prefix_entry + S (fp_value_reindex_bounded_prefix) = S ((S (fp_i_reindex_bounded_prefix)) * s)) /\ exists ff_q_reindex_bounded_prefix_entry. r = ff_q_reindex_bounded_prefix_entry * S ((S (fp_i_reindex_bounded_prefix)) * s) + (fp_value_reindex_bounded_prefix))) /\ (exists fp_gap_reindex_bounded_prefix_value. fp_gap_reindex_bounded_prefix_value + S fp_value_reindex_bounded_prefix = l))specialize finite_fixed_last_prefix_bounded rspecialize finite_fixed_last_prefix_bounded sspecialize finite_fixed_last_prefix_bounded lapply finite_fixed_last_prefix_boundedexact hboundedexact hinjectiveexact hmap_lasthave hinjective_prefix : forall fp_i_reindex_injective_prefix fp_j_reindex_injective_prefix fp_value_reindex_injective_prefix. (exists fp_gap_reindex_injective_prefix_i. fp_gap_reindex_injective_prefix_i + S fp_i_reindex_injective_prefix = l) -> (exists fp_gap_reindex_injective_prefix_j. fp_gap_reindex_injective_prefix_j + S fp_j_reindex_injective_prefix = l) -> (((exists ff_h_reindex_injective_prefix_left. ff_h_reindex_injective_prefix_left + S (fp_value_reindex_injective_prefix) = S ((S (fp_i_reindex_injective_prefix)) * s)) /\ exists ff_q_reindex_injective_prefix_left. r = ff_q_reindex_injective_prefix_left * S ((S (fp_i_reindex_injective_prefix)) * s) + (fp_value_reindex_injective_prefix))) -> (((exists ff_h_reindex_injective_prefix_right. ff_h_reindex_injective_prefix_right + S (fp_value_reindex_injective_prefix) = S ((S (fp_j_reindex_injective_prefix)) * s)) /\ exists ff_q_reindex_injective_prefix_right. r = ff_q_reindex_injective_prefix_right * S ((S (fp_j_reindex_injective_prefix)) * s) + (fp_value_reindex_injective_prefix))) -> fp_i_reindex_injective_prefix = fp_j_reindex_injective_prefixspecialize finite_injective_prefix_succ rspecialize finite_injective_prefix_succ sspecialize finite_injective_prefix_succ lspecialize finite_injective_prefix_succ (S l)apply finite_injective_prefix_succreflexact hinjectivehave haligned_prefix : forall fpr_i_reindex_aligned_prefix fpr_j_reindex_aligned_prefix fpr_x_reindex_aligned_prefix. (exists fpr_h_reindex_aligned_prefix. fpr_h_reindex_aligned_prefix + S fpr_i_reindex_aligned_prefix = l) -> (((exists ff_h_reindex_aligned_prefix_map. ff_h_reindex_aligned_prefix_map + S (fpr_j_reindex_aligned_prefix) = S ((S (fpr_i_reindex_aligned_prefix)) * s)) /\ exists ff_q_reindex_aligned_prefix_map. r = ff_q_reindex_aligned_prefix_map * S ((S (fpr_i_reindex_aligned_prefix)) * s) + (fpr_j_reindex_aligned_prefix))) -> (((exists ff_h_reindex_aligned_prefix_source. ff_h_reindex_aligned_prefix_source + S (fpr_x_reindex_aligned_prefix) = S ((S (fpr_j_reindex_aligned_prefix)) * c)) /\ exists ff_q_reindex_aligned_prefix_source. b = ff_q_reindex_aligned_prefix_source * S ((S (fpr_j_reindex_aligned_prefix)) * c) + (fpr_x_reindex_aligned_prefix))) -> (((exists ff_h_reindex_aligned_prefix_target. ff_h_reindex_aligned_prefix_target + S (fpr_x_reindex_aligned_prefix) = S ((S (fpr_i_reindex_aligned_prefix)) * d)) /\ exists ff_q_reindex_aligned_prefix_target. z = ff_q_reindex_aligned_prefix_target * S ((S (fpr_i_reindex_aligned_prefix)) * d) + (fpr_x_reindex_aligned_prefix)))intro iintro jintro aintro hiintro hmapintro hsourcespecialize haligned ispecialize haligned jspecialize haligned aapply halignedspecialize le_succ (S i)specialize le_succ lapply le_succexact hiexact hmapexact hsourcehave hprefix_products_equal : forall u v. (exists ff_u_reindex_source_prefix_product ff_v_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_start. ff_h_reindex_source_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_start. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_start * S ((S (0)) * ff_v_reindex_source_prefix_product) + (1))) /\ ((((exists ff_h_reindex_source_prefix_product_terminal. ff_h_reindex_source_prefix_product_terminal + S (u) = S ((S (l)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_terminal. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_terminal * S ((S (l)) * ff_v_reindex_source_prefix_product) + (u))) /\ forall ff_i_reindex_source_prefix_product. (exists ff_lt_reindex_source_prefix_product_bound. ff_lt_reindex_source_prefix_product_bound + S ff_i_reindex_source_prefix_product = l) -> exists ff_p_reindex_source_prefix_product ff_r_reindex_source_prefix_product ff_s_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_factor. ff_h_reindex_source_prefix_product_factor + S (ff_p_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * c)) /\ exists ff_q_reindex_source_prefix_product_factor. b = ff_q_reindex_source_prefix_product_factor * S ((S (ff_i_reindex_source_prefix_product)) * c) + (ff_p_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_partial. ff_h_reindex_source_prefix_product_partial + S (ff_r_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_partial. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_partial * S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_r_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_successor. ff_h_reindex_source_prefix_product_successor + S (ff_s_reindex_source_prefix_product) = S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_successor. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_successor * S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_s_reindex_source_prefix_product))) /\ ff_s_reindex_source_prefix_product = ff_r_reindex_source_prefix_product * ff_p_reindex_source_prefix_product)))))) -> (exists ff_u_reindex_target_prefix_product ff_v_reindex_target_prefix_product. ((((exists ff_h_reindex_target_prefix_product_start. ff_h_reindex_target_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_start. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_start * S ((S (0)) * ff_v_reindex_target_prefix_product) + (1))) /\ ((((exists ff_h_reindex_target_prefix_product_terminal. ff_h_reindex_target_prefix_product_terminal + S (v) = S ((S (l)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_terminal. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_terminal * S ((S (l)) * ff_v_reindex_target_prefix_product) + (v))) /\ forall ff_i_reindex_target_prefix_product. (exists ff_lt_reindex_target_prefix_product_bound. ff_lt_reindex_target_prefix_product_bound + S ff_i_reindex_target_prefix_product = l) -> exists ff_p_reindex_target_prefix_product ff_r_reindex_target_prefix_product ff_s_reindex_target_prefix_product. ((((exists ff_h_reindex_target_prefix_product_factor. ff_h_reindex_target_prefix_product_factor + S (ff_p_reindex_target_prefix_product) = S ((S (ff_i_reindex_target_prefix_product)) * d)) /\ exists ff_q_reindex_target_prefix_product_factor. z = ff_q_reindex_target_prefix_product_factor * S ((S (ff_i_reindex_target_prefix_product)) * d) + (ff_p_reindex_target_prefix_product))) /\ ((((exists ff_h_reindex_target_prefix_product_partial. ff_h_reindex_target_prefix_product_partial + S (ff_r_reindex_target_prefix_product) = S ((S (ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_partial. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_partial * S ((S (ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product) + (ff_r_reindex_target_prefix_product))) /\ ((((exists ff_h_reindex_target_prefix_product_successor. ff_h_reindex_target_prefix_product_successor + S (ff_s_reindex_target_prefix_product) = S ((S (S ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product)) /\ exists ff_q_reindex_target_prefix_product_successor. ff_u_reindex_target_prefix_product = ff_q_reindex_target_prefix_product_successor * S ((S (S ff_i_reindex_target_prefix_product)) * ff_v_reindex_target_prefix_product) + (ff_s_reindex_target_prefix_product))) /\ ff_s_reindex_target_prefix_product = ff_r_reindex_target_prefix_product * ff_p_reindex_target_prefix_product)))))) -> u = vintro uintro vintro hsource_prefix_productintro htarget_prefix_productspecialize IH rspecialize IH sspecialize IH bspecialize IH cspecialize IH zspecialize IH dspecialize IH uspecialize IH vapply IHexact hbounded_prefixexact hinjective_prefixexact haligned_prefixexact hsource_prefix_productexact htarget_prefix_productspecialize beta_product_reindex_fixed_last rspecialize beta_product_reindex_fixed_last sspecialize beta_product_reindex_fixed_last bspecialize beta_product_reindex_fixed_last cspecialize beta_product_reindex_fixed_last zspecialize beta_product_reindex_fixed_last dspecialize beta_product_reindex_fixed_last lspecialize beta_product_reindex_fixed_last pspecialize beta_product_reindex_fixed_last qapply beta_product_reindex_fixed_lastexact halignedexact hmap_lastexact hsource_productexact htarget_productexact hprefix_products_equalhave hmap_last_decoded : exists m. (((exists ff_h_reindex_map_decoded_last. ff_h_reindex_map_decoded_last + S (m) = S ((S (l)) * s)) /\ exists ff_q_reindex_map_decoded_last. r = ff_q_reindex_map_decoded_last * S ((S (l)) * s) + (m)))specialize beta_at_exists rspecialize beta_at_exists sspecialize beta_at_exists lexact beta_at_existscases hmap_last_decodedhave htarget_last_decoded : exists w. (((exists ff_h_reindex_target_decoded_last. ff_h_reindex_target_decoded_last + S (w) = S ((S (l)) * d)) /\ exists ff_q_reindex_target_decoded_last. z = ff_q_reindex_target_decoded_last * S ((S (l)) * d) + (w)))specialize beta_at_exists zspecialize beta_at_exists dspecialize beta_at_exists lexact beta_at_existscases htarget_last_decodedhave hmap_swap : exists rm sm. (((exists ff_h_reindex_map_swap_i. ff_h_reindex_map_swap_i + S (x2) = S ((S (x)) * sm)) /\ exists ff_q_reindex_map_swap_i. rm = ff_q_reindex_map_swap_i * S ((S (x)) * sm) + (x2))) /\ ((((exists ff_h_reindex_map_swap_last. ff_h_reindex_map_swap_last + S (l) = S ((S (l)) * sm)) /\ exists ff_q_reindex_map_swap_last. rm = ff_q_reindex_map_swap_last * S ((S (l)) * sm) + (l))) /\ forall j a. (exists h. h + S j = S l) -> ~(j = x) -> ~(j = l) -> (((exists ff_h_reindex_map_swap_old. ff_h_reindex_map_swap_old + S (a) = S ((S (j)) * s)) /\ exists ff_q_reindex_map_swap_old. r = ff_q_reindex_map_swap_old * S ((S (j)) * s) + (a))) -> (((exists ff_h_reindex_map_swap_new. ff_h_reindex_map_swap_new + S (a) = S ((S (j)) * sm)) /\ exists ff_q_reindex_map_swap_new. rm = ff_q_reindex_map_swap_new * S ((S (j)) * sm) + (a))))specialize beta_prefix_swap_last_from_entries rspecialize beta_prefix_swap_last_from_entries sspecialize beta_prefix_swap_last_from_entries lspecialize beta_prefix_swap_last_from_entries xspecialize beta_prefix_swap_last_from_entries lspecialize beta_prefix_swap_last_from_entries x2apply beta_prefix_swap_last_from_entriesexact hsplit_rightexact hpreimage_witness_rightexact hmap_last_decoded_witnesscases hmap_swapcases hmap_swap_witnesscases hmap_swap_witness_witnesscases hmap_swap_witness_witness_righthave htarget_swap : exists tz td. (((exists ff_h_reindex_target_swap_i. ff_h_reindex_target_swap_i + S (x3) = S ((S (x)) * td)) /\ exists ff_q_reindex_target_swap_i. tz = ff_q_reindex_target_swap_i * S ((S (x)) * td) + (x3))) /\ ((((exists ff_h_reindex_target_swap_last. ff_h_reindex_target_swap_last + S (x1) = S ((S (l)) * td)) /\ exists ff_q_reindex_target_swap_last. tz = ff_q_reindex_target_swap_last * S ((S (l)) * td) + (x1))) /\ forall j a. (exists h. h + S j = S l) -> ~(j = x) -> ~(j = l) -> (((exists ff_h_reindex_target_swap_old. ff_h_reindex_target_swap_old + S (a) = S ((S (j)) * d)) /\ exists ff_q_reindex_target_swap_old. z = ff_q_reindex_target_swap_old * S ((S (j)) * d) + (a))) -> (((exists ff_h_reindex_target_swap_new. ff_h_reindex_target_swap_new + S (a) = S ((S (j)) * td)) /\ exists ff_q_reindex_target_swap_new. tz = ff_q_reindex_target_swap_new * S ((S (j)) * td) + (a))))specialize beta_prefix_swap_last_from_entries zspecialize beta_prefix_swap_last_from_entries dspecialize beta_prefix_swap_last_from_entries lspecialize beta_prefix_swap_last_from_entries xspecialize beta_prefix_swap_last_from_entries x1specialize beta_prefix_swap_last_from_entries x3apply beta_prefix_swap_last_from_entriesexact hsplit_rightexact htarget_at_preimageexact htarget_last_decoded_witnesscases htarget_swapcases htarget_swap_witnesscases htarget_swap_witness_witnesscases htarget_swap_witness_witness_righthave hswapped_bounded : forall fp_i_reindex_swapped_bounded. (exists fp_gap_reindex_swapped_bounded_index. fp_gap_reindex_swapped_bounded_index + S fp_i_reindex_swapped_bounded = S l) -> exists fp_value_reindex_swapped_bounded. ((((exists ff_h_reindex_swapped_bounded_entry. ff_h_reindex_swapped_bounded_entry + S (fp_value_reindex_swapped_bounded) = S ((S (fp_i_reindex_swapped_bounded)) * x5)) /\ exists ff_q_reindex_swapped_bounded_entry. x4 = ff_q_reindex_swapped_bounded_entry * S ((S (fp_i_reindex_swapped_bounded)) * x5) + (fp_value_reindex_swapped_bounded))) /\ (exists fp_gap_reindex_swapped_bounded_value. fp_gap_reindex_swapped_bounded_value + S fp_value_reindex_swapped_bounded = S l))specialize finite_swap_last_bounded rspecialize finite_swap_last_bounded sspecialize finite_swap_last_bounded x4specialize finite_swap_last_bounded x5specialize finite_swap_last_bounded lspecialize finite_swap_last_bounded (S l)specialize finite_swap_last_bounded xspecialize finite_swap_last_bounded lspecialize finite_swap_last_bounded x2apply finite_swap_last_boundedreflexact hsplit_rightexact hboundedexact hpreimage_witness_rightexact hmap_last_decoded_witnessexact hmap_swap_witness_witness_leftexact hmap_swap_witness_witness_right_leftexact hmap_swap_witness_witness_right_righthave hswapped_injective : forall fp_i_reindex_swapped_injective fp_j_reindex_swapped_injective fp_value_reindex_swapped_injective. (exists fp_gap_reindex_swapped_injective_i. fp_gap_reindex_swapped_injective_i + S fp_i_reindex_swapped_injective = S l) -> (exists fp_gap_reindex_swapped_injective_j. fp_gap_reindex_swapped_injective_j + S fp_j_reindex_swapped_injective = S l) -> (((exists ff_h_reindex_swapped_injective_left. ff_h_reindex_swapped_injective_left + S (fp_value_reindex_swapped_injective) = S ((S (fp_i_reindex_swapped_injective)) * x5)) /\ exists ff_q_reindex_swapped_injective_left. x4 = ff_q_reindex_swapped_injective_left * S ((S (fp_i_reindex_swapped_injective)) * x5) + (fp_value_reindex_swapped_injective))) -> (((exists ff_h_reindex_swapped_injective_right. ff_h_reindex_swapped_injective_right + S (fp_value_reindex_swapped_injective) = S ((S (fp_j_reindex_swapped_injective)) * x5)) /\ exists ff_q_reindex_swapped_injective_right. x4 = ff_q_reindex_swapped_injective_right * S ((S (fp_j_reindex_swapped_injective)) * x5) + (fp_value_reindex_swapped_injective))) -> fp_i_reindex_swapped_injective = fp_j_reindex_swapped_injectivespecialize finite_swap_last_injective rspecialize finite_swap_last_injective sspecialize finite_swap_last_injective x4specialize finite_swap_last_injective x5specialize finite_swap_last_injective lspecialize finite_swap_last_injective (S l)specialize finite_swap_last_injective xspecialize finite_swap_last_injective lspecialize finite_swap_last_injective x2apply finite_swap_last_injectivereflexact hsplit_rightexact hinjectiveexact hpreimage_witness_rightexact hmap_last_decoded_witnessexact hmap_swap_witness_witness_leftexact hmap_swap_witness_witness_right_leftexact hmap_swap_witness_witness_right_righthave hswapped_target_product_exists : exists t. (exists ff_u_reindex_swapped_target_exists ff_v_reindex_swapped_target_exists. ((((exists ff_h_reindex_swapped_target_exists_start. ff_h_reindex_swapped_target_exists_start + S (1) = S ((S (0)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_start. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_start * S ((S (0)) * ff_v_reindex_swapped_target_exists) + (1))) /\ ((((exists ff_h_reindex_swapped_target_exists_terminal. ff_h_reindex_swapped_target_exists_terminal + S (t) = S ((S (S l)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_terminal. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_terminal * S ((S (S l)) * ff_v_reindex_swapped_target_exists) + (t))) /\ forall ff_i_reindex_swapped_target_exists. (exists ff_lt_reindex_swapped_target_exists_bound. ff_lt_reindex_swapped_target_exists_bound + S ff_i_reindex_swapped_target_exists = S l) -> exists ff_p_reindex_swapped_target_exists ff_r_reindex_swapped_target_exists ff_s_reindex_swapped_target_exists. ((((exists ff_h_reindex_swapped_target_exists_factor. ff_h_reindex_swapped_target_exists_factor + S (ff_p_reindex_swapped_target_exists) = S ((S (ff_i_reindex_swapped_target_exists)) * x7)) /\ exists ff_q_reindex_swapped_target_exists_factor. x6 = ff_q_reindex_swapped_target_exists_factor * S ((S (ff_i_reindex_swapped_target_exists)) * x7) + (ff_p_reindex_swapped_target_exists))) /\ ((((exists ff_h_reindex_swapped_target_exists_partial. ff_h_reindex_swapped_target_exists_partial + S (ff_r_reindex_swapped_target_exists) = S ((S (ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_partial. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_partial * S ((S (ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists) + (ff_r_reindex_swapped_target_exists))) /\ ((((exists ff_h_reindex_swapped_target_exists_successor. ff_h_reindex_swapped_target_exists_successor + S (ff_s_reindex_swapped_target_exists) = S ((S (S ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists)) /\ exists ff_q_reindex_swapped_target_exists_successor. ff_u_reindex_swapped_target_exists = ff_q_reindex_swapped_target_exists_successor * S ((S (S ff_i_reindex_swapped_target_exists)) * ff_v_reindex_swapped_target_exists) + (ff_s_reindex_swapped_target_exists))) /\ ff_s_reindex_swapped_target_exists = ff_r_reindex_swapped_target_exists * ff_p_reindex_swapped_target_exists))))))specialize beta_product_exists x6specialize beta_product_exists x7specialize beta_product_exists (S l)exact beta_product_existscases hswapped_target_product_existshave htarget_product_swap : q = x8specialize beta_product_swap_last_invariant zspecialize beta_product_swap_last_invariant dspecialize beta_product_swap_last_invariant x6specialize beta_product_swap_last_invariant x7specialize beta_product_swap_last_invariant lspecialize beta_product_swap_last_invariant xspecialize beta_product_swap_last_invariant x1specialize beta_product_swap_last_invariant x3specialize beta_product_swap_last_invariant qspecialize beta_product_swap_last_invariant x8apply beta_product_swap_last_invariantexact hsplit_rightexact htarget_at_preimageexact htarget_last_decoded_witnessexact htarget_swap_witness_witness_leftexact htarget_swap_witness_witness_right_leftexact htarget_swap_witness_witness_right_rightexact htarget_productexact hswapped_target_product_exists_witnesshave hsource_at_map_last : ((exists ff_h_reindex_source_at_map_last. ff_h_reindex_source_at_map_last + S (x3) = S ((S (x2)) * c)) /\ exists ff_q_reindex_source_at_map_last. b = ff_q_reindex_source_at_map_last * S ((S (x2)) * c) + (x3))specialize beta_at_exists bspecialize beta_at_exists cspecialize beta_at_exists x2cases beta_at_existshave htarget_from_map_last : ((exists ff_h_reindex_target_from_map_last. ff_h_reindex_target_from_map_last + S (x9) = S ((S (l)) * d)) /\ exists ff_q_reindex_target_from_map_last. z = ff_q_reindex_target_from_map_last * S ((S (l)) * d) + (x9))specialize haligned lspecialize haligned x2specialize haligned x9apply halignedexact hlast_boundexact hmap_last_decoded_witnessexact beta_at_exists_witnesshave hmap_last_value : x9 = x3specialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique lspecialize beta_at_unique x9specialize beta_at_unique x3apply beta_at_uniqueexact htarget_from_map_lastexact htarget_last_decoded_witnessrewrite hmap_last_value at beta_at_exists_witnessrewrite hmap_last_value at beta_at_exists_witnessexact beta_at_exists_witnesshave hswapped_aligned : forall fpr_i_reindex_swapped_aligned fpr_j_reindex_swapped_aligned fpr_x_reindex_swapped_aligned. (exists fpr_h_reindex_swapped_aligned. fpr_h_reindex_swapped_aligned + S fpr_i_reindex_swapped_aligned = S l) -> (((exists ff_h_reindex_swapped_aligned_map. ff_h_reindex_swapped_aligned_map + S (fpr_j_reindex_swapped_aligned) = S ((S (fpr_i_reindex_swapped_aligned)) * x5)) /\ exists ff_q_reindex_swapped_aligned_map. x4 = ff_q_reindex_swapped_aligned_map * S ((S (fpr_i_reindex_swapped_aligned)) * x5) + (fpr_j_reindex_swapped_aligned))) -> (((exists ff_h_reindex_swapped_aligned_source. ff_h_reindex_swapped_aligned_source + S (fpr_x_reindex_swapped_aligned) = S ((S (fpr_j_reindex_swapped_aligned)) * c)) /\ exists ff_q_reindex_swapped_aligned_source. b = ff_q_reindex_swapped_aligned_source * S ((S (fpr_j_reindex_swapped_aligned)) * c) + (fpr_x_reindex_swapped_aligned))) -> (((exists ff_h_reindex_swapped_aligned_target. ff_h_reindex_swapped_aligned_target + S (fpr_x_reindex_swapped_aligned) = S ((S (fpr_i_reindex_swapped_aligned)) * x7)) /\ exists ff_q_reindex_swapped_aligned_target. x6 = ff_q_reindex_swapped_aligned_target * S ((S (fpr_i_reindex_swapped_aligned)) * x7) + (fpr_x_reindex_swapped_aligned)))specialize beta_reindex_alignment_swap_last rspecialize beta_reindex_alignment_swap_last sspecialize beta_reindex_alignment_swap_last x4specialize beta_reindex_alignment_swap_last x5specialize beta_reindex_alignment_swap_last bspecialize beta_reindex_alignment_swap_last cspecialize beta_reindex_alignment_swap_last zspecialize beta_reindex_alignment_swap_last dspecialize beta_reindex_alignment_swap_last x6specialize beta_reindex_alignment_swap_last x7specialize beta_reindex_alignment_swap_last lspecialize beta_reindex_alignment_swap_last xspecialize beta_reindex_alignment_swap_last x2specialize beta_reindex_alignment_swap_last x1specialize beta_reindex_alignment_swap_last x3apply beta_reindex_alignment_swap_lastexact hmap_swap_witness_witness_leftexact hmap_swap_witness_witness_right_leftexact hmap_swap_witness_witness_right_rightexact hsource_at_map_lastexact hsource_last_witnessexact htarget_swap_witness_witness_leftexact htarget_swap_witness_witness_right_leftexact htarget_swap_witness_witness_right_rightexact halignedhave hswapped_bounded_prefix : forall fp_i_reindex_swapped_bounded_prefix. (exists fp_gap_reindex_swapped_bounded_prefix_index. fp_gap_reindex_swapped_bounded_prefix_index + S fp_i_reindex_swapped_bounded_prefix = l) -> exists fp_value_reindex_swapped_bounded_prefix. ((((exists ff_h_reindex_swapped_bounded_prefix_entry. ff_h_reindex_swapped_bounded_prefix_entry + S (fp_value_reindex_swapped_bounded_prefix) = S ((S (fp_i_reindex_swapped_bounded_prefix)) * x5)) /\ exists ff_q_reindex_swapped_bounded_prefix_entry. x4 = ff_q_reindex_swapped_bounded_prefix_entry * S ((S (fp_i_reindex_swapped_bounded_prefix)) * x5) + (fp_value_reindex_swapped_bounded_prefix))) /\ (exists fp_gap_reindex_swapped_bounded_prefix_value. fp_gap_reindex_swapped_bounded_prefix_value + S fp_value_reindex_swapped_bounded_prefix = l))specialize finite_fixed_last_prefix_bounded x4specialize finite_fixed_last_prefix_bounded x5specialize finite_fixed_last_prefix_bounded lapply finite_fixed_last_prefix_boundedexact hswapped_boundedexact hswapped_injectiveexact hmap_swap_witness_witness_right_lefthave hswapped_injective_prefix : forall fp_i_reindex_swapped_injective_prefix fp_j_reindex_swapped_injective_prefix fp_value_reindex_swapped_injective_prefix. (exists fp_gap_reindex_swapped_injective_prefix_i. fp_gap_reindex_swapped_injective_prefix_i + S fp_i_reindex_swapped_injective_prefix = l) -> (exists fp_gap_reindex_swapped_injective_prefix_j. fp_gap_reindex_swapped_injective_prefix_j + S fp_j_reindex_swapped_injective_prefix = l) -> (((exists ff_h_reindex_swapped_injective_prefix_left. ff_h_reindex_swapped_injective_prefix_left + S (fp_value_reindex_swapped_injective_prefix) = S ((S (fp_i_reindex_swapped_injective_prefix)) * x5)) /\ exists ff_q_reindex_swapped_injective_prefix_left. x4 = ff_q_reindex_swapped_injective_prefix_left * S ((S (fp_i_reindex_swapped_injective_prefix)) * x5) + (fp_value_reindex_swapped_injective_prefix))) -> (((exists ff_h_reindex_swapped_injective_prefix_right. ff_h_reindex_swapped_injective_prefix_right + S (fp_value_reindex_swapped_injective_prefix) = S ((S (fp_j_reindex_swapped_injective_prefix)) * x5)) /\ exists ff_q_reindex_swapped_injective_prefix_right. x4 = ff_q_reindex_swapped_injective_prefix_right * S ((S (fp_j_reindex_swapped_injective_prefix)) * x5) + (fp_value_reindex_swapped_injective_prefix))) -> fp_i_reindex_swapped_injective_prefix = fp_j_reindex_swapped_injective_prefixspecialize finite_injective_prefix_succ x4specialize finite_injective_prefix_succ x5specialize finite_injective_prefix_succ lspecialize finite_injective_prefix_succ (S l)apply finite_injective_prefix_succreflexact hswapped_injectivehave hswapped_aligned_prefix : forall fpr_i_reindex_swapped_aligned_prefix fpr_j_reindex_swapped_aligned_prefix fpr_x_reindex_swapped_aligned_prefix. (exists fpr_h_reindex_swapped_aligned_prefix. fpr_h_reindex_swapped_aligned_prefix + S fpr_i_reindex_swapped_aligned_prefix = l) -> (((exists ff_h_reindex_swapped_aligned_prefix_map. ff_h_reindex_swapped_aligned_prefix_map + S (fpr_j_reindex_swapped_aligned_prefix) = S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x5)) /\ exists ff_q_reindex_swapped_aligned_prefix_map. x4 = ff_q_reindex_swapped_aligned_prefix_map * S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x5) + (fpr_j_reindex_swapped_aligned_prefix))) -> (((exists ff_h_reindex_swapped_aligned_prefix_source. ff_h_reindex_swapped_aligned_prefix_source + S (fpr_x_reindex_swapped_aligned_prefix) = S ((S (fpr_j_reindex_swapped_aligned_prefix)) * c)) /\ exists ff_q_reindex_swapped_aligned_prefix_source. b = ff_q_reindex_swapped_aligned_prefix_source * S ((S (fpr_j_reindex_swapped_aligned_prefix)) * c) + (fpr_x_reindex_swapped_aligned_prefix))) -> (((exists ff_h_reindex_swapped_aligned_prefix_target. ff_h_reindex_swapped_aligned_prefix_target + S (fpr_x_reindex_swapped_aligned_prefix) = S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x7)) /\ exists ff_q_reindex_swapped_aligned_prefix_target. x6 = ff_q_reindex_swapped_aligned_prefix_target * S ((S (fpr_i_reindex_swapped_aligned_prefix)) * x7) + (fpr_x_reindex_swapped_aligned_prefix)))intro iintro jintro aintro hiintro hmapintro hsourcespecialize hswapped_aligned ispecialize hswapped_aligned jspecialize hswapped_aligned aapply hswapped_alignedspecialize le_succ (S i)specialize le_succ lapply le_succexact hiexact hmapexact hsourcehave hswapped_prefix_products_equal : forall u v. (exists ff_u_reindex_source_prefix_product ff_v_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_start. ff_h_reindex_source_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_start. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_start * S ((S (0)) * ff_v_reindex_source_prefix_product) + (1))) /\ ((((exists ff_h_reindex_source_prefix_product_terminal. ff_h_reindex_source_prefix_product_terminal + S (u) = S ((S (l)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_terminal. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_terminal * S ((S (l)) * ff_v_reindex_source_prefix_product) + (u))) /\ forall ff_i_reindex_source_prefix_product. (exists ff_lt_reindex_source_prefix_product_bound. ff_lt_reindex_source_prefix_product_bound + S ff_i_reindex_source_prefix_product = l) -> exists ff_p_reindex_source_prefix_product ff_r_reindex_source_prefix_product ff_s_reindex_source_prefix_product. ((((exists ff_h_reindex_source_prefix_product_factor. ff_h_reindex_source_prefix_product_factor + S (ff_p_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * c)) /\ exists ff_q_reindex_source_prefix_product_factor. b = ff_q_reindex_source_prefix_product_factor * S ((S (ff_i_reindex_source_prefix_product)) * c) + (ff_p_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_partial. ff_h_reindex_source_prefix_product_partial + S (ff_r_reindex_source_prefix_product) = S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_partial. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_partial * S ((S (ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_r_reindex_source_prefix_product))) /\ ((((exists ff_h_reindex_source_prefix_product_successor. ff_h_reindex_source_prefix_product_successor + S (ff_s_reindex_source_prefix_product) = S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product)) /\ exists ff_q_reindex_source_prefix_product_successor. ff_u_reindex_source_prefix_product = ff_q_reindex_source_prefix_product_successor * S ((S (S ff_i_reindex_source_prefix_product)) * ff_v_reindex_source_prefix_product) + (ff_s_reindex_source_prefix_product))) /\ ff_s_reindex_source_prefix_product = ff_r_reindex_source_prefix_product * ff_p_reindex_source_prefix_product)))))) -> (exists ff_u_reindex_swapped_target_prefix_product ff_v_reindex_swapped_target_prefix_product. ((((exists ff_h_reindex_swapped_target_prefix_product_start. ff_h_reindex_swapped_target_prefix_product_start + S (1) = S ((S (0)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_start. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_start * S ((S (0)) * ff_v_reindex_swapped_target_prefix_product) + (1))) /\ ((((exists ff_h_reindex_swapped_target_prefix_product_terminal. ff_h_reindex_swapped_target_prefix_product_terminal + S (v) = S ((S (l)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_terminal. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_terminal * S ((S (l)) * ff_v_reindex_swapped_target_prefix_product) + (v))) /\ forall ff_i_reindex_swapped_target_prefix_product. (exists ff_lt_reindex_swapped_target_prefix_product_bound. ff_lt_reindex_swapped_target_prefix_product_bound + S ff_i_reindex_swapped_target_prefix_product = l) -> exists ff_p_reindex_swapped_target_prefix_product ff_r_reindex_swapped_target_prefix_product ff_s_reindex_swapped_target_prefix_product. ((((exists ff_h_reindex_swapped_target_prefix_product_factor. ff_h_reindex_swapped_target_prefix_product_factor + S (ff_p_reindex_swapped_target_prefix_product) = S ((S (ff_i_reindex_swapped_target_prefix_product)) * x7)) /\ exists ff_q_reindex_swapped_target_prefix_product_factor. x6 = ff_q_reindex_swapped_target_prefix_product_factor * S ((S (ff_i_reindex_swapped_target_prefix_product)) * x7) + (ff_p_reindex_swapped_target_prefix_product))) /\ ((((exists ff_h_reindex_swapped_target_prefix_product_partial. ff_h_reindex_swapped_target_prefix_product_partial + S (ff_r_reindex_swapped_target_prefix_product) = S ((S (ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_partial. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_partial * S ((S (ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product) + (ff_r_reindex_swapped_target_prefix_product))) /\ ((((exists ff_h_reindex_swapped_target_prefix_product_successor. ff_h_reindex_swapped_target_prefix_product_successor + S (ff_s_reindex_swapped_target_prefix_product) = S ((S (S ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product)) /\ exists ff_q_reindex_swapped_target_prefix_product_successor. ff_u_reindex_swapped_target_prefix_product = ff_q_reindex_swapped_target_prefix_product_successor * S ((S (S ff_i_reindex_swapped_target_prefix_product)) * ff_v_reindex_swapped_target_prefix_product) + (ff_s_reindex_swapped_target_prefix_product))) /\ ff_s_reindex_swapped_target_prefix_product = ff_r_reindex_swapped_target_prefix_product * ff_p_reindex_swapped_target_prefix_product)))))) -> u = vintro uintro vintro hsource_prefix_productintro htarget_prefix_productspecialize IH x4specialize IH x5specialize IH bspecialize IH cspecialize IH x6specialize IH x7specialize IH uspecialize IH vapply IHexact hswapped_bounded_prefixexact hswapped_injective_prefixexact hswapped_aligned_prefixexact hsource_prefix_productexact htarget_prefix_producthave hproduct_swapped : p = x8specialize beta_product_reindex_fixed_last x4specialize beta_product_reindex_fixed_last x5specialize beta_product_reindex_fixed_last bspecialize beta_product_reindex_fixed_last cspecialize beta_product_reindex_fixed_last x6specialize beta_product_reindex_fixed_last x7specialize beta_product_reindex_fixed_last lspecialize beta_product_reindex_fixed_last pspecialize beta_product_reindex_fixed_last x8apply beta_product_reindex_fixed_lastexact hswapped_alignedexact hmap_swap_witness_witness_right_leftexact hsource_productexact hswapped_target_product_exists_witnessexact hswapped_prefix_products_equaltrans x8exact hproduct_swappedsymmexact htarget_product_swap
beta_product_pointwise_coprime · unchanged support, not a new admission
forall m b c l z. (forall frp_index_pointwise frp_factor_pointwise. (exists frp_gap_pointwise_bound. frp_gap_pointwise_bound + S frp_index_pointwise = l) -> (((exists ff_h_frp_pointwise_decoded. ff_h_frp_pointwise_decoded + S (frp_factor_pointwise) = S ((S (frp_index_pointwise)) * c)) /\ exists ff_q_frp_pointwise_decoded. b = ff_q_frp_pointwise_decoded * S ((S (frp_index_pointwise)) * c) + (frp_factor_pointwise))) -> (forall frp_divisor_pointwise_coprime. (exists frp_left_factor_pointwise_coprime. frp_factor_pointwise = frp_divisor_pointwise_coprime * frp_left_factor_pointwise_coprime) -> (exists frp_right_factor_pointwise_coprime. m = frp_divisor_pointwise_coprime * frp_right_factor_pointwise_coprime) -> frp_divisor_pointwise_coprime = 1)) -> (exists ff_u_pointwise_product ff_v_pointwise_product. ((((exists ff_h_pointwise_product_start. ff_h_pointwise_product_start + S (1) = S ((S (0)) * ff_v_pointwise_product)) /\ exists ff_q_pointwise_product_start. ff_u_pointwise_product = ff_q_pointwise_product_start * S ((S (0)) * ff_v_pointwise_product) + (1))) /\ ((((exists ff_h_pointwise_product_terminal. ff_h_pointwise_product_terminal + S (z) = S ((S (l)) * ff_v_pointwise_product)) /\ exists ff_q_pointwise_product_terminal. ff_u_pointwise_product = ff_q_pointwise_product_terminal * S ((S (l)) * ff_v_pointwise_product) + (z))) /\ forall ff_i_pointwise_product. (exists ff_lt_pointwise_product_bound. ff_lt_pointwise_product_bound + S ff_i_pointwise_product = l) -> exists ff_p_pointwise_product ff_r_pointwise_product ff_s_pointwise_product. ((((exists ff_h_pointwise_product_factor. ff_h_pointwise_product_factor + S (ff_p_pointwise_product) = S ((S (ff_i_pointwise_product)) * c)) /\ exists ff_q_pointwise_product_factor. b = ff_q_pointwise_product_factor * S ((S (ff_i_pointwise_product)) * c) + (ff_p_pointwise_product))) /\ ((((exists ff_h_pointwise_product_partial. ff_h_pointwise_product_partial + S (ff_r_pointwise_product) = S ((S (ff_i_pointwise_product)) * ff_v_pointwise_product)) /\ exists ff_q_pointwise_product_partial. ff_u_pointwise_product = ff_q_pointwise_product_partial * S ((S (ff_i_pointwise_product)) * ff_v_pointwise_product) + (ff_r_pointwise_product))) /\ ((((exists ff_h_pointwise_product_successor. ff_h_pointwise_product_successor + S (ff_s_pointwise_product) = S ((S (S ff_i_pointwise_product)) * ff_v_pointwise_product)) /\ exists ff_q_pointwise_product_successor. ff_u_pointwise_product = ff_q_pointwise_product_successor * S ((S (S ff_i_pointwise_product)) * ff_v_pointwise_product) + (ff_s_pointwise_product))) /\ ff_s_pointwise_product = ff_r_pointwise_product * ff_p_pointwise_product)))))) -> (forall frp_divisor_pointwise_result. (exists frp_left_factor_pointwise_result. z = frp_divisor_pointwise_result * frp_left_factor_pointwise_result) -> (exists frp_right_factor_pointwise_result. m = frp_divisor_pointwise_result * frp_right_factor_pointwise_result) -> frp_divisor_pointwise_result = 1)
intro mintro bintro cinduction lintro zintro hpwintro hproducthave hz : z = 1specialize beta_product_zero bspecialize beta_product_zero cspecialize beta_product_zero zapply beta_product_zeroexact hproductrewrite hzspecialize coprime_one_left mexact coprime_one_leftintro zintro hpwintro hproducthave hdecomp : exists p r. (((exists ff_h_frp_final_factor. ff_h_frp_final_factor + S (p) = S ((S (l)) * c)) /\ exists ff_q_frp_final_factor. b = ff_q_frp_final_factor * S ((S (l)) * c) + (p))) /\ ((exists ff_u_pointwise_prefix_product ff_v_pointwise_prefix_product. ((((exists ff_h_pointwise_prefix_product_start. ff_h_pointwise_prefix_product_start + S (1) = S ((S (0)) * ff_v_pointwise_prefix_product)) /\ exists ff_q_pointwise_prefix_product_start. ff_u_pointwise_prefix_product = ff_q_pointwise_prefix_product_start * S ((S (0)) * ff_v_pointwise_prefix_product) + (1))) /\ ((((exists ff_h_pointwise_prefix_product_terminal. ff_h_pointwise_prefix_product_terminal + S (r) = S ((S (l)) * ff_v_pointwise_prefix_product)) /\ exists ff_q_pointwise_prefix_product_terminal. ff_u_pointwise_prefix_product = ff_q_pointwise_prefix_product_terminal * S ((S (l)) * ff_v_pointwise_prefix_product) + (r))) /\ forall ff_i_pointwise_prefix_product. (exists ff_lt_pointwise_prefix_product_bound. ff_lt_pointwise_prefix_product_bound + S ff_i_pointwise_prefix_product = l) -> exists ff_p_pointwise_prefix_product ff_r_pointwise_prefix_product ff_s_pointwise_prefix_product. ((((exists ff_h_pointwise_prefix_product_factor. ff_h_pointwise_prefix_product_factor + S (ff_p_pointwise_prefix_product) = S ((S (ff_i_pointwise_prefix_product)) * c)) /\ exists ff_q_pointwise_prefix_product_factor. b = ff_q_pointwise_prefix_product_factor * S ((S (ff_i_pointwise_prefix_product)) * c) + (ff_p_pointwise_prefix_product))) /\ ((((exists ff_h_pointwise_prefix_product_partial. ff_h_pointwise_prefix_product_partial + S (ff_r_pointwise_prefix_product) = S ((S (ff_i_pointwise_prefix_product)) * ff_v_pointwise_prefix_product)) /\ exists ff_q_pointwise_prefix_product_partial. ff_u_pointwise_prefix_product = ff_q_pointwise_prefix_product_partial * S ((S (ff_i_pointwise_prefix_product)) * ff_v_pointwise_prefix_product) + (ff_r_pointwise_prefix_product))) /\ ((((exists ff_h_pointwise_prefix_product_successor. ff_h_pointwise_prefix_product_successor + S (ff_s_pointwise_prefix_product) = S ((S (S ff_i_pointwise_prefix_product)) * ff_v_pointwise_prefix_product)) /\ exists ff_q_pointwise_prefix_product_successor. ff_u_pointwise_prefix_product = ff_q_pointwise_prefix_product_successor * S ((S (S ff_i_pointwise_prefix_product)) * ff_v_pointwise_prefix_product) + (ff_s_pointwise_prefix_product))) /\ ff_s_pointwise_prefix_product = ff_r_pointwise_prefix_product * ff_p_pointwise_prefix_product)))))) /\ z = r * p)specialize beta_product_succ_decompose bspecialize beta_product_succ_decompose cspecialize beta_product_succ_decompose lspecialize beta_product_succ_decompose zapply beta_product_succ_decomposeexact hproductcases hdecompcases hdecomp_witnesscases hdecomp_witness_witnesscases hdecomp_witness_witness_righthave hpw_prefix : forall frp_index_pointwise_prefix frp_factor_pointwise_prefix. (exists frp_gap_pointwise_prefix_bound. frp_gap_pointwise_prefix_bound + S frp_index_pointwise_prefix = l) -> (((exists ff_h_frp_pointwise_prefix_decoded. ff_h_frp_pointwise_prefix_decoded + S (frp_factor_pointwise_prefix) = S ((S (frp_index_pointwise_prefix)) * c)) /\ exists ff_q_frp_pointwise_prefix_decoded. b = ff_q_frp_pointwise_prefix_decoded * S ((S (frp_index_pointwise_prefix)) * c) + (frp_factor_pointwise_prefix))) -> (forall frp_divisor_pointwise_prefix_coprime. (exists frp_left_factor_pointwise_prefix_coprime. frp_factor_pointwise_prefix = frp_divisor_pointwise_prefix_coprime * frp_left_factor_pointwise_prefix_coprime) -> (exists frp_right_factor_pointwise_prefix_coprime. m = frp_divisor_pointwise_prefix_coprime * frp_right_factor_pointwise_prefix_coprime) -> frp_divisor_pointwise_prefix_coprime = 1)intro iintro x2intro hiintro hx2specialize hpw ispecialize hpw x2apply hpwspecialize le_succ (S i)specialize le_succ lapply le_succexact hiexact hx2have hprefix : forall frp_divisor_prefix_result. (exists frp_left_factor_prefix_result. x1 = frp_divisor_prefix_result * frp_left_factor_prefix_result) -> (exists frp_right_factor_prefix_result. m = frp_divisor_prefix_result * frp_right_factor_prefix_result) -> frp_divisor_prefix_result = 1specialize IH x1apply IHexact hpw_prefixexact hdecomp_witness_witness_right_lefthave hfactor : forall frp_divisor_last_factor. (exists frp_left_factor_last_factor. x = frp_divisor_last_factor * frp_left_factor_last_factor) -> (exists frp_right_factor_last_factor. m = frp_divisor_last_factor * frp_right_factor_last_factor) -> frp_divisor_last_factor = 1specialize hpw lspecialize hpw xapply hpwspecialize le_refl (S l)exact le_reflexact hdecomp_witness_witness_leftrewrite hdecomp_witness_witness_right_rightspecialize coprime_mul_left x1specialize coprime_mul_left xspecialize coprime_mul_left mapply coprime_mul_leftexact hprefixexact hfactor
prime_mul_index_map_exists_up_to · unchanged support, not a new admission
forall l n p a. (exists frm_weak_gap_index_map_length. frm_weak_gap_index_map_length + l = n) -> p = S n -> ((~(p = 1) /\ forall frm_prime_left_index_map_prime frm_prime_right_index_map_prime. p = frm_prime_left_index_map_prime * frm_prime_right_index_map_prime -> frm_prime_left_index_map_prime = 1 \/ frm_prime_right_index_map_prime = 1)) -> (~(exists frm_factor_index_map_multiplier. a = p * frm_factor_index_map_multiplier)) -> exists r s. (forall frm_index_result. (exists frm_gap_result_index_bound. frm_gap_result_index_bound + S frm_index_result = l) -> (exists frm_residue_result_result. (exists frm_gap_result_result_residue_bound. frm_gap_result_result_residue_bound + S frm_residue_result_result = n) /\ ((((exists ff_h_frm_result_result_decoded. ff_h_frm_result_result_decoded + S (frm_residue_result_result) = S ((S (frm_index_result)) * s)) /\ exists ff_q_frm_result_result_decoded. r = ff_q_frm_result_result_decoded * S ((S (frm_index_result)) * s) + (frm_residue_result_result))) /\ (exists frm_mod_left_result_result_congruence frm_mod_right_result_result_congruence. a * S frm_index_result + p * frm_mod_left_result_result_congruence = S frm_residue_result_result + p * frm_mod_right_result_result_congruence))))
induction lintro nintro pintro aintro hlnintro hpnintro hpintro hnotdivexists 0exists 0intro iintro hiexfalsocases hihave hsi : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsiintro nintro pintro aintro hlnintro hpnintro hpintro hnotdivhave hln_prev : exists h. h + l = nspecialize lt_to_le lspecialize lt_to_le napply lt_to_leexact hlnhave hprev : exists r s. (forall frm_index_previous. (exists frm_gap_previous_index_bound. frm_gap_previous_index_bound + S frm_index_previous = l) -> (exists frm_residue_previous_result. (exists frm_gap_previous_result_residue_bound. frm_gap_previous_result_residue_bound + S frm_residue_previous_result = n) /\ ((((exists ff_h_frm_previous_result_decoded. ff_h_frm_previous_result_decoded + S (frm_residue_previous_result) = S ((S (frm_index_previous)) * s)) /\ exists ff_q_frm_previous_result_decoded. r = ff_q_frm_previous_result_decoded * S ((S (frm_index_previous)) * s) + (frm_residue_previous_result))) /\ (exists frm_mod_left_previous_result_congruence frm_mod_right_previous_result_congruence. a * S frm_index_previous + p * frm_mod_left_previous_result_congruence = S frm_residue_previous_result + p * frm_mod_right_previous_result_congruence))))specialize IH nspecialize IH pspecialize IH aapply IHexact hln_prevexact hpnexact hpexact hnotdivcases hprevcases hprev_witnesshave hslp : exists h. h + S (S l) = prewrite hpnspecialize succ_le_succ (S l)specialize succ_le_succ napply succ_le_succexact hlnhave hp0 : ~(p = 0)intro hpzerospecialize prime_nonzero papply prime_nonzeroexact hpexact hpzerohave hdiv : exists q rem. a * S l = p * q + rem /\ exists h. h + S rem = pspecialize division_remainder_exists pspecialize division_remainder_exists (a * S l)apply division_remainder_existsexact hp0cases hdivcases hdiv_witnesscases hdiv_witness_witnesshave hrem0 : ~(x3 = 0)intro hremzerohave hmultiple : exists k. a * S l = p * kexists x2trans p * x2 + x3exact hdiv_witness_witness_leftrewrite hremzeroapply PA3have hfactor : (exists u. a = p * u) \/ exists v. S l = p * vspecialize euclid_prime_dvd_product pspecialize euclid_prime_dvd_product aspecialize euclid_prime_dvd_product (S l)apply euclid_prime_dvd_productexact hpexact hmultiplecases hfactorapply hnotdivexact hfactor_lefthave hsl0 : ~(S l = 0)specialize succ_ne_zero lexact succ_ne_zerohave hple : exists k. k + p = S lspecialize divisor_le_nonzero pspecialize divisor_le_nonzero (S l)apply divisor_le_nonzeroexact hsl0exact hfactor_rightspecialize lt_not_le (S l)specialize lt_not_le papply lt_not_leexact hslpexact hplehave hrem_succ : exists j. x3 = S jspecialize nonzero_is_succ x3apply nonzero_is_succexact hrem0cases hrem_succhave hjn : exists h. h + S x4 = nspecialize le_of_succ_le_succ (S x4)specialize le_of_succ_le_succ napply le_of_succ_le_succrewrite <- hrem_succ_witnessrewrite <- hpnexact hdiv_witness_witness_righthave hdecomp : a * S l = x2 * p + x3trans p * x2 + x3exact hdiv_witness_witness_leftcongrapply mul_commreflhave hmodrem : exists u v. a * S l + p * u = x3 + p * vspecialize remainder_decomposition_to_mod_eq pspecialize remainder_decomposition_to_mod_eq (a * S l)specialize remainder_decomposition_to_mod_eq x2specialize remainder_decomposition_to_mod_eq x3apply remainder_decomposition_to_mod_eqexact hdecomphave hmod : exists u v. a * S l + p * u = S x4 + p * vrewrite <- hrem_succ_witnessexact hmodremspecialize beta_prefix_extend lspecialize beta_prefix_extend xspecialize beta_prefix_extend x1specialize beta_prefix_extend x4cases beta_prefix_extendcases beta_prefix_extend_witnesscases beta_prefix_extend_witness_witnessexists x5exists x6intro iintro hihave hsplit : i = l \/ exists h. h + S i = lspecialize finite_lt_succ_eq_or_lt lspecialize finite_lt_succ_eq_or_lt iapply finite_lt_succ_eq_or_ltexact hicases hsplitexists x4splitexact hjnsplitrewrite hsplit_leftrewrite hsplit_leftexact beta_prefix_extend_witness_witness_leftrewrite hsplit_leftexact hmodhave hold : (exists frm_residue_previous_at_i. (exists frm_gap_previous_at_i_residue_bound. frm_gap_previous_at_i_residue_bound + S frm_residue_previous_at_i = n) /\ ((((exists ff_h_frm_previous_at_i_decoded. ff_h_frm_previous_at_i_decoded + S (frm_residue_previous_at_i) = S ((S (i)) * x1)) /\ exists ff_q_frm_previous_at_i_decoded. x = ff_q_frm_previous_at_i_decoded * S ((S (i)) * x1) + (frm_residue_previous_at_i))) /\ (exists frm_mod_left_previous_at_i_congruence frm_mod_right_previous_at_i_congruence. a * S i + p * frm_mod_left_previous_at_i_congruence = S frm_residue_previous_at_i + p * frm_mod_right_previous_at_i_congruence)))specialize hprev_witness_witness iapply hprev_witness_witnessexact hsplit_rightcases holdcases hold_witnesscases hold_witness_rightexists x7splitexact hold_witness_leftsplitspecialize beta_prefix_extend_witness_witness_right ispecialize beta_prefix_extend_witness_witness_right x7apply beta_prefix_extend_witness_witness_rightexact hsplit_rightexact hold_witness_right_leftexact hold_witness_right_right
beta_successor_lift_exists · unchanged support, not a new admission
forall r s l. exists z d. forall i j. (exists frm_gap_successor_lift_bound. frm_gap_successor_lift_bound + S i = l) -> (((exists ff_h_frm_successor_lift_source. ff_h_frm_successor_lift_source + S (j) = S ((S (i)) * s)) /\ exists ff_q_frm_successor_lift_source. r = ff_q_frm_successor_lift_source * S ((S (i)) * s) + (j))) -> (((exists frm_height_successor_lift_target. frm_height_successor_lift_target + S (S j) = S ((S (i)) * d)) /\ exists frm_quotient_successor_lift_target. z = frm_quotient_successor_lift_target * S ((S (i)) * d) + (S j)))
intro rintro sinduction lexists 0exists 0intro iintro jintro hiintro hsourceexfalsocases hihave hsi : S i = 0specialize add_eq_zero_right xspecialize add_eq_zero_right (S i)apply add_eq_zero_rightexact hi_witnessspecialize succ_ne_zero iapply succ_ne_zeroexact hsicases IHcases IH_witnessspecialize beta_at_exists rspecialize beta_at_exists sspecialize beta_at_exists lcases beta_at_existsspecialize beta_prefix_extend lspecialize beta_prefix_extend xspecialize beta_prefix_extend x1specialize beta_prefix_extend (S x2)cases beta_prefix_extendcases beta_prefix_extend_witnesscases beta_prefix_extend_witness_witnessexists x3exists x4intro iintro jintro hiintro hsourcehave hsplit : i = l \/ exists h. h + S i = lspecialize finite_lt_succ_eq_or_lt lspecialize finite_lt_succ_eq_or_lt iapply finite_lt_succ_eq_or_ltexact hicases hsplithave hjx : j = x2specialize beta_at_unique rspecialize beta_at_unique sspecialize beta_at_unique lspecialize beta_at_unique jspecialize beta_at_unique x2apply beta_at_uniquerewrite hsplit_left at hsourcerewrite hsplit_left at hsourceexact hsourceexact beta_at_exists_witnessrewrite hsplit_leftrewrite hsplit_leftrewrite hjxrewrite hjxexact beta_prefix_extend_witness_witness_leftspecialize beta_prefix_extend_witness_witness_right ispecialize beta_prefix_extend_witness_witness_right (S j)apply beta_prefix_extend_witness_witness_rightexact hsplit_rightspecialize IH_witness_witness ispecialize IH_witness_witness japply IH_witness_witnessexact hsplit_rightexact hsource
fermat_index_map_bounded · unchanged support, not a new admission
forall r s n p a. (forall frm_index_bounded_map. (exists frm_gap_bounded_map_index_bound. frm_gap_bounded_map_index_bound + S frm_index_bounded_map = n) -> (exists frm_residue_bounded_map_result. (exists frm_gap_bounded_map_result_residue_bound. frm_gap_bounded_map_result_residue_bound + S frm_residue_bounded_map_result = n) /\ ((((exists ff_h_frm_bounded_map_result_decoded. ff_h_frm_bounded_map_result_decoded + S (frm_residue_bounded_map_result) = S ((S (frm_index_bounded_map)) * s)) /\ exists ff_q_frm_bounded_map_result_decoded. r = ff_q_frm_bounded_map_result_decoded * S ((S (frm_index_bounded_map)) * s) + (frm_residue_bounded_map_result))) /\ (exists frm_mod_left_bounded_map_result_congruence frm_mod_right_bounded_map_result_congruence. a * S frm_index_bounded_map + p * frm_mod_left_bounded_map_result_congruence = S frm_residue_bounded_map_result + p * frm_mod_right_bounded_map_result_congruence)))) -> (forall fp_i_bounded_result. (exists fp_gap_bounded_result_index. fp_gap_bounded_result_index + S fp_i_bounded_result = n) -> exists fp_value_bounded_result. ((((exists ff_h_bounded_result_entry. ff_h_bounded_result_entry + S (fp_value_bounded_result) = S ((S (fp_i_bounded_result)) * s)) /\ exists ff_q_bounded_result_entry. r = ff_q_bounded_result_entry * S ((S (fp_i_bounded_result)) * s) + (fp_value_bounded_result))) /\ (exists fp_gap_bounded_result_value. fp_gap_bounded_result_value + S fp_value_bounded_result = n)))
intro rintro sintro nintro pintro aintro hmapintro iintro hihave hentry : exists frm_residue_bounded_at_i. (exists frm_gap_bounded_at_i_residue_bound. frm_gap_bounded_at_i_residue_bound + S frm_residue_bounded_at_i = n) /\ ((((exists ff_h_frm_bounded_at_i_decoded. ff_h_frm_bounded_at_i_decoded + S (frm_residue_bounded_at_i) = S ((S (i)) * s)) /\ exists ff_q_frm_bounded_at_i_decoded. r = ff_q_frm_bounded_at_i_decoded * S ((S (i)) * s) + (frm_residue_bounded_at_i))) /\ (exists frm_mod_left_bounded_at_i_congruence frm_mod_right_bounded_at_i_congruence. a * S i + p * frm_mod_left_bounded_at_i_congruence = S frm_residue_bounded_at_i + p * frm_mod_right_bounded_at_i_congruence))specialize hmap iapply hmapexact hicases hentrycases hentry_witnesscases hentry_witness_rightexists xsplitexact hentry_witness_right_leftexact hentry_witness_left
prime_mul_index_map_injective · unchanged support, not a new admission
forall p n a r s. p = S n -> ((~(p = 1) /\ forall frm_prime_left_injective_prime frm_prime_right_injective_prime. p = frm_prime_left_injective_prime * frm_prime_right_injective_prime -> frm_prime_left_injective_prime = 1 \/ frm_prime_right_injective_prime = 1)) -> (~(exists frm_factor_injective_multiplier. a = p * frm_factor_injective_multiplier)) -> (forall frm_index_injective_map. (exists frm_gap_injective_map_index_bound. frm_gap_injective_map_index_bound + S frm_index_injective_map = n) -> (exists frm_residue_injective_map_result. (exists frm_gap_injective_map_result_residue_bound. frm_gap_injective_map_result_residue_bound + S frm_residue_injective_map_result = n) /\ ((((exists ff_h_frm_injective_map_result_decoded. ff_h_frm_injective_map_result_decoded + S (frm_residue_injective_map_result) = S ((S (frm_index_injective_map)) * s)) /\ exists ff_q_frm_injective_map_result_decoded. r = ff_q_frm_injective_map_result_decoded * S ((S (frm_index_injective_map)) * s) + (frm_residue_injective_map_result))) /\ (exists frm_mod_left_injective_map_result_congruence frm_mod_right_injective_map_result_congruence. a * S frm_index_injective_map + p * frm_mod_left_injective_map_result_congruence = S frm_residue_injective_map_result + p * frm_mod_right_injective_map_result_congruence)))) -> (forall fp_i_injective_result fp_j_injective_result fp_value_injective_result. (exists fp_gap_injective_result_i. fp_gap_injective_result_i + S fp_i_injective_result = n) -> (exists fp_gap_injective_result_j. fp_gap_injective_result_j + S fp_j_injective_result = n) -> (((exists ff_h_injective_result_left. ff_h_injective_result_left + S (fp_value_injective_result) = S ((S (fp_i_injective_result)) * s)) /\ exists ff_q_injective_result_left. r = ff_q_injective_result_left * S ((S (fp_i_injective_result)) * s) + (fp_value_injective_result))) -> (((exists ff_h_injective_result_right. ff_h_injective_result_right + S (fp_value_injective_result) = S ((S (fp_j_injective_result)) * s)) /\ exists ff_q_injective_result_right. r = ff_q_injective_result_right * S ((S (fp_j_injective_result)) * s) + (fp_value_injective_result))) -> fp_i_injective_result = fp_j_injective_result)
intro pintro nintro aintro rintro sintro hpnintro hpintro hnotdivintro hmapintro iintro kintro valueintro hiintro hkintro hriintro hrkhave hmi : exists frm_residue_injective_i. (exists frm_gap_injective_i_residue_bound. frm_gap_injective_i_residue_bound + S frm_residue_injective_i = n) /\ ((((exists ff_h_frm_injective_i_decoded. ff_h_frm_injective_i_decoded + S (frm_residue_injective_i) = S ((S (i)) * s)) /\ exists ff_q_frm_injective_i_decoded. r = ff_q_frm_injective_i_decoded * S ((S (i)) * s) + (frm_residue_injective_i))) /\ (exists frm_mod_left_injective_i_congruence frm_mod_right_injective_i_congruence. a * S i + p * frm_mod_left_injective_i_congruence = S frm_residue_injective_i + p * frm_mod_right_injective_i_congruence))specialize hmap iapply hmapexact hicases hmicases hmi_witnesscases hmi_witness_righthave hmk : exists frm_residue_injective_k. (exists frm_gap_injective_k_residue_bound. frm_gap_injective_k_residue_bound + S frm_residue_injective_k = n) /\ ((((exists ff_h_frm_injective_k_decoded. ff_h_frm_injective_k_decoded + S (frm_residue_injective_k) = S ((S (k)) * s)) /\ exists ff_q_frm_injective_k_decoded. r = ff_q_frm_injective_k_decoded * S ((S (k)) * s) + (frm_residue_injective_k))) /\ (exists frm_mod_left_injective_k_congruence frm_mod_right_injective_k_congruence. a * S k + p * frm_mod_left_injective_k_congruence = S frm_residue_injective_k + p * frm_mod_right_injective_k_congruence))specialize hmap kapply hmapexact hkcases hmkcases hmk_witnesscases hmk_witness_righthave hvalue_i : value = xspecialize beta_at_unique rspecialize beta_at_unique sspecialize beta_at_unique ispecialize beta_at_unique valuespecialize beta_at_unique xapply beta_at_uniqueexact hriexact hmi_witness_right_lefthave hvalue_k : value = x1specialize beta_at_unique rspecialize beta_at_unique sspecialize beta_at_unique kspecialize beta_at_unique valuespecialize beta_at_unique x1apply beta_at_uniqueexact hrkexact hmk_witness_right_leftrewrite <- hvalue_i at hmi_witness_right_rightrewrite <- hvalue_k at hmk_witness_right_righthave hreverse : exists frr_reverse_left_injective_reverse frr_reverse_right_injective_reverse. S value + p * frr_reverse_left_injective_reverse = a * S k + p * frr_reverse_right_injective_reversespecialize mod_eq_symm pspecialize mod_eq_symm (a * S k)specialize mod_eq_symm (S value)apply mod_eq_symmexact hmk_witness_right_righthave hscaled : exists frr_scaled_left_injective_scaled frr_scaled_right_injective_scaled. a * S i + p * frr_scaled_left_injective_scaled = a * S k + p * frr_scaled_right_injective_scaledspecialize mod_eq_trans pspecialize mod_eq_trans (a * S i)specialize mod_eq_trans (S value)specialize mod_eq_trans (a * S k)apply mod_eq_transexact hmi_witness_right_rightexact hreversehave hcancel : exists frr_cancel_left_injective_canceled frr_cancel_right_injective_canceled. S i + p * frr_cancel_left_injective_canceled = S k + p * frr_cancel_right_injective_canceledspecialize prime_mod_cancel pspecialize prime_mod_cancel aspecialize prime_mod_cancel (S i)specialize prime_mod_cancel (S k)apply prime_mod_cancelexact hpexact hnotdivexact hscaledhave hibound : exists frr_successor_bound_injective_i_bound. frr_successor_bound_injective_i_bound + S (S i) = prewrite hpnspecialize succ_le_succ (S i)specialize succ_le_succ napply succ_le_succexact hihave hkbound : exists frr_successor_bound_injective_k_bound. frr_successor_bound_injective_k_bound + S (S k) = prewrite hpnspecialize succ_le_succ (S k)specialize succ_le_succ napply succ_le_succexact hkhave hsucc : S i = S kspecialize mod_eq_bounded_unique pspecialize mod_eq_bounded_unique (S i)specialize mod_eq_bounded_unique (S k)apply mod_eq_bounded_uniqueexact hiboundexact hkboundexact hcancelspecialize succ_injective ispecialize succ_injective kapply succ_injectiveexact hsucc
beta_range_one_entry_eq_succ · unchanged support, not a new admission
forall b c l i x. (forall ff_i_frp_range_entry. (exists ff_lt_frp_range_entry_bound. ff_lt_frp_range_entry_bound + S ff_i_frp_range_entry = l) -> (((exists ff_h_frp_range_entry_decoded. ff_h_frp_range_entry_decoded + S (1 + ff_i_frp_range_entry) = S ((S (ff_i_frp_range_entry)) * c)) /\ exists ff_q_frp_range_entry_decoded. b = ff_q_frp_range_entry_decoded * S ((S (ff_i_frp_range_entry)) * c) + (1 + ff_i_frp_range_entry)))) -> (exists frp_gap_entry_bound. frp_gap_entry_bound + S i = l) -> (((exists ff_h_frp_entry. ff_h_frp_entry + S (x) = S ((S (i)) * c)) /\ exists ff_q_frp_entry. b = ff_q_frp_entry * S ((S (i)) * c) + (x))) -> x = S i
intro bintro cintro lintro iintro xintro hrangeintro hiintro hxhave hraw : x = 1 + ispecialize beta_range_entry_eq bspecialize beta_range_entry_eq cspecialize beta_range_entry_eq 1specialize beta_range_entry_eq lspecialize beta_range_entry_eq ispecialize beta_range_entry_eq xapply beta_range_entry_eqexact hrangeexact hiexact hxhave hone : 1 + i = S itrans S (0 + i)specialize add_succ_left 0specialize add_succ_left iexact add_succ_leftcongrspecialize zero_add iexact zero_addtrans 1 + iexact hrawexact hone
beta_successor_range_reindex_aligned · unchanged support, not a new admission
forall r s b c z d n. (forall fp_i_aligned_bounded. (exists fp_gap_aligned_bounded_index. fp_gap_aligned_bounded_index + S fp_i_aligned_bounded = n) -> exists fp_value_aligned_bounded. ((((exists ff_h_aligned_bounded_entry. ff_h_aligned_bounded_entry + S (fp_value_aligned_bounded) = S ((S (fp_i_aligned_bounded)) * s)) /\ exists ff_q_aligned_bounded_entry. r = ff_q_aligned_bounded_entry * S ((S (fp_i_aligned_bounded)) * s) + (fp_value_aligned_bounded))) /\ (exists fp_gap_aligned_bounded_value. fp_gap_aligned_bounded_value + S fp_value_aligned_bounded = n))) -> (forall ff_i_frp_range_aligned_range. (exists ff_lt_frp_range_aligned_range_bound. ff_lt_frp_range_aligned_range_bound + S ff_i_frp_range_aligned_range = n) -> (((exists ff_h_frp_range_aligned_range_decoded. ff_h_frp_range_aligned_range_decoded + S (1 + ff_i_frp_range_aligned_range) = S ((S (ff_i_frp_range_aligned_range)) * c)) /\ exists ff_q_frp_range_aligned_range_decoded. b = ff_q_frp_range_aligned_range_decoded * S ((S (ff_i_frp_range_aligned_range)) * c) + (1 + ff_i_frp_range_aligned_range)))) -> (forall frr_index_aligned_lift frr_value_aligned_lift. (exists frr_gap_aligned_lift. frr_gap_aligned_lift + S frr_index_aligned_lift = n) -> (((exists ff_h_frr_aligned_lift_source. ff_h_frr_aligned_lift_source + S (frr_value_aligned_lift) = S ((S (frr_index_aligned_lift)) * s)) /\ exists ff_q_frr_aligned_lift_source. r = ff_q_frr_aligned_lift_source * S ((S (frr_index_aligned_lift)) * s) + (frr_value_aligned_lift))) -> (((exists frm_height_frr_aligned_lift_target. frm_height_frr_aligned_lift_target + S (S frr_value_aligned_lift) = S ((S (frr_index_aligned_lift)) * d)) /\ exists frm_quotient_frr_aligned_lift_target. z = frm_quotient_frr_aligned_lift_target * S ((S (frr_index_aligned_lift)) * d) + (S frr_value_aligned_lift)))) -> (forall fpr_i_aligned_result fpr_j_aligned_result fpr_x_aligned_result. (exists fpr_h_aligned_result. fpr_h_aligned_result + S fpr_i_aligned_result = n) -> (((exists ff_h_aligned_result_map. ff_h_aligned_result_map + S (fpr_j_aligned_result) = S ((S (fpr_i_aligned_result)) * s)) /\ exists ff_q_aligned_result_map. r = ff_q_aligned_result_map * S ((S (fpr_i_aligned_result)) * s) + (fpr_j_aligned_result))) -> (((exists ff_h_aligned_result_source. ff_h_aligned_result_source + S (fpr_x_aligned_result) = S ((S (fpr_j_aligned_result)) * c)) /\ exists ff_q_aligned_result_source. b = ff_q_aligned_result_source * S ((S (fpr_j_aligned_result)) * c) + (fpr_x_aligned_result))) -> (((exists ff_h_aligned_result_target. ff_h_aligned_result_target + S (fpr_x_aligned_result) = S ((S (fpr_i_aligned_result)) * d)) /\ exists ff_q_aligned_result_target. z = ff_q_aligned_result_target * S ((S (fpr_i_aligned_result)) * d) + (fpr_x_aligned_result))))
intro rintro sintro bintro cintro zintro dintro nintro hboundedintro hrangeintro hliftintro iintro jintro valueintro hiintro hmapintro hsourcehave hbounded_i : exists frr_value_aligned_entry. (((exists ff_h_frr_aligned_entry_entry. ff_h_frr_aligned_entry_entry + S (frr_value_aligned_entry) = S ((S (i)) * s)) /\ exists ff_q_frr_aligned_entry_entry. r = ff_q_frr_aligned_entry_entry * S ((S (i)) * s) + (frr_value_aligned_entry))) /\ (exists frr_gap_aligned_entry. frr_gap_aligned_entry + S frr_value_aligned_entry = n)specialize hbounded iapply hboundedexact hicases hbounded_icases hbounded_i_witnesshave hjx : j = xspecialize beta_at_unique rspecialize beta_at_unique sspecialize beta_at_unique ispecialize beta_at_unique jspecialize beta_at_unique xapply beta_at_uniqueexact hmapexact hbounded_i_witness_lefthave hjbound : exists frr_gap_aligned_j_bound. frr_gap_aligned_j_bound + S j = nrewrite hjxexact hbounded_i_witness_righthave hvalue : value = S jspecialize beta_range_one_entry_eq_succ bspecialize beta_range_one_entry_eq_succ cspecialize beta_range_one_entry_eq_succ nspecialize beta_range_one_entry_eq_succ jspecialize beta_range_one_entry_eq_succ valueapply beta_range_one_entry_eq_succexact hrangeexact hjboundexact hsourcehave htarget_succ : ((exists frm_height_aligned_target. frm_height_aligned_target + S (S j) = S ((S (i)) * d)) /\ exists frm_quotient_aligned_target. z = frm_quotient_aligned_target * S ((S (i)) * d) + (S j))specialize hlift ispecialize hlift japply hliftexact hiexact hmaprewrite hvaluerewrite hvalueexact htarget_succ
beta_successor_range_scale_mod · unchanged support, not a new admission
forall p n a r s b c z d. (forall frm_index_scale_map. (exists frm_gap_scale_map_index_bound. frm_gap_scale_map_index_bound + S frm_index_scale_map = n) -> (exists frm_residue_scale_map_result. (exists frm_gap_scale_map_result_residue_bound. frm_gap_scale_map_result_residue_bound + S frm_residue_scale_map_result = n) /\ ((((exists ff_h_frm_scale_map_result_decoded. ff_h_frm_scale_map_result_decoded + S (frm_residue_scale_map_result) = S ((S (frm_index_scale_map)) * s)) /\ exists ff_q_frm_scale_map_result_decoded. r = ff_q_frm_scale_map_result_decoded * S ((S (frm_index_scale_map)) * s) + (frm_residue_scale_map_result))) /\ (exists frm_mod_left_scale_map_result_congruence frm_mod_right_scale_map_result_congruence. a * S frm_index_scale_map + p * frm_mod_left_scale_map_result_congruence = S frm_residue_scale_map_result + p * frm_mod_right_scale_map_result_congruence)))) -> (forall ff_i_frp_range_scale_range. (exists ff_lt_frp_range_scale_range_bound. ff_lt_frp_range_scale_range_bound + S ff_i_frp_range_scale_range = n) -> (((exists ff_h_frp_range_scale_range_decoded. ff_h_frp_range_scale_range_decoded + S (1 + ff_i_frp_range_scale_range) = S ((S (ff_i_frp_range_scale_range)) * c)) /\ exists ff_q_frp_range_scale_range_decoded. b = ff_q_frp_range_scale_range_decoded * S ((S (ff_i_frp_range_scale_range)) * c) + (1 + ff_i_frp_range_scale_range)))) -> (forall frr_index_scale_lift frr_value_scale_lift. (exists frr_gap_scale_lift. frr_gap_scale_lift + S frr_index_scale_lift = n) -> (((exists ff_h_frr_scale_lift_source. ff_h_frr_scale_lift_source + S (frr_value_scale_lift) = S ((S (frr_index_scale_lift)) * s)) /\ exists ff_q_frr_scale_lift_source. r = ff_q_frr_scale_lift_source * S ((S (frr_index_scale_lift)) * s) + (frr_value_scale_lift))) -> (((exists frm_height_frr_scale_lift_target. frm_height_frr_scale_lift_target + S (S frr_value_scale_lift) = S ((S (frr_index_scale_lift)) * d)) /\ exists frm_quotient_frr_scale_lift_target. z = frm_quotient_frr_scale_lift_target * S ((S (frr_index_scale_lift)) * d) + (S frr_value_scale_lift)))) -> (forall fsp_index_scale_result fsp_source_scale_result fsp_target_scale_result. (exists fsp_gap_scale_result. fsp_gap_scale_result + S fsp_index_scale_result = n) -> (((exists fsp_source_height_scale_result. fsp_source_height_scale_result + S (fsp_source_scale_result) = S ((S (fsp_index_scale_result)) * c)) /\ exists fsp_source_quotient_scale_result. b = fsp_source_quotient_scale_result * S ((S (fsp_index_scale_result)) * c) + (fsp_source_scale_result))) -> (((exists fsp_target_height_scale_result. fsp_target_height_scale_result + S (fsp_target_scale_result) = S ((S (fsp_index_scale_result)) * d)) /\ exists fsp_target_quotient_scale_result. z = fsp_target_quotient_scale_result * S ((S (fsp_index_scale_result)) * d) + (fsp_target_scale_result))) -> (exists fsp_mod_left_scale_result fsp_mod_right_scale_result. a * fsp_source_scale_result + p * fsp_mod_left_scale_result = fsp_target_scale_result + p * fsp_mod_right_scale_result))
intro pintro nintro aintro rintro sintro bintro cintro zintro dintro hmapintro hrangeintro hliftintro iintro sourceintro targetintro hiintro hsourceintro htargethave hmi : exists frm_residue_scale_at_i. (exists frm_gap_scale_at_i_residue_bound. frm_gap_scale_at_i_residue_bound + S frm_residue_scale_at_i = n) /\ ((((exists ff_h_frm_scale_at_i_decoded. ff_h_frm_scale_at_i_decoded + S (frm_residue_scale_at_i) = S ((S (i)) * s)) /\ exists ff_q_frm_scale_at_i_decoded. r = ff_q_frm_scale_at_i_decoded * S ((S (i)) * s) + (frm_residue_scale_at_i))) /\ (exists frm_mod_left_scale_at_i_congruence frm_mod_right_scale_at_i_congruence. a * S i + p * frm_mod_left_scale_at_i_congruence = S frm_residue_scale_at_i + p * frm_mod_right_scale_at_i_congruence))specialize hmap iapply hmapexact hicases hmicases hmi_witnesscases hmi_witness_righthave hsource_value : source = S ispecialize beta_range_one_entry_eq_succ bspecialize beta_range_one_entry_eq_succ cspecialize beta_range_one_entry_eq_succ nspecialize beta_range_one_entry_eq_succ ispecialize beta_range_one_entry_eq_succ sourceapply beta_range_one_entry_eq_succexact hrangeexact hiexact hsourcehave htarget_succ : ((exists frm_height_scale_target. frm_height_scale_target + S (S x) = S ((S (i)) * d)) /\ exists frm_quotient_scale_target. z = frm_quotient_scale_target * S ((S (i)) * d) + (S x))specialize hlift ispecialize hlift xapply hliftexact hiexact hmi_witness_right_lefthave htarget_value : target = S xspecialize beta_at_unique zspecialize beta_at_unique dspecialize beta_at_unique ispecialize beta_at_unique targetspecialize beta_at_unique (S x)apply beta_at_uniqueexact htargetexact htarget_succrewrite hsource_valuerewrite htarget_valueexact hmi_witness_right_right
prime_mul_residue_reindex_exists · unchanged support, not a new admission
forall p n a b c. p = S n -> ((~(p = 1) /\ forall frm_prime_left_package_prime frm_prime_right_package_prime. p = frm_prime_left_package_prime * frm_prime_right_package_prime -> frm_prime_left_package_prime = 1 \/ frm_prime_right_package_prime = 1)) -> (~(exists frm_factor_package_multiplier. a = p * frm_factor_package_multiplier)) -> (forall ff_i_frp_range_package_range. (exists ff_lt_frp_range_package_range_bound. ff_lt_frp_range_package_range_bound + S ff_i_frp_range_package_range = n) -> (((exists ff_h_frp_range_package_range_decoded. ff_h_frp_range_package_range_decoded + S (1 + ff_i_frp_range_package_range) = S ((S (ff_i_frp_range_package_range)) * c)) /\ exists ff_q_frp_range_package_range_decoded. b = ff_q_frp_range_package_range_decoded * S ((S (ff_i_frp_range_package_range)) * c) + (1 + ff_i_frp_range_package_range)))) -> exists r s z d. (forall fp_i_package_result_bounded. (exists fp_gap_package_result_bounded_index. fp_gap_package_result_bounded_index + S fp_i_package_result_bounded = n) -> exists fp_value_package_result_bounded. ((((exists ff_h_package_result_bounded_entry. ff_h_package_result_bounded_entry + S (fp_value_package_result_bounded) = S ((S (fp_i_package_result_bounded)) * s)) /\ exists ff_q_package_result_bounded_entry. r = ff_q_package_result_bounded_entry * S ((S (fp_i_package_result_bounded)) * s) + (fp_value_package_result_bounded))) /\ (exists fp_gap_package_result_bounded_value. fp_gap_package_result_bounded_value + S fp_value_package_result_bounded = n))) /\ ((forall fp_i_package_result_injective fp_j_package_result_injective fp_value_package_result_injective. (exists fp_gap_package_result_injective_i. fp_gap_package_result_injective_i + S fp_i_package_result_injective = n) -> (exists fp_gap_package_result_injective_j. fp_gap_package_result_injective_j + S fp_j_package_result_injective = n) -> (((exists ff_h_package_result_injective_left. ff_h_package_result_injective_left + S (fp_value_package_result_injective) = S ((S (fp_i_package_result_injective)) * s)) /\ exists ff_q_package_result_injective_left. r = ff_q_package_result_injective_left * S ((S (fp_i_package_result_injective)) * s) + (fp_value_package_result_injective))) -> (((exists ff_h_package_result_injective_right. ff_h_package_result_injective_right + S (fp_value_package_result_injective) = S ((S (fp_j_package_result_injective)) * s)) /\ exists ff_q_package_result_injective_right. r = ff_q_package_result_injective_right * S ((S (fp_j_package_result_injective)) * s) + (fp_value_package_result_injective))) -> fp_i_package_result_injective = fp_j_package_result_injective) /\ ((forall fpr_i_package_result_aligned fpr_j_package_result_aligned fpr_x_package_result_aligned. (exists fpr_h_package_result_aligned. fpr_h_package_result_aligned + S fpr_i_package_result_aligned = n) -> (((exists ff_h_package_result_aligned_map. ff_h_package_result_aligned_map + S (fpr_j_package_result_aligned) = S ((S (fpr_i_package_result_aligned)) * s)) /\ exists ff_q_package_result_aligned_map. r = ff_q_package_result_aligned_map * S ((S (fpr_i_package_result_aligned)) * s) + (fpr_j_package_result_aligned))) -> (((exists ff_h_package_result_aligned_source. ff_h_package_result_aligned_source + S (fpr_x_package_result_aligned) = S ((S (fpr_j_package_result_aligned)) * c)) /\ exists ff_q_package_result_aligned_source. b = ff_q_package_result_aligned_source * S ((S (fpr_j_package_result_aligned)) * c) + (fpr_x_package_result_aligned))) -> (((exists ff_h_package_result_aligned_target. ff_h_package_result_aligned_target + S (fpr_x_package_result_aligned) = S ((S (fpr_i_package_result_aligned)) * d)) /\ exists ff_q_package_result_aligned_target. z = ff_q_package_result_aligned_target * S ((S (fpr_i_package_result_aligned)) * d) + (fpr_x_package_result_aligned)))) /\ (forall fsp_index_package_result_scale fsp_source_package_result_scale fsp_target_package_result_scale. (exists fsp_gap_package_result_scale. fsp_gap_package_result_scale + S fsp_index_package_result_scale = n) -> (((exists fsp_source_height_package_result_scale. fsp_source_height_package_result_scale + S (fsp_source_package_result_scale) = S ((S (fsp_index_package_result_scale)) * c)) /\ exists fsp_source_quotient_package_result_scale. b = fsp_source_quotient_package_result_scale * S ((S (fsp_index_package_result_scale)) * c) + (fsp_source_package_result_scale))) -> (((exists fsp_target_height_package_result_scale. fsp_target_height_package_result_scale + S (fsp_target_package_result_scale) = S ((S (fsp_index_package_result_scale)) * d)) /\ exists fsp_target_quotient_package_result_scale. z = fsp_target_quotient_package_result_scale * S ((S (fsp_index_package_result_scale)) * d) + (fsp_target_package_result_scale))) -> (exists fsp_mod_left_package_result_scale fsp_mod_right_package_result_scale. a * fsp_source_package_result_scale + p * fsp_mod_left_package_result_scale = fsp_target_package_result_scale + p * fsp_mod_right_package_result_scale))))
intro pintro nintro aintro bintro cintro hpnintro hpintro hnotdivintro hrangehave hmaps : exists r s. (forall frm_index_package_map. (exists frm_gap_package_map_index_bound. frm_gap_package_map_index_bound + S frm_index_package_map = n) -> (exists frm_residue_package_map_result. (exists frm_gap_package_map_result_residue_bound. frm_gap_package_map_result_residue_bound + S frm_residue_package_map_result = n) /\ ((((exists ff_h_frm_package_map_result_decoded. ff_h_frm_package_map_result_decoded + S (frm_residue_package_map_result) = S ((S (frm_index_package_map)) * s)) /\ exists ff_q_frm_package_map_result_decoded. r = ff_q_frm_package_map_result_decoded * S ((S (frm_index_package_map)) * s) + (frm_residue_package_map_result))) /\ (exists frm_mod_left_package_map_result_congruence frm_mod_right_package_map_result_congruence. a * S frm_index_package_map + p * frm_mod_left_package_map_result_congruence = S frm_residue_package_map_result + p * frm_mod_right_package_map_result_congruence))))specialize prime_mul_index_map_exists_up_to nspecialize prime_mul_index_map_exists_up_to nspecialize prime_mul_index_map_exists_up_to pspecialize prime_mul_index_map_exists_up_to aapply prime_mul_index_map_exists_up_tospecialize le_refl nexact le_reflexact hpnexact hpexact hnotdivcases hmapscases hmaps_witnesshave hlifts : exists z d. (forall frr_index_package_lift frr_value_package_lift. (exists frr_gap_package_lift. frr_gap_package_lift + S frr_index_package_lift = n) -> (((exists ff_h_frr_package_lift_source. ff_h_frr_package_lift_source + S (frr_value_package_lift) = S ((S (frr_index_package_lift)) * x1)) /\ exists ff_q_frr_package_lift_source. x = ff_q_frr_package_lift_source * S ((S (frr_index_package_lift)) * x1) + (frr_value_package_lift))) -> (((exists frm_height_frr_package_lift_target. frm_height_frr_package_lift_target + S (S frr_value_package_lift) = S ((S (frr_index_package_lift)) * d)) /\ exists frm_quotient_frr_package_lift_target. z = frm_quotient_frr_package_lift_target * S ((S (frr_index_package_lift)) * d) + (S frr_value_package_lift))))specialize beta_successor_lift_exists xspecialize beta_successor_lift_exists x1specialize beta_successor_lift_exists nexact beta_successor_lift_existscases hliftscases hlifts_witnesshave hbounded : forall fp_i_package_bounded. (exists fp_gap_package_bounded_index. fp_gap_package_bounded_index + S fp_i_package_bounded = n) -> exists fp_value_package_bounded. ((((exists ff_h_package_bounded_entry. ff_h_package_bounded_entry + S (fp_value_package_bounded) = S ((S (fp_i_package_bounded)) * x1)) /\ exists ff_q_package_bounded_entry. x = ff_q_package_bounded_entry * S ((S (fp_i_package_bounded)) * x1) + (fp_value_package_bounded))) /\ (exists fp_gap_package_bounded_value. fp_gap_package_bounded_value + S fp_value_package_bounded = n))specialize fermat_index_map_bounded xspecialize fermat_index_map_bounded x1specialize fermat_index_map_bounded nspecialize fermat_index_map_bounded pspecialize fermat_index_map_bounded aapply fermat_index_map_boundedexact hmaps_witness_witnesshave hinjective : forall fp_i_package_injective fp_j_package_injective fp_value_package_injective. (exists fp_gap_package_injective_i. fp_gap_package_injective_i + S fp_i_package_injective = n) -> (exists fp_gap_package_injective_j. fp_gap_package_injective_j + S fp_j_package_injective = n) -> (((exists ff_h_package_injective_left. ff_h_package_injective_left + S (fp_value_package_injective) = S ((S (fp_i_package_injective)) * x1)) /\ exists ff_q_package_injective_left. x = ff_q_package_injective_left * S ((S (fp_i_package_injective)) * x1) + (fp_value_package_injective))) -> (((exists ff_h_package_injective_right. ff_h_package_injective_right + S (fp_value_package_injective) = S ((S (fp_j_package_injective)) * x1)) /\ exists ff_q_package_injective_right. x = ff_q_package_injective_right * S ((S (fp_j_package_injective)) * x1) + (fp_value_package_injective))) -> fp_i_package_injective = fp_j_package_injectivespecialize prime_mul_index_map_injective pspecialize prime_mul_index_map_injective nspecialize prime_mul_index_map_injective aspecialize prime_mul_index_map_injective xspecialize prime_mul_index_map_injective x1apply prime_mul_index_map_injectiveexact hpnexact hpexact hnotdivexact hmaps_witness_witnesshave haligned : forall fpr_i_package_aligned fpr_j_package_aligned fpr_x_package_aligned. (exists fpr_h_package_aligned. fpr_h_package_aligned + S fpr_i_package_aligned = n) -> (((exists ff_h_package_aligned_map. ff_h_package_aligned_map + S (fpr_j_package_aligned) = S ((S (fpr_i_package_aligned)) * x1)) /\ exists ff_q_package_aligned_map. x = ff_q_package_aligned_map * S ((S (fpr_i_package_aligned)) * x1) + (fpr_j_package_aligned))) -> (((exists ff_h_package_aligned_source. ff_h_package_aligned_source + S (fpr_x_package_aligned) = S ((S (fpr_j_package_aligned)) * c)) /\ exists ff_q_package_aligned_source. b = ff_q_package_aligned_source * S ((S (fpr_j_package_aligned)) * c) + (fpr_x_package_aligned))) -> (((exists ff_h_package_aligned_target. ff_h_package_aligned_target + S (fpr_x_package_aligned) = S ((S (fpr_i_package_aligned)) * x3)) /\ exists ff_q_package_aligned_target. x2 = ff_q_package_aligned_target * S ((S (fpr_i_package_aligned)) * x3) + (fpr_x_package_aligned)))specialize beta_successor_range_reindex_aligned xspecialize beta_successor_range_reindex_aligned x1specialize beta_successor_range_reindex_aligned bspecialize beta_successor_range_reindex_aligned cspecialize beta_successor_range_reindex_aligned x2specialize beta_successor_range_reindex_aligned x3specialize beta_successor_range_reindex_aligned napply beta_successor_range_reindex_alignedexact hboundedexact hrangeexact hlifts_witness_witnesshave hscale : forall fsp_index_package_scale fsp_source_package_scale fsp_target_package_scale. (exists fsp_gap_package_scale. fsp_gap_package_scale + S fsp_index_package_scale = n) -> (((exists fsp_source_height_package_scale. fsp_source_height_package_scale + S (fsp_source_package_scale) = S ((S (fsp_index_package_scale)) * c)) /\ exists fsp_source_quotient_package_scale. b = fsp_source_quotient_package_scale * S ((S (fsp_index_package_scale)) * c) + (fsp_source_package_scale))) -> (((exists fsp_target_height_package_scale. fsp_target_height_package_scale + S (fsp_target_package_scale) = S ((S (fsp_index_package_scale)) * x3)) /\ exists fsp_target_quotient_package_scale. x2 = fsp_target_quotient_package_scale * S ((S (fsp_index_package_scale)) * x3) + (fsp_target_package_scale))) -> (exists fsp_mod_left_package_scale fsp_mod_right_package_scale. a * fsp_source_package_scale + p * fsp_mod_left_package_scale = fsp_target_package_scale + p * fsp_mod_right_package_scale)specialize beta_successor_range_scale_mod pspecialize beta_successor_range_scale_mod nspecialize beta_successor_range_scale_mod aspecialize beta_successor_range_scale_mod xspecialize beta_successor_range_scale_mod x1specialize beta_successor_range_scale_mod bspecialize beta_successor_range_scale_mod cspecialize beta_successor_range_scale_mod x2specialize beta_successor_range_scale_mod x3apply beta_successor_range_scale_modexact hmaps_witness_witnessexact hrangeexact hlifts_witness_witnessexists xexists x1exists x2exists x3splitexact hboundedsplitexact hinjectivesplitexact halignedexact hscale
prime_mul_residue_product_balance · unchanged support, not a new admission
forall p n a b c F A. p = S n -> ((~(p = 1) /\ forall frm_prime_left_balance_prime frm_prime_right_balance_prime. p = frm_prime_left_balance_prime * frm_prime_right_balance_prime -> frm_prime_left_balance_prime = 1 \/ frm_prime_right_balance_prime = 1)) -> (~(exists frm_factor_balance_multiplier. a = p * frm_factor_balance_multiplier)) -> (forall ff_i_frp_range_balance_range. (exists ff_lt_frp_range_balance_range_bound. ff_lt_frp_range_balance_range_bound + S ff_i_frp_range_balance_range = n) -> (((exists ff_h_frp_range_balance_range_decoded. ff_h_frp_range_balance_range_decoded + S (1 + ff_i_frp_range_balance_range) = S ((S (ff_i_frp_range_balance_range)) * c)) /\ exists ff_q_frp_range_balance_range_decoded. b = ff_q_frp_range_balance_range_decoded * S ((S (ff_i_frp_range_balance_range)) * c) + (1 + ff_i_frp_range_balance_range)))) -> (exists ff_u_balance_source ff_v_balance_source. ((((exists ff_h_balance_source_start. ff_h_balance_source_start + S (1) = S ((S (0)) * ff_v_balance_source)) /\ exists ff_q_balance_source_start. ff_u_balance_source = ff_q_balance_source_start * S ((S (0)) * ff_v_balance_source) + (1))) /\ ((((exists ff_h_balance_source_terminal. ff_h_balance_source_terminal + S (F) = S ((S (n)) * ff_v_balance_source)) /\ exists ff_q_balance_source_terminal. ff_u_balance_source = ff_q_balance_source_terminal * S ((S (n)) * ff_v_balance_source) + (F))) /\ forall ff_i_balance_source. (exists ff_lt_balance_source_bound. ff_lt_balance_source_bound + S ff_i_balance_source = n) -> exists ff_p_balance_source ff_r_balance_source ff_s_balance_source. ((((exists ff_h_balance_source_factor. ff_h_balance_source_factor + S (ff_p_balance_source) = S ((S (ff_i_balance_source)) * c)) /\ exists ff_q_balance_source_factor. b = ff_q_balance_source_factor * S ((S (ff_i_balance_source)) * c) + (ff_p_balance_source))) /\ ((((exists ff_h_balance_source_partial. ff_h_balance_source_partial + S (ff_r_balance_source) = S ((S (ff_i_balance_source)) * ff_v_balance_source)) /\ exists ff_q_balance_source_partial. ff_u_balance_source = ff_q_balance_source_partial * S ((S (ff_i_balance_source)) * ff_v_balance_source) + (ff_r_balance_source))) /\ ((((exists ff_h_balance_source_successor. ff_h_balance_source_successor + S (ff_s_balance_source) = S ((S (S ff_i_balance_source)) * ff_v_balance_source)) /\ exists ff_q_balance_source_successor. ff_u_balance_source = ff_q_balance_source_successor * S ((S (S ff_i_balance_source)) * ff_v_balance_source) + (ff_s_balance_source))) /\ ff_s_balance_source = ff_r_balance_source * ff_p_balance_source)))))) -> (exists ff_b_balance_power ff_c_balance_power. ((forall ff_i_balance_power_repeat. (exists ff_lt_balance_power_repeat_bound. ff_lt_balance_power_repeat_bound + S ff_i_balance_power_repeat = n) -> (((exists ff_h_balance_power_repeat_decoded. ff_h_balance_power_repeat_decoded + S (a) = S ((S (ff_i_balance_power_repeat)) * ff_c_balance_power)) /\ exists ff_q_balance_power_repeat_decoded. ff_b_balance_power = ff_q_balance_power_repeat_decoded * S ((S (ff_i_balance_power_repeat)) * ff_c_balance_power) + (a)))) /\ (exists ff_u_balance_power_product ff_v_balance_power_product. ((((exists ff_h_balance_power_product_start. ff_h_balance_power_product_start + S (1) = S ((S (0)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_start. ff_u_balance_power_product = ff_q_balance_power_product_start * S ((S (0)) * ff_v_balance_power_product) + (1))) /\ ((((exists ff_h_balance_power_product_terminal. ff_h_balance_power_product_terminal + S (A) = S ((S (n)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_terminal. ff_u_balance_power_product = ff_q_balance_power_product_terminal * S ((S (n)) * ff_v_balance_power_product) + (A))) /\ forall ff_i_balance_power_product. (exists ff_lt_balance_power_product_bound. ff_lt_balance_power_product_bound + S ff_i_balance_power_product = n) -> exists ff_p_balance_power_product ff_r_balance_power_product ff_s_balance_power_product. ((((exists ff_h_balance_power_product_factor. ff_h_balance_power_product_factor + S (ff_p_balance_power_product) = S ((S (ff_i_balance_power_product)) * ff_c_balance_power)) /\ exists ff_q_balance_power_product_factor. ff_b_balance_power = ff_q_balance_power_product_factor * S ((S (ff_i_balance_power_product)) * ff_c_balance_power) + (ff_p_balance_power_product))) /\ ((((exists ff_h_balance_power_product_partial. ff_h_balance_power_product_partial + S (ff_r_balance_power_product) = S ((S (ff_i_balance_power_product)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_partial. ff_u_balance_power_product = ff_q_balance_power_product_partial * S ((S (ff_i_balance_power_product)) * ff_v_balance_power_product) + (ff_r_balance_power_product))) /\ ((((exists ff_h_balance_power_product_successor. ff_h_balance_power_product_successor + S (ff_s_balance_power_product) = S ((S (S ff_i_balance_power_product)) * ff_v_balance_power_product)) /\ exists ff_q_balance_power_product_successor. ff_u_balance_power_product = ff_q_balance_power_product_successor * S ((S (S ff_i_balance_power_product)) * ff_v_balance_power_product) + (ff_s_balance_power_product))) /\ ff_s_balance_power_product = ff_r_balance_power_product * ff_p_balance_power_product)))))))) -> (exists fsp_product_mod_left_balance_result fsp_product_mod_right_balance_result. (A * F) + p * fsp_product_mod_left_balance_result = F + p * fsp_product_mod_right_balance_result)
intro pintro nintro aintro bintro cintro Fintro Aintro hpnintro hpintro hnotdivintro hrangeintro hFintro hAhave hreindex : exists fpb_map_code_balance_reindex fpb_map_scale_balance_reindex fpb_target_code_balance_reindex fpb_target_scale_balance_reindex. ((forall fp_i_fpb_balance_reindex_data_bounded. (exists fp_gap_fpb_balance_reindex_data_bounded_index. fp_gap_fpb_balance_reindex_data_bounded_index + S fp_i_fpb_balance_reindex_data_bounded = n) -> exists fp_value_fpb_balance_reindex_data_bounded. ((((exists ff_h_fpb_balance_reindex_data_bounded_entry. ff_h_fpb_balance_reindex_data_bounded_entry + S (fp_value_fpb_balance_reindex_data_bounded) = S ((S (fp_i_fpb_balance_reindex_data_bounded)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_bounded_entry. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_bounded_entry * S ((S (fp_i_fpb_balance_reindex_data_bounded)) * fpb_map_scale_balance_reindex) + (fp_value_fpb_balance_reindex_data_bounded))) /\ (exists fp_gap_fpb_balance_reindex_data_bounded_value. fp_gap_fpb_balance_reindex_data_bounded_value + S fp_value_fpb_balance_reindex_data_bounded = n))) /\ ((forall fp_i_fpb_balance_reindex_data_injective fp_j_fpb_balance_reindex_data_injective fp_value_fpb_balance_reindex_data_injective. (exists fp_gap_fpb_balance_reindex_data_injective_i. fp_gap_fpb_balance_reindex_data_injective_i + S fp_i_fpb_balance_reindex_data_injective = n) -> (exists fp_gap_fpb_balance_reindex_data_injective_j. fp_gap_fpb_balance_reindex_data_injective_j + S fp_j_fpb_balance_reindex_data_injective = n) -> (((exists ff_h_fpb_balance_reindex_data_injective_left. ff_h_fpb_balance_reindex_data_injective_left + S (fp_value_fpb_balance_reindex_data_injective) = S ((S (fp_i_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_injective_left. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_injective_left * S ((S (fp_i_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex) + (fp_value_fpb_balance_reindex_data_injective))) -> (((exists ff_h_fpb_balance_reindex_data_injective_right. ff_h_fpb_balance_reindex_data_injective_right + S (fp_value_fpb_balance_reindex_data_injective) = S ((S (fp_j_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_injective_right. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_injective_right * S ((S (fp_j_fpb_balance_reindex_data_injective)) * fpb_map_scale_balance_reindex) + (fp_value_fpb_balance_reindex_data_injective))) -> fp_i_fpb_balance_reindex_data_injective = fp_j_fpb_balance_reindex_data_injective) /\ ((forall fpr_i_fpb_balance_reindex_data_aligned fpr_j_fpb_balance_reindex_data_aligned fpr_x_fpb_balance_reindex_data_aligned. (exists fpr_h_fpb_balance_reindex_data_aligned. fpr_h_fpb_balance_reindex_data_aligned + S fpr_i_fpb_balance_reindex_data_aligned = n) -> (((exists ff_h_fpb_balance_reindex_data_aligned_map. ff_h_fpb_balance_reindex_data_aligned_map + S (fpr_j_fpb_balance_reindex_data_aligned) = S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_map_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_aligned_map. fpb_map_code_balance_reindex = ff_q_fpb_balance_reindex_data_aligned_map * S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_map_scale_balance_reindex) + (fpr_j_fpb_balance_reindex_data_aligned))) -> (((exists ff_h_fpb_balance_reindex_data_aligned_source. ff_h_fpb_balance_reindex_data_aligned_source + S (fpr_x_fpb_balance_reindex_data_aligned) = S ((S (fpr_j_fpb_balance_reindex_data_aligned)) * c)) /\ exists ff_q_fpb_balance_reindex_data_aligned_source. b = ff_q_fpb_balance_reindex_data_aligned_source * S ((S (fpr_j_fpb_balance_reindex_data_aligned)) * c) + (fpr_x_fpb_balance_reindex_data_aligned))) -> (((exists ff_h_fpb_balance_reindex_data_aligned_target. ff_h_fpb_balance_reindex_data_aligned_target + S (fpr_x_fpb_balance_reindex_data_aligned) = S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_target_scale_balance_reindex)) /\ exists ff_q_fpb_balance_reindex_data_aligned_target. fpb_target_code_balance_reindex = ff_q_fpb_balance_reindex_data_aligned_target * S ((S (fpr_i_fpb_balance_reindex_data_aligned)) * fpb_target_scale_balance_reindex) + (fpr_x_fpb_balance_reindex_data_aligned)))) /\ (forall fsp_index_fpb_balance_reindex_data_scaled fsp_source_fpb_balance_reindex_data_scaled fsp_target_fpb_balance_reindex_data_scaled. (exists fsp_gap_fpb_balance_reindex_data_scaled. fsp_gap_fpb_balance_reindex_data_scaled + S fsp_index_fpb_balance_reindex_data_scaled = n) -> (((exists fsp_source_height_fpb_balance_reindex_data_scaled. fsp_source_height_fpb_balance_reindex_data_scaled + S (fsp_source_fpb_balance_reindex_data_scaled) = S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * c)) /\ exists fsp_source_quotient_fpb_balance_reindex_data_scaled. b = fsp_source_quotient_fpb_balance_reindex_data_scaled * S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * c) + (fsp_source_fpb_balance_reindex_data_scaled))) -> (((exists fsp_target_height_fpb_balance_reindex_data_scaled. fsp_target_height_fpb_balance_reindex_data_scaled + S (fsp_target_fpb_balance_reindex_data_scaled) = S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * fpb_target_scale_balance_reindex)) /\ exists fsp_target_quotient_fpb_balance_reindex_data_scaled. fpb_target_code_balance_reindex = fsp_target_quotient_fpb_balance_reindex_data_scaled * S ((S (fsp_index_fpb_balance_reindex_data_scaled)) * fpb_target_scale_balance_reindex) + (fsp_target_fpb_balance_reindex_data_scaled))) -> (exists fsp_mod_left_fpb_balance_reindex_data_scaled fsp_mod_right_fpb_balance_reindex_data_scaled. a * fsp_source_fpb_balance_reindex_data_scaled + p * fsp_mod_left_fpb_balance_reindex_data_scaled = fsp_target_fpb_balance_reindex_data_scaled + p * fsp_mod_right_fpb_balance_reindex_data_scaled)))))specialize prime_mul_residue_reindex_exists pspecialize prime_mul_residue_reindex_exists nspecialize prime_mul_residue_reindex_exists aspecialize prime_mul_residue_reindex_exists bspecialize prime_mul_residue_reindex_exists capply prime_mul_residue_reindex_existsexact hpnexact hpexact hnotdivexact hrangecases hreindexcases hreindex_witnesscases hreindex_witness_witnesscases hreindex_witness_witness_witnesscases hreindex_witness_witness_witness_witnesscases hreindex_witness_witness_witness_witness_rightcases hreindex_witness_witness_witness_witness_right_righthave htarget_product_exists : exists Q. (exists ff_u_balance_target_exists ff_v_balance_target_exists. ((((exists ff_h_balance_target_exists_start. ff_h_balance_target_exists_start + S (1) = S ((S (0)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_start. ff_u_balance_target_exists = ff_q_balance_target_exists_start * S ((S (0)) * ff_v_balance_target_exists) + (1))) /\ ((((exists ff_h_balance_target_exists_terminal. ff_h_balance_target_exists_terminal + S (Q) = S ((S (n)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_terminal. ff_u_balance_target_exists = ff_q_balance_target_exists_terminal * S ((S (n)) * ff_v_balance_target_exists) + (Q))) /\ forall ff_i_balance_target_exists. (exists ff_lt_balance_target_exists_bound. ff_lt_balance_target_exists_bound + S ff_i_balance_target_exists = n) -> exists ff_p_balance_target_exists ff_r_balance_target_exists ff_s_balance_target_exists. ((((exists ff_h_balance_target_exists_factor. ff_h_balance_target_exists_factor + S (ff_p_balance_target_exists) = S ((S (ff_i_balance_target_exists)) * x3)) /\ exists ff_q_balance_target_exists_factor. x2 = ff_q_balance_target_exists_factor * S ((S (ff_i_balance_target_exists)) * x3) + (ff_p_balance_target_exists))) /\ ((((exists ff_h_balance_target_exists_partial. ff_h_balance_target_exists_partial + S (ff_r_balance_target_exists) = S ((S (ff_i_balance_target_exists)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_partial. ff_u_balance_target_exists = ff_q_balance_target_exists_partial * S ((S (ff_i_balance_target_exists)) * ff_v_balance_target_exists) + (ff_r_balance_target_exists))) /\ ((((exists ff_h_balance_target_exists_successor. ff_h_balance_target_exists_successor + S (ff_s_balance_target_exists) = S ((S (S ff_i_balance_target_exists)) * ff_v_balance_target_exists)) /\ exists ff_q_balance_target_exists_successor. ff_u_balance_target_exists = ff_q_balance_target_exists_successor * S ((S (S ff_i_balance_target_exists)) * ff_v_balance_target_exists) + (ff_s_balance_target_exists))) /\ ff_s_balance_target_exists = ff_r_balance_target_exists * ff_p_balance_target_exists))))))specialize beta_product_exists x2specialize beta_product_exists x3specialize beta_product_exists nexact beta_product_existscases htarget_product_existshave hFQ : F = x4specialize beta_product_permutation_invariant nspecialize beta_product_permutation_invariant xspecialize beta_product_permutation_invariant x1specialize beta_product_permutation_invariant bspecialize beta_product_permutation_invariant cspecialize beta_product_permutation_invariant x2specialize beta_product_permutation_invariant x3specialize beta_product_permutation_invariant Fspecialize beta_product_permutation_invariant x4apply beta_product_permutation_invariantexact hreindex_witness_witness_witness_witness_leftexact hreindex_witness_witness_witness_witness_right_leftexact hreindex_witness_witness_witness_witness_right_right_leftexact hFexact htarget_product_exists_witnesshave hscale : exists fsp_product_mod_left_balance_scaled_product fsp_product_mod_right_balance_scaled_product. (A * F) + p * fsp_product_mod_left_balance_scaled_product = x4 + p * fsp_product_mod_right_balance_scaled_productspecialize beta_product_pointwise_scale_mod pspecialize beta_product_pointwise_scale_mod aspecialize beta_product_pointwise_scale_mod bspecialize beta_product_pointwise_scale_mod cspecialize beta_product_pointwise_scale_mod x2specialize beta_product_pointwise_scale_mod x3specialize beta_product_pointwise_scale_mod nspecialize beta_product_pointwise_scale_mod Fspecialize beta_product_pointwise_scale_mod x4specialize beta_product_pointwise_scale_mod Aapply beta_product_pointwise_scale_modexact hreindex_witness_witness_witness_witness_right_right_rightexact hFexact htarget_product_exists_witnessexact hArewrite <- hFQ at hscaleexact hscale
prime_range_product_coprime · unchanged support, not a new admission
forall p n b c F. p = S n -> ((~(p = 1) /\ forall frp_prime_left_prime_p frp_prime_right_prime_p. p = frp_prime_left_prime_p * frp_prime_right_prime_p -> frp_prime_left_prime_p = 1 \/ frp_prime_right_prime_p = 1)) -> (forall ff_i_frp_range_prime_range. (exists ff_lt_frp_range_prime_range_bound. ff_lt_frp_range_prime_range_bound + S ff_i_frp_range_prime_range = n) -> (((exists ff_h_frp_range_prime_range_decoded. ff_h_frp_range_prime_range_decoded + S (1 + ff_i_frp_range_prime_range) = S ((S (ff_i_frp_range_prime_range)) * c)) /\ exists ff_q_frp_range_prime_range_decoded. b = ff_q_frp_range_prime_range_decoded * S ((S (ff_i_frp_range_prime_range)) * c) + (1 + ff_i_frp_range_prime_range)))) -> (exists ff_u_prime_product ff_v_prime_product. ((((exists ff_h_prime_product_start. ff_h_prime_product_start + S (1) = S ((S (0)) * ff_v_prime_product)) /\ exists ff_q_prime_product_start. ff_u_prime_product = ff_q_prime_product_start * S ((S (0)) * ff_v_prime_product) + (1))) /\ ((((exists ff_h_prime_product_terminal. ff_h_prime_product_terminal + S (F) = S ((S (n)) * ff_v_prime_product)) /\ exists ff_q_prime_product_terminal. ff_u_prime_product = ff_q_prime_product_terminal * S ((S (n)) * ff_v_prime_product) + (F))) /\ forall ff_i_prime_product. (exists ff_lt_prime_product_bound. ff_lt_prime_product_bound + S ff_i_prime_product = n) -> exists ff_p_prime_product ff_r_prime_product ff_s_prime_product. ((((exists ff_h_prime_product_factor. ff_h_prime_product_factor + S (ff_p_prime_product) = S ((S (ff_i_prime_product)) * c)) /\ exists ff_q_prime_product_factor. b = ff_q_prime_product_factor * S ((S (ff_i_prime_product)) * c) + (ff_p_prime_product))) /\ ((((exists ff_h_prime_product_partial. ff_h_prime_product_partial + S (ff_r_prime_product) = S ((S (ff_i_prime_product)) * ff_v_prime_product)) /\ exists ff_q_prime_product_partial. ff_u_prime_product = ff_q_prime_product_partial * S ((S (ff_i_prime_product)) * ff_v_prime_product) + (ff_r_prime_product))) /\ ((((exists ff_h_prime_product_successor. ff_h_prime_product_successor + S (ff_s_prime_product) = S ((S (S ff_i_prime_product)) * ff_v_prime_product)) /\ exists ff_q_prime_product_successor. ff_u_prime_product = ff_q_prime_product_successor * S ((S (S ff_i_prime_product)) * ff_v_prime_product) + (ff_s_prime_product))) /\ ff_s_prime_product = ff_r_prime_product * ff_p_prime_product)))))) -> (forall frp_divisor_prime_product_result. (exists frp_left_factor_prime_product_result. F = frp_divisor_prime_product_result * frp_left_factor_prime_product_result) -> (exists frp_right_factor_prime_product_result. p = frp_divisor_prime_product_result * frp_right_factor_prime_product_result) -> frp_divisor_prime_product_result = 1)
intro pintro nintro bintro cintro Fintro hpnintro hpintro hrangeintro hproducthave hpointwise : forall frp_index_prime_pointwise frp_factor_prime_pointwise. (exists frp_gap_prime_pointwise_bound. frp_gap_prime_pointwise_bound + S frp_index_prime_pointwise = n) -> (((exists ff_h_frp_prime_pointwise_decoded. ff_h_frp_prime_pointwise_decoded + S (frp_factor_prime_pointwise) = S ((S (frp_index_prime_pointwise)) * c)) /\ exists ff_q_frp_prime_pointwise_decoded. b = ff_q_frp_prime_pointwise_decoded * S ((S (frp_index_prime_pointwise)) * c) + (frp_factor_prime_pointwise))) -> (forall frp_divisor_prime_pointwise_coprime. (exists frp_left_factor_prime_pointwise_coprime. frp_factor_prime_pointwise = frp_divisor_prime_pointwise_coprime * frp_left_factor_prime_pointwise_coprime) -> (exists frp_right_factor_prime_pointwise_coprime. p = frp_divisor_prime_pointwise_coprime * frp_right_factor_prime_pointwise_coprime) -> frp_divisor_prime_pointwise_coprime = 1)intro iintro xintro hiintro hxhave hvalue : x = S ispecialize beta_range_one_entry_eq_succ bspecialize beta_range_one_entry_eq_succ cspecialize beta_range_one_entry_eq_succ nspecialize beta_range_one_entry_eq_succ ispecialize beta_range_one_entry_eq_succ xapply beta_range_one_entry_eq_succexact hrangeexact hiexact hxhave hx0 : ~(x = 0)intro hxzerospecialize succ_ne_zero iapply succ_ne_zerotrans xsymmexact hvalueexact hxzerohave hxltp : exists h. h + S x = prewrite hvaluerewrite hpnspecialize succ_le_succ (S i)specialize succ_le_succ napply succ_le_succexact hihave hnotdiv : ~(exists k. x = p * k)intro hdivhave hle : exists k. k + p = xspecialize divisor_le_nonzero pspecialize divisor_le_nonzero xapply divisor_le_nonzeroexact hx0exact hdivspecialize lt_not_le xspecialize lt_not_le papply lt_not_leexact hxltpexact hlehave hpx : forall frp_divisor_prime_factor. (exists frp_left_factor_prime_factor. p = frp_divisor_prime_factor * frp_left_factor_prime_factor) -> (exists frp_right_factor_prime_factor. x = frp_divisor_prime_factor * frp_right_factor_prime_factor) -> frp_divisor_prime_factor = 1specialize prime_not_divides_coprime pspecialize prime_not_divides_coprime xapply prime_not_divides_coprimeexact hpexact hnotdivspecialize coprime_symm pspecialize coprime_symm xapply coprime_symmexact hpxspecialize beta_product_pointwise_coprime pspecialize beta_product_pointwise_coprime bspecialize beta_product_pointwise_coprime cspecialize beta_product_pointwise_coprime nspecialize beta_product_pointwise_coprime Fapply beta_product_pointwise_coprimeexact hpointwiseexact hproduct
fermat_predecessor_exponent_mod_one · unchanged support, not a new admission
forall p n a A. p = S n -> ((~(p = 1) /\ forall frm_prime_left_predecessor_prime frm_prime_right_predecessor_prime. p = frm_prime_left_predecessor_prime * frm_prime_right_predecessor_prime -> frm_prime_left_predecessor_prime = 1 \/ frm_prime_right_predecessor_prime = 1)) -> (~(exists frm_factor_predecessor_multiplier. a = p * frm_factor_predecessor_multiplier)) -> (exists ff_b_predecessor_power ff_c_predecessor_power. ((forall ff_i_predecessor_power_repeat. (exists ff_lt_predecessor_power_repeat_bound. ff_lt_predecessor_power_repeat_bound + S ff_i_predecessor_power_repeat = n) -> (((exists ff_h_predecessor_power_repeat_decoded. ff_h_predecessor_power_repeat_decoded + S (a) = S ((S (ff_i_predecessor_power_repeat)) * ff_c_predecessor_power)) /\ exists ff_q_predecessor_power_repeat_decoded. ff_b_predecessor_power = ff_q_predecessor_power_repeat_decoded * S ((S (ff_i_predecessor_power_repeat)) * ff_c_predecessor_power) + (a)))) /\ (exists ff_u_predecessor_power_product ff_v_predecessor_power_product. ((((exists ff_h_predecessor_power_product_start. ff_h_predecessor_power_product_start + S (1) = S ((S (0)) * ff_v_predecessor_power_product)) /\ exists ff_q_predecessor_power_product_start. ff_u_predecessor_power_product = ff_q_predecessor_power_product_start * S ((S (0)) * ff_v_predecessor_power_product) + (1))) /\ ((((exists ff_h_predecessor_power_product_terminal. ff_h_predecessor_power_product_terminal + S (A) = S ((S (n)) * ff_v_predecessor_power_product)) /\ exists ff_q_predecessor_power_product_terminal. ff_u_predecessor_power_product = ff_q_predecessor_power_product_terminal * S ((S (n)) * ff_v_predecessor_power_product) + (A))) /\ forall ff_i_predecessor_power_product. (exists ff_lt_predecessor_power_product_bound. ff_lt_predecessor_power_product_bound + S ff_i_predecessor_power_product = n) -> exists ff_p_predecessor_power_product ff_r_predecessor_power_product ff_s_predecessor_power_product. ((((exists ff_h_predecessor_power_product_factor. ff_h_predecessor_power_product_factor + S (ff_p_predecessor_power_product) = S ((S (ff_i_predecessor_power_product)) * ff_c_predecessor_power)) /\ exists ff_q_predecessor_power_product_factor. ff_b_predecessor_power = ff_q_predecessor_power_product_factor * S ((S (ff_i_predecessor_power_product)) * ff_c_predecessor_power) + (ff_p_predecessor_power_product))) /\ ((((exists ff_h_predecessor_power_product_partial. ff_h_predecessor_power_product_partial + S (ff_r_predecessor_power_product) = S ((S (ff_i_predecessor_power_product)) * ff_v_predecessor_power_product)) /\ exists ff_q_predecessor_power_product_partial. ff_u_predecessor_power_product = ff_q_predecessor_power_product_partial * S ((S (ff_i_predecessor_power_product)) * ff_v_predecessor_power_product) + (ff_r_predecessor_power_product))) /\ ((((exists ff_h_predecessor_power_product_successor. ff_h_predecessor_power_product_successor + S (ff_s_predecessor_power_product) = S ((S (S ff_i_predecessor_power_product)) * ff_v_predecessor_power_product)) /\ exists ff_q_predecessor_power_product_successor. ff_u_predecessor_power_product = ff_q_predecessor_power_product_successor * S ((S (S ff_i_predecessor_power_product)) * ff_v_predecessor_power_product) + (ff_s_predecessor_power_product))) /\ ff_s_predecessor_power_product = ff_r_predecessor_power_product * ff_p_predecessor_power_product)))))))) -> (exists fep_mod_left_predecessor_result fep_mod_right_predecessor_result. A + p * fep_mod_left_predecessor_result = 1 + p * fep_mod_right_predecessor_result)
intro pintro nintro aintro Aintro hpnintro hpintro hnotdivintro hAspecialize factorial_exists ncases factorial_existscases factorial_exists_witnesscases factorial_exists_witness_witnesscases factorial_exists_witness_witness_witnesshave hbalance : exists fsp_product_mod_left_predecessor_balance fsp_product_mod_right_predecessor_balance. (A * x) + p * fsp_product_mod_left_predecessor_balance = x + p * fsp_product_mod_right_predecessor_balancespecialize prime_mul_residue_product_balance pspecialize prime_mul_residue_product_balance nspecialize prime_mul_residue_product_balance aspecialize prime_mul_residue_product_balance x1specialize prime_mul_residue_product_balance x2specialize prime_mul_residue_product_balance xspecialize prime_mul_residue_product_balance Aapply prime_mul_residue_product_balanceexact hpnexact hpexact hnotdivexact factorial_exists_witness_witness_witness_leftexact factorial_exists_witness_witness_witness_rightexact hAhave hcop : forall frp_divisor_predecessor_coprime. (exists frp_left_factor_predecessor_coprime. x = frp_divisor_predecessor_coprime * frp_left_factor_predecessor_coprime) -> (exists frp_right_factor_predecessor_coprime. p = frp_divisor_predecessor_coprime * frp_right_factor_predecessor_coprime) -> frp_divisor_predecessor_coprime = 1specialize prime_range_product_coprime pspecialize prime_range_product_coprime nspecialize prime_range_product_coprime x1specialize prime_range_product_coprime x2specialize prime_range_product_coprime xapply prime_range_product_coprimeexact hpnexact hpexact factorial_exists_witness_witness_witness_leftexact factorial_exists_witness_witness_witness_righthave hp0 : ~(p = 0)intro hpzerospecialize prime_nonzero papply prime_nonzeroexact hpexact hpzerohave hscaled : exists fep_product_mod_left_predecessor_normalized fep_product_mod_right_predecessor_normalized. (x * A) + p * fep_product_mod_left_predecessor_normalized = (x * 1) + p * fep_product_mod_right_predecessor_normalizedcases hbalancecases hbalance_witnessexists x3exists x4trans (A * x) + p * x3congrapply mul_commrefltrans x + p * x4exact hbalance_witness_witnesscongrsymmapply mul_onereflspecialize mod_eq_cancel_coprime pspecialize mod_eq_cancel_coprime xspecialize mod_eq_cancel_coprime Aspecialize mod_eq_cancel_coprime 1apply mod_eq_cancel_coprimeexact hp0exact hcopexact hscaled
mod_eq_unscale_nonzero · unchanged support, not a new admission
forall k m a b. ~(k = 0) -> (exists hgcrt_mod_left_unscale_source hgcrt_mod_right_unscale_source. (k * a) + (k * m) * hgcrt_mod_left_unscale_source = (k * b) + (k * m) * hgcrt_mod_right_unscale_source) -> (exists hgcrt_mod_left_unscale_result hgcrt_mod_right_unscale_result. a + m * hgcrt_mod_left_unscale_result = b + m * hgcrt_mod_right_unscale_result)
intro kintro mintro aintro bintro hkintro hcases hcases h_witnesshave hscaled : k * (a + m * x) = k * (b + m * x1)trans k * a + k * (m * x)apply mul_addtrans k * a + (k * m) * xcongrreflsymmapply mul_assoctrans k * b + (k * m) * x1exact h_witness_witnesstrans k * b + k * (m * x1)congrreflapply mul_assocsymmapply mul_addhave hab : a + m * x = b + m * x1specialize mul_left_cancel_nonzero kspecialize mul_left_cancel_nonzero (a + m * x)specialize mul_left_cancel_nonzero (b + m * x1)apply mul_left_cancel_nonzeroexact hkexact hscaledexists xexists x1exact hab
linear_congruence_zero_residue_divides · unchanged support, not a new admission
forall d n. (exists hgcrt_mod_left_linear_zero_residue hgcrt_mod_right_linear_zero_residue. n + d * hgcrt_mod_left_linear_zero_residue = 0 + d * hgcrt_mod_right_linear_zero_residue) -> (exists linear_quotient_zero_result. (n) = (d) * linear_quotient_zero_result)
intro dintro nintro hmodcases hmodcases hmod_witnessspecialize factor_difference dspecialize factor_difference x1specialize factor_difference xspecialize factor_difference napply factor_differencetrans 0 + d * x1symmapply zero_addtrans n + d * xsymmexact hmod_witness_witnessapply add_comm
linear_congruence_gcd_divisibility_constructs_solution · unchanged support, not a new admission
forall a m b g. ((((exists hag_left_factor_linear_sufficiency. a = g * hag_left_factor_linear_sufficiency) /\ (exists hag_right_factor_linear_sufficiency. m = g * hag_right_factor_linear_sufficiency)) /\ forall hag_divisor_linear_sufficiency. (exists hag_common_left_linear_sufficiency. a = hag_divisor_linear_sufficiency * hag_common_left_linear_sufficiency) -> (exists hag_common_right_linear_sufficiency. m = hag_divisor_linear_sufficiency * hag_common_right_linear_sufficiency) -> exists hag_greatest_factor_linear_sufficiency. g = hag_divisor_linear_sufficiency * hag_greatest_factor_linear_sufficiency)) -> (exists linear_quotient_sufficiency. (b) = (g) * linear_quotient_sufficiency) -> exists x. (exists hgcrt_mod_left_linear_sufficiency_result hgcrt_mod_right_linear_sufficiency_result. (a * x) + m * hgcrt_mod_left_linear_sufficiency_result = b + m * hgcrt_mod_right_linear_sufficiency_result)
intro aintro mintro bintro gintro hgcdintro hdivideshave hreverse : exists hgcrt_mod_left_linear_sufficiency_reverse hgcrt_mod_right_linear_sufficiency_reverse. b + g * hgcrt_mod_left_linear_sufficiency_reverse = 0 + g * hgcrt_mod_right_linear_sufficiency_reversespecialize dvd_to_mod_zero gspecialize dvd_to_mod_zero bapply dvd_to_mod_zeroexact hdivideshave hcompatibility : exists hgcrt_mod_left_linear_sufficiency_compatibility hgcrt_mod_right_linear_sufficiency_compatibility. 0 + g * hgcrt_mod_left_linear_sufficiency_compatibility = b + g * hgcrt_mod_right_linear_sufficiency_compatibilityspecialize mod_eq_symm gspecialize mod_eq_symm bspecialize mod_eq_symm 0apply mod_eq_symmexact hreversehave hcrt : exists y. ((exists hgcrt_mod_left_linear_sufficiency_first hgcrt_mod_right_linear_sufficiency_first. y + a * hgcrt_mod_left_linear_sufficiency_first = 0 + a * hgcrt_mod_right_linear_sufficiency_first) /\ (exists hgcrt_mod_left_linear_sufficiency_second hgcrt_mod_right_linear_sufficiency_second. y + m * hgcrt_mod_left_linear_sufficiency_second = b + m * hgcrt_mod_right_linear_sufficiency_second))specialize generalized_binary_crt_sufficient gspecialize generalized_binary_crt_sufficient aspecialize generalized_binary_crt_sufficient mspecialize generalized_binary_crt_sufficient 0specialize generalized_binary_crt_sufficient bapply generalized_binary_crt_sufficientexact hgcdexact hcompatibilitycases hcrtcases hcrt_witnesshave hmultiple : exists q. x = a * qspecialize linear_congruence_zero_residue_divides aspecialize linear_congruence_zero_residue_divides xapply linear_congruence_zero_residue_dividesexact hcrt_witness_leftcases hmultipleexists x1rewrite <- hmultiple_witnessexact hcrt_witness_right
crt_mod_one_universal · unchanged support, not a new admission
forall a b. (exists hgcrt_mod_left_gcrt_gcomp_one hgcrt_mod_right_gcrt_gcomp_one. a + 1 * hgcrt_mod_left_gcrt_gcomp_one = b + 1 * hgcrt_mod_right_gcrt_gcomp_one)
intro aintro bexists bexists atrans a + bcongrreflapply one_multrans b + aapply add_commcongrreflsymmapply one_mul
finite_add_le_add · unchanged support, not a new admission
forall a b c d. (exists fms_gap_le. fms_gap_le + (a) = (b)) -> (exists fms_gap_le. fms_gap_le + (c) = (d)) -> (exists fms_gap_le. fms_gap_le + (a+c) = (b+d))
intro aintro bintro cintro dintro habintro hcdspecialize le_trans a+cspecialize le_trans b+cspecialize le_trans b+dapply le_transspecialize add_le_add_right aspecialize add_le_add_right bspecialize add_le_add_right capply add_le_add_rightexact habspecialize add_le_add_left cspecialize add_le_add_left dspecialize add_le_add_left bapply add_le_add_leftexact hcd
finite_add_lt_of_lt_of_le · unchanged support, not a new admission
forall a b c d. (exists fms_gap_lt. fms_gap_lt + S (a) = (b)) -> (exists fms_gap_le. fms_gap_le + (c) = (d)) -> (exists fms_gap_lt. fms_gap_lt + S (a+c) = (b+d))
intro aintro bintro cintro dintro habintro hcdhave ht : exists fms_gap_le. fms_gap_le + ((S a)+c) = (b+d)specialize finite_add_le_add S aspecialize finite_add_le_add bspecialize finite_add_le_add cspecialize finite_add_le_add dapply finite_add_le_addexact habexact hcdhave he : (S a)+c=S(a+c)specialize add_succ_left aspecialize add_succ_left capply add_succ_leftrewrite he at htexact ht