Section Σ1_model.
Variable (V : Type) (n : nat) (HV : V -> False).
Definition ΣP1 : fo_signature.
Let K v := if Q_dec v then true else false.
Let HK v : K v = true <-> Q v.
Let Kf x : K (vec_set_pos (fun p => f p x)) = true.
Let M' : fo_model ΣP1 (sig (fun v => K v = true)).
Variable (A : fol_form ΣP1) (HA : fol_sem M rho A).
Local Theorem bounded_model : exists (Q : vec bool n -> bool)
(M' : fo_model ΣP1 (sig (fun v => Q v = true)))
(_ : fo_model_dec M') psi,
fol_sem M' psi A.
End Σ1_model.
(* A monadic FO formula which has a model also has a model over base type X which is a decidable subtype of bool^n where n bound the number of unary predicates *)

Theorem ΣP1_model_bounded n V (A : fol_form (ΣP1 V n)) :
(V -> False)
-> fo_form_fin_dec_SAT A
-> exists (Q : vec bool n -> bool),
fo_form_fin_dec_SAT_in A (sig (fun v => Q v = true)).