JT0052

jordan_enumeration_index_map_bounded_injective

Equal decoded map indices force coordinate-equal source tuples and hence equal source positions, not equal raw tuple codes.

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

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

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

Definition DAG

Actual proof prerequisites

Original expanded first-order statement
forall k n A B C D u E F G H v Z W. (((forall jt_i_injective_source. (exists jt_gap_injective_sourcesoundindex. jt_gap_injective_sourcesoundindex+S (jt_i_injective_source)=(u)) -> exists jt_b_injective_source jt_c_injective_source. ((((((exists fs_h_jt_injective_sourcesoundcode. fs_h_jt_injective_sourcesoundcode + S (jt_b_injective_source) = S ((S (jt_i_injective_source)) * B)) /\ exists fs_q_jt_injective_sourcesoundcode. A = fs_q_jt_injective_sourcesoundcode * S ((S (jt_i_injective_source)) * B) + (jt_b_injective_source))) /\ (((exists fs_h_jt_injective_sourcesoundscale. fs_h_jt_injective_sourcesoundscale + S (jt_c_injective_source) = S ((S (jt_i_injective_source)) * D)) /\ exists fs_q_jt_injective_sourcesoundscale. C = fs_q_jt_injective_sourcesoundscale * S ((S (jt_i_injective_source)) * D) + (jt_c_injective_source))))) /\ (((forall jt_index_injective_sourcebound. (exists jt_gap_injective_sourceboundindex. jt_gap_injective_sourceboundindex+S (jt_index_injective_sourcebound)=(k)) -> exists jt_value_injective_sourcebound. ((((exists fs_h_jt_injective_sourceboundat. fs_h_jt_injective_sourceboundat + S (jt_value_injective_sourcebound) = S ((S (jt_index_injective_sourcebound)) * jt_c_injective_source)) /\ exists fs_q_jt_injective_sourceboundat. jt_b_injective_source = fs_q_jt_injective_sourceboundat * S ((S (jt_index_injective_sourcebound)) * jt_c_injective_source) + (jt_value_injective_sourcebound))) /\ (exists jt_gap_injective_sourceboundvalue. jt_gap_injective_sourceboundvalue+S (jt_value_injective_sourcebound)=(n)))) /\ (forall jt_divisor_injective_sourceprimitive. (exists jt_factor_injective_sourceprimitivemodulus. (n)=(jt_divisor_injective_sourceprimitive)*jt_factor_injective_sourceprimitivemodulus) -> (forall jt_index_injective_sourceprimitivecoordinates jt_value_injective_sourceprimitivecoordinates. (exists jt_gap_injective_sourceprimitivecoordinatesindex. jt_gap_injective_sourceprimitivecoordinatesindex+S (jt_index_injective_sourceprimitivecoordinates)=(k)) -> (((exists fs_h_jt_injective_sourceprimitivecoordinatesat. fs_h_jt_injective_sourceprimitivecoordinatesat + S (jt_value_injective_sourceprimitivecoordinates) = S ((S (jt_index_injective_sourceprimitivecoordinates)) * jt_c_injective_source)) /\ exists fs_q_jt_injective_sourceprimitivecoordinatesat. jt_b_injective_source = fs_q_jt_injective_sourceprimitivecoordinatesat * S ((S (jt_index_injective_sourceprimitivecoordinates)) * jt_c_injective_source) + (jt_value_injective_sourceprimitivecoordinates))) -> (exists jt_factor_injective_sourceprimitivecoordinatesdivides. (jt_value_injective_sourceprimitivecoordinates)=(jt_divisor_injective_sourceprimitive)*jt_factor_injective_sourceprimitivecoordinatesdivides)) -> jt_divisor_injective_sourceprimitive=1))))) /\ (((forall jt_b_injective_source jt_c_injective_source. (forall jt_index_injective_sourceinputbound. (exists jt_gap_injective_sourceinputboundindex. jt_gap_injective_sourceinputboundindex+S (jt_index_injective_sourceinputbound)=(k)) -> exists jt_value_injective_sourceinputbound. ((((exists fs_h_jt_injective_sourceinputboundat. fs_h_jt_injective_sourceinputboundat + S (jt_value_injective_sourceinputbound) = S ((S (jt_index_injective_sourceinputbound)) * jt_c_injective_source)) /\ exists fs_q_jt_injective_sourceinputboundat. jt_b_injective_source = fs_q_jt_injective_sourceinputboundat * S ((S (jt_index_injective_sourceinputbound)) * jt_c_injective_source) + (jt_value_injective_sourceinputbound))) /\ (exists jt_gap_injective_sourceinputboundvalue. jt_gap_injective_sourceinputboundvalue+S (jt_value_injective_sourceinputbound)=(n)))) -> (forall jt_divisor_injective_sourceinputprimitive. (exists jt_factor_injective_sourceinputprimitivemodulus. (n)=(jt_divisor_injective_sourceinputprimitive)*jt_factor_injective_sourceinputprimitivemodulus) -> (forall jt_index_injective_sourceinputprimitivecoordinates jt_value_injective_sourceinputprimitivecoordinates. (exists jt_gap_injective_sourceinputprimitivecoordinatesindex. jt_gap_injective_sourceinputprimitivecoordinatesindex+S (jt_index_injective_sourceinputprimitivecoordinates)=(k)) -> (((exists fs_h_jt_injective_sourceinputprimitivecoordinatesat. fs_h_jt_injective_sourceinputprimitivecoordinatesat + S (jt_value_injective_sourceinputprimitivecoordinates) = S ((S (jt_index_injective_sourceinputprimitivecoordinates)) * jt_c_injective_source)) /\ exists fs_q_jt_injective_sourceinputprimitivecoordinatesat. jt_b_injective_source = fs_q_jt_injective_sourceinputprimitivecoordinatesat * S ((S (jt_index_injective_sourceinputprimitivecoordinates)) * jt_c_injective_source) + (jt_value_injective_sourceinputprimitivecoordinates))) -> (exists jt_factor_injective_sourceinputprimitivecoordinatesdivides. (jt_value_injective_sourceinputprimitivecoordinates)=(jt_divisor_injective_sourceinputprimitive)*jt_factor_injective_sourceinputprimitivecoordinatesdivides)) -> jt_divisor_injective_sourceinputprimitive=1) -> exists jt_i_injective_source jt_d_injective_source jt_e_injective_source. ((exists jt_gap_injective_sourcecompleteindex. jt_gap_injective_sourcecompleteindex+S (jt_i_injective_source)=(u)) /\ (((((((exists fs_h_jt_injective_sourcecompletecode. fs_h_jt_injective_sourcecompletecode + S (jt_d_injective_source) = S ((S (jt_i_injective_source)) * B)) /\ exists fs_q_jt_injective_sourcecompletecode. A = fs_q_jt_injective_sourcecompletecode * S ((S (jt_i_injective_source)) * B) + (jt_d_injective_source))) /\ (((exists fs_h_jt_injective_sourcecompletescale. fs_h_jt_injective_sourcecompletescale + S (jt_e_injective_source) = S ((S (jt_i_injective_source)) * D)) /\ exists fs_q_jt_injective_sourcecompletescale. C = fs_q_jt_injective_sourcecompletescale * S ((S (jt_i_injective_source)) * D) + (jt_e_injective_source))))) /\ (forall jt_index_injective_sourcerepresented jt_left_injective_sourcerepresented jt_right_injective_sourcerepresented. (exists jt_gap_injective_sourcerepresentedindex. jt_gap_injective_sourcerepresentedindex+S (jt_index_injective_sourcerepresented)=(k)) -> (((exists fs_h_jt_injective_sourcerepresentedleft. fs_h_jt_injective_sourcerepresentedleft + S (jt_left_injective_sourcerepresented) = S ((S (jt_index_injective_sourcerepresented)) * jt_c_injective_source)) /\ exists fs_q_jt_injective_sourcerepresentedleft. jt_b_injective_source = fs_q_jt_injective_sourcerepresentedleft * S ((S (jt_index_injective_sourcerepresented)) * jt_c_injective_source) + (jt_left_injective_sourcerepresented))) -> (((exists fs_h_jt_injective_sourcerepresentedright. fs_h_jt_injective_sourcerepresentedright + S (jt_right_injective_sourcerepresented) = S ((S (jt_index_injective_sourcerepresented)) * jt_e_injective_source)) /\ exists fs_q_jt_injective_sourcerepresentedright. jt_d_injective_source = fs_q_jt_injective_sourcerepresentedright * S ((S (jt_index_injective_sourcerepresented)) * jt_e_injective_source) + (jt_right_injective_sourcerepresented))) -> jt_left_injective_sourcerepresented=jt_right_injective_sourcerepresented))))) /\ (forall jt_i_injective_source jt_h_injective_source jt_b_injective_source jt_c_injective_source jt_d_injective_source jt_e_injective_source. (exists jt_gap_injective_sourcefirstindex. jt_gap_injective_sourcefirstindex+S (jt_i_injective_source)=(u)) -> (exists jt_gap_injective_sourcesecondindex. jt_gap_injective_sourcesecondindex+S (jt_h_injective_source)=(u)) -> (((((exists fs_h_jt_injective_sourcefirstcode. fs_h_jt_injective_sourcefirstcode + S (jt_b_injective_source) = S ((S (jt_i_injective_source)) * B)) /\ exists fs_q_jt_injective_sourcefirstcode. A = fs_q_jt_injective_sourcefirstcode * S ((S (jt_i_injective_source)) * B) + (jt_b_injective_source))) /\ (((exists fs_h_jt_injective_sourcefirstscale. fs_h_jt_injective_sourcefirstscale + S (jt_c_injective_source) = S ((S (jt_i_injective_source)) * D)) /\ exists fs_q_jt_injective_sourcefirstscale. C = fs_q_jt_injective_sourcefirstscale * S ((S (jt_i_injective_source)) * D) + (jt_c_injective_source))))) -> (((((exists fs_h_jt_injective_sourcesecondcode. fs_h_jt_injective_sourcesecondcode + S (jt_d_injective_source) = S ((S (jt_h_injective_source)) * B)) /\ exists fs_q_jt_injective_sourcesecondcode. A = fs_q_jt_injective_sourcesecondcode * S ((S (jt_h_injective_source)) * B) + (jt_d_injective_source))) /\ (((exists fs_h_jt_injective_sourcesecondscale. fs_h_jt_injective_sourcesecondscale + S (jt_e_injective_source) = S ((S (jt_h_injective_source)) * D)) /\ exists fs_q_jt_injective_sourcesecondscale. C = fs_q_jt_injective_sourcesecondscale * S ((S (jt_h_injective_source)) * D) + (jt_e_injective_source))))) -> (forall jt_index_injective_sourcesame jt_left_injective_sourcesame jt_right_injective_sourcesame. (exists jt_gap_injective_sourcesameindex. jt_gap_injective_sourcesameindex+S (jt_index_injective_sourcesame)=(k)) -> (((exists fs_h_jt_injective_sourcesameleft. fs_h_jt_injective_sourcesameleft + S (jt_left_injective_sourcesame) = S ((S (jt_index_injective_sourcesame)) * jt_c_injective_source)) /\ exists fs_q_jt_injective_sourcesameleft. jt_b_injective_source = fs_q_jt_injective_sourcesameleft * S ((S (jt_index_injective_sourcesame)) * jt_c_injective_source) + (jt_left_injective_sourcesame))) -> (((exists fs_h_jt_injective_sourcesameright. fs_h_jt_injective_sourcesameright + S (jt_right_injective_sourcesame) = S ((S (jt_index_injective_sourcesame)) * jt_e_injective_source)) /\ exists fs_q_jt_injective_sourcesameright. jt_d_injective_source = fs_q_jt_injective_sourcesameright * S ((S (jt_index_injective_sourcesame)) * jt_e_injective_source) + (jt_right_injective_sourcesame))) -> jt_left_injective_sourcesame=jt_right_injective_sourcesame) -> jt_i_injective_source=jt_h_injective_source))))) -> (((forall jt_i_injective_target. (exists jt_gap_injective_targetsoundindex. jt_gap_injective_targetsoundindex+S (jt_i_injective_target)=(v)) -> exists jt_b_injective_target jt_c_injective_target. ((((((exists fs_h_jt_injective_targetsoundcode. fs_h_jt_injective_targetsoundcode + S (jt_b_injective_target) = S ((S (jt_i_injective_target)) * F)) /\ exists fs_q_jt_injective_targetsoundcode. E = fs_q_jt_injective_targetsoundcode * S ((S (jt_i_injective_target)) * F) + (jt_b_injective_target))) /\ (((exists fs_h_jt_injective_targetsoundscale. fs_h_jt_injective_targetsoundscale + S (jt_c_injective_target) = S ((S (jt_i_injective_target)) * H)) /\ exists fs_q_jt_injective_targetsoundscale. G = fs_q_jt_injective_targetsoundscale * S ((S (jt_i_injective_target)) * H) + (jt_c_injective_target))))) /\ (((forall jt_index_injective_targetbound. (exists jt_gap_injective_targetboundindex. jt_gap_injective_targetboundindex+S (jt_index_injective_targetbound)=(k)) -> exists jt_value_injective_targetbound. ((((exists fs_h_jt_injective_targetboundat. fs_h_jt_injective_targetboundat + S (jt_value_injective_targetbound) = S ((S (jt_index_injective_targetbound)) * jt_c_injective_target)) /\ exists fs_q_jt_injective_targetboundat. jt_b_injective_target = fs_q_jt_injective_targetboundat * S ((S (jt_index_injective_targetbound)) * jt_c_injective_target) + (jt_value_injective_targetbound))) /\ (exists jt_gap_injective_targetboundvalue. jt_gap_injective_targetboundvalue+S (jt_value_injective_targetbound)=(n)))) /\ (forall jt_divisor_injective_targetprimitive. (exists jt_factor_injective_targetprimitivemodulus. (n)=(jt_divisor_injective_targetprimitive)*jt_factor_injective_targetprimitivemodulus) -> (forall jt_index_injective_targetprimitivecoordinates jt_value_injective_targetprimitivecoordinates. (exists jt_gap_injective_targetprimitivecoordinatesindex. jt_gap_injective_targetprimitivecoordinatesindex+S (jt_index_injective_targetprimitivecoordinates)=(k)) -> (((exists fs_h_jt_injective_targetprimitivecoordinatesat. fs_h_jt_injective_targetprimitivecoordinatesat + S (jt_value_injective_targetprimitivecoordinates) = S ((S (jt_index_injective_targetprimitivecoordinates)) * jt_c_injective_target)) /\ exists fs_q_jt_injective_targetprimitivecoordinatesat. jt_b_injective_target = fs_q_jt_injective_targetprimitivecoordinatesat * S ((S (jt_index_injective_targetprimitivecoordinates)) * jt_c_injective_target) + (jt_value_injective_targetprimitivecoordinates))) -> (exists jt_factor_injective_targetprimitivecoordinatesdivides. (jt_value_injective_targetprimitivecoordinates)=(jt_divisor_injective_targetprimitive)*jt_factor_injective_targetprimitivecoordinatesdivides)) -> jt_divisor_injective_targetprimitive=1))))) /\ (((forall jt_b_injective_target jt_c_injective_target. (forall jt_index_injective_targetinputbound. (exists jt_gap_injective_targetinputboundindex. jt_gap_injective_targetinputboundindex+S (jt_index_injective_targetinputbound)=(k)) -> exists jt_value_injective_targetinputbound. ((((exists fs_h_jt_injective_targetinputboundat. fs_h_jt_injective_targetinputboundat + S (jt_value_injective_targetinputbound) = S ((S (jt_index_injective_targetinputbound)) * jt_c_injective_target)) /\ exists fs_q_jt_injective_targetinputboundat. jt_b_injective_target = fs_q_jt_injective_targetinputboundat * S ((S (jt_index_injective_targetinputbound)) * jt_c_injective_target) + (jt_value_injective_targetinputbound))) /\ (exists jt_gap_injective_targetinputboundvalue. jt_gap_injective_targetinputboundvalue+S (jt_value_injective_targetinputbound)=(n)))) -> (forall jt_divisor_injective_targetinputprimitive. (exists jt_factor_injective_targetinputprimitivemodulus. (n)=(jt_divisor_injective_targetinputprimitive)*jt_factor_injective_targetinputprimitivemodulus) -> (forall jt_index_injective_targetinputprimitivecoordinates jt_value_injective_targetinputprimitivecoordinates. (exists jt_gap_injective_targetinputprimitivecoordinatesindex. jt_gap_injective_targetinputprimitivecoordinatesindex+S (jt_index_injective_targetinputprimitivecoordinates)=(k)) -> (((exists fs_h_jt_injective_targetinputprimitivecoordinatesat. fs_h_jt_injective_targetinputprimitivecoordinatesat + S (jt_value_injective_targetinputprimitivecoordinates) = S ((S (jt_index_injective_targetinputprimitivecoordinates)) * jt_c_injective_target)) /\ exists fs_q_jt_injective_targetinputprimitivecoordinatesat. jt_b_injective_target = fs_q_jt_injective_targetinputprimitivecoordinatesat * S ((S (jt_index_injective_targetinputprimitivecoordinates)) * jt_c_injective_target) + (jt_value_injective_targetinputprimitivecoordinates))) -> (exists jt_factor_injective_targetinputprimitivecoordinatesdivides. (jt_value_injective_targetinputprimitivecoordinates)=(jt_divisor_injective_targetinputprimitive)*jt_factor_injective_targetinputprimitivecoordinatesdivides)) -> jt_divisor_injective_targetinputprimitive=1) -> exists jt_i_injective_target jt_d_injective_target jt_e_injective_target. ((exists jt_gap_injective_targetcompleteindex. jt_gap_injective_targetcompleteindex+S (jt_i_injective_target)=(v)) /\ (((((((exists fs_h_jt_injective_targetcompletecode. fs_h_jt_injective_targetcompletecode + S (jt_d_injective_target) = S ((S (jt_i_injective_target)) * F)) /\ exists fs_q_jt_injective_targetcompletecode. E = fs_q_jt_injective_targetcompletecode * S ((S (jt_i_injective_target)) * F) + (jt_d_injective_target))) /\ (((exists fs_h_jt_injective_targetcompletescale. fs_h_jt_injective_targetcompletescale + S (jt_e_injective_target) = S ((S (jt_i_injective_target)) * H)) /\ exists fs_q_jt_injective_targetcompletescale. G = fs_q_jt_injective_targetcompletescale * S ((S (jt_i_injective_target)) * H) + (jt_e_injective_target))))) /\ (forall jt_index_injective_targetrepresented jt_left_injective_targetrepresented jt_right_injective_targetrepresented. (exists jt_gap_injective_targetrepresentedindex. jt_gap_injective_targetrepresentedindex+S (jt_index_injective_targetrepresented)=(k)) -> (((exists fs_h_jt_injective_targetrepresentedleft. fs_h_jt_injective_targetrepresentedleft + S (jt_left_injective_targetrepresented) = S ((S (jt_index_injective_targetrepresented)) * jt_c_injective_target)) /\ exists fs_q_jt_injective_targetrepresentedleft. jt_b_injective_target = fs_q_jt_injective_targetrepresentedleft * S ((S (jt_index_injective_targetrepresented)) * jt_c_injective_target) + (jt_left_injective_targetrepresented))) -> (((exists fs_h_jt_injective_targetrepresentedright. fs_h_jt_injective_targetrepresentedright + S (jt_right_injective_targetrepresented) = S ((S (jt_index_injective_targetrepresented)) * jt_e_injective_target)) /\ exists fs_q_jt_injective_targetrepresentedright. jt_d_injective_target = fs_q_jt_injective_targetrepresentedright * S ((S (jt_index_injective_targetrepresented)) * jt_e_injective_target) + (jt_right_injective_targetrepresented))) -> jt_left_injective_targetrepresented=jt_right_injective_targetrepresented))))) /\ (forall jt_i_injective_target jt_h_injective_target jt_b_injective_target jt_c_injective_target jt_d_injective_target jt_e_injective_target. (exists jt_gap_injective_targetfirstindex. jt_gap_injective_targetfirstindex+S (jt_i_injective_target)=(v)) -> (exists jt_gap_injective_targetsecondindex. jt_gap_injective_targetsecondindex+S (jt_h_injective_target)=(v)) -> (((((exists fs_h_jt_injective_targetfirstcode. fs_h_jt_injective_targetfirstcode + S (jt_b_injective_target) = S ((S (jt_i_injective_target)) * F)) /\ exists fs_q_jt_injective_targetfirstcode. E = fs_q_jt_injective_targetfirstcode * S ((S (jt_i_injective_target)) * F) + (jt_b_injective_target))) /\ (((exists fs_h_jt_injective_targetfirstscale. fs_h_jt_injective_targetfirstscale + S (jt_c_injective_target) = S ((S (jt_i_injective_target)) * H)) /\ exists fs_q_jt_injective_targetfirstscale. G = fs_q_jt_injective_targetfirstscale * S ((S (jt_i_injective_target)) * H) + (jt_c_injective_target))))) -> (((((exists fs_h_jt_injective_targetsecondcode. fs_h_jt_injective_targetsecondcode + S (jt_d_injective_target) = S ((S (jt_h_injective_target)) * F)) /\ exists fs_q_jt_injective_targetsecondcode. E = fs_q_jt_injective_targetsecondcode * S ((S (jt_h_injective_target)) * F) + (jt_d_injective_target))) /\ (((exists fs_h_jt_injective_targetsecondscale. fs_h_jt_injective_targetsecondscale + S (jt_e_injective_target) = S ((S (jt_h_injective_target)) * H)) /\ exists fs_q_jt_injective_targetsecondscale. G = fs_q_jt_injective_targetsecondscale * S ((S (jt_h_injective_target)) * H) + (jt_e_injective_target))))) -> (forall jt_index_injective_targetsame jt_left_injective_targetsame jt_right_injective_targetsame. (exists jt_gap_injective_targetsameindex. jt_gap_injective_targetsameindex+S (jt_index_injective_targetsame)=(k)) -> (((exists fs_h_jt_injective_targetsameleft. fs_h_jt_injective_targetsameleft + S (jt_left_injective_targetsame) = S ((S (jt_index_injective_targetsame)) * jt_c_injective_target)) /\ exists fs_q_jt_injective_targetsameleft. jt_b_injective_target = fs_q_jt_injective_targetsameleft * S ((S (jt_index_injective_targetsame)) * jt_c_injective_target) + (jt_left_injective_targetsame))) -> (((exists fs_h_jt_injective_targetsameright. fs_h_jt_injective_targetsameright + S (jt_right_injective_targetsame) = S ((S (jt_index_injective_targetsame)) * jt_e_injective_target)) /\ exists fs_q_jt_injective_targetsameright. jt_d_injective_target = fs_q_jt_injective_targetsameright * S ((S (jt_index_injective_targetsame)) * jt_e_injective_target) + (jt_right_injective_targetsame))) -> jt_left_injective_targetsame=jt_right_injective_targetsame) -> jt_i_injective_target=jt_h_injective_target))))) -> (forall jt_index_injective_map. (exists jt_gap_injective_mapindex. jt_gap_injective_mapindex+S (jt_index_injective_map)=(u)) -> exists jt_image_injective_map. ((((exists fs_h_jt_injective_mapat. fs_h_jt_injective_mapat + S (jt_image_injective_map) = S ((S (jt_index_injective_map)) * W)) /\ exists fs_q_jt_injective_mapat. Z = fs_q_jt_injective_mapat * S ((S (jt_index_injective_map)) * W) + (jt_image_injective_map))) /\ (((exists jt_gap_injective_mapbound. jt_gap_injective_mapbound+S (jt_image_injective_map)=(v)) /\ (forall jt_b_injective_mapmatch jt_c_injective_mapmatch jt_d_injective_mapmatch jt_e_injective_mapmatch. (((((exists fs_h_jt_injective_mapmatchleftcode. fs_h_jt_injective_mapmatchleftcode + S (jt_b_injective_mapmatch) = S ((S (jt_index_injective_map)) * B)) /\ exists fs_q_jt_injective_mapmatchleftcode. A = fs_q_jt_injective_mapmatchleftcode * S ((S (jt_index_injective_map)) * B) + (jt_b_injective_mapmatch))) /\ (((exists fs_h_jt_injective_mapmatchleftscale. fs_h_jt_injective_mapmatchleftscale + S (jt_c_injective_mapmatch) = S ((S (jt_index_injective_map)) * D)) /\ exists fs_q_jt_injective_mapmatchleftscale. C = fs_q_jt_injective_mapmatchleftscale * S ((S (jt_index_injective_map)) * D) + (jt_c_injective_mapmatch))))) -> (((((exists fs_h_jt_injective_mapmatchrightcode. fs_h_jt_injective_mapmatchrightcode + S (jt_d_injective_mapmatch) = S ((S (jt_image_injective_map)) * F)) /\ exists fs_q_jt_injective_mapmatchrightcode. E = fs_q_jt_injective_mapmatchrightcode * S ((S (jt_image_injective_map)) * F) + (jt_d_injective_mapmatch))) /\ (((exists fs_h_jt_injective_mapmatchrightscale. fs_h_jt_injective_mapmatchrightscale + S (jt_e_injective_mapmatch) = S ((S (jt_image_injective_map)) * H)) /\ exists fs_q_jt_injective_mapmatchrightscale. G = fs_q_jt_injective_mapmatchrightscale * S ((S (jt_image_injective_map)) * H) + (jt_e_injective_mapmatch))))) -> (forall jt_index_injective_mapmatchequal jt_left_injective_mapmatchequal jt_right_injective_mapmatchequal. (exists jt_gap_injective_mapmatchequalindex. jt_gap_injective_mapmatchequalindex+S (jt_index_injective_mapmatchequal)=(k)) -> (((exists fs_h_jt_injective_mapmatchequalleft. fs_h_jt_injective_mapmatchequalleft + S (jt_left_injective_mapmatchequal) = S ((S (jt_index_injective_mapmatchequal)) * jt_c_injective_mapmatch)) /\ exists fs_q_jt_injective_mapmatchequalleft. jt_b_injective_mapmatch = fs_q_jt_injective_mapmatchequalleft * S ((S (jt_index_injective_mapmatchequal)) * jt_c_injective_mapmatch) + (jt_left_injective_mapmatchequal))) -> (((exists fs_h_jt_injective_mapmatchequalright. fs_h_jt_injective_mapmatchequalright + S (jt_right_injective_mapmatchequal) = S ((S (jt_index_injective_mapmatchequal)) * jt_e_injective_mapmatch)) /\ exists fs_q_jt_injective_mapmatchequalright. jt_d_injective_mapmatch = fs_q_jt_injective_mapmatchequalright * S ((S (jt_index_injective_mapmatchequal)) * jt_e_injective_mapmatch) + (jt_right_injective_mapmatchequal))) -> jt_left_injective_mapmatchequal=jt_right_injective_mapmatchequal)))))) -> (((forall jt_index_injective_bound. (exists jt_gap_injective_boundindex. jt_gap_injective_boundindex+S (jt_index_injective_bound)=(u)) -> exists jt_value_injective_bound. ((((exists fs_h_jt_injective_boundat. fs_h_jt_injective_boundat + S (jt_value_injective_bound) = S ((S (jt_index_injective_bound)) * W)) /\ exists fs_q_jt_injective_boundat. Z = fs_q_jt_injective_boundat * S ((S (jt_index_injective_bound)) * W) + (jt_value_injective_bound))) /\ (exists jt_gap_injective_boundvalue. jt_gap_injective_boundvalue+S (jt_value_injective_bound)=(v)))) /\ (forall fp_i_jordan_injective fp_j_jordan_injective fp_value_jordan_injective. (exists fp_gap_jordan_injective_i. fp_gap_jordan_injective_i + S fp_i_jordan_injective = u) -> (exists fp_gap_jordan_injective_j. fp_gap_jordan_injective_j + S fp_j_jordan_injective = u) -> (((exists ff_h_jordan_injective_left. ff_h_jordan_injective_left + S (fp_value_jordan_injective) = S ((S (fp_i_jordan_injective)) * W)) /\ exists ff_q_jordan_injective_left. Z = ff_q_jordan_injective_left * S ((S (fp_i_jordan_injective)) * W) + (fp_value_jordan_injective))) -> (((exists ff_h_jordan_injective_right. ff_h_jordan_injective_right + S (fp_value_jordan_injective) = S ((S (fp_j_jordan_injective)) * W)) /\ exists ff_q_jordan_injective_right. Z = ff_q_jordan_injective_right * S ((S (fp_j_jordan_injective)) * W) + (fp_value_jordan_injective))) -> fp_i_jordan_injective = fp_j_jordan_injective)))

Complete tactic proof in conservative notation

All 161 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

161 script commands · 28 reading checkpoints · 10 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 (4)
01Fix variables and assumptionsL1–10

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

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

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

  1. L11
    intro H
  2. L12
    intro v
  3. L13
    intro Z
  4. L14
    intro W
  5. L15
    intro hl
  6. L16
    intro hr
  7. L17
    intro hm
03Separate the logical casesL18–18

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

  1. L18
    split
04Fix variables and assumptionsL19–20

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

  1. L19
    intro i
  2. L20
    intro hi
05Establish hvL21–24

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hm.

  1. L21
    have hv : ∃ j. BetaAt(Z,W,i,j) ∧ (Lt(j,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,i,x) ∧ BetaAt(C,D,i,y) → BetaAt(E,F,j,z) ∧ BetaAt(G,H,j,n) → IntegerVectorZero(x,y,z,n,k)))Definitions: BetaAt(Z,W,i,j)Lt(j,v)BetaAt(A,B,i,x)BetaAt(C,D,i,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. L22
    specialize hm (i)
  3. L23
    apply hm
  4. L24
    exact hi
06Separate the logical casesL25–27

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

  1. L25
    cases hv
  2. L26
    cases hv_witness
  3. L27
    cases hv_witness_right
07Construct an explicit witnessL28–28

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

  1. L28
    exists x
08Separate the logical casesL29–29

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

  1. L29
    split
09Use earlier factsL30–31

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

  1. L30
    exact hv_witness_left
  2. L31
    exact hv_witness_right_left
10Fix variables and assumptionsL32–38

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

  1. L32
    intro i
  2. L33
    intro j
  3. L34
    intro r
  4. L35
    intro hi
  5. L36
    intro hj
  6. L37
    intro hat
  7. L38
    intro hbt
11Establish hmiL39–48

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

  1. L39
    have hmi : Lt(r,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,i,x) ∧ BetaAt(C,D,i,y) → BetaAt(E,F,r,z) ∧ BetaAt(G,H,r,n) → IntegerVectorZero(x,y,z,n,k))Definitions: Lt(r,v)BetaAt(A,B,i,x)BetaAt(C,D,i,y)BetaAt(E,F,r,z)BetaAt(G,H,r,n)IntegerVectorZero(x,y,z,n,k)Original native command in the exact edition
  2. L40
    specialize jordan_enumeration_index_map_entry (k)
  3. L41
    specialize jordan_enumeration_index_map_entry (A)
  4. L42
    specialize jordan_enumeration_index_map_entry (B)
  5. L43
    specialize jordan_enumeration_index_map_entry (C)
  6. L44
    specialize jordan_enumeration_index_map_entry (D)
  7. L45
    specialize jordan_enumeration_index_map_entry (E)
  8. L46
    specialize jordan_enumeration_index_map_entry (F)
  9. L47
    specialize jordan_enumeration_index_map_entry (G)
  10. L48
    specialize jordan_enumeration_index_map_entry (H)
12Use earlier factsL49–58

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

  1. L49
    specialize jordan_enumeration_index_map_entry (Z)
  2. L50
    specialize jordan_enumeration_index_map_entry (W)
  3. L51
    specialize jordan_enumeration_index_map_entry (u)
  4. L52
    specialize jordan_enumeration_index_map_entry (v)
  5. L53
    specialize jordan_enumeration_index_map_entry (i)
  6. L54
    specialize jordan_enumeration_index_map_entry (r)
  7. L55
    apply jordan_enumeration_index_map_entry
  8. L56
    exact hm
  9. L57
    exact hi
  10. L58
    exact hat
13Establish hmjL59–68

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

  1. L59
    have hmj : Lt(r,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,j,x) ∧ BetaAt(C,D,j,y) → BetaAt(E,F,r,z) ∧ BetaAt(G,H,r,n) → IntegerVectorZero(x,y,z,n,k))Definitions: Lt(r,v)BetaAt(A,B,j,x)BetaAt(C,D,j,y)BetaAt(E,F,r,z)BetaAt(G,H,r,n)IntegerVectorZero(x,y,z,n,k)Original native command in the exact edition
  2. L60
    specialize jordan_enumeration_index_map_entry (k)
  3. L61
    specialize jordan_enumeration_index_map_entry (A)
  4. L62
    specialize jordan_enumeration_index_map_entry (B)
  5. L63
    specialize jordan_enumeration_index_map_entry (C)
  6. L64
    specialize jordan_enumeration_index_map_entry (D)
  7. L65
    specialize jordan_enumeration_index_map_entry (E)
  8. L66
    specialize jordan_enumeration_index_map_entry (F)
  9. L67
    specialize jordan_enumeration_index_map_entry (G)
  10. L68
    specialize jordan_enumeration_index_map_entry (H)
14Use earlier factsL69–78

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

  1. L69
    specialize jordan_enumeration_index_map_entry (Z)
  2. L70
    specialize jordan_enumeration_index_map_entry (W)
  3. L71
    specialize jordan_enumeration_index_map_entry (u)
  4. L72
    specialize jordan_enumeration_index_map_entry (v)
  5. L73
    specialize jordan_enumeration_index_map_entry (j)
  6. L74
    specialize jordan_enumeration_index_map_entry (r)
  7. L75
    apply jordan_enumeration_index_map_entry
  8. L76
    exact hm
  9. L77
    exact hj
  10. L78
    exact hbt
15Separate the logical casesL79–82

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

  1. L79
    cases hmi
  2. L80
    cases hmj
  3. L81
    cases hl
  4. L82
    cases hr
16Establish htL83–86

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hr left.

  1. L83
    have ht : ∃ b. ∃ c. BetaAt(E,F,r,b) ∧ BetaAt(G,H,r,c) ∧ (BetaPrefixInto(b,c,k,n) ∧ JordanPrimitiveTuple(n,b,c,k))Definitions: BetaAt(E,F,r,b)BetaAt(G,H,r,c)BetaPrefixInto(b,c,k,n)JordanPrimitiveTuple(n,b,c,k)Original native command in the exact edition
  2. L84
    specialize hr_left (r)
  3. L85
    apply hr_left
  4. L86
    exact hmi_left
17Separate the logical casesL87–90

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

  1. L87
    cases ht
  2. L88
    cases ht_witness
  3. L89
    cases ht_witness_witness
  4. L90
    cases ht_witness_witness_right
18Establish haL91–94

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hl left.

  1. L91
    have ha : ∃ b. ∃ c. BetaAt(A,B,i,b) ∧ BetaAt(C,D,i,c) ∧ (BetaPrefixInto(b,c,k,n) ∧ JordanPrimitiveTuple(n,b,c,k))Definitions: BetaAt(A,B,i,b)BetaAt(C,D,i,c)BetaPrefixInto(b,c,k,n)JordanPrimitiveTuple(n,b,c,k)Original native command in the exact edition
  2. L92
    specialize hl_left (i)
  3. L93
    apply hl_left
  4. L94
    exact hi
19Separate the logical casesL95–98

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

  1. L95
    cases ha
  2. L96
    cases ha_witness
  3. L97
    cases ha_witness_witness
  4. L98
    cases ha_witness_witness_right
20Establish hbL99–102

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hl left.

  1. L99
    have hb : ∃ b. ∃ c. BetaAt(A,B,j,b) ∧ BetaAt(C,D,j,c) ∧ (BetaPrefixInto(b,c,k,n) ∧ JordanPrimitiveTuple(n,b,c,k))Definitions: BetaAt(A,B,j,b)BetaAt(C,D,j,c)BetaPrefixInto(b,c,k,n)JordanPrimitiveTuple(n,b,c,k)Original native command in the exact edition
  2. L100
    specialize hl_left (j)
  3. L101
    apply hl_left
  4. L102
    exact hj
21Separate the logical casesL103–106

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

  1. L103
    cases hb
  2. L104
    cases hb_witness
  3. L105
    cases hb_witness_witness
  4. L106
    cases hb_witness_witness_right
22Establish heaL107–114

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hmi right.

  1. L107
    have hea : IntegerVectorZero(x2,x3,x,x1,k)Definitions: IntegerVectorZero(x2,x3,x,x1,k)Original native command in the exact edition
  2. L108
    specialize hmi_right (x2)
  3. L109
    specialize hmi_right (x3)
  4. L110
    specialize hmi_right (x)
  5. L111
    specialize hmi_right (x1)
  6. L112
    apply hmi_right
  7. L113
    exact ha_witness_witness_left
  8. L114
    exact ht_witness_witness_left
23Establish hebL115–122

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply hmj right.

  1. L115
    have heb : IntegerVectorZero(x4,x5,x,x1,k)Definitions: IntegerVectorZero(x4,x5,x,x1,k)Original native command in the exact edition
  2. L116
    specialize hmj_right (x4)
  3. L117
    specialize hmj_right (x5)
  4. L118
    specialize hmj_right (x)
  5. L119
    specialize hmj_right (x1)
  6. L120
    apply hmj_right
  7. L121
    exact hb_witness_witness_left
  8. L122
    exact ht_witness_witness_left
24Establish hrevL123–130

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply jordan tuple equal symm.

  1. L123
    have hrev : IntegerVectorZero(x,x1,x4,x5,k)Definitions: IntegerVectorZero(x,x1,x4,x5,k)Original native command in the exact edition
  2. L124
    specialize jordan_tuple_equal_symm (x4)
  3. L125
    specialize jordan_tuple_equal_symm (x5)
  4. L126
    specialize jordan_tuple_equal_symm (x)
  5. L127
    specialize jordan_tuple_equal_symm (x1)
  6. L128
    specialize jordan_tuple_equal_symm (k)
  7. L129
    apply jordan_tuple_equal_symm
  8. L130
    exact heb
25Establish heqL131–140

Establish this local claim before using it. It is not an additional assumption. The following proof commands apply jordan tuple equal trans.

  1. L131
    have heq : IntegerVectorZero(x2,x3,x4,x5,k)Definitions: IntegerVectorZero(x2,x3,x4,x5,k)Original native command in the exact edition
  2. L132
    specialize jordan_tuple_equal_trans (x2)
  3. L133
    specialize jordan_tuple_equal_trans (x3)
  4. L134
    specialize jordan_tuple_equal_trans (x)
  5. L135
    specialize jordan_tuple_equal_trans (x1)
  6. L136
    specialize jordan_tuple_equal_trans (x4)
  7. L137
    specialize jordan_tuple_equal_trans (x5)
  8. L138
    specialize jordan_tuple_equal_trans (k)
  9. L139
    apply jordan_tuple_equal_trans
  10. L140
    exact hea
26Use earlier factsL141–150

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

  1. L141
    exact hrev
  2. L142
    specialize jordan_enumeration_distinct (k)
  3. L143
    specialize jordan_enumeration_distinct (n)
  4. L144
    specialize jordan_enumeration_distinct (A)
  5. L145
    specialize jordan_enumeration_distinct (B)
  6. L146
    specialize jordan_enumeration_distinct (C)
  7. L147
    specialize jordan_enumeration_distinct (D)
  8. L148
    specialize jordan_enumeration_distinct (u)
  9. L149
    specialize jordan_enumeration_distinct (i)
  10. L150
    specialize jordan_enumeration_distinct (j)
27Use earlier factsL151–160

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

  1. L151
    specialize jordan_enumeration_distinct (x2)
  2. L152
    specialize jordan_enumeration_distinct (x3)
  3. L153
    specialize jordan_enumeration_distinct (x4)
  4. L154
    specialize jordan_enumeration_distinct (x5)
  5. L155
    apply jordan_enumeration_distinct
  6. L156
    exact hl
  7. L157
    exact hi
  8. L158
    exact hj
  9. L159
    exact ha_witness_witness_left
  10. L160
    exact hb_witness_witness_left
28Use earlier factsL161–161

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

  1. L161
    exact heq

Library-wide reading audit

Original defined command ledger · 161 lines
  1. 0001intro k
  2. 0002intro n
  3. 0003intro A
  4. 0004intro B
  5. 0005intro C
  6. 0006intro D
  7. 0007intro u
  8. 0008intro E
  9. 0009intro F
  10. 0010intro G
  11. 0011intro H
  12. 0012intro v
  13. 0013intro Z
  14. 0014intro W
  15. 0015intro hl
  16. 0016intro hr
  17. 0017intro hm
  18. 0018split
  19. 0019intro i
  20. 0020intro hi
  21. 0021have hv : ∃ j. BetaAt(Z,W,i,j) ∧ (Lt(j,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,i,x) ∧ BetaAt(C,D,i,y) → BetaAt(E,F,j,z) ∧ BetaAt(G,H,j,n) → IntegerVectorZero(x,y,z,n,k)))
  22. 0022specialize hm (i)
  23. 0023apply hm
  24. 0024exact hi
  25. 0025cases hv
  26. 0026cases hv_witness
  27. 0027cases hv_witness_right
  28. 0028exists x
  29. 0029split
  30. 0030exact hv_witness_left
  31. 0031exact hv_witness_right_left
  32. 0032intro i
  33. 0033intro j
  34. 0034intro r
  35. 0035intro hi
  36. 0036intro hj
  37. 0037intro hat
  38. 0038intro hbt
  39. 0039have hmi : Lt(r,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,i,x) ∧ BetaAt(C,D,i,y) → BetaAt(E,F,r,z) ∧ BetaAt(G,H,r,n) → IntegerVectorZero(x,y,z,n,k))
  40. 0040specialize jordan_enumeration_index_map_entry (k)
  41. 0041specialize jordan_enumeration_index_map_entry (A)
  42. 0042specialize jordan_enumeration_index_map_entry (B)
  43. 0043specialize jordan_enumeration_index_map_entry (C)
  44. 0044specialize jordan_enumeration_index_map_entry (D)
  45. 0045specialize jordan_enumeration_index_map_entry (E)
  46. 0046specialize jordan_enumeration_index_map_entry (F)
  47. 0047specialize jordan_enumeration_index_map_entry (G)
  48. 0048specialize jordan_enumeration_index_map_entry (H)
  49. 0049specialize jordan_enumeration_index_map_entry (Z)
  50. 0050specialize jordan_enumeration_index_map_entry (W)
  51. 0051specialize jordan_enumeration_index_map_entry (u)
  52. 0052specialize jordan_enumeration_index_map_entry (v)
  53. 0053specialize jordan_enumeration_index_map_entry (i)
  54. 0054specialize jordan_enumeration_index_map_entry (r)
  55. 0055apply jordan_enumeration_index_map_entry
  56. 0056exact hm
  57. 0057exact hi
  58. 0058exact hat
  59. 0059have hmj : Lt(r,v) ∧ (∀ x. ∀ y. ∀ z. ∀ n. BetaAt(A,B,j,x) ∧ BetaAt(C,D,j,y) → BetaAt(E,F,r,z) ∧ BetaAt(G,H,r,n) → IntegerVectorZero(x,y,z,n,k))
  60. 0060specialize jordan_enumeration_index_map_entry (k)
  61. 0061specialize jordan_enumeration_index_map_entry (A)
  62. 0062specialize jordan_enumeration_index_map_entry (B)
  63. 0063specialize jordan_enumeration_index_map_entry (C)
  64. 0064specialize jordan_enumeration_index_map_entry (D)
  65. 0065specialize jordan_enumeration_index_map_entry (E)
  66. 0066specialize jordan_enumeration_index_map_entry (F)
  67. 0067specialize jordan_enumeration_index_map_entry (G)
  68. 0068specialize jordan_enumeration_index_map_entry (H)
  69. 0069specialize jordan_enumeration_index_map_entry (Z)
  70. 0070specialize jordan_enumeration_index_map_entry (W)
  71. 0071specialize jordan_enumeration_index_map_entry (u)
  72. 0072specialize jordan_enumeration_index_map_entry (v)
  73. 0073specialize jordan_enumeration_index_map_entry (j)
  74. 0074specialize jordan_enumeration_index_map_entry (r)
  75. 0075apply jordan_enumeration_index_map_entry
  76. 0076exact hm
  77. 0077exact hj
  78. 0078exact hbt
  79. 0079cases hmi
  80. 0080cases hmj
  81. 0081cases hl
  82. 0082cases hr
  83. 0083have ht : ∃ b. ∃ c. BetaAt(E,F,r,b) ∧ BetaAt(G,H,r,c) ∧ (BetaPrefixInto(b,c,k,n) ∧ JordanPrimitiveTuple(n,b,c,k))
  84. 0084specialize hr_left (r)
  85. 0085apply hr_left
  86. 0086exact hmi_left
  87. 0087cases ht
  88. 0088cases ht_witness
  89. 0089cases ht_witness_witness
  90. 0090cases ht_witness_witness_right
  91. 0091have ha : ∃ b. ∃ c. BetaAt(A,B,i,b) ∧ BetaAt(C,D,i,c) ∧ (BetaPrefixInto(b,c,k,n) ∧ JordanPrimitiveTuple(n,b,c,k))
  92. 0092specialize hl_left (i)
  93. 0093apply hl_left
  94. 0094exact hi
  95. 0095cases ha
  96. 0096cases ha_witness
  97. 0097cases ha_witness_witness
  98. 0098cases ha_witness_witness_right
  99. 0099have hb : ∃ b. ∃ c. BetaAt(A,B,j,b) ∧ BetaAt(C,D,j,c) ∧ (BetaPrefixInto(b,c,k,n) ∧ JordanPrimitiveTuple(n,b,c,k))
  100. 0100specialize hl_left (j)
  101. 0101apply hl_left
  102. 0102exact hj
  103. 0103cases hb
  104. 0104cases hb_witness
  105. 0105cases hb_witness_witness
  106. 0106cases hb_witness_witness_right
  107. 0107have hea : IntegerVectorZero(x2,x3,x,x1,k)
  108. 0108specialize hmi_right (x2)
  109. 0109specialize hmi_right (x3)
  110. 0110specialize hmi_right (x)
  111. 0111specialize hmi_right (x1)
  112. 0112apply hmi_right
  113. 0113exact ha_witness_witness_left
  114. 0114exact ht_witness_witness_left
  115. 0115have heb : IntegerVectorZero(x4,x5,x,x1,k)
  116. 0116specialize hmj_right (x4)
  117. 0117specialize hmj_right (x5)
  118. 0118specialize hmj_right (x)
  119. 0119specialize hmj_right (x1)
  120. 0120apply hmj_right
  121. 0121exact hb_witness_witness_left
  122. 0122exact ht_witness_witness_left
  123. 0123have hrev : IntegerVectorZero(x,x1,x4,x5,k)
  124. 0124specialize jordan_tuple_equal_symm (x4)
  125. 0125specialize jordan_tuple_equal_symm (x5)
  126. 0126specialize jordan_tuple_equal_symm (x)
  127. 0127specialize jordan_tuple_equal_symm (x1)
  128. 0128specialize jordan_tuple_equal_symm (k)
  129. 0129apply jordan_tuple_equal_symm
  130. 0130exact heb
  131. 0131have heq : IntegerVectorZero(x2,x3,x4,x5,k)
  132. 0132specialize jordan_tuple_equal_trans (x2)
  133. 0133specialize jordan_tuple_equal_trans (x3)
  134. 0134specialize jordan_tuple_equal_trans (x)
  135. 0135specialize jordan_tuple_equal_trans (x1)
  136. 0136specialize jordan_tuple_equal_trans (x4)
  137. 0137specialize jordan_tuple_equal_trans (x5)
  138. 0138specialize jordan_tuple_equal_trans (k)
  139. 0139apply jordan_tuple_equal_trans
  140. 0140exact hea
  141. 0141exact hrev
  142. 0142specialize jordan_enumeration_distinct (k)
  143. 0143specialize jordan_enumeration_distinct (n)
  144. 0144specialize jordan_enumeration_distinct (A)
  145. 0145specialize jordan_enumeration_distinct (B)
  146. 0146specialize jordan_enumeration_distinct (C)
  147. 0147specialize jordan_enumeration_distinct (D)
  148. 0148specialize jordan_enumeration_distinct (u)
  149. 0149specialize jordan_enumeration_distinct (i)
  150. 0150specialize jordan_enumeration_distinct (j)
  151. 0151specialize jordan_enumeration_distinct (x2)
  152. 0152specialize jordan_enumeration_distinct (x3)
  153. 0153specialize jordan_enumeration_distinct (x4)
  154. 0154specialize jordan_enumeration_distinct (x5)
  155. 0155apply jordan_enumeration_distinct
  156. 0156exact hl
  157. 0157exact hi
  158. 0158exact hj
  159. 0159exact ha_witness_witness_left
  160. 0160exact hb_witness_witness_left
  161. 0161exact heq