proposition: Fact fot_def_comp s v : In s ls -> (forall p, fot_definable (fun φ => vec_pos (v φ) p)) -> fot_definable (fun φ => fom_syms M s (v φ)).
proof: Proof. intros H0 H; apply vec_reif_t in H. destruct H as (w & Hw). exists (in_fot _ w); split; rew fot. + intros x [ -> | H ]; auto; revert H. rewrite in_flat_map. intros (t & H1 & H2). apply in_vec_list, in_vec_inv in H1. destruct H1 as (p & <- ). revert H2; apply Hw. + intros phi; rew fot; f_equal. apply vec_pos_ext; intros p. rewrite vec_pos_map. apply Hw; auto. Qed.
imports: List Arith Lia Undecidability.Shared.Libs.DLW.Utils(utils_tac utils_list finite) Undecidability.Shared.Libs.DLW.Vec(pos vec) Undecidability.FOL.TRAKHTENBROT(notations utils fol_ops fo_sig fo_terms fo_logic)