JT0050

jordan_enumeration_index_map_exists

Finite induction constructs an actual beta map for every source prefix, with no finite-choice axiom.

Alpha v35 checked-use · first admitted v35 · independently kernel and Lean verified; not Stable

95 new Alpha admissions come from 96 source lemmas: tuple equality reflexivity reuses an already-admitted theorem and is not counted twice. All counts use actual finite beta-coded enumerations. G008 multiplicativity is proved; the general prime-power count and distinct-prime product formula are further goals. General prime-power fields (G091) remain open. Stable is unchanged.

Exact theorem in conservative defined notation

∀ q. ∀ k. ∀ n. ∀ A. ∀ B. ∀ C. ∀ D. ∀ u. ∀ E. ∀ F. ∀ G. ∀ H. ∀ v. JordanTupleEnumeration(k,n,A,B,C,D,u) → JordanTupleEnumeration(k,n,E,F,G,H,v) → Le(q,u) → ∃ x. ∃ y. ∀ z. Lt(z,q) → ∃ m. BetaAt(x,y,z,m) ∧ (Lt(m,v) ∧ (∀ i. ∀ j. ∀ w. ∀ x0. BetaAt(A,B,z,i) ∧ BetaAt(C,D,z,j) → BetaAt(E,F,m,w) ∧ BetaAt(G,H,m,x0) → IntegerVectorZero(i,j,w,x0,k)))

Every linked abbreviation expands hygienically to the identical original native formula.

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall q k n A B C D u E F G H v. (((forall jt_i_exists_source. (exists jt_gap_exists_sourcesoundindex. jt_gap_exists_sourcesoundindex+S (jt_i_exists_source)=(u)) -> exists jt_b_exists_source jt_c_exists_source. ((((((exists fs_h_jt_exists_sourcesoundcode. fs_h_jt_exists_sourcesoundcode + S (jt_b_exists_source) = S ((S (jt_i_exists_source)) * B)) /\ exists fs_q_jt_exists_sourcesoundcode. A = fs_q_jt_exists_sourcesoundcode * S ((S (jt_i_exists_source)) * B) + (jt_b_exists_source))) /\ (((exists fs_h_jt_exists_sourcesoundscale. fs_h_jt_exists_sourcesoundscale + S (jt_c_exists_source) = S ((S (jt_i_exists_source)) * D)) /\ exists fs_q_jt_exists_sourcesoundscale. C = fs_q_jt_exists_sourcesoundscale * S ((S (jt_i_exists_source)) * D) + (jt_c_exists_source))))) /\ (((forall jt_index_exists_sourcebound. (exists jt_gap_exists_sourceboundindex. jt_gap_exists_sourceboundindex+S (jt_index_exists_sourcebound)=(k)) -> exists jt_value_exists_sourcebound. ((((exists fs_h_jt_exists_sourceboundat. fs_h_jt_exists_sourceboundat + S (jt_value_exists_sourcebound) = S ((S (jt_index_exists_sourcebound)) * jt_c_exists_source)) /\ exists fs_q_jt_exists_sourceboundat. jt_b_exists_source = fs_q_jt_exists_sourceboundat * S ((S (jt_index_exists_sourcebound)) * jt_c_exists_source) + (jt_value_exists_sourcebound))) /\ (exists jt_gap_exists_sourceboundvalue. jt_gap_exists_sourceboundvalue+S (jt_value_exists_sourcebound)=(n)))) /\ (forall jt_divisor_exists_sourceprimitive. (exists jt_factor_exists_sourceprimitivemodulus. (n)=(jt_divisor_exists_sourceprimitive)*jt_factor_exists_sourceprimitivemodulus) -> (forall jt_index_exists_sourceprimitivecoordinates jt_value_exists_sourceprimitivecoordinates. (exists jt_gap_exists_sourceprimitivecoordinatesindex. jt_gap_exists_sourceprimitivecoordinatesindex+S (jt_index_exists_sourceprimitivecoordinates)=(k)) -> (((exists fs_h_jt_exists_sourceprimitivecoordinatesat. fs_h_jt_exists_sourceprimitivecoordinatesat + S (jt_value_exists_sourceprimitivecoordinates) = S ((S (jt_index_exists_sourceprimitivecoordinates)) * jt_c_exists_source)) /\ exists fs_q_jt_exists_sourceprimitivecoordinatesat. jt_b_exists_source = fs_q_jt_exists_sourceprimitivecoordinatesat * S ((S (jt_index_exists_sourceprimitivecoordinates)) * jt_c_exists_source) + (jt_value_exists_sourceprimitivecoordinates))) -> (exists jt_factor_exists_sourceprimitivecoordinatesdivides. (jt_value_exists_sourceprimitivecoordinates)=(jt_divisor_exists_sourceprimitive)*jt_factor_exists_sourceprimitivecoordinatesdivides)) -> jt_divisor_exists_sourceprimitive=1))))) /\ (((forall jt_b_exists_source jt_c_exists_source. (forall jt_index_exists_sourceinputbound. (exists jt_gap_exists_sourceinputboundindex. jt_gap_exists_sourceinputboundindex+S (jt_index_exists_sourceinputbound)=(k)) -> exists jt_value_exists_sourceinputbound. ((((exists fs_h_jt_exists_sourceinputboundat. fs_h_jt_exists_sourceinputboundat + S (jt_value_exists_sourceinputbound) = S ((S (jt_index_exists_sourceinputbound)) * jt_c_exists_source)) /\ exists fs_q_jt_exists_sourceinputboundat. jt_b_exists_source = fs_q_jt_exists_sourceinputboundat * S ((S (jt_index_exists_sourceinputbound)) * jt_c_exists_source) + (jt_value_exists_sourceinputbound))) /\ (exists jt_gap_exists_sourceinputboundvalue. jt_gap_exists_sourceinputboundvalue+S (jt_value_exists_sourceinputbound)=(n)))) -> (forall jt_divisor_exists_sourceinputprimitive. (exists jt_factor_exists_sourceinputprimitivemodulus. (n)=(jt_divisor_exists_sourceinputprimitive)*jt_factor_exists_sourceinputprimitivemodulus) -> (forall jt_index_exists_sourceinputprimitivecoordinates jt_value_exists_sourceinputprimitivecoordinates. (exists jt_gap_exists_sourceinputprimitivecoordinatesindex. jt_gap_exists_sourceinputprimitivecoordinatesindex+S (jt_index_exists_sourceinputprimitivecoordinates)=(k)) -> (((exists fs_h_jt_exists_sourceinputprimitivecoordinatesat. fs_h_jt_exists_sourceinputprimitivecoordinatesat + S (jt_value_exists_sourceinputprimitivecoordinates) = S ((S (jt_index_exists_sourceinputprimitivecoordinates)) * jt_c_exists_source)) /\ exists fs_q_jt_exists_sourceinputprimitivecoordinatesat. jt_b_exists_source = fs_q_jt_exists_sourceinputprimitivecoordinatesat * S ((S (jt_index_exists_sourceinputprimitivecoordinates)) * jt_c_exists_source) + (jt_value_exists_sourceinputprimitivecoordinates))) -> (exists jt_factor_exists_sourceinputprimitivecoordinatesdivides. (jt_value_exists_sourceinputprimitivecoordinates)=(jt_divisor_exists_sourceinputprimitive)*jt_factor_exists_sourceinputprimitivecoordinatesdivides)) -> jt_divisor_exists_sourceinputprimitive=1) -> exists jt_i_exists_source jt_d_exists_source jt_e_exists_source. ((exists jt_gap_exists_sourcecompleteindex. jt_gap_exists_sourcecompleteindex+S (jt_i_exists_source)=(u)) /\ (((((((exists fs_h_jt_exists_sourcecompletecode. fs_h_jt_exists_sourcecompletecode + S (jt_d_exists_source) = S ((S (jt_i_exists_source)) * B)) /\ exists fs_q_jt_exists_sourcecompletecode. A = fs_q_jt_exists_sourcecompletecode * S ((S (jt_i_exists_source)) * B) + (jt_d_exists_source))) /\ (((exists fs_h_jt_exists_sourcecompletescale. fs_h_jt_exists_sourcecompletescale + S (jt_e_exists_source) = S ((S (jt_i_exists_source)) * D)) /\ exists fs_q_jt_exists_sourcecompletescale. C = fs_q_jt_exists_sourcecompletescale * S ((S (jt_i_exists_source)) * D) + (jt_e_exists_source))))) /\ (forall jt_index_exists_sourcerepresented jt_left_exists_sourcerepresented jt_right_exists_sourcerepresented. (exists jt_gap_exists_sourcerepresentedindex. jt_gap_exists_sourcerepresentedindex+S (jt_index_exists_sourcerepresented)=(k)) -> (((exists fs_h_jt_exists_sourcerepresentedleft. fs_h_jt_exists_sourcerepresentedleft + S (jt_left_exists_sourcerepresented) = S ((S (jt_index_exists_sourcerepresented)) * jt_c_exists_source)) /\ exists fs_q_jt_exists_sourcerepresentedleft. jt_b_exists_source = fs_q_jt_exists_sourcerepresentedleft * S ((S (jt_index_exists_sourcerepresented)) * jt_c_exists_source) + (jt_left_exists_sourcerepresented))) -> (((exists fs_h_jt_exists_sourcerepresentedright. fs_h_jt_exists_sourcerepresentedright + S (jt_right_exists_sourcerepresented) = S ((S (jt_index_exists_sourcerepresented)) * jt_e_exists_source)) /\ exists fs_q_jt_exists_sourcerepresentedright. jt_d_exists_source = fs_q_jt_exists_sourcerepresentedright * S ((S (jt_index_exists_sourcerepresented)) * jt_e_exists_source) + (jt_right_exists_sourcerepresented))) -> jt_left_exists_sourcerepresented=jt_right_exists_sourcerepresented))))) /\ (forall jt_i_exists_source jt_h_exists_source jt_b_exists_source jt_c_exists_source jt_d_exists_source jt_e_exists_source. (exists jt_gap_exists_sourcefirstindex. jt_gap_exists_sourcefirstindex+S (jt_i_exists_source)=(u)) -> (exists jt_gap_exists_sourcesecondindex. jt_gap_exists_sourcesecondindex+S (jt_h_exists_source)=(u)) -> (((((exists fs_h_jt_exists_sourcefirstcode. fs_h_jt_exists_sourcefirstcode + S (jt_b_exists_source) = S ((S (jt_i_exists_source)) * B)) /\ exists fs_q_jt_exists_sourcefirstcode. A = fs_q_jt_exists_sourcefirstcode * S ((S (jt_i_exists_source)) * B) + (jt_b_exists_source))) /\ (((exists fs_h_jt_exists_sourcefirstscale. fs_h_jt_exists_sourcefirstscale + S (jt_c_exists_source) = S ((S (jt_i_exists_source)) * D)) /\ exists fs_q_jt_exists_sourcefirstscale. C = fs_q_jt_exists_sourcefirstscale * S ((S (jt_i_exists_source)) * D) + (jt_c_exists_source))))) -> (((((exists fs_h_jt_exists_sourcesecondcode. fs_h_jt_exists_sourcesecondcode + S (jt_d_exists_source) = S ((S (jt_h_exists_source)) * B)) /\ exists fs_q_jt_exists_sourcesecondcode. A = fs_q_jt_exists_sourcesecondcode * S ((S (jt_h_exists_source)) * B) + (jt_d_exists_source))) /\ (((exists fs_h_jt_exists_sourcesecondscale. fs_h_jt_exists_sourcesecondscale + S (jt_e_exists_source) = S ((S (jt_h_exists_source)) * D)) /\ exists fs_q_jt_exists_sourcesecondscale. C = fs_q_jt_exists_sourcesecondscale * S ((S (jt_h_exists_source)) * D) + (jt_e_exists_source))))) -> (forall jt_index_exists_sourcesame jt_left_exists_sourcesame jt_right_exists_sourcesame. (exists jt_gap_exists_sourcesameindex. jt_gap_exists_sourcesameindex+S (jt_index_exists_sourcesame)=(k)) -> (((exists fs_h_jt_exists_sourcesameleft. fs_h_jt_exists_sourcesameleft + S (jt_left_exists_sourcesame) = S ((S (jt_index_exists_sourcesame)) * jt_c_exists_source)) /\ exists fs_q_jt_exists_sourcesameleft. jt_b_exists_source = fs_q_jt_exists_sourcesameleft * S ((S (jt_index_exists_sourcesame)) * jt_c_exists_source) + (jt_left_exists_sourcesame))) -> (((exists fs_h_jt_exists_sourcesameright. fs_h_jt_exists_sourcesameright + S (jt_right_exists_sourcesame) = S ((S (jt_index_exists_sourcesame)) * jt_e_exists_source)) /\ exists fs_q_jt_exists_sourcesameright. jt_d_exists_source = fs_q_jt_exists_sourcesameright * S ((S (jt_index_exists_sourcesame)) * jt_e_exists_source) + (jt_right_exists_sourcesame))) -> jt_left_exists_sourcesame=jt_right_exists_sourcesame) -> jt_i_exists_source=jt_h_exists_source))))) -> (((forall jt_i_exists_target. (exists jt_gap_exists_targetsoundindex. jt_gap_exists_targetsoundindex+S (jt_i_exists_target)=(v)) -> exists jt_b_exists_target jt_c_exists_target. ((((((exists fs_h_jt_exists_targetsoundcode. fs_h_jt_exists_targetsoundcode + S (jt_b_exists_target) = S ((S (jt_i_exists_target)) * F)) /\ exists fs_q_jt_exists_targetsoundcode. E = fs_q_jt_exists_targetsoundcode * S ((S (jt_i_exists_target)) * F) + (jt_b_exists_target))) /\ (((exists fs_h_jt_exists_targetsoundscale. fs_h_jt_exists_targetsoundscale + S (jt_c_exists_target) = S ((S (jt_i_exists_target)) * H)) /\ exists fs_q_jt_exists_targetsoundscale. G = fs_q_jt_exists_targetsoundscale * S ((S (jt_i_exists_target)) * H) + (jt_c_exists_target))))) /\ (((forall jt_index_exists_targetbound. (exists jt_gap_exists_targetboundindex. jt_gap_exists_targetboundindex+S (jt_index_exists_targetbound)=(k)) -> exists jt_value_exists_targetbound. ((((exists fs_h_jt_exists_targetboundat. fs_h_jt_exists_targetboundat + S (jt_value_exists_targetbound) = S ((S (jt_index_exists_targetbound)) * jt_c_exists_target)) /\ exists fs_q_jt_exists_targetboundat. jt_b_exists_target = fs_q_jt_exists_targetboundat * S ((S (jt_index_exists_targetbound)) * jt_c_exists_target) + (jt_value_exists_targetbound))) /\ (exists jt_gap_exists_targetboundvalue. jt_gap_exists_targetboundvalue+S (jt_value_exists_targetbound)=(n)))) /\ (forall jt_divisor_exists_targetprimitive. (exists jt_factor_exists_targetprimitivemodulus. (n)=(jt_divisor_exists_targetprimitive)*jt_factor_exists_targetprimitivemodulus) -> (forall jt_index_exists_targetprimitivecoordinates jt_value_exists_targetprimitivecoordinates. (exists jt_gap_exists_targetprimitivecoordinatesindex. jt_gap_exists_targetprimitivecoordinatesindex+S (jt_index_exists_targetprimitivecoordinates)=(k)) -> (((exists fs_h_jt_exists_targetprimitivecoordinatesat. fs_h_jt_exists_targetprimitivecoordinatesat + S (jt_value_exists_targetprimitivecoordinates) = S ((S (jt_index_exists_targetprimitivecoordinates)) * jt_c_exists_target)) /\ exists fs_q_jt_exists_targetprimitivecoordinatesat. jt_b_exists_target = fs_q_jt_exists_targetprimitivecoordinatesat * S ((S (jt_index_exists_targetprimitivecoordinates)) * jt_c_exists_target) + (jt_value_exists_targetprimitivecoordinates))) -> (exists jt_factor_exists_targetprimitivecoordinatesdivides. (jt_value_exists_targetprimitivecoordinates)=(jt_divisor_exists_targetprimitive)*jt_factor_exists_targetprimitivecoordinatesdivides)) -> jt_divisor_exists_targetprimitive=1))))) /\ (((forall jt_b_exists_target jt_c_exists_target. (forall jt_index_exists_targetinputbound. (exists jt_gap_exists_targetinputboundindex. jt_gap_exists_targetinputboundindex+S (jt_index_exists_targetinputbound)=(k)) -> exists jt_value_exists_targetinputbound. ((((exists fs_h_jt_exists_targetinputboundat. fs_h_jt_exists_targetinputboundat + S (jt_value_exists_targetinputbound) = S ((S (jt_index_exists_targetinputbound)) * jt_c_exists_target)) /\ exists fs_q_jt_exists_targetinputboundat. jt_b_exists_target = fs_q_jt_exists_targetinputboundat * S ((S (jt_index_exists_targetinputbound)) * jt_c_exists_target) + (jt_value_exists_targetinputbound))) /\ (exists jt_gap_exists_targetinputboundvalue. jt_gap_exists_targetinputboundvalue+S (jt_value_exists_targetinputbound)=(n)))) -> (forall jt_divisor_exists_targetinputprimitive. (exists jt_factor_exists_targetinputprimitivemodulus. (n)=(jt_divisor_exists_targetinputprimitive)*jt_factor_exists_targetinputprimitivemodulus) -> (forall jt_index_exists_targetinputprimitivecoordinates jt_value_exists_targetinputprimitivecoordinates. (exists jt_gap_exists_targetinputprimitivecoordinatesindex. jt_gap_exists_targetinputprimitivecoordinatesindex+S (jt_index_exists_targetinputprimitivecoordinates)=(k)) -> (((exists fs_h_jt_exists_targetinputprimitivecoordinatesat. fs_h_jt_exists_targetinputprimitivecoordinatesat + S (jt_value_exists_targetinputprimitivecoordinates) = S ((S (jt_index_exists_targetinputprimitivecoordinates)) * jt_c_exists_target)) /\ exists fs_q_jt_exists_targetinputprimitivecoordinatesat. jt_b_exists_target = fs_q_jt_exists_targetinputprimitivecoordinatesat * S ((S (jt_index_exists_targetinputprimitivecoordinates)) * jt_c_exists_target) + (jt_value_exists_targetinputprimitivecoordinates))) -> (exists jt_factor_exists_targetinputprimitivecoordinatesdivides. (jt_value_exists_targetinputprimitivecoordinates)=(jt_divisor_exists_targetinputprimitive)*jt_factor_exists_targetinputprimitivecoordinatesdivides)) -> jt_divisor_exists_targetinputprimitive=1) -> exists jt_i_exists_target jt_d_exists_target jt_e_exists_target. ((exists jt_gap_exists_targetcompleteindex. jt_gap_exists_targetcompleteindex+S (jt_i_exists_target)=(v)) /\ (((((((exists fs_h_jt_exists_targetcompletecode. fs_h_jt_exists_targetcompletecode + S (jt_d_exists_target) = S ((S (jt_i_exists_target)) * F)) /\ exists fs_q_jt_exists_targetcompletecode. E = fs_q_jt_exists_targetcompletecode * S ((S (jt_i_exists_target)) * F) + (jt_d_exists_target))) /\ (((exists fs_h_jt_exists_targetcompletescale. fs_h_jt_exists_targetcompletescale + S (jt_e_exists_target) = S ((S (jt_i_exists_target)) * H)) /\ exists fs_q_jt_exists_targetcompletescale. G = fs_q_jt_exists_targetcompletescale * S ((S (jt_i_exists_target)) * H) + (jt_e_exists_target))))) /\ (forall jt_index_exists_targetrepresented jt_left_exists_targetrepresented jt_right_exists_targetrepresented. (exists jt_gap_exists_targetrepresentedindex. jt_gap_exists_targetrepresentedindex+S (jt_index_exists_targetrepresented)=(k)) -> (((exists fs_h_jt_exists_targetrepresentedleft. fs_h_jt_exists_targetrepresentedleft + S (jt_left_exists_targetrepresented) = S ((S (jt_index_exists_targetrepresented)) * jt_c_exists_target)) /\ exists fs_q_jt_exists_targetrepresentedleft. jt_b_exists_target = fs_q_jt_exists_targetrepresentedleft * S ((S (jt_index_exists_targetrepresented)) * jt_c_exists_target) + (jt_left_exists_targetrepresented))) -> (((exists fs_h_jt_exists_targetrepresentedright. fs_h_jt_exists_targetrepresentedright + S (jt_right_exists_targetrepresented) = S ((S (jt_index_exists_targetrepresented)) * jt_e_exists_target)) /\ exists fs_q_jt_exists_targetrepresentedright. jt_d_exists_target = fs_q_jt_exists_targetrepresentedright * S ((S (jt_index_exists_targetrepresented)) * jt_e_exists_target) + (jt_right_exists_targetrepresented))) -> jt_left_exists_targetrepresented=jt_right_exists_targetrepresented))))) /\ (forall jt_i_exists_target jt_h_exists_target jt_b_exists_target jt_c_exists_target jt_d_exists_target jt_e_exists_target. (exists jt_gap_exists_targetfirstindex. jt_gap_exists_targetfirstindex+S (jt_i_exists_target)=(v)) -> (exists jt_gap_exists_targetsecondindex. jt_gap_exists_targetsecondindex+S (jt_h_exists_target)=(v)) -> (((((exists fs_h_jt_exists_targetfirstcode. fs_h_jt_exists_targetfirstcode + S (jt_b_exists_target) = S ((S (jt_i_exists_target)) * F)) /\ exists fs_q_jt_exists_targetfirstcode. E = fs_q_jt_exists_targetfirstcode * S ((S (jt_i_exists_target)) * F) + (jt_b_exists_target))) /\ (((exists fs_h_jt_exists_targetfirstscale. fs_h_jt_exists_targetfirstscale + S (jt_c_exists_target) = S ((S (jt_i_exists_target)) * H)) /\ exists fs_q_jt_exists_targetfirstscale. G = fs_q_jt_exists_targetfirstscale * S ((S (jt_i_exists_target)) * H) + (jt_c_exists_target))))) -> (((((exists fs_h_jt_exists_targetsecondcode. fs_h_jt_exists_targetsecondcode + S (jt_d_exists_target) = S ((S (jt_h_exists_target)) * F)) /\ exists fs_q_jt_exists_targetsecondcode. E = fs_q_jt_exists_targetsecondcode * S ((S (jt_h_exists_target)) * F) + (jt_d_exists_target))) /\ (((exists fs_h_jt_exists_targetsecondscale. fs_h_jt_exists_targetsecondscale + S (jt_e_exists_target) = S ((S (jt_h_exists_target)) * H)) /\ exists fs_q_jt_exists_targetsecondscale. G = fs_q_jt_exists_targetsecondscale * S ((S (jt_h_exists_target)) * H) + (jt_e_exists_target))))) -> (forall jt_index_exists_targetsame jt_left_exists_targetsame jt_right_exists_targetsame. (exists jt_gap_exists_targetsameindex. jt_gap_exists_targetsameindex+S (jt_index_exists_targetsame)=(k)) -> (((exists fs_h_jt_exists_targetsameleft. fs_h_jt_exists_targetsameleft + S (jt_left_exists_targetsame) = S ((S (jt_index_exists_targetsame)) * jt_c_exists_target)) /\ exists fs_q_jt_exists_targetsameleft. jt_b_exists_target = fs_q_jt_exists_targetsameleft * S ((S (jt_index_exists_targetsame)) * jt_c_exists_target) + (jt_left_exists_targetsame))) -> (((exists fs_h_jt_exists_targetsameright. fs_h_jt_exists_targetsameright + S (jt_right_exists_targetsame) = S ((S (jt_index_exists_targetsame)) * jt_e_exists_target)) /\ exists fs_q_jt_exists_targetsameright. jt_d_exists_target = fs_q_jt_exists_targetsameright * S ((S (jt_index_exists_targetsame)) * jt_e_exists_target) + (jt_right_exists_targetsame))) -> jt_left_exists_targetsame=jt_right_exists_targetsame) -> jt_i_exists_target=jt_h_exists_target))))) -> (exists jt_gap_exists_bound. jt_gap_exists_bound+(q)=(u)) -> (exists Z W. forall jt_index_exists_map. (exists jt_gap_exists_mapindex. jt_gap_exists_mapindex+S (jt_index_exists_map)=(q)) -> exists jt_image_exists_map. ((((exists fs_h_jt_exists_mapat. fs_h_jt_exists_mapat + S (jt_image_exists_map) = S ((S (jt_index_exists_map)) * W)) /\ exists fs_q_jt_exists_mapat. Z = fs_q_jt_exists_mapat * S ((S (jt_index_exists_map)) * W) + (jt_image_exists_map))) /\ (((exists jt_gap_exists_mapbound. jt_gap_exists_mapbound+S (jt_image_exists_map)=(v)) /\ (forall jt_b_exists_mapmatch jt_c_exists_mapmatch jt_d_exists_mapmatch jt_e_exists_mapmatch. (((((exists fs_h_jt_exists_mapmatchleftcode. fs_h_jt_exists_mapmatchleftcode + S (jt_b_exists_mapmatch) = S ((S (jt_index_exists_map)) * B)) /\ exists fs_q_jt_exists_mapmatchleftcode. A = fs_q_jt_exists_mapmatchleftcode * S ((S (jt_index_exists_map)) * B) + (jt_b_exists_mapmatch))) /\ (((exists fs_h_jt_exists_mapmatchleftscale. fs_h_jt_exists_mapmatchleftscale + S (jt_c_exists_mapmatch) = S ((S (jt_index_exists_map)) * D)) /\ exists fs_q_jt_exists_mapmatchleftscale. C = fs_q_jt_exists_mapmatchleftscale * S ((S (jt_index_exists_map)) * D) + (jt_c_exists_mapmatch))))) -> (((((exists fs_h_jt_exists_mapmatchrightcode. fs_h_jt_exists_mapmatchrightcode + S (jt_d_exists_mapmatch) = S ((S (jt_image_exists_map)) * F)) /\ exists fs_q_jt_exists_mapmatchrightcode. E = fs_q_jt_exists_mapmatchrightcode * S ((S (jt_image_exists_map)) * F) + (jt_d_exists_mapmatch))) /\ (((exists fs_h_jt_exists_mapmatchrightscale. fs_h_jt_exists_mapmatchrightscale + S (jt_e_exists_mapmatch) = S ((S (jt_image_exists_map)) * H)) /\ exists fs_q_jt_exists_mapmatchrightscale. G = fs_q_jt_exists_mapmatchrightscale * S ((S (jt_image_exists_map)) * H) + (jt_e_exists_mapmatch))))) -> (forall jt_index_exists_mapmatchequal jt_left_exists_mapmatchequal jt_right_exists_mapmatchequal. (exists jt_gap_exists_mapmatchequalindex. jt_gap_exists_mapmatchequalindex+S (jt_index_exists_mapmatchequal)=(k)) -> (((exists fs_h_jt_exists_mapmatchequalleft. fs_h_jt_exists_mapmatchequalleft + S (jt_left_exists_mapmatchequal) = S ((S (jt_index_exists_mapmatchequal)) * jt_c_exists_mapmatch)) /\ exists fs_q_jt_exists_mapmatchequalleft. jt_b_exists_mapmatch = fs_q_jt_exists_mapmatchequalleft * S ((S (jt_index_exists_mapmatchequal)) * jt_c_exists_mapmatch) + (jt_left_exists_mapmatchequal))) -> (((exists fs_h_jt_exists_mapmatchequalright. fs_h_jt_exists_mapmatchequalright + S (jt_right_exists_mapmatchequal) = S ((S (jt_index_exists_mapmatchequal)) * jt_e_exists_mapmatch)) /\ exists fs_q_jt_exists_mapmatchequalright. jt_d_exists_mapmatch = fs_q_jt_exists_mapmatchequalright * S ((S (jt_index_exists_mapmatchequal)) * jt_e_exists_mapmatch) + (jt_right_exists_mapmatchequal))) -> jt_left_exists_mapmatchequal=jt_right_exists_mapmatchequal))))))

Complete tactic proof in conservative notation

All 109 original proof lines are preserved. Only local proposition formulas are abbreviated; every abbreviation has an exact binder-safe expansion check. The linked exact edition contains the unchanged replay script.

Read the argument

Proof checkpoints

109 script commands · 16 reading checkpoints · 2 local claims

This is a reading aid, not a new proof or a proof-tree certificate. Checkpoint groups are consecutive commands, not inferred branch boundaries. Every step links to the preserved script.

Definition notation is shown below. Open the paired exact edition for the original native formulas. Source pairing is not a new equivalence certificate.

Named ingredients (3)
01Induction on qL1–10

Split the argument into the base and successor obligations. The induction hypothesis is available only in the successor branch.

  1. L1
    induction q
  2. L2
    intro k
  3. L3
    intro n
  4. L4
    intro A
  5. L5
    intro B
  6. L6
    intro C
  7. L7
    intro D
  8. L8
    intro u
  9. L9
    intro E
  10. L10
    intro F
02Fix variables and assumptionsL11–16

Work with arbitrary variables or the premises of the current implication.

  1. L11
    intro G
  2. L12
    intro H
  3. L13
    intro v
  4. L14
    intro hl
  5. L15
    intro hr
  6. L16
    intro hq
03Construct an explicit witnessL17–18

Supply the displayed value, then prove that it has the required property.

  1. L17
    exists 0
  2. L18
    exists 0
04Use earlier factsL19–28

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L19
    specialize jordan_enumeration_index_map_empty (k)
  2. L20
    specialize jordan_enumeration_index_map_empty (A)
  3. L21
    specialize jordan_enumeration_index_map_empty (B)
  4. L22
    specialize jordan_enumeration_index_map_empty (C)
  5. L23
    specialize jordan_enumeration_index_map_empty (D)
  6. L24
    specialize jordan_enumeration_index_map_empty (E)
  7. L25
    specialize jordan_enumeration_index_map_empty (F)
  8. L26
    specialize jordan_enumeration_index_map_empty (G)
  9. L27
    specialize jordan_enumeration_index_map_empty (H)
  10. L28
    specialize jordan_enumeration_index_map_empty (0)
05Use earlier factsL29–31

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L29
    specialize jordan_enumeration_index_map_empty (0)
  2. L30
    specialize jordan_enumeration_index_map_empty (v)
  3. L31
    apply jordan_enumeration_index_map_empty
06Fix variables and assumptionsL32–41

Work with arbitrary variables or the premises of the current implication.

  1. L32
    intro k
  2. L33
    intro n
  3. L34
    intro A
  4. L35
    intro B
  5. L36
    intro C
  6. L37
    intro D
  7. L38
    intro u
  8. L39
    intro E
  9. L40
    intro F
  10. L41
    intro G
07Fix variables and assumptionsL42–46

Work with arbitrary variables or the premises of the current implication.

  1. L42
    intro H
  2. L43
    intro v
  3. L44
    intro hl
  4. L45
    intro hr
  5. L46
    intro hq
08Establish hpL47–56

Establish this local claim before using it. It is not an additional assumption.

  1. L47
    have hp : ∃ Z. ∃ W. ∀ jt_index_induction_prefix. Lt(jt_index_induction_prefix,q) → ∃ x. BetaAt(Z,W,jt_index_induction_prefix,x) ∧ (Lt(x,v) ∧ (∀ y. ∀ z. ∀ n. ∀ m. BetaAt(A,B,jt_index_induction_prefix,y) ∧ BetaAt(C,D,jt_index_induction_prefix,z) → BetaAt(E,F,x,n) ∧ BetaAt(G,H,x,m) → IntegerVectorZero(y,z,n,m,k)))Definitions: Lt(jt_index_induction_prefix,q)BetaAt(Z,W,jt_index_induction_prefix,x)Lt(x,v)BetaAt(A,B,jt_index_induction_prefix,y)BetaAt(C,D,jt_index_induction_prefix,z)BetaAt(E,F,x,n)BetaAt(G,H,x,m)IntegerVectorZero(y,z,n,m,k)Original native command in the exact edition
  2. L48
    specialize IH (k)
  3. L49
    specialize IH (n)
  4. L50
    specialize IH (A)
  5. L51
    specialize IH (B)
  6. L52
    specialize IH (C)
  7. L53
    specialize IH (D)
  8. L54
    specialize IH (u)
  9. L55
    specialize IH (E)
  10. L56
    specialize IH (F)
09Use earlier factsL57–66

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L57
    specialize IH (G)
  2. L58
    specialize IH (H)
  3. L59
    specialize IH (v)
  4. L60
    apply IH
  5. L61
    exact hl
  6. L62
    exact hr
  7. L63
    specialize le_trans (q)
  8. L64
    specialize le_trans (S q)
  9. L65
    specialize le_trans (u)
  10. L66
    apply le_trans
10Use earlier factsL67–69

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L67
    specialize le_succ_self (q)
  2. L68
    apply le_succ_self
  3. L69
    exact hq
11Separate the logical casesL70–71

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L70
    cases hp
  2. L71
    cases hp_witness
12Establish hmL72–81

Establish this local claim before using it. It is not an additional assumption.

  1. L72
    have hm : ∃ j. Lt(j,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,q,x) ∧ BetaAt(C,D,q,y) → BetaAt(E,F,j,z) ∧ BetaAt(G,H,j,n) → IntegerVectorZero(x,y,z,n,k))Definitions: Lt(j,v)BetaAt(A,B,q,x)BetaAt(C,D,q,y)BetaAt(E,F,j,z)BetaAt(G,H,j,n)IntegerVectorZero(x,y,z,n,k)Original native command in the exact edition
  2. L73
    specialize jordan_enumeration_position_match_exists (k)
  3. L74
    specialize jordan_enumeration_position_match_exists (n)
  4. L75
    specialize jordan_enumeration_position_match_exists (A)
  5. L76
    specialize jordan_enumeration_position_match_exists (B)
  6. L77
    specialize jordan_enumeration_position_match_exists (C)
  7. L78
    specialize jordan_enumeration_position_match_exists (D)
  8. L79
    specialize jordan_enumeration_position_match_exists (u)
  9. L80
    specialize jordan_enumeration_position_match_exists (E)
  10. L81
    specialize jordan_enumeration_position_match_exists (F)
13Use earlier factsL82–89

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L82
    specialize jordan_enumeration_position_match_exists (G)
  2. L83
    specialize jordan_enumeration_position_match_exists (H)
  3. L84
    specialize jordan_enumeration_position_match_exists (v)
  4. L85
    specialize jordan_enumeration_position_match_exists (q)
  5. L86
    apply jordan_enumeration_position_match_exists
  6. L87
    exact hl
  7. L88
    exact hr
  8. L89
    exact hq
14Separate the logical casesL90–91

Follow the explicit conjunction, disjunction, witness, or contradiction step recorded below.

  1. L90
    cases hm
  2. L91
    cases hm_witness
15Use earlier factsL92–101

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L92
    specialize jordan_enumeration_index_map_append (k)
  2. L93
    specialize jordan_enumeration_index_map_append (A)
  3. L94
    specialize jordan_enumeration_index_map_append (B)
  4. L95
    specialize jordan_enumeration_index_map_append (C)
  5. L96
    specialize jordan_enumeration_index_map_append (D)
  6. L97
    specialize jordan_enumeration_index_map_append (E)
  7. L98
    specialize jordan_enumeration_index_map_append (F)
  8. L99
    specialize jordan_enumeration_index_map_append (G)
  9. L100
    specialize jordan_enumeration_index_map_append (H)
  10. L101
    specialize jordan_enumeration_index_map_append (x)
16Use earlier factsL102–109

Instantiate or apply named facts and discharge the corresponding proof obligations.

  1. L102
    specialize jordan_enumeration_index_map_append (x1)
  2. L103
    specialize jordan_enumeration_index_map_append (q)
  3. L104
    specialize jordan_enumeration_index_map_append (v)
  4. L105
    specialize jordan_enumeration_index_map_append (x2)
  5. L106
    apply jordan_enumeration_index_map_append
  6. L107
    exact hp_witness_witness
  7. L108
    exact hm_witness_left
  8. L109
    exact hm_witness_right

Library-wide reading audit

Original defined command ledger · 109 lines
  1. 0001induction q
  2. 0002intro k
  3. 0003intro n
  4. 0004intro A
  5. 0005intro B
  6. 0006intro C
  7. 0007intro D
  8. 0008intro u
  9. 0009intro E
  10. 0010intro F
  11. 0011intro G
  12. 0012intro H
  13. 0013intro v
  14. 0014intro hl
  15. 0015intro hr
  16. 0016intro hq
  17. 0017exists 0
  18. 0018exists 0
  19. 0019specialize jordan_enumeration_index_map_empty (k)
  20. 0020specialize jordan_enumeration_index_map_empty (A)
  21. 0021specialize jordan_enumeration_index_map_empty (B)
  22. 0022specialize jordan_enumeration_index_map_empty (C)
  23. 0023specialize jordan_enumeration_index_map_empty (D)
  24. 0024specialize jordan_enumeration_index_map_empty (E)
  25. 0025specialize jordan_enumeration_index_map_empty (F)
  26. 0026specialize jordan_enumeration_index_map_empty (G)
  27. 0027specialize jordan_enumeration_index_map_empty (H)
  28. 0028specialize jordan_enumeration_index_map_empty (0)
  29. 0029specialize jordan_enumeration_index_map_empty (0)
  30. 0030specialize jordan_enumeration_index_map_empty (v)
  31. 0031apply jordan_enumeration_index_map_empty
  32. 0032intro k
  33. 0033intro n
  34. 0034intro A
  35. 0035intro B
  36. 0036intro C
  37. 0037intro D
  38. 0038intro u
  39. 0039intro E
  40. 0040intro F
  41. 0041intro G
  42. 0042intro H
  43. 0043intro v
  44. 0044intro hl
  45. 0045intro hr
  46. 0046intro hq
  47. 0047have hp : ∃ Z. ∃ W. ∀ jt_index_induction_prefix. Lt(jt_index_induction_prefix,q) → ∃ x. BetaAt(Z,W,jt_index_induction_prefix,x) ∧ (Lt(x,v) ∧ (∀ y. ∀ z. ∀ n. ∀ m. BetaAt(A,B,jt_index_induction_prefix,y) ∧ BetaAt(C,D,jt_index_induction_prefix,z) → BetaAt(E,F,x,n) ∧ BetaAt(G,H,x,m) → IntegerVectorZero(y,z,n,m,k)))
  48. 0048specialize IH (k)
  49. 0049specialize IH (n)
  50. 0050specialize IH (A)
  51. 0051specialize IH (B)
  52. 0052specialize IH (C)
  53. 0053specialize IH (D)
  54. 0054specialize IH (u)
  55. 0055specialize IH (E)
  56. 0056specialize IH (F)
  57. 0057specialize IH (G)
  58. 0058specialize IH (H)
  59. 0059specialize IH (v)
  60. 0060apply IH
  61. 0061exact hl
  62. 0062exact hr
  63. 0063specialize le_trans (q)
  64. 0064specialize le_trans (S q)
  65. 0065specialize le_trans (u)
  66. 0066apply le_trans
  67. 0067specialize le_succ_self (q)
  68. 0068apply le_succ_self
  69. 0069exact hq
  70. 0070cases hp
  71. 0071cases hp_witness
  72. 0072have hm : ∃ j. Lt(j,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,q,x) ∧ BetaAt(C,D,q,y) → BetaAt(E,F,j,z) ∧ BetaAt(G,H,j,n) → IntegerVectorZero(x,y,z,n,k))
  73. 0073specialize jordan_enumeration_position_match_exists (k)
  74. 0074specialize jordan_enumeration_position_match_exists (n)
  75. 0075specialize jordan_enumeration_position_match_exists (A)
  76. 0076specialize jordan_enumeration_position_match_exists (B)
  77. 0077specialize jordan_enumeration_position_match_exists (C)
  78. 0078specialize jordan_enumeration_position_match_exists (D)
  79. 0079specialize jordan_enumeration_position_match_exists (u)
  80. 0080specialize jordan_enumeration_position_match_exists (E)
  81. 0081specialize jordan_enumeration_position_match_exists (F)
  82. 0082specialize jordan_enumeration_position_match_exists (G)
  83. 0083specialize jordan_enumeration_position_match_exists (H)
  84. 0084specialize jordan_enumeration_position_match_exists (v)
  85. 0085specialize jordan_enumeration_position_match_exists (q)
  86. 0086apply jordan_enumeration_position_match_exists
  87. 0087exact hl
  88. 0088exact hr
  89. 0089exact hq
  90. 0090cases hm
  91. 0091cases hm_witness
  92. 0092specialize jordan_enumeration_index_map_append (k)
  93. 0093specialize jordan_enumeration_index_map_append (A)
  94. 0094specialize jordan_enumeration_index_map_append (B)
  95. 0095specialize jordan_enumeration_index_map_append (C)
  96. 0096specialize jordan_enumeration_index_map_append (D)
  97. 0097specialize jordan_enumeration_index_map_append (E)
  98. 0098specialize jordan_enumeration_index_map_append (F)
  99. 0099specialize jordan_enumeration_index_map_append (G)
  100. 0100specialize jordan_enumeration_index_map_append (H)
  101. 0101specialize jordan_enumeration_index_map_append (x)
  102. 0102specialize jordan_enumeration_index_map_append (x1)
  103. 0103specialize jordan_enumeration_index_map_append (q)
  104. 0104specialize jordan_enumeration_index_map_append (v)
  105. 0105specialize jordan_enumeration_index_map_append (x2)
  106. 0106apply jordan_enumeration_index_map_append
  107. 0107exact hp_witness_witness
  108. 0108exact hm_witness_left
  109. 0109exact hm_witness_right