(* ------------------------------------------- *)

Definition decide_Path : forall a, lc_tm a -> (exists T, Path T a) \/ (forall T, not (Path T a)).

(* Specifications: *)
Lemma tm_subst_tm_tm_Value_mutual : (forall v, CoercedValue v -> forall b x, lc_tm b -> CoercedValue (tm_subst_tm_tm b x v)) /\ (forall v, Value v -> forall b x, lc_tm b -> Value (tm_subst_tm_tm b x v)).
Lemma Value_tm_subst_tm_tm : (forall v b x, Value v -> lc_tm b -> Value (tm_subst_tm_tm b x v)).
Lemma CoercedValue_tm_subst_tm_tm : (forall v b x, CoercedValue v -> lc_tm b -> CoercedValue (tm_subst_tm_tm b x v)).
Qed. (* ----- *)
move: (H y ltac:(eauto) b x H0) => h0. rewrite co_subst_co_tm_open_tm_wrt_tm in h0; auto.
intros v b x H H0. apply co_subst_co_tm_Value_mutual; auto.
(* ------------------------------------------ *)
all: try solve [right; intro h; inversion h; try inversion H1; do
intros a.