Paper.thy
author Christian Urban <christian dot urban at kcl dot ac dot uk>
Thu, 10 Jan 2013 13:13:27 +0000
changeset 29 1569a56bd81b
parent 28 d22d02d41b26
child 30 ba789a0768a2
permissions -rw-r--r--
update
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     1
(*<*)
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     2
theory Paper
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     3
imports UTM
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     4
begin
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
     5
25
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
     6
hide_const (open) s 
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
     7
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
     8
abbreviation 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
     9
  "update p a == new_tape a p"
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    10
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    11
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    12
lemma fetch_def2: 
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
    13
  shows "fetch p 0 b == (Nop, 0)"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
    14
  and "fetch p (Suc s) Bk == 
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    15
     (case nth_of p (2 * s) of
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    16
        Some i \<Rightarrow> i
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    17
      | None \<Rightarrow> (Nop, 0))"
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
    18
  and "fetch p (Suc s) Oc == 
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    19
     (case nth_of p ((2 * s) + 1) of
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    20
         Some i \<Rightarrow> i
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    21
       | None \<Rightarrow> (Nop, 0))"
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
    22
apply -
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
    23
apply(rule_tac [!] eq_reflection)
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    24
by (auto split: block.splits simp add: fetch.simps)
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    25
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    26
lemma new_tape_def2: 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    27
  shows "new_tape W0 (l, r) == (l, Bk#(tl r))" 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    28
  and "new_tape W1 (l, r) == (l, Oc#(tl r))"
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    29
  and "new_tape L (l, r) == 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    30
     (if l = [] then ([], Bk#r) else (tl l, (hd l) # r))" 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    31
  and "new_tape R (l, r) ==
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    32
     (if r = [] then (Bk#l,[]) else ((hd r)#l, tl r))" 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    33
  and "new_tape Nop (l, r) == (l, r)"
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    34
apply -
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    35
apply(rule_tac [!] eq_reflection)
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    36
apply(auto split: taction.splits simp add: new_tape.simps)
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    37
done
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    38
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    39
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    40
abbreviation 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    41
  "read r == if (r = []) then Bk else hd r"
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    42
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    43
lemma tstep_def2:
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    44
  shows "tstep (s, l, r) p == (let (a, s') = fetch p s (read r) in (s', new_tape a (l, r)))"
23
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 22
diff changeset
    45
apply -
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 22
diff changeset
    46
apply(rule_tac [!] eq_reflection)
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    47
by (auto split: if_splits prod.split list.split simp add: tstep.simps)
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    48
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    49
consts DUMMY::'a
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    50
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    51
notation (latex output)
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    52
  Cons ("_::_" [78,77] 73) and
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    53
  W0 ("W\<^bsub>\<^raw:\hspace{-2pt}>Bk\<^esub>") and
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    54
  W1 ("W\<^bsub>\<^raw:\hspace{-2pt}>Oc\<^esub>") and
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    55
  tstep ("step") and
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
    56
  steps ("nsteps") and
27
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
    57
  abc_lm_v ("lookup") and
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
    58
  abc_lm_s ("set") and
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    59
  DUMMY  ("\<^raw:\mbox{$\_$}>")
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
    60
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    61
declare [[show_question_marks = false]]
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    62
(*>*)
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    63
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    64
section {* Introduction *}
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    65
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    66
text {*
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
    67
8
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    68
\noindent
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    69
We formalised in earlier work the correctness proofs for two
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    70
algorithms in Isabelle/HOL---one about type-checking in
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    71
LF~\cite{UrbanCheneyBerghofer11} and another about deciding requests
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    72
in access control~\cite{WuZhangUrban12}.  The formalisations
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    73
uncovered a gap in the informal correctness proof of the former and
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    74
made us realise that important details were left out in the informal
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    75
model for the latter. However, in both cases we were unable to
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    76
formalise in Isabelle/HOL computability arguments about the
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    77
algorithms. The reason is that both algorithms are formulated in terms
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    78
of inductive predicates. Suppose @{text "P"} stands for one such
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    79
predicate.  Decidability of @{text P} usually amounts to showing
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    80
whether \mbox{@{term "P \<or> \<not>P"}} holds. But this does \emph{not} work
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    81
in Isabelle/HOL, since it is a theorem prover based on classical logic
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    82
where the law of excluded middle ensures that \mbox{@{term "P \<or> \<not>P"}}
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    83
is always provable no matter whether @{text P} is constructed by
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    84
computable means. The same problem would arise if we had formulated
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    85
the algorithms as recursive functions, because internally in
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    86
Isabelle/HOL, like in all HOL-based theorem provers, functions are
10
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    87
represented as inductively defined predicates too.
8
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
    88
12
dd400b5797e1 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 10
diff changeset
    89
The only satisfying way out of this problem in a theorem prover based on classical
10
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    90
logic is to formalise a theory of computability. Norrish provided such
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    91
a formalisation for the HOL4 theorem prover. He choose the
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    92
$\lambda$-calculus as the starting point for his formalisation
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    93
of computability theory,
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    94
because of its ``simplicity'' \cite[Page 297]{Norrish11}.  Part of his
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    95
formalisation is a clever infrastructure for reducing
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    96
$\lambda$-terms. He also established the computational equivalence
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    97
between the $\lambda$-calculus and recursive functions.  Nevertheless he
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    98
concluded that it would be ``appealing'' to have formalisations for more
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
    99
operational models of computations, such as Turing machines or register
12
dd400b5797e1 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 10
diff changeset
   100
machines.  One reason is that many proofs in the literature use 
10
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
   101
them.  He noted however that in the context of theorem provers
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
   102
\cite[Page 310]{Norrish11}:
8
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   103
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   104
\begin{quote}
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   105
\it``If register machines are unappealing because of their 
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   106
general fiddliness, Turing machines are an even more 
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   107
daunting prospect.''
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   108
\end{quote}
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   109
c216ae455c90 more on the paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 7
diff changeset
   110
\noindent
13
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   111
In this paper we took on this daunting prospect and provide a
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   112
formalisation of Turing machines, as well as abacus machines (a kind
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   113
of register machines) and recursive functions. To see the difficulties
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   114
involved with this work, one has to understand that interactive
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   115
theorem provers, like Isabelle/HOL, are at their best when the
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   116
data-structures at hand are ``structurally'' defined, like lists,
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   117
natural numbers, regular expressions, etc. Such data-structures come
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   118
with convenient reasoning infrastructures (for example induction
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   119
principles, recursion combinators and so on).  But this is \emph{not}
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   120
the case with Turing machines (and also not with register machines):
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   121
underlying their definition is a set of states together with a
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   122
transition function, both of which are not structurally defined.  This
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   123
means we have to implement our own reasoning infrastructure in order
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   124
to prove properties about them. This leads to annoyingly fiddly
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   125
formalisations.  We noticed first the difference between both,
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   126
structural and non-structural, ``worlds'' when formalising the
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   127
Myhill-Nerode theorem, where regular expressions fared much better
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   128
than automata \cite{WuZhangUrban11}.  However, with Turing machines
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   129
there seems to be no alternative if one wants to formalise the great
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   130
many proofs from the literature that use them.  We will analyse one
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   131
example---undecidability of Wang's tiling problem---in Section~\ref{Wang}. The
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   132
standard proof of this property uses the notion of \emph{universal
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   133
Turing machines}.
12
dd400b5797e1 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 10
diff changeset
   134
13
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   135
We are not the first who formalised Turing machines in a theorem
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   136
prover: we are aware of the preliminary work by Asperti and Ricciotti
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   137
\cite{AspertiRicciotti12}. They describe a complete formalisation of
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   138
Turing machines in the Matita theorem prover, including a universal
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   139
Turing machine. They report that the informal proofs from which they
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   140
started are not ``sufficiently accurate to be directly useable as a
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   141
guideline for formalization'' \cite[Page 2]{AspertiRicciotti12}. For
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   142
our formalisation we followed mainly the proofs from the textbook
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   143
\cite{Boolos87} and found that the description there is quite
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   144
detailed. Some details are left out however: for example, it is only
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   145
shown how the universal Turing machine is constructed for Turing
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   146
machines computing unary functions. We had to figure out a way to
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   147
generalize this result to $n$-ary functions. Similarly, when compiling
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   148
recursive functions to abacus machines, the textbook again only shows
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   149
how it can be done for 2- and 3-ary functions, but in the
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   150
formalisation we need arbitrary functions. But the general ideas for
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   151
how to do this are clear enough in \cite{Boolos87}. However, one
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   152
aspect that is completely left out from the informal description in
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   153
\cite{Boolos87}, and similar ones we are aware of, are arguments why certain Turing
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   154
machines are correct. We will introduce Hoare-style proof rules
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   155
which help us with such correctness arguments of Turing machines.
10
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
   156
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   157
The main difference between our formalisation and the one by Asperti
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   158
and Ricciotti is that their universal Turing machine uses a different
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   159
alphabet than the machines it simulates. They write \cite[Page
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   160
23]{AspertiRicciotti12}:
10
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 9
diff changeset
   161
15
90bc8cccc218 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 13
diff changeset
   162
\begin{quote}\it
13
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   163
``In particular, the fact that the universal machine operates with a
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   164
different alphabet with respect to the machines it simulates is
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   165
annoying.'' 
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   166
\end{quote}
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   167
15
90bc8cccc218 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 13
diff changeset
   168
\noindent
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   169
In this paper we follow the approach by Boolos et al \cite{Boolos87},
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   170
which goes back to Post \cite{Post36}, where all Turing machines
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   171
operate on tapes that contain only \emph{blank} or \emph{occupied} cells
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   172
(represented by @{term Bk} and @{term Oc}, respectively, in our
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   173
formalisation). Traditionally the content of a cell can be any
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   174
character from a finite alphabet. Although computationally equivalent,
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   175
the more restrictive notion of Turing machines in \cite{Boolos87} makes
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   176
the reasoning more uniform. In addition some proofs \emph{about} Turing
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   177
machines will be simpler.  The reason is that one often needs to encode
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   178
Turing machines---consequently if the Turing machines are simpler, then the coding
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   179
functions are simpler too. Unfortunately, the restrictiveness also makes
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   180
it harder to design programs for these Turing machines. Therefore in order
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   181
to construct a \emph{universal Turing machine} we follow the proof in
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   182
\cite{Boolos87} by relating abacus machines to Turing machines and in
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   183
turn recursive functions to abacus machines. The universal Turing
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   184
machine can then be constructed as a recursive function.
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   185
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   186
\smallskip
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   187
\noindent
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   188
{\bf Contributions:} 
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   189
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   190
*}
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   191
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   192
section {* Turing Machines *}
9
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 8
diff changeset
   193
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   194
text {* \noindent
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   195
  Turing machines can be thought of as having a read-write-unit
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   196
  ``gliding'' over a potentially infinite tape. Boolos et
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   197
  al~\cite{Boolos87} only consider tapes with cells being either blank
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   198
  or occupied, which we represent by a datatype having two
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   199
  constructors, namely @{text Bk} and @{text Oc}.  One way to
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   200
  represent such tapes is to use a pair of lists, written @{term "(l,
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   201
  r)"}, where @{term l} stands for the tape on the left-hand side of the
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   202
  read-write-unit and @{term r} for the tape on the right-hand side. We have the
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   203
  convention that the head, written @{term hd}, of the right-list is
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   204
  the cell on which the read-write-unit currently operates. This can
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   205
  be pictured as follows:
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   206
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   207
  \begin{center}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   208
  \begin{tikzpicture}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   209
  \draw[very thick] (-3.0,0)   -- ( 3.0,0);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   210
  \draw[very thick] (-3.0,0.5) -- ( 3.0,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   211
  \draw[very thick] (-0.25,0)   -- (-0.25,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   212
  \draw[very thick] ( 0.25,0)   -- ( 0.25,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   213
  \draw[very thick] (-0.75,0)   -- (-0.75,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   214
  \draw[very thick] ( 0.75,0)   -- ( 0.75,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   215
  \draw[very thick] (-1.25,0)   -- (-1.25,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   216
  \draw[very thick] ( 1.25,0)   -- ( 1.25,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   217
  \draw[very thick] (-1.75,0)   -- (-1.75,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   218
  \draw[very thick] ( 1.75,0)   -- ( 1.75,0.5);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   219
  \draw[rounded corners=1mm] (-0.35,-0.1) rectangle (0.35,0.6);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   220
  \draw[fill]     (1.35,0.1) rectangle (1.65,0.4);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   221
  \draw[fill]     (0.85,0.1) rectangle (1.15,0.4);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   222
  \draw[fill]     (-0.35,0.1) rectangle (-0.65,0.4);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   223
  \draw (-0.25,0.8) -- (-0.25,-0.8);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   224
  \draw[<->] (-1.25,-0.7) -- (0.75,-0.7);
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   225
  \node [anchor=base] at (-0.8,-0.5) {\small left list};
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   226
  \node [anchor=base] at (0.35,-0.5) {\small right list};
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   227
  \node [anchor=base] at (0.1,0.7) {\small head};
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   228
  \node [anchor=base] at (-2.2,0.2) {\ldots};
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   229
  \node [anchor=base] at ( 2.3,0.2) {\ldots};
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   230
  \end{tikzpicture}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   231
  \end{center}
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   232
  
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   233
  \noindent
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   234
  Note that by using lists each side of the tape is only finite. The
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   235
  potential infinity is achieved by adding an appropriate blank cell 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   236
  whenever the read-write unit goes over the ``edge'' of the tape. To 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   237
  make this formal we define five possible \emph{actions} 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   238
  the Turing machine can perform:
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   239
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   240
  \begin{center}
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   241
  \begin{tabular}{rcll}
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   242
  @{text "a"} & $::=$  & @{term "W0"} & write blank (@{term Bk})\\
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   243
  & $\mid$ & @{term "W1"} & write occupied (@{term Oc})\\
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   244
  & $\mid$ & @{term L} & move left\\
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   245
  & $\mid$ & @{term R} & move right\\
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   246
  & $\mid$ & @{term Nop} & do-nothing operation\\
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   247
  \end{tabular}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   248
  \end{center}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   249
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   250
  \noindent
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   251
  We slightly deviate
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   252
  from the presentation in \cite{Boolos87} by using the @{term Nop} operation; however its use
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   253
  will become important when we formalise universal Turing 
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   254
  machines later. Given a tape and an action, we can define the
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   255
  following updating function:
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   256
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   257
  \begin{center}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   258
  \begin{tabular}{l@ {\hspace{1mm}}c@ {\hspace{1mm}}l}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   259
  @{thm (lhs) new_tape_def2(1)} & @{text "\<equiv>"} & @{thm (rhs) new_tape_def2(1)}\\
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   260
  @{thm (lhs) new_tape_def2(2)} & @{text "\<equiv>"} & @{thm (rhs) new_tape_def2(2)}\\
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   261
  @{thm (lhs) new_tape_def2(3)} & @{text "\<equiv>"} & \\
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   262
  \multicolumn{3}{l}{\hspace{1cm}@{thm (rhs) new_tape_def2(3)}}\\
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   263
  @{thm (lhs) new_tape_def2(4)} & @{text "\<equiv>"} & \\
20
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 19
diff changeset
   264
  \multicolumn{3}{l}{\hspace{1cm}@{thm (rhs) new_tape_def2(4)}}\\
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   265
  @{thm (lhs) new_tape_def2(5)} & @{text "\<equiv>"} & @{thm (rhs) new_tape_def2(5)}\\
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   266
  \end{tabular}
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   267
  \end{center}
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   268
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   269
  \noindent
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   270
  The first two clauses replace the head of the right-list
21
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 20
diff changeset
   271
  with new a @{term Bk} or @{term Oc}, repsectively. To see that
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   272
  these tow clauses make sense in case where @{text r} is the empty
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   273
  list, one has to know that the tail function, @{term tl}, is defined
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   274
  such that @{term "tl [] == []"} holds. The third clause 
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   275
  implements the move of the read-write unit one step to the left: we need
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   276
  to test if the left-list @{term l} is empty; if yes, then we just prepend a 
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   277
  blank cell to the right-list; otherwise we have to remove the
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   278
  head from the left-list and prepend it to the right-list. Similarly
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   279
  in the clause for a right move action. The @{term Nop} operation
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   280
  leaves the the tape unchanged.
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   281
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   282
  Note that our treatment of the tape is rather ``unsymmetric''---we
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   283
  have the convention that the head of the right-list is where the
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   284
  read-write unit is currently positioned. Asperti and Ricciotti
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   285
  \cite{AspertiRicciotti12} also consider such a representation, but
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   286
  dismiss it as it complicates their definition for \emph{tape
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   287
  equality}. The reason is that moving the read-write unit one step to
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   288
  the left and then back to the right might change the tape (in case
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   289
  of going over the ``edge''). Therefore they distinguish four types
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   290
  of tapes: one where the tape is empty; another where the read-write
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   291
  unit is on the left edge, respectively right edge, and in the middle
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   292
  of the tape. The reading, writing and moving of the tape is then
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   293
  defined in terms of these four cases.  In this way they can keep the
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   294
  tape in a ``normalised'' form, and thus making a left-move followed
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   295
  by a right-move being the identity on tapes. Since we are not using
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   296
  the notion of tape equality, we can get away with the unsymmetric
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   297
  definition above and by using the @{term update} function
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   298
  cover uniformely all cases including the corner cases.
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   299
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   300
  Next we need to define the \emph{states} of a Turing machine.  Given
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   301
  how little is usually said about how to represent them in informal
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   302
  presentaions, it might be surprising that in a theorem prover we have 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   303
  to select carfully a representation. If we use the naive representation
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   304
  where a Turing machine consists of a finite set of states, then we
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   305
  will have difficulties composing two Turing machines. In this case we 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   306
  would need to combine two finite sets of states, possibly requiring 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   307
  renaming states apart whenever both machines share states. This 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   308
  renaming can be quite cumbersome to reason about. Therefore we made 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   309
  the choice of representing a state by a natural number and the states 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   310
  of a Turing machine will always consist of the initial segment
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   311
  of natural numbers starting from @{text 0} up to number of states
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   312
  of the machine minus @{text 1}. In doing so we can compose
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   313
  two Turing machine by ``shifting'' the states of one by an appropriate
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   314
  amount to a higher segment.
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   315
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   316
  An \emph{instruction} @{term i} of a Turing machine is a pair consisting of a
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   317
  natural number (the next state) and an action. A \emph{program} @{term p} of a Turing
29
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   318
  machine is then a list of such pairs. We have organised our programs
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   319
  such that 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   320
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   321
  \begin{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   322
  XXX
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   323
  \end{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   324
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   325
  \noindent
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   326
  Given a program @{term p}, a state
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   327
  and the cell being read by the read-write unit, we need to fetch
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   328
  the corresponding instruction from the program. For this we define 
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   329
  the function @{term fetch}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   330
 
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   331
  \begin{center}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   332
  \begin{tabular}{l@ {\hspace{1mm}}c@ {\hspace{1mm}}l}
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   333
  \multicolumn{3}{l}{@{thm fetch_def2(1)[where b=DUMMY]}}\\
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   334
  @{thm (lhs) fetch_def2(2)} & @{text "\<equiv>"} & \\
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   335
  \multicolumn{3}{@ {\hspace{1cm}}l}{@{text "case nth_of p (2 * s) of"}}\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   336
  \multicolumn{3}{@ {\hspace{1.4cm}}l}{@{text "None \<Rightarrow> (Nop, 0) |"}}\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   337
  \multicolumn{3}{@ {\hspace{1.4cm}}l}{@{text "Some i \<Rightarrow> i"}}\\
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   338
  @{thm (lhs) fetch_def2(3)} & @{text "\<equiv>"} & \\
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   339
  \multicolumn{3}{@ {\hspace{1cm}}l}{@{text "case nth_of p (2 * s + 1) of"}}\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   340
  \multicolumn{3}{@ {\hspace{1.4cm}}l}{@{text "None \<Rightarrow> (Nop, 0) |"}}\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   341
  \multicolumn{3}{@ {\hspace{1.4cm}}l}{@{text "Some i \<Rightarrow> i"}}
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   342
  \end{tabular}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   343
  \end{center}
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   344
28
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 27
diff changeset
   345
  start state 1 final state 0
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   346
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   347
  \begin{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   348
  @{thm dither_def}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   349
  \end{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   350
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   351
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   352
  A \emph{configuration} @{term c} of a Turing machine is a state together with 
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   353
  a tape. This is written as the triple @{term "(s, l, r)"}. If we have a 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   354
  configuration and a program, we can calculate
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   355
  what the next configuration is by fetching the appropriate next state
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   356
  and action from the program. Such a single step of execution can be defined as
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   357
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   358
  \begin{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   359
  @{thm tstep_def2(1)}\\
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   360
  \end{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   361
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   362
  No evaluator in HOL, because of totality.
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   363
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   364
  \begin{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   365
  @{thm steps.simps(1)}\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   366
  @{thm steps.simps(2)}\\
22
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 21
diff changeset
   367
  \end{center}
18
a961c2e4dcea updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 17
diff changeset
   368
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   369
  \emph{well-formedness} of a Turing program
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   370
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   371
  programs halts
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   372
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   373
  shift and change of a p
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   374
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   375
  composition of two ps
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   376
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   377
  assertion holds for all tapes
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   378
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   379
  Hoare rule for composition
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   380
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   381
  For showing the undecidability of the halting problem, we need to consider
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   382
  two specific Turing machines. copying TM and dithering TM
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   383
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   384
  correctness of the copying TM
19
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 18
diff changeset
   385
24
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   386
  measure for the copying TM, which we however omit.
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   387
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   388
  standard configuration
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   389
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 23
diff changeset
   390
  halting problem
9
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 8
diff changeset
   391
*}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 8
diff changeset
   392
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   393
section {* Abacus Machines *}
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   394
25
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   395
text {*
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   396
  \noindent
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   397
  Boolos et al \cite{Boolos87} use abacus machines as a 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   398
  stepping stone for making it less laborious to write
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   399
  programs for Turing machines. Abacus machines operate
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   400
  over an unlimited number of registers $R_0$, $R_1$, \ldots
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   401
  each being able to hold an arbitrary large natural number.
27
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   402
  We use natural numbers to refer to registers, but also
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   403
  to refer to \emph{opcodes} of abacus 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   404
  machines. Obcodes are given by the datatype
25
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   405
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   406
  \begin{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   407
  \begin{tabular}{rcll}
27
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   408
  @{text "o"} & $::=$  & @{term "Inc R\<iota>"} & increment register $R$ by one\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   409
  & $\mid$ & @{term "Dec R\<iota> o\<iota>"} & if content of $R$ is non-zero,\\
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   410
  & & & then decrement it by one\\
26
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 25
diff changeset
   411
  & & & otherwise jump to opcode $o$\\
27
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   412
  & $\mid$ & @{term "Goto o\<iota>"} & jump to opcode $o$
25
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   413
  \end{tabular}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   414
  \end{center}
27
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   415
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   416
  \noindent
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   417
  A \emph{program} of an abacus machine is a list of such
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   418
  obcodes. For example the program clearing the register
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   419
  $R$ (setting it to 0) can be defined as follows:
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   420
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   421
  \begin{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   422
  @{thm clear.simps[where n="R\<iota>" and e="o\<iota>", THEN eq_reflection]}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   423
  \end{center}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   424
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   425
  \noindent
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   426
  The second opcode @{term "Goto 0"} in this programm means we 
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   427
  jump back to the first opcode, namely @{text "Dec R o"}.
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   428
  The \emph{memory} $m$ of an abacus machine holding the values
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   429
  of the registers is represented as a list of natural numbers.
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   430
  We have a lookup function for this memory, written @{term "abc_lm_v m R\<iota>"},
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   431
  which looks up the content of register $R$; if $R$
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   432
  is not in this list, then we return 0. Similarly we
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   433
  have a setting function, written @{term "abc_lm_s m R\<iota> n"}, which
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   434
  sets the value of $R$ to $n$, and if $R$ was not yet in $m$
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 26
diff changeset
   435
  it pads it approriately with 0s.
29
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   436
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   437
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 28
diff changeset
   438
  Abacus machine halts when it jumps out of range.
25
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   439
*}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   440
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 24
diff changeset
   441
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   442
section {* Recursive Functions *}
7
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   443
13
a7ec585d7f20 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 12
diff changeset
   444
section {* Wang Tiles\label{Wang} *}
7
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   445
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   446
text {*
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   447
  Used in texture mapings - graphics
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   448
*}
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   449
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 6
diff changeset
   450
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   451
section {* Related Work *}
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   452
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   453
text {*
17
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   454
  The most closely related work is by Norrish \cite{Norrish11}, and Asperti and 
66cebc19ef18 updated
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents: 16
diff changeset
   455
  Ricciotti \cite{AspertiRicciotti12}. Norrish bases his approach on 
6
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   456
  lambda-terms. For this he introduced a clever rewriting technology
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   457
  based on combinators and de-Bruijn indices for
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   458
  rewriting modulo $\beta$-equivalence (to keep it manageable)
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   459
*}
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   460
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   461
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   462
(*
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   463
Questions:
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   464
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   465
Can this be done: Ackerman function is not primitive 
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   466
recursive (Nora Szasz)
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   467
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   468
Tape is represented as two lists (finite - usually infinite tape)?
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   469
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   470
*)
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   471
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   472
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   473
(*<*)
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   474
end
50880fcda34d added paper
Christian Urban <christian dot urban at kcl dot ac dot uk>
parents:
diff changeset
   475
(*>*)