Section enum_models.
Variables (Σ : fo_signature)
(HΣ1 : discrete (syms Σ))
(HΣ2 : discrete (rels Σ))
(X : Type)
(HX1 : finite_t X)
(HX2 : discrete X) (x : X)
(ls : list (syms Σ))
(lr : list (rels Σ))
(ln : list nat).
Let funs := (forall s, vec X (ar_syms Σ s) -> X).
Let Rs : funs -> funs -> Prop.
Let model := { M : fo_model Σ X &
{ _ : nat -> X & fo_model_dec M } }.
Local Definition FO_model_equiv : model -> model -> Prop.
Local Definition FO_sem : model -> fol_form Σ -> Prop.

Theorem FSAT_FO_sem_eq A : @fo_form_fin_dec_SAT_in Σ A X <-> exists M, FO_sem M A.