Section counter_model_to_class_FO_definability.
(* We show that there is a model over Σ = Σrel 2 = {ø,{=²}} where ≡ is identity but x ≡ _ is not definable by a FO formula with a single free variable  There are two non equivalent values that cannot be distinguished when using a single variable  Even though ≡ is FO definable by a formula with two free variables, equivalences classes of ≡ are not FO definable *)
Let Σ := Σrel 2.
Let M : fo_model Σ bool.
Infix "≡" := (fom_eq (Σ := Σ) nil (tt::nil) M) (at level 70, no associativity).
Hint Resolve finite_t_bool : core.
Let true_is_not_false : ~ true ≡ false.
Let no_disctinct A phi : (forall n, In n (fol_vars A) -> n = 0)
-> ⟪A⟫ true·phi <-> ⟪A⟫ false·phi.
(* There is a model over Σ2 with two values such that no FO formula with one free variable can distinguish those two values, but there is a FO formula with 2 free variables that distinguishes them *)

Theorem FO_does_not_characterize_classes :
exists (M : fo_model Σ bool) (_ : fo_model_dec M) (x y : bool),
~ fom_eq (Σ := Σ) nil (tt::nil) M x y
/\ forall A φ, (forall n, In n (fol_vars A) -> n = 0)
-> fol_sem M x·φ A <-> fol_sem M y·φ A.