proposition: Lemma reachable_n_mon {M n m X Y} : n <= m -> reachable_n M n X Y -> reachable_n M m X Y.
proof: Proof. elim: n m X Y. { move=> m X Y ?. move Hn: (0) => n HXY. case: HXY Hn => *; [by apply: reach_refl | by lia]. } move=> n IH m X Y Hnm. move Hn': (S n) => n' HXY. case: HXY Hn' => [|{}n'] *; first by apply: reach_refl. have ->: m = S (m - 1) by lia. apply: reach_step; first by eassumption. apply: IH; first by lia. by (have ->: n = n' by lia). Qed.
imports: List Lia Relation_Operators Undecidability.StackMachines.Util(Nat_facts List_facts) Undecidability.StackMachines.Reductions.CM1_HALT_to_SMNdl_UB.SMX ssreflect ssrbool ssrfun