# Finite Model Theory/Preliminaries

## First Order Logic (FO)[edit | edit source]

We only give a very rough summary of FO here. An introduction can be found at FO.

#### Syntax[edit | edit source]

Syntax is 'just' about sequences of signs.
The **alphabet** of FO consists of:

- Variables
- Logical Connectives: ,
- Quantifiers:
- Equality:
- Parenthesis: ), (
- n-ary Relation symbols, for no or many n>0, e.g. R(., .)
- Constant symbols (none or many)

The handling of parenthesis is done the 'usual' way and is not formally described further.

For a given set of symbols S, variables and constant symbols are said to be S-**Terms**.

S-**Expressions** are obtained by the multiple application of the following rules:

- is an expression
- is an expression, for an n-ary relation symbol R
- are expressions
- is an expression

where is a term and an expression.

So additional connectives for OR, IMPLICATION, EQUIVALENCE etc. can be defined as well as the FOR ALL quantifier.

#### Semantics[edit | edit source]

Semantics adds the meaning to the language in three steps:

- 1st it defines what the logical symbols (connectives and quantifiers) mean (this always holds in FO),
- 2nd it maps relation symbols and constant symbols to actual relations and constants over a given set of entities (this is usually defined per subject, like Analysis or Statistics) and
- 3rd it maps free variables (not bound to a quantifier) to entities (usually done per Problem, like solving an equation).

1st we assume the **Logical Symbols** to have the usual meaning.

2nd a S-**Structure** is a pair (*A*, *a*) of

- a nonempty set
*A*, the Universe, and - a mapping
*a*from S, such that- each n-ary relation symbol is mapped to a n-ary relation on
*A*and - each constant symbol is mapped to an element of
*A*

- each n-ary relation symbol is mapped to a n-ary relation on

3rd an Interpretation is a pair where = (*A*, *a*) is a S-Structure and is a mapping from all free variables to an element of *A*.

An Interpretation is said to be a **Model** of a set of S-expressions () iff all of the following hold

- , for
- , for
- Not , for
- and , for
- It exists an s.t. , for

## Game[edit | edit source]

A game is described by

- its players (>1),
- its rules i.e.
*who*plays*when*and*what*is allowed to do and - its possible ends and payoffs.

More formal, it's a tuple (P, T, m, u) where

- P (the Players) is a set, with |P| = n > 1
- is a graph on a set of nodes that forms a taxonomy, i.e. a T is a tree with a dedicated root node. The leafs called terminal nodes T all others decision nodes D. This describes the possible move sequences.
- m is a mapping from D to P, that says who is to move at what point.
- u is a set of mappings u
_{i}(one for each player i) from T to an ordered set U, that give the payoff for a player at each terminal node.

We assume here and in the following that every player has perfect information (so the above definition is incomplete), i.e. all moves of all players made so far, and we don't consider move by chance. Common knowledge about the rules and players is assumed anyway. The above is called the extensive form representation of a game. Others like the normal form reptresentation make simplifying assumptions on this (e.g. about the information) and use the concept of strategy instead of single moves.

Notice that different moves can lead to the same 'position', i.e. a position can be represented more than once in a game-tree. And, the same payoffs can have different meanings to different players.

## Isomorphism on Structures[edit | edit source]

#### Homomorphism[edit | edit source]

#### Isomorphism[edit | edit source]

## Back and Forth Method[edit | edit source]

Counting a set can get messy due to

- counting things in an other than the natural order
- counting elements multiple times

...

#### Method[edit | edit source]

Fix enumerations (without repetition) of the underlying sets:

Now we construct a one-to-one correspondence between *A* and *B* that is strictly increasing. Initially no member of *A* is paired with any member of *B*.

**(1)**Let*i*be the smallest index such that*a*_{i}is not yet paired with any member of*B*. Let*j*be the smallest index such that*b*_{j}is not yet paired with any member of*A***and***a*_{i}can be paired with*b*_{j}consistently with the requirement that the pairing be strictly increasing. Pair*a*_{i}with*b*_{j}.

**(2)**Let*j*be the smallest index such that*b*_{j}is not yet paired with any member of*A*. Let*i*be the smallest index such that*a*_{i}is not yet paired with any member of*B***and***b*_{j}can be paired with*a*_{i}consistently with the requirement that the pairing be strictly increasing. Pair*b*_{j}with*a*_{i}.

**(3)**Go back to step**(1)**.

It still has to be checked that the choice required in step **(1)** and **(2)** can actually be made in accordance to the requirements. Using step **(1)** as an example:

If there are already *a*_{p} and *a*_{q} in *A* corresponding to *b*_{p} and *b*_{q} in *B* respectively such that and , we choose *b*_{j} in between *b*_{p} and *b*_{q} using **density**. Otherwise, we choose a suitable large or small element of *B* using the fact that *B* has **neither a maximum nor a minimum**. Choices made in step **(2)** are dually possible. Finally, the construction ends after countably many steps because *A* and *B* **are countably infinite**. Note that we had to use all the prerequisites.

If we iterated only step **(1)**, rather than going back and forth, then the resulting pairing would fail to be bijective.