proposition: Fact fol_def_atom r v : In r lr -> (forall p, fot_definable (fun φ => vec_pos (v φ) p)) -> fol_definable (fun φ => fom_rels M r (v φ)).
proof: Proof. intros H0 H; apply vec_reif_t in H. destruct H as (w & Hw). exists (@fol_atom _ _ w); msplit 2. + simpl; intro s; 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. + simpl; intros ? [ -> | [] ]; auto. + intros phi; simpl. apply fol_equiv_ext; 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)