The German Wikipedia claims that comes from "leer", which means "empty" in German. That seems plausible, as German used to be one of the major languages in mathematics.
Chomsky used as the empty string (or actually as the identity element for string concatenation) in his early papers. Some people in combinatorics still use
as the empty string, with the same justification.
The German Wikipedia claims that comes from "leer", which means "empty" in German. That seems plausible, as German used to be one of the major languages in mathematics.
Chomsky used as the empty string (or actually as the identity element for string concatenation) in his early papers. Some people in combinatorics still use
as the empty string, with the same justification.
Probably the notation originates from the "Finnish school".
My copy of 'Formal Languages' by Arto Salomaa (Academic Press, ACM monograph series, 1973) uses for the empty string.
And so does his 1969 book 'Theory of Automata' (Pergamon Press).
We move back. The classic 'Finite Automata and Their Decision Problems' by M.O. Rabin and D.Scott (April 1959) have the notation (capital) for "the empty tape with no symbols" (where a tape is a finite sequence of symbols).
One of the early people to write on finite automata was Trakhtenbrot and he used a symbol much like but typeset as
(as in his book with Barzdin, 1970, my russian is lousy but I recognize
).
Videos
The situation is the same with the emptyset and the number (zero).
is a number and the set
has one member, while the emptyset has no members at all.
Numbers are used to perform operations like "counting" objects; in order to correctly describe these operations, it is useful to introduce a number () that counts no objects.
In the same way, in order to describe the operations performed on strings, it is useful to introduce the string () with no symbols (that has $lenght=0$).
Here is a program that accepts the language that contains only the empty string:
s = get_input();
if (s == "") then ACCEPT;
else REJECT;
Here is a program that accepts the empty language:
s = get_input();
REJECT;
They are not the same program! The first one accepts the empty string; the second does not.
We will play a game. There is a machine with buttons and a green lamp. Your job is to press the right sequence of buttons that make the green lamp light up.
For example, perhaps the machine has only one button, labeled a. When you press it, the lamp lights up! Then you press the button again and the lamp turns off. Then you press a third time and the lamp turns on again. You find that pressing the button always turns the lamp on if it was off, and off if it was on. To light up the lamp and win the game all you need to do is press the button an odd number of times. We say that the machine accepts the language a(aa)*, which is a regular expression that represents the set of all strings of as of odd length—all the possible winning sequences of button presses.
Now imagine an even simpler machine: the green lamp is already lit! And there is a sign over the button that says DON'T PRESS THE BUTTON. Indeed, if you do press the button the lamp goes off and no amount of pressing makes it turn on again. Don't you wish you had followed the sign's advice? This machine accepts only the string $\epsilon$, which is the string of zero button presses. The regular expression $\epsilon$ represents the set that contains this one string and nothing else.
Now imagine the simplest machine of all: the green lamp never lights up no matter what buttons you press. Here you can't win the game. The set of strings accepted by the machine is empty, which we write $\varnothing$.
Let $M$ be a machine with any alphabet, one state, $q_0$, that is the initial state, and no transitions. If $q_0$ is not an acceptor state, $M$ accepts $\varnothing$, and if $q_0$ is an acceptor state, $M$ accepts $\Sigma^*$, where $\Sigma$ is the alphabet.
Now let $M$ have any alphabet and two states, the initial state $q_0$ and one other state $q_1$; $q_0$ is an acceptor state, and $q_1$ is not. The transitions are simple: in state $q_0$ every input sends $M$ to $q_1$, and in $q_1$ every input also sends $M$ to $q_1$. This $M$ accepts the empty word and nothing else.
One state, non-accepting, and no transitions. (That’s an NFA; if you want a DFA, have one transition from the state to itself for each letter of whatever alphabet is specified.)
You have only one state $s$ that is initial, but not accepting with loops $s \overset{\alpha}{\rightarrow} s$ for any letter $\alpha \in \Sigma$ (with non-deterministic automaton you can even skip the loops, i.e. the transition relation would be empty).
I hope this helps ;-)