Skip to content

Commit fa7fd3c

Browse files
committed
chore(ModelTheory): Tweaks involving the empty language (#16192)
Makes `FirstOrder.Language.emptyStructure` a `def` instead of an `instance` Removes `def`s that could be accomplished with `StrongHomClass.toEmbedding` and `StrongHomClass.toEquiv`
1 parent 7b52ff5 commit fa7fd3c

File tree

2 files changed

+19
-43
lines changed

2 files changed

+19
-43
lines changed

Mathlib/ModelTheory/Basic.lean

Lines changed: 15 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -934,14 +934,24 @@ end SumStructure
934934

935935
section Empty
936936

937-
section
937+
/-- Any type can be made uniquely into a structure over the empty language. -/
938+
def emptyStructure : Language.empty.Structure M :=
939+
⟨Empty.elim, Empty.elim⟩
940+
941+
instance : Unique (Language.empty.Structure M) :=
942+
⟨⟨Language.emptyStructure⟩, fun a => by
943+
ext _ f <;> exact Empty.elim f⟩
938944

939945
variable [Language.empty.Structure M] [Language.empty.Structure N]
940946

947+
instance (priority := 100) strongHomClassEmpty {F} [FunLike F M N] :
948+
StrongHomClass Language.empty F M N :=
949+
fun _ _ f => Empty.elim f, fun _ _ r => Empty.elim r⟩
950+
941951
@[simp]
942952
theorem empty.nonempty_embedding_iff :
943953
Nonempty (M ↪[Language.empty] N) ↔ Cardinal.lift.{w'} #M ≤ Cardinal.lift.{w} #N :=
944-
_root_.trans ⟨Nonempty.map fun f => f.toEmbedding, Nonempty.map fun f => { toEmbedding := f }
954+
_root_.trans ⟨Nonempty.map fun f => f.toEmbedding, Nonempty.map StrongHomClass.toEmbedding⟩
945955
Cardinal.lift_mk_le'.symm
946956

947957
@[simp]
@@ -950,47 +960,12 @@ theorem empty.nonempty_equiv_iff :
950960
_root_.trans ⟨Nonempty.map fun f => f.toEquiv, Nonempty.map fun f => { toEquiv := f }⟩
951961
Cardinal.lift_mk_eq'.symm
952962

953-
end
954-
955-
instance emptyStructure : Language.empty.Structure M :=
956-
⟨Empty.elim, Empty.elim⟩
957-
958-
instance : Unique (Language.empty.Structure M) :=
959-
⟨⟨Language.emptyStructure⟩, fun a => by
960-
ext _ f <;> exact Empty.elim f⟩
961-
962-
instance (priority := 100) strongHomClassEmpty {F M N} [FunLike F M N] :
963-
StrongHomClass Language.empty F M N :=
964-
fun _ _ f => Empty.elim f, fun _ _ r => Empty.elim r⟩
965-
966-
/-- Makes a `Language.empty.Hom` out of any function. -/
963+
/-- Makes a `Language.empty.Hom` out of any function.
964+
This is only needed because there is no instance of `FunLike (M → N) M N`, and thus no instance of
965+
`Language.empty.HomClass M N`. -/
967966
@[simps]
968967
def _root_.Function.emptyHom (f : M → N) : M →[Language.empty] N where toFun := f
969968

970-
/-- Makes a `Language.empty.Embedding` out of any function. -/
971-
--@[simps] Porting note: commented out and lemmas added manually
972-
def _root_.Embedding.empty (f : M ↪ N) : M ↪[Language.empty] N where toEmbedding := f
973-
974-
@[simp]
975-
theorem toFun_embedding_empty (f : M ↪ N) : (Embedding.empty f : M → N) = f :=
976-
rfl
977-
978-
@[simp]
979-
theorem toEmbedding_embedding_empty (f : M ↪ N) : (Embedding.empty f).toEmbedding = f :=
980-
rfl
981-
982-
/-- Makes a `Language.empty.Equiv` out of any function. -/
983-
--@[simps] Porting note: commented out and lemmas added manually
984-
def _root_.Equiv.empty (f : M ≃ N) : M ≃[Language.empty] N where toEquiv := f
985-
986-
@[simp]
987-
theorem toFun_equiv_empty (f : M ≃ N) : (Equiv.empty f : M → N) = f :=
988-
rfl
989-
990-
@[simp]
991-
theorem toEquiv_equiv_empty (f : M ≃ N) : (Equiv.empty f).toEquiv = f :=
992-
rfl
993-
994969
end Empty
995970

996971
end Language

Mathlib/ModelTheory/Satisfiability.lean

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -578,8 +578,9 @@ theorem empty_theory_categorical (T : Language.empty.Theory) : κ.Categorical T
578578

579579
theorem empty_infinite_Theory_isComplete : Language.empty.infiniteTheory.IsComplete :=
580580
(empty_theory_categorical.{0} ℵ₀ _).isComplete ℵ₀ _ le_rfl (by simp)
581-
⟨Theory.Model.bundled ((model_infiniteTheory_iff Language.empty).2
582-
(inferInstanceAs (Infinite ℕ)))⟩ fun M =>
583-
(model_infiniteTheory_iff Language.empty).1 M.is_model
581+
by
582+
haveI : Language.empty.Structure ℕ := emptyStructure
583+
exact ((model_infiniteTheory_iff Language.empty).2 (inferInstanceAs (Infinite ℕ))).bundled⟩
584+
fun M => (model_infiniteTheory_iff Language.empty).1 M.is_model
584585

585586
end Cardinal

0 commit comments

Comments
 (0)