A -homomorphism elementary on old sorts is elementary
ProvedMoritaEquiv.MoritaData.elemEmb_of_reductSame setting: is a -theory, is Morita data with extension in signature , and are models of .
Statement. Let be a sort-indexed family of maps satisfying:
- (homomorphism) commutes with the interpretation of every function symbol of , and
- (elementary on old sorts) the restriction of to the old sorts is an elementary embedding of -reducts: for every -formula and every assignment in ,
Then is an elementary embedding of -structures: for every -formula , in any context of -sorts, and every assignment in ,
This is the second half of the "Π is full" argument in Barrett–Halvorson. Each variable of a new sort is represented by variables of old sorts: product elements by their projections, coproduct elements by a preimage under an injection, subset elements by their inclusion, and quotient elements by a representative. This turns into a -formula in old-sorted variables. By the translation theorem (Barrett–Halvorson, Theorem 4.3 / Corollary 4.1), that formula is -equivalent to a -formula, and elementarity on the reducts applies to the -formula. The homomorphism property of carries the representation from over to .
import Mathlib import Definitions.Def_MoritaEquiv_defs open CategoryTheory
namespace MoritaEquiv
theorem MoritaData.elemEmb_of_reduct {L : Sig} {T : Theory L} (D : MoritaData L T)
(N N' : Model D.ext) (g : ∀ s : D.sig.Srt, N.str.carrier s → N'.str.carrier s)
(hfun : ∀ {m : ℕ} {dom : Fin m → D.sig.Srt} {s : D.sig.Srt} (F : D.sig.Func m dom s)
(x : (j : Fin m) → N.str.carrier (dom j)),
g s (N.str.funMap F x) = N'.str.funMap F (fun j => g (dom j) (x j)))
(hold : ∀ {n : ℕ} {Γ : Fin n → L.Srt} (φ : Formula L Γ)
(v : (i : Fin n) → (N.str.reduct D.incl).carrier (Γ i)),
φ.Realize (N'.str.reduct D.incl) (fun i => g (D.incl.onSrt (Γ i)) (v i)) ↔
φ.Realize (N.str.reduct D.incl) v) :
∀ {n : ℕ} {Γ : Fin n → D.sig.Srt} (φ : Formula D.sig Γ) (v : (i : Fin n) → N.str.carrier (Γ i)),
φ.Realize N'.str (fun i => g (Γ i) (v i)) ↔ φ.Realize N.str v := by sorry
end MoritaEquiv