Isomorphisms, embeddings, and injective homomorphisms #
We define isomorphisms between finite structures, prove they form an equivalence relation, and show that isomorphic structures have the same cardinality. We also define embeddings (injective maps that preserve and reflect relations, as in model theory) and the weaker injective homomorphisms (which only preserve them).
An isomorphism between two finite structures over the same vocabulary.
The forward map on the universe
The inverse map on the universe
Left inverse
Right inverse
- rel_map (i : Fin V.numRels) (args : Fin (V.relArity i) → Fin A.card) : A.rel i args ↔ B.rel i (self.toFun ∘ args)
Relations are preserved
Constants are preserved
Instances For
A ≅ B denotes an isomorphism between finite structures A and B.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The identity isomorphism.
Equations
Instances For
Composition of isomorphisms.
Equations
Instances For
Isomorphic structures have the same cardinality.
An injective homomorphism of structure A into structure B: an injective
map of universes that preserves constants and carries every relation tuple of
A to a relation tuple of B. Relations are preserved but not reflected, so
B may relate images of elements that A does not relate; the notion that
also reflects them is Embedding.
The map of universes
- injective : Function.Injective self.toFun
The map is injective
- rel_map (i : Fin V.numRels) (args : Fin (V.relArity i) → Fin A.card) : A.rel i args → B.rel i (self.toFun ∘ args)
Relations are preserved (forward direction only)
Constants are preserved
Instances For
Every isomorphism gives an injective homomorphism.
Equations
- Complexity.DescriptiveComplexity.InjectiveHom.ofIso f = { toFun := f.toFun, injective := ⋯, rel_map := ⋯, const_map := ⋯ }
Instances For
An embedding of structure A into structure B, in the model-theoretic
sense (Mathlib's FirstOrder.Language.Embedding): an injective map of
universes that preserves constants and both preserves and reflects
relations. Its image is a substructure of B isomorphic to A, so
Nonempty (Embedding A B) says that A is, up to isomorphism, a
substructure of B.
The map of universes
- injective : Function.Injective self.toFun
The map is injective
- rel_iff (i : Fin V.numRels) (args : Fin (V.relArity i) → Fin A.card) : A.rel i args ↔ B.rel i (self.toFun ∘ args)
Relations are preserved and reflected
Constants are preserved
Instances For
The identity embedding.
Equations
- Complexity.DescriptiveComplexity.Embedding.refl A = { toFun := id, injective := ⋯, rel_iff := ⋯, const_map := ⋯ }
Instances For
Every isomorphism is an embedding.
Equations
- Complexity.DescriptiveComplexity.Embedding.ofIso f = { toFun := f.toFun, injective := ⋯, rel_iff := ⋯, const_map := ⋯ }
Instances For
An embedding is in particular an injective homomorphism.
Equations
- f.toInjectiveHom = { toFun := f.toFun, injective := ⋯, rel_map := ⋯, const_map := ⋯ }