proposition: Lemma list_le_spec n m : n el list_le m <-> n <= m.
proof: Proof. induction n as [|n IH] in m|-*. + split; try lia. intros _. induction m as [|m IH]. 1:now left. cbn. apply in_app_iff. now left. + split. - induction m as [|m IHm]. * cbn. intros [|[]]; discriminate. * cbn. destruct (Nat.eq_dec n m) as [->|Hne]; try lia. intros [H1|H2]%in_app_iff. 1: specialize (IHm H1); lia. cbn in H2; lia. - induction m as [|m IHm]. * intros H; lia. * intros H. cbn. apply in_app_iff. assert (n = m \/ n < m) as [->|Hr] by lia. 1: right; now left. left. apply IHm. lia. Qed.
imports: Arith Lia List Bool Eqdep_dec EqdepFacts Undecidability.Shared.Libs.DLW(utils_tac utils_nat utils_list finite pos vec) Undecidability.Synthetic(Definitions DecidabilityFacts EnumerabilityFacts ListEnumerabilityFacts ReducibilityFacts) Undecidability(Shared.ListAutomation Shared.Dec) Undecidability.MuRec.Util.recalg