Theorem: FirstOrder.Language.Theory.exists_modelType_is_realized_in
File: Mathlib/ModelTheory/Types.lean

Proof steps:
state_before: L : Language
T : L.Theory
α : Type w
M : Type w'
inst✝² : L.Structure M
inst✝¹ : Nonempty M
inst✝ : M ⊨ T
p : T.CompleteType α
⊢ ∃ M, p ∈ T.realizedTypes (↑M) α
state_after: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
⊢ ∃ M, p ∈ T.realizedTypes (↑M) α
tactic: obtain ⟨M⟩ := p.isMaximal.1
state_before: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
⊢ ∃ M, p ∈ T.realizedTypes (↑M) α
state_after: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
⊢ (T.typeOf fun a => ↑(L.con a)) = p
tactic: refine ⟨(M.subtheoryModel p.subset).reduct (L.lhomWithConstants α), fun a => (L.con a : M), ?_⟩
state_before: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
⊢ (T.typeOf fun a => ↑(L.con a)) = p
state_after: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
φ : L[[α]].Sentence
⊢ (φ ∈ T.typeOf fun a => ↑(L.con a)) ↔ φ ∈ p
tactic: refine SetLike.ext fun φ => ?_
state_before: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
φ : L[[α]].Sentence
⊢ (φ ∈ T.typeOf fun a => ↑(L.con a)) ↔ φ ∈ p
state_after: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
φ : L[[α]].Sentence
⊢ ((Formula.equivSentence.symm φ).Realize fun a => ↑(L.con a)) ↔ φ ∈ p
tactic: simp only [CompleteType.mem_typeOf]
state_before: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
φ : L[[α]].Sentence
⊢ ((Formula.equivSentence.symm φ).Realize fun a => ↑(L.con a)) ↔ φ ∈ p
state_after: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
φ : L[[α]].Sentence
⊢ ↑(ModelType.reduct (L.lhomWithConstants α) (M.subtheoryModel ⋯)) ⊨ φ ↔ ↑M ⊨ φ
tactic: refine
    (@Formula.realize_equivSentence_symm_con _
      ((M.subtheoryModel p.subset).reduct (L.lhomWithConstants α)) _ _ M.struc _ φ).trans
      (_root_.trans (_root_.trans ?_ (p.isMaximal.isComplete.realize_sentence_iff φ M))
        (p.isMaximal.mem_iff_models φ).symm)
state_before: case intro
L : Language
T : L.Theory
α : Type w
M✝ : Type w'
inst✝² : L.Structure M✝
inst✝¹ : Nonempty M✝
inst✝ : M✝ ⊨ T
p : T.CompleteType α
M : ModelType ↑p
φ : L[[α]].Sentence
⊢ ↑(ModelType.reduct (L.lhomWithConstants α) (M.subtheoryModel ⋯)) ⊨ φ ↔ ↑M ⊨ φ
state_after: no goals
tactic: rfl