@@ -933,6 +933,45 @@ theorem realize_iExsUnique [Finite γ] {φ : L.Formula (α ⊕ γ)} {v : α →
933933
934934end BoundedFormula
935935
936+ namespace Formula
937+
938+ @[simp]
939+ theorem realize_exClosure [DecidableEq α] (φ : L.Formula α) :
940+ φ.exClosure.Realize M ↔
941+ ∃ v : φ.freeVarFinset → M, Formula.Realize (φ.restrictFreeVar id) v := by
942+ simp [Sentence.Realize, Formula.exClosure, Formula.realize_iExs]
943+
944+ theorem realize_exClosure_of_realize_equivSentence [DecidableEq α] [L[[α]].Structure M]
945+ [(L.lhomWithConstants α).IsExpansionOn M] {φ : L.Formula α}
946+ (h : (Formula.equivSentence φ).Realize M) : φ.exClosure.Realize M := by
947+ rw [Formula.realize_exClosure]
948+ exists fun a => (L.con (a : α) : M)
949+ simpa [Formula.Realize, BoundedFormula.realize_restrictFreeVar] using h
950+
951+ theorem exists_realize_equivSentence_iff_realize_exClosure
952+ [DecidableEq α] [Nonempty M] {φ : L.Formula α} :
953+ (∃ v : α → M,
954+ letI := (constantsOn.structure v);
955+ (Formula.equivSentence φ).Realize M) ↔ (φ.exClosure.Realize M) := by
956+ constructor
957+ · rintro ⟨v, hv⟩
958+ exact (Formula.realize_exClosure φ).mpr ⟨fun a => v a,
959+ (BoundedFormula.realize_restrictFreeVar (φ := φ) (f := id) (v := fun a => v a) (v' := v)
960+ (fun _ => rfl)).2
961+ (by simpa [Formula.Realize]
962+ using (realize_equivSentence_symm M (Formula.equivSentence φ) v).2 hv)⟩
963+ · intro h
964+ classical
965+ obtain ⟨v, hv⟩ := (Formula.realize_exClosure φ).1 h
966+ let v' := fun a => if hmem : a ∈ φ.freeVarFinset
967+ then v ⟨a, hmem⟩ else Classical.choice inferInstance
968+ exists v'
969+ refine (Formula.realize_equivSentence_symm M (Formula.equivSentence φ) v').mp ?_
970+ simpa [Equiv.symm_apply_apply, Formula.Realize] using
971+ (BoundedFormula.realize_restrictFreeVar v' (by grind)).1 hv
972+
973+ end Formula
974+
936975namespace StrongHomClass
937976
938977variable {F : Type *} [EquivLike F M N] [StrongHomClass L F M N] (g : F)
0 commit comments