Section decidable.
(* REMARK: not requiring the fom_rels M s relation to be decidable would allow hiding uncomputability inside the model which would be kind of cheating. The semantic relation should be decidable, only the (finite) satisfiability relation should be undec *)
(* For the semantics relation to be decidable over a finite domain, it is necessary and SUFFICIENT that the sem_pred relation is decidable or equivalently, each predicate is interpreted as a map: vec X _ -> bool *)
Variable (M_fin : finite_t X).
Variable (rels_dec : fo_model_dec M).
End decidable.
(* Semantics commutes with substitutions ... good *)

Theorem fol_sem_subst φ σ A : ⟪ A⦃σ⦄ ⟫ φ <-> ⟪A⟫ (fun n => ⟦σ n⟧ φ).