# How to use three dots and brackets with TikZ to draw Automaton state machine?

I tried to add a curly braces below all the states in order to group them, but I couldn't find a way to make it work. Furthermore, how could I draw a three dots as a state since I need to prove a theorem by induction on n. Here is what I have so far.

\documentclass[10pt,letterpaper]{article}
\usepackage[latin1]{inputenc}
\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{automata,positioning}

\begin{document}
\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto]
\node[state,initial]                (q_0)                           {$a$};
\node[state]                        (q_1)   [right=of q_0]          {$a^2$};
\node[state]                        (q_2)   [right=of q_1]          {$a^3$};
\node[state,accepting]              (q_3)   [right=of q_2]          {$a^n$};

\path[->]
(q_0)   edge                        node {a}            (q_1)
(q_1)   edge                        node {a}            (q_2)
(q_2)   edge                        node {...}          (q_3)
(q_3)   edge    [loop above]        node {a}            (q_3)
; %end path
\end{tikzpicture}   \\
\end{document}


This is the picture that illustrates what I meant:

Thank you

-
Could you please provide a complete minimal working example. – N.N. Jun 17 '11 at 8:31
NN: Edited. Thank you. – Chan Jun 17 '11 at 8:32

\documentclass[10pt,letterpaper]{article}
\usepackage[latin1]{inputenc}
\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{decorations.pathreplacing,automata,calc,positioning}

\begin{document}
\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto]
\node[state,initial]                (q_0)                           {$a$};
\node[state]                        (q_1)   [right=of q_0]          {$a^2$};
\node[state]                        (q_2)   [right=of q_1]          {$a^3$};
\node[state,accepting]              (q_3)   [right=of q_2]          {$a^n$};

\path[->]
(q_0)   edge                        node {a}            (q_1)
(q_1)   edge                        node {a}            (q_2)
(q_2)   edge                        node {...}          (q_3)
(q_3)   edge    [loop above]        node {a}            (q_3)
; %end path
\draw[decorate,decoration={brace,mirror,raise=6pt}, thick] ($(q_0.south west)+(-1.5,0)$)--(q_3.south east);
\end{tikzpicture}

\end{document}


-
I don't know automata library perhaps there is a node for start to avoid +(-1.5,0). I know it's possible to define intial distance so in this case you know the distance between start and the first node. Well, you need to read the pgfmanual about this library to customize the answer. – Alain Matthes Jun 17 '11 at 9:34
Thanks a lot. Yeah I really want to get rid of the start, but I've just used TikZ for a day. I will look it up. – Chan Jun 17 '11 at 9:48

Just a little change over Altermundus' answer with \dots being an state.

\documentclass[10pt,letterpaper]{article}
\usepackage[latin1]{inputenc}
\usepackage[left=1in,right=1in,top=1in,bottom=1in]{geometry}
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\usepackage{tikz}
\usetikzlibrary{automata,positioning,decorations.pathreplacing}

\begin{document}
\begin{tikzpicture}[shorten >=1pt,node distance=2cm,on grid,auto]
\node[state,initial] (q_0) {$a$};
\node[state] (q_1) [right=of q_0] {$a^2$};
\node[state] (q_2) [right=of q_1] {$a^3$};
\node        (q_dots) [right=of q_2] {$\cdots$};
\node[state,accepting] (q_3) [right=of q_dots] {$a^n$};

\path[->]
(q_0) edge node {a} (q_1)
(q_1) edge node {a} (q_2)
(q_2) edge  node {a} (q_dots)
(q_dots) edge node{a} (q_3)
(q_3) edge [loop above] node {a} (q_3)
; %end path

\draw [decorate,decoration={brace,amplitude=10pt,mirror,raise=10pt},yshift=0pt]
(q_0.south west) -- (q_3.south east);

\end{tikzpicture}   \\
\end{document}


-
Nice one ;) Thanks a lot. By the way, how can I add text below the bracket? Could you help? – Chan Jun 17 '11 at 9:54
@Chan: you can find the solution in this question – Ignasi Jun 17 '11 at 10:14
Many thanks. – Chan Jun 17 '11 at 10:51