author | zhang |
Mon, 15 Oct 2012 13:23:52 +0000 | |
changeset 371 | 48b231495281 |
parent 370 | 1ce04eb1c8ad |
permissions | -rw-r--r-- |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1 |
header {* |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
2 |
{\em abacus} a kind of register machine |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5 |
theory abacus |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6 |
imports Main turing_basic |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
7 |
begin |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
8 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
9 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
10 |
{\em Abacus} instructions: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
11 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
12 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
13 |
datatype abc_inst = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
14 |
-- {* @{text "Inc n"} increments the memory cell (or register) with address @{text "n"} by one. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
15 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
16 |
Inc nat |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
17 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
18 |
@{text "Dec n label"} decrements the memory cell with address @{text "n"} by one. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
19 |
If cell @{text "n"} is already zero, no decrements happens and the executio jumps to |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
20 |
the instruction labeled by @{text "label"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
21 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
22 |
| Dec nat nat |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
23 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
24 |
@{text "Goto label"} unconditionally jumps to the instruction labeled by @{text "label"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
25 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
26 |
| Goto nat |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
27 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
28 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
29 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
30 |
Abacus programs are defined as lists of Abacus instructions. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
31 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
32 |
type_synonym abc_prog = "abc_inst list" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
33 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
34 |
section {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
35 |
Sample Abacus programs |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
36 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
37 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
38 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
39 |
Abacus for addition and clearance. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
40 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
41 |
fun plus_clear :: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> abc_prog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
42 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
43 |
"plus_clear m n e = [Dec m e, Inc n, Goto 0]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
44 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
45 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
46 |
Abacus for clearing memory untis. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
47 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
48 |
fun clear :: "nat \<Rightarrow> nat \<Rightarrow> abc_prog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
49 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
50 |
"clear n e = [Dec n e, Goto 0]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
51 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
52 |
fun plus:: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> abc_prog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
53 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
54 |
"plus m n p e = [Dec m 4, Inc n, Inc p, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
55 |
Goto 0, Dec p e, Inc m, Goto 4]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
56 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
57 |
fun mult :: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> abc_prog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
58 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
59 |
"mult m1 m2 n p e = [Dec m1 e]@ plus m1 m2 p 1" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
60 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
61 |
fun expo :: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> abc_prog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
62 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
63 |
"expo n m1 m2 p e = [Inc n, Dec m1 e] @ mult m2 n n p 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
64 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
65 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
66 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
67 |
The state of Abacus machine. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
68 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
69 |
type_synonym abc_state = nat |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
70 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
71 |
(* text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
72 |
The memory of Abacus machine is defined as a function from address to contents. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
73 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
74 |
type_synonym abc_mem = "nat \<Rightarrow> nat" *) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
75 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
76 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
77 |
The memory of Abacus machine is defined as a list of contents, with |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
78 |
every units addressed by index into the list. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
79 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
80 |
type_synonym abc_lm = "nat list" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
81 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
82 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
83 |
Fetching contents out of memory. Units not represented by list elements are considered |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
84 |
as having content @{text "0"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
85 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
86 |
fun abc_lm_v :: "abc_lm \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
87 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
88 |
"abc_lm_v lm n = (if (n < length lm) then (lm!n) else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
89 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
90 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
91 |
fun abc_l2m :: "abc_lm \<Rightarrow> abc_mem" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
92 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
93 |
"abc_l2m lm = abc_lm_v lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
94 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
95 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
96 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
97 |
Set the content of memory unit @{text "n"} to value @{text "v"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
98 |
@{text "am"} is the Abacus memory before setting. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
99 |
If address @{text "n"} is outside to scope of @{text "am"}, @{text "am"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
100 |
is extended so that @{text "n"} becomes in scope. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
101 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
102 |
fun abc_lm_s :: "abc_lm \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> abc_lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
103 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
104 |
"abc_lm_s am n v = (if (n < length am) then (am[n:=v]) else |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
105 |
am@ (replicate (n - length am) 0) @ [v])" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
106 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
107 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
108 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
109 |
The configuration of Abaucs machines consists of its current state and its |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
110 |
current memory: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
111 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
112 |
type_synonym abc_conf_l = "abc_state \<times> abc_lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
113 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
114 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
115 |
Fetch instruction out of Abacus program: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
116 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
117 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
118 |
fun abc_fetch :: "nat \<Rightarrow> abc_prog \<Rightarrow> abc_inst option" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
119 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
120 |
"abc_fetch s p = (if (s < length p) then Some (p ! s) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
121 |
else None)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
122 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
123 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
124 |
Single step execution of Abacus machine. If no instruction is feteched, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
125 |
configuration does not change. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
126 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
127 |
fun abc_step_l :: "abc_conf_l \<Rightarrow> abc_inst option \<Rightarrow> abc_conf_l" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
128 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
129 |
"abc_step_l (s, lm) a = (case a of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
130 |
None \<Rightarrow> (s, lm) | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
131 |
Some (Inc n) \<Rightarrow> (let nv = abc_lm_v lm n in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
132 |
(s + 1, abc_lm_s lm n (nv + 1))) | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
133 |
Some (Dec n e) \<Rightarrow> (let nv = abc_lm_v lm n in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
134 |
if (nv = 0) then (e, abc_lm_s lm n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
135 |
else (s + 1, abc_lm_s lm n (nv - 1))) | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
136 |
Some (Goto n) \<Rightarrow> (n, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
137 |
)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
138 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
139 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
140 |
Multi-step execution of Abacus machine. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
141 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
142 |
fun abc_steps_l :: "abc_conf_l \<Rightarrow> abc_prog \<Rightarrow> nat \<Rightarrow> abc_conf_l" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
143 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
144 |
"abc_steps_l (s, lm) p 0 = (s, lm)" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
145 |
"abc_steps_l (s, lm) p (Suc n) = abc_steps_l (abc_step_l (s, lm) (abc_fetch s p)) p n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
146 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
147 |
section {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
148 |
Compiling Abacus machines into Truing machines |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
149 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
150 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
151 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
152 |
subsection {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
153 |
Compiling functions |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
154 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
155 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
156 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
157 |
@{text "findnth n"} returns the TM which locates the represention of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
158 |
memory cell @{text "n"} on the tape and changes representation of zero |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
159 |
on the way. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
160 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
161 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
162 |
fun findnth :: "nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
163 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
164 |
"findnth 0 = []" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
165 |
"findnth (Suc n) = (findnth n @ [(W1, 2 * n + 1), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
166 |
(R, 2 * n + 2), (R, 2 * n + 3), (R, 2 * n + 2)])" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
167 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
168 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
169 |
@{text "tinc_b"} returns the TM which increments the representation |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
170 |
of the memory cell under rw-head by one and move the representation |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
171 |
of cells afterwards to the right accordingly. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
172 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
173 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
174 |
definition tinc_b :: "tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
175 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
176 |
"tinc_b \<equiv> [(W1, 1), (R, 2), (W1, 3), (R, 2), (W1, 3), (R, 4), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
177 |
(L, 7), (W0, 5), (R, 6), (W0, 5), (W1, 3), (R, 6), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
178 |
(L, 8), (L, 7), (R, 9), (L, 7), (R, 10), (W0, 9)]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
179 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
180 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
181 |
@{text "tshift tm off"} shifts @{text "tm"} by offset @{text "off"}, leaving |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
182 |
instructions concerning state @{text "0"} unchanged, because state @{text "0"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
183 |
is the end state, which needs not be changed with shift operation. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
184 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
185 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
186 |
fun tshift :: "tprog \<Rightarrow> nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
187 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
188 |
"tshift tp off = (map (\<lambda> (action, state). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
189 |
(action, (if state = 0 then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
190 |
else state + off))) tp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
191 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
192 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
193 |
@{text "tinc ss n"} returns the TM which simulates the execution of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
194 |
Abacus instruction @{text "Inc n"}, assuming that TM is located at |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
195 |
location @{text "ss"} in the final TM complied from the whole |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
196 |
Abacus program. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
197 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
198 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
199 |
fun tinc :: "nat \<Rightarrow> nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
200 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
201 |
"tinc ss n = tshift (findnth n @ tshift tinc_b (2 * n)) (ss - 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
202 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
203 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
204 |
@{text "tinc_b"} returns the TM which decrements the representation |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
205 |
of the memory cell under rw-head by one and move the representation |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
206 |
of cells afterwards to the left accordingly. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
207 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
208 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
209 |
definition tdec_b :: "tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
210 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
211 |
"tdec_b \<equiv> [(W1, 1), (R, 2), (L, 14), (R, 3), (L, 4), (R, 3), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
212 |
(R, 5), (W0, 4), (R, 6), (W0, 5), (L, 7), (L, 8), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
213 |
(L, 11), (W0, 7), (W1, 8), (R, 9), (L, 10), (R, 9), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
214 |
(R, 5), (W0, 10), (L, 12), (L, 11), (R, 13), (L, 11), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
215 |
(R, 17), (W0, 13), (L, 15), (L, 14), (R, 16), (L, 14), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
216 |
(R, 0), (W0, 16)]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
217 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
218 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
219 |
@{text "sete tp e"} attaches the termination edges (edges leading to state @{text "0"}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
220 |
of TM @{text "tp"} to the intruction labelled by @{text "e"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
221 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
222 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
223 |
fun sete :: "tprog \<Rightarrow> nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
224 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
225 |
"sete tp e = map (\<lambda> (action, state). (action, if state = 0 then e else state)) tp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
226 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
227 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
228 |
@{text "tdec ss n label"} returns the TM which simulates the execution of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
229 |
Abacus instruction @{text "Dec n label"}, assuming that TM is located at |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
230 |
location @{text "ss"} in the final TM complied from the whole |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
231 |
Abacus program. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
232 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
233 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
234 |
fun tdec :: "nat \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
235 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
236 |
"tdec ss n e = sete (tshift (findnth n @ tshift tdec_b (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
237 |
(ss - 1)) e" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
238 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
239 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
240 |
@{text "tgoto f(label)"} returns the TM simulating the execution of Abacus instruction |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
241 |
@{text "Goto label"}, where @{text "f(label)"} is the corresponding location of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
242 |
@{text "label"} in the final TM compiled from the overall Abacus program. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
243 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
244 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
245 |
fun tgoto :: "nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
246 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
247 |
"tgoto n = [(Nop, n), (Nop, n)]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
248 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
249 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
250 |
The layout of the final TM compiled from an Abacus program is represented |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
251 |
as a list of natural numbers, where the list element at index @{text "n"} represents the |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
252 |
starting state of the TM simulating the execution of @{text "n"}-th instruction |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
253 |
in the Abacus program. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
254 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
255 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
256 |
type_synonym layout = "nat list" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
257 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
258 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
259 |
@{text "length_of i"} is the length of the |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
260 |
TM simulating the Abacus instruction @{text "i"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
261 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
262 |
fun length_of :: "abc_inst \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
263 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
264 |
"length_of i = (case i of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
265 |
Inc n \<Rightarrow> 2 * n + 9 | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
266 |
Dec n e \<Rightarrow> 2 * n + 16 | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
267 |
Goto n \<Rightarrow> 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
268 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
269 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
270 |
@{text "layout_of ap"} returns the layout of Abacus program @{text "ap"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
271 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
272 |
fun layout_of :: "abc_prog \<Rightarrow> layout" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
273 |
where "layout_of ap = map length_of ap" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
274 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
275 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
276 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
277 |
@{text "start_of layout n"} looks out the starting state of @{text "n"}-th |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
278 |
TM in the finall TM. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
279 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
280 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
281 |
fun start_of :: "nat list \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
282 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
283 |
"start_of ly 0 = Suc 0" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
284 |
"start_of ly (Suc as) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
285 |
(if as < length ly then start_of ly as + (ly ! as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
286 |
else start_of ly as)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
287 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
288 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
289 |
@{text "ci lo ss i"} complies Abacus instruction @{text "i"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
290 |
assuming the TM of @{text "i"} starts from state @{text "ss"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
291 |
within the overal layout @{text "lo"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
292 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
293 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
294 |
fun ci :: "layout \<Rightarrow> nat \<Rightarrow> abc_inst \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
295 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
296 |
"ci ly ss i = (case i of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
297 |
Inc n \<Rightarrow> tinc ss n | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
298 |
Dec n e \<Rightarrow> tdec ss n (start_of ly e) | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
299 |
Goto n \<Rightarrow> tgoto (start_of ly n))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
300 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
301 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
302 |
@{text "tpairs_of ap"} transfroms Abacus program @{text "ap"} pairing |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
303 |
every instruction with its starting state. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
304 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
305 |
fun tpairs_of :: "abc_prog \<Rightarrow> (nat \<times> abc_inst) list" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
306 |
where "tpairs_of ap = (zip (map (start_of (layout_of ap)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
307 |
[0..<(length ap)]) ap)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
308 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
309 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
310 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
311 |
@{text "tms_of ap"} returns the list of TMs, where every one of them simulates |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
312 |
the corresponding Abacus intruction in @{text "ap"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
313 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
314 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
315 |
fun tms_of :: "abc_prog \<Rightarrow> tprog list" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
316 |
where "tms_of ap = map (\<lambda> (n, tm). ci (layout_of ap) n tm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
317 |
(tpairs_of ap)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
318 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
319 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
320 |
@{text "tm_of ap"} returns the final TM machine compiled from Abacus program @{text "ap"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
321 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
322 |
fun tm_of :: "abc_prog \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
323 |
where "tm_of ap = concat (tms_of ap)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
324 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
325 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
326 |
The following two functions specify the well-formedness of complied TM. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
327 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
328 |
fun t_ncorrect :: "tprog \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
329 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
330 |
"t_ncorrect tp = (length tp mod 2 = 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
331 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
332 |
fun abc2t_correct :: "abc_prog \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
333 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
334 |
"abc2t_correct ap = list_all (\<lambda> (n, tm). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
335 |
t_ncorrect (ci (layout_of ap) n tm)) (tpairs_of ap)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
336 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
337 |
lemma findnth_length: "length (findnth n) div 2 = 2 * n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
338 |
apply(induct n, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
339 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
340 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
341 |
lemma ci_length : "length (ci ns n ai) div 2 = length_of ai" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
342 |
apply(auto simp: ci.simps tinc_b_def tdec_b_def findnth_length |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
343 |
split: abc_inst.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
344 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
345 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
346 |
subsection {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
347 |
Representation of Abacus memory by TM tape |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
348 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
349 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
350 |
consts tape_of :: "'a \<Rightarrow> block list" ("<_>" 100) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
351 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
352 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
353 |
@{text "tape_of_nat_list am"} returns the TM tape representing |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
354 |
Abacus memory @{text "am"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
355 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
356 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
357 |
fun tape_of_nat_list :: "nat list \<Rightarrow> block list" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
358 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
359 |
"tape_of_nat_list [] = []" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
360 |
"tape_of_nat_list [n] = Oc\<^bsup>n+1\<^esup>" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
361 |
"tape_of_nat_list (n#ns) = (Oc\<^bsup>n+1\<^esup>) @ [Bk] @ (tape_of_nat_list ns)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
362 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
363 |
defs (overloaded) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
364 |
tape_of_nl_abv: "<am> \<equiv> tape_of_nat_list am" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
365 |
tape_of_nat_abv : "<(n::nat)> \<equiv> Oc\<^bsup>n+1\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
366 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
367 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
368 |
@{text "crsp_l acf tcf"} meams the abacus configuration @{text "acf"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
369 |
is corretly represented by the TM configuration @{text "tcf"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
370 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
371 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
372 |
fun crsp_l :: "layout \<Rightarrow> abc_conf_l \<Rightarrow> t_conf \<Rightarrow> block list \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
373 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
374 |
"crsp_l ly (as, lm) (ts, (l, r)) inres = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
375 |
(ts = start_of ly as \<and> (\<exists> rn. r = <lm> @ Bk\<^bsup>rn\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
376 |
\<and> l = Bk # Bk # inres)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
377 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
378 |
declare crsp_l.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
379 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
380 |
subsection {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
381 |
A more general definition of TM execution. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
382 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
383 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
384 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
385 |
fun nnth_of :: "(taction \<times> nat) list \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> (taction \<times> nat)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
386 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
387 |
"nnth_of p s b = (if 2*s < length p |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
388 |
then (p ! (2*s + b)) else (Nop, 0))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
389 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
390 |
thm nth_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
391 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
392 |
fun nfetch :: "tprog \<Rightarrow> nat \<Rightarrow> block \<Rightarrow> taction \<times> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
393 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
394 |
"nfetch p 0 b = (Nop, 0)" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
395 |
"nfetch p (Suc s) b = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
396 |
(case b of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
397 |
Bk \<Rightarrow> nnth_of p s 0 | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
398 |
Oc \<Rightarrow> nnth_of p s 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
399 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
400 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
401 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
402 |
@{text "t_step tcf (tp, ss)"} returns the result of one step exection of TM @{text "tp"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
403 |
assuming @{text "tp"} starts from instial state @{text "ss"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
404 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
405 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
406 |
fun t_step :: "t_conf \<Rightarrow> (tprog \<times> nat) \<Rightarrow> t_conf" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
407 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
408 |
"t_step c (p, off) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
409 |
(let (state, leftn, rightn) = c in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
410 |
let (action, next_state) = fetch p (state-off) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
411 |
(case rightn of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
412 |
[] \<Rightarrow> Bk | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
413 |
Bk # xs \<Rightarrow> Bk | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
414 |
Oc # xs \<Rightarrow> Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
415 |
) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
416 |
in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
417 |
(next_state, new_tape action (leftn, rightn)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
418 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
419 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
420 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
421 |
@{text "t_steps tcf (tp, ss) n"} returns the result of @{text "n"}-step exection |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
422 |
of TM @{text "tp"} assuming @{text "tp"} starts from instial state @{text "ss"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
423 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
424 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
425 |
fun t_steps :: "t_conf \<Rightarrow> (tprog \<times> nat) \<Rightarrow> nat \<Rightarrow> t_conf" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
426 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
427 |
"t_steps c (p, off) 0 = c" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
428 |
"t_steps c (p, off) (Suc n) = t_steps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
429 |
(t_step c (p, off)) (p, off) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
430 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
431 |
lemma stepn: "t_steps c (p, off) (Suc n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
432 |
t_step (t_steps c (p, off) n) (p, off)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
433 |
apply(induct n arbitrary: c, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
434 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
435 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
436 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
437 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
438 |
The type of invarints expressing correspondence between |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
439 |
Abacus configuration and TM configuration. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
440 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
441 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
442 |
type_synonym inc_inv_t = "abc_conf_l \<Rightarrow> t_conf \<Rightarrow> block list \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
443 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
444 |
declare tms_of.simps[simp del] tm_of.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
445 |
layout_of.simps[simp del] abc_fetch.simps [simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
446 |
t_step.simps[simp del] t_steps.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
447 |
tpairs_of.simps[simp del] start_of.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
448 |
fetch.simps [simp del] t_ncorrect.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
449 |
new_tape.simps [simp del] ci.simps [simp del] length_of.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
450 |
layout_of.simps[simp del] crsp_l.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
451 |
abc2t_correct.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
452 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
453 |
lemma tct_div2: "t_ncorrect tp \<Longrightarrow> (length tp) mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
454 |
apply(simp add: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
455 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
456 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
457 |
lemma t_shift_fetch: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
458 |
"\<lbrakk>t_ncorrect tp1; t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
459 |
length tp1 div 2 < a \<and> a \<le> length tp1 div 2 + length tp div 2\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
460 |
\<Longrightarrow> fetch tp (a - length tp1 div 2) b = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
461 |
fetch (tp1 @ tp @ tp2) a b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
462 |
apply(subgoal_tac "\<exists> x. a = length tp1 div 2 + x", erule exE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
463 |
apply(case_tac x, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
464 |
apply(subgoal_tac "length tp1 div 2 + Suc nat = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
465 |
Suc (length tp1 div 2 + nat)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
466 |
apply(simp only: fetch.simps nth_of.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
467 |
apply(case_tac b, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
468 |
apply(subgoal_tac "2 * (length tp1 div 2) = length tp1", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
469 |
apply(subgoal_tac "2 * nat < length tp", simp add: nth_append, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
470 |
apply(simp add: t_ncorrect.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
471 |
apply(subgoal_tac "2 * (length tp1 div 2) = length tp1", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
472 |
apply(subgoal_tac "2 * nat < length tp", simp add: nth_append, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
473 |
apply(simp add: t_ncorrect.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
474 |
apply(rule_tac x = "a - length tp1 div 2" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
475 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
476 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
477 |
lemma t_shift_in_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
478 |
"\<lbrakk>t_step (a, aa, ba) (tp, length tp1 div 2) = (s, l, r); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
479 |
t_ncorrect tp1; t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
480 |
length tp1 div 2 < a \<and> a \<le> length tp1 div 2 + length tp div 2\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
481 |
\<Longrightarrow> t_step (a, aa, ba) (tp1 @ tp @ tp2, 0) = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
482 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
483 |
apply(subgoal_tac "fetch tp (a - length tp1 div 2) (case ba of [] \<Rightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
484 |
Bk | x # xs \<Rightarrow> x) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
485 |
= fetch (tp1 @ tp @ tp2) a (case ba of [] \<Rightarrow> Bk | x # xs |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
486 |
\<Rightarrow> x)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
487 |
apply(case_tac "fetch tp (a - length tp1 div 2) (case ba of [] \<Rightarrow> Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
488 |
| x # xs \<Rightarrow> x)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
489 |
apply(auto intro: t_shift_fetch) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
490 |
apply(case_tac ba, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
491 |
apply(case_tac aaa, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
492 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
493 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
494 |
declare add_Suc_right[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
495 |
lemma t_step_add: "t_steps c (p, off) (m + n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
496 |
t_steps (t_steps c (p, off) m) (p, off) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
497 |
apply(induct m arbitrary: n, simp add: t_steps.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
498 |
apply(subgoal_tac "t_steps c (p, off) (Suc (m + n)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
499 |
t_steps c (p, off) (m + Suc n)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
500 |
apply(subgoal_tac "t_steps (t_steps c (p, off) m) (p, off) (Suc n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
501 |
t_steps (t_step (t_steps c (p, off) m) (p, off)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
502 |
(p, off) n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
503 |
apply(simp, simp add: stepn) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
504 |
apply(simp only: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
505 |
apply(simp only: add_Suc_right) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
506 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
507 |
declare add_Suc_right[simp] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
508 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
509 |
lemma s_out_fetch: "\<lbrakk>t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
510 |
\<not> (length tp1 div 2 < a \<and> a \<le> length tp1 div 2 + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
511 |
length tp div 2)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
512 |
\<Longrightarrow> fetch tp (a - length tp1 div 2) b = (Nop, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
513 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
514 |
apply(simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
515 |
apply(subgoal_tac "\<exists> x. a - length tp1 div 2 = length tp div 2 + x") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
516 |
apply(erule exE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
517 |
apply(case_tac x, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
518 |
apply(auto simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
519 |
apply(subgoal_tac "2 * (length tp div 2) = length tp") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
520 |
apply(auto simp: t_ncorrect.simps split: block.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
521 |
apply(rule_tac x = "a - length tp1 div 2 - length tp div 2" in exI |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
522 |
, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
523 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
524 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
525 |
lemma conf_keep_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
526 |
"\<lbrakk>t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
527 |
\<not> (length tp1 div 2 < a \<and> a \<le> length tp1 div 2 + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
528 |
length tp div 2)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
529 |
\<Longrightarrow> t_step (a, aa, ba) (tp, length tp1 div 2) = (0, aa, ba)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
530 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
531 |
apply(subgoal_tac "fetch tp (a - length tp1 div 2) (case ba of [] \<Rightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
532 |
Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc) = (Nop, 0)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
533 |
apply(simp add: new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
534 |
apply(rule s_out_fetch, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
535 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
536 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
537 |
lemma conf_keep: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
538 |
"\<lbrakk>t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
539 |
\<not> (length tp1 div 2 < a \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
540 |
a \<le> length tp1 div 2 + length tp div 2); n > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
541 |
\<Longrightarrow> t_steps (a, aa, ba) (tp, length tp1 div 2) n = (0, aa, ba)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
542 |
apply(induct n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
543 |
apply(case_tac n, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
544 |
apply(rule_tac conf_keep_step, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
545 |
apply(subgoal_tac " t_steps (a, aa, ba) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
546 |
(tp, length tp1 div 2) (Suc (Suc nat)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
547 |
= t_step (t_steps (a, aa, ba) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
548 |
(tp, length tp1 div 2) (Suc nat)) (tp, length tp1 div 2)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
549 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
550 |
apply(rule_tac conf_keep_step, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
551 |
apply(rule stepn) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
552 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
553 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
554 |
lemma state_bef_inside: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
555 |
"\<lbrakk>t_ncorrect tp1; t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
556 |
t_steps (s0, l0, r0) (tp, length tp1 div 2) stp = (s, l, r); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
557 |
length tp1 div 2 < s0 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
558 |
s0 \<le> length tp1 div 2 + length tp div 2; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
559 |
length tp1 div 2 < s \<and> s \<le> length tp1 div 2 + length tp div 2; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
560 |
n < stp; t_steps (s0, l0, r0) (tp, length tp1 div 2) n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
561 |
(a, aa, ba)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
562 |
\<Longrightarrow> length tp1 div 2 < a \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
563 |
a \<le> length tp1 div 2 + length tp div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
564 |
apply(subgoal_tac "\<exists> x. stp = n + x", erule exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
565 |
apply(simp only: t_step_add) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
566 |
apply(rule classical) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
567 |
apply(subgoal_tac "t_steps (a, aa, ba) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
568 |
(tp, length tp1 div 2) x = (0, aa, ba)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
569 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
570 |
apply(rule conf_keep, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
571 |
apply(rule_tac x = "stp - n" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
572 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
573 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
574 |
lemma turing_shift_inside: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
575 |
"\<lbrakk>t_steps (s0, l0, r0) (tp, length tp1 div 2) stp = (s, l, r); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
576 |
length tp1 div 2 < s0 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
577 |
s0 \<le> length tp1 div 2 + length tp div 2; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
578 |
t_ncorrect tp1; t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
579 |
length tp1 div 2 < s \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
580 |
s \<le> length tp1 div 2 + length tp div 2\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
581 |
\<Longrightarrow> t_steps (s0, l0, r0) (tp1 @ tp @ tp2, 0) stp = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
582 |
apply(induct stp arbitrary: s l r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
583 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
584 |
apply(subgoal_tac " t_steps (s0, l0, r0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
585 |
(tp, length tp1 div 2) (Suc stp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
586 |
= t_step (t_steps (s0, l0, r0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
587 |
(tp, length tp1 div 2) stp) (tp, length tp1 div 2)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
588 |
apply(case_tac "t_steps (s0, l0, r0) (tp, length tp1 div 2) stp") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
589 |
apply(subgoal_tac "length tp1 div 2 < a \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
590 |
a \<le> length tp1 div 2 + length tp div 2") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
591 |
apply(subgoal_tac "t_steps (s0, l0, r0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
592 |
(tp1 @ tp @ tp2, 0) stp = (a, b, c)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
593 |
apply(simp only: stepn, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
594 |
apply(rule_tac t_shift_in_step, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
595 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
596 |
apply(rule stepn) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
597 |
apply(rule_tac n = stp and stp = "Suc stp" and a = a |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
598 |
and aa = b and ba = c in state_bef_inside, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
599 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
600 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
601 |
lemma take_Suc_last[elim]: "Suc as \<le> length xs \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
602 |
take (Suc as) xs = take as xs @ [xs ! as]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
603 |
apply(induct xs arbitrary: as, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
604 |
apply(case_tac as, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
605 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
606 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
607 |
lemma concat_suc: "Suc as \<le> length xs \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
608 |
concat (take (Suc as) xs) = concat (take as xs) @ xs! as" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
609 |
apply(subgoal_tac "take (Suc as) xs = take as xs @ [xs ! as]", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
610 |
by auto |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
611 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
612 |
lemma concat_take_suc_iff: "Suc n \<le> length tps \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
613 |
concat (take n tps) @ (tps ! n) = concat (take (Suc n) tps)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
614 |
apply(drule_tac concat_suc, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
615 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
616 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
617 |
lemma concat_drop_suc_iff: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
618 |
"Suc n < length tps \<Longrightarrow> concat (drop (Suc n) tps) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
619 |
tps ! Suc n @ concat (drop (Suc (Suc n)) tps)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
620 |
apply(induct tps arbitrary: n, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
621 |
apply(case_tac tps, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
622 |
apply(case_tac n, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
623 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
624 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
625 |
declare append_assoc[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
626 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
627 |
lemma tm_append: "\<lbrakk>n < length tps; tp = tps ! n\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
628 |
\<exists> tp1 tp2. concat tps = tp1 @ tp @ tp2 \<and> tp1 = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
629 |
concat (take n tps) \<and> tp2 = concat (drop (Suc n) tps)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
630 |
apply(rule_tac x = "concat (take n tps)" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
631 |
apply(rule_tac x = "concat (drop (Suc n) tps)" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
632 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
633 |
apply(induct n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
634 |
apply(case_tac tps, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
635 |
apply(subgoal_tac "concat (take n tps) @ (tps ! n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
636 |
concat (take (Suc n) tps)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
637 |
apply(simp only: append_assoc[THEN sym], simp only: append_assoc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
638 |
apply(subgoal_tac " concat (drop (Suc n) tps) = tps ! Suc n @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
639 |
concat (drop (Suc (Suc n)) tps)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
640 |
apply(rule_tac concat_drop_suc_iff, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
641 |
apply(rule_tac concat_take_suc_iff, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
642 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
643 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
644 |
declare append_assoc[simp] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
645 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
646 |
lemma map_of: "n < length xs \<Longrightarrow> (map f xs) ! n = f (xs ! n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
647 |
by(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
648 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
649 |
lemma [simp]: "length (tms_of aprog) = length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
650 |
apply(auto simp: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
651 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
652 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
653 |
lemma ci_nth: "\<lbrakk>ly = layout_of aprog; as < length aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
654 |
abc_fetch as aprog = Some ins\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
655 |
\<Longrightarrow> ci ly (start_of ly as) ins = tms_of aprog ! as" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
656 |
apply(simp add: tms_of.simps tpairs_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
657 |
abc_fetch.simps map_of del: map_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
658 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
659 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
660 |
lemma t_split:"\<lbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
661 |
ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
662 |
as < length aprog; abc_fetch as aprog = Some ins\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
663 |
\<Longrightarrow> \<exists> tp1 tp2. concat (tms_of aprog) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
664 |
tp1 @ (ci ly (start_of ly as) ins) @ tp2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
665 |
\<and> tp1 = concat (take as (tms_of aprog)) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
666 |
tp2 = concat (drop (Suc as) (tms_of aprog))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
667 |
apply(insert tm_append[of "as" "tms_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
668 |
"ci ly (start_of ly as) ins"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
669 |
apply(subgoal_tac "ci ly (start_of ly as) ins = (tms_of aprog) ! as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
670 |
apply(subgoal_tac "length (tms_of aprog) = length aprog", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
671 |
apply(rule_tac ci_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
672 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
673 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
674 |
lemma math_sub: "\<lbrakk>x >= Suc 0; x - 1 = z\<rbrakk> \<Longrightarrow> x + y - Suc 0 = z + y" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
675 |
by auto |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
676 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
677 |
lemma start_more_one: "as \<noteq> 0 \<Longrightarrow> start_of ly as >= Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
678 |
apply(induct as, simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
679 |
apply(case_tac as, auto simp: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
680 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
681 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
682 |
lemma tm_ct: "\<lbrakk>abc2t_correct aprog; tp \<in> set (tms_of aprog)\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
683 |
t_ncorrect tp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
684 |
apply(simp add: abc2t_correct.simps tms_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
685 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
686 |
apply(simp add:list_all_iff, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
687 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
688 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
689 |
lemma div_apart: "\<lbrakk>x mod (2::nat) = 0; y mod 2 = 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
690 |
\<Longrightarrow> (x + y) div 2 = x div 2 + y div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
691 |
apply(drule mod_eqD)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
692 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
693 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
694 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
695 |
lemma div_apart_iff: "\<lbrakk>x mod (2::nat) = 0; y mod 2 = 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
696 |
(x + y) mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
697 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
698 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
699 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
700 |
lemma tms_ct: "\<lbrakk>abc2t_correct aprog; n < length aprog\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
701 |
t_ncorrect (concat (take n (tms_of aprog)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
702 |
apply(induct n, simp add: t_ncorrect.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
703 |
apply(subgoal_tac "concat (take (Suc n) (tms_of aprog)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
704 |
concat (take n (tms_of aprog)) @ (tms_of aprog ! n)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
705 |
apply(simp add: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
706 |
apply(rule_tac div_apart_iff, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
707 |
apply(subgoal_tac "t_ncorrect (tms_of aprog ! n)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
708 |
simp add: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
709 |
apply(rule_tac tm_ct, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
710 |
apply(rule_tac nth_mem, simp add: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
711 |
apply(rule_tac concat_suc, simp add: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
712 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
713 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
714 |
lemma tcorrect_div2: "\<lbrakk>abc2t_correct aprog; Suc as < length aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
715 |
\<Longrightarrow> (length (concat (take as (tms_of aprog))) + length (tms_of aprog |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
716 |
! as)) div 2 = length (concat (take as (tms_of aprog))) div 2 + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
717 |
length (tms_of aprog ! as) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
718 |
apply(subgoal_tac "t_ncorrect (tms_of aprog ! as)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
719 |
apply(subgoal_tac "t_ncorrect (concat (take as (tms_of aprog)))") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
720 |
apply(rule_tac div_apart) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
721 |
apply(rule tct_div2, simp)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
722 |
apply(erule_tac tms_ct, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
723 |
apply(rule_tac tm_ct, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
724 |
apply(rule_tac nth_mem) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
725 |
apply(simp add: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
726 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
727 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
728 |
lemma [simp]: "length (layout_of aprog) = length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
729 |
apply(auto simp: layout_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
730 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
731 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
732 |
lemma start_of_ind: "\<lbrakk>as < length aprog; ly = layout_of aprog\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
733 |
start_of ly (Suc as) = start_of ly as + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
734 |
length ((tms_of aprog) ! as) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
735 |
apply(simp only: start_of.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
736 |
apply(auto simp: start_of.simps tms_of.simps layout_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
737 |
tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
738 |
apply(simp add: ci_length) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
739 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
740 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
741 |
lemma concat_take_suc: "Suc n \<le> length xs \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
742 |
concat (take (Suc n) xs) = concat (take n xs) @ (xs ! n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
743 |
apply(subgoal_tac "take (Suc n) xs = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
744 |
take n xs @ [xs ! n]") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
745 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
746 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
747 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
748 |
lemma ci_length_not0: "Suc 0 <= length (ci ly as i) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
749 |
apply(subgoal_tac "length (ci ly as i) div 2 = length_of i") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
750 |
apply(simp add: length_of.simps split: abc_inst.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
751 |
apply(rule ci_length) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
752 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
753 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
754 |
lemma findnth_length2: "length (findnth n) = 4 * n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
755 |
apply(induct n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
756 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
757 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
758 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
759 |
lemma ci_length2: "length (ci ly as i) = 2 * (length_of i)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
760 |
apply(simp add: ci.simps length_of.simps tinc_b_def tdec_b_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
761 |
split: abc_inst.splits, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
762 |
apply(simp add: findnth_length2)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
763 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
764 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
765 |
lemma tm_mod2: "as < length aprog \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
766 |
length (tms_of aprog ! as) mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
767 |
apply(simp add: tms_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
768 |
apply(subgoal_tac "map (\<lambda>(x, y). ci (layout_of aprog) x y) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
769 |
(tpairs_of aprog) ! as |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
770 |
= (\<lambda>(x, y). ci (layout_of aprog) x y) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
771 |
((tpairs_of aprog) ! as)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
772 |
apply(case_tac "(tpairs_of aprog ! as)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
773 |
apply(subgoal_tac "length (ci (layout_of aprog) a b) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
774 |
2 * (length_of b)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
775 |
apply(rule ci_length2) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
776 |
apply(rule map_of, simp add: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
777 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
778 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
779 |
lemma tms_mod2: "as \<le> length aprog \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
780 |
length (concat (take as (tms_of aprog))) mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
781 |
apply(induct as, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
782 |
apply(subgoal_tac "concat (take (Suc as) (tms_of aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
783 |
= concat (take as (tms_of aprog)) @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
784 |
(tms_of aprog ! as)", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
785 |
apply(rule div_apart_iff, simp, rule tm_mod2, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
786 |
apply(rule concat_take_suc, simp add: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
787 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
788 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
789 |
lemma [simp]: "\<lbrakk>as < length aprog; (abc_fetch as aprog) = Some ins\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
790 |
\<Longrightarrow> ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
791 |
(start_of (layout_of aprog) as) (ins) \<in> set (tms_of aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
792 |
apply(insert ci_nth[of "layout_of aprog" aprog as], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
793 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
794 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
795 |
lemma startof_not0: "start_of ly as > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
796 |
apply(induct as, simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
797 |
apply(case_tac as, auto simp: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
798 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
799 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
800 |
declare abc_step_l.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
801 |
lemma pre_lheq: "\<lbrakk>tp = concat (take as (tms_of aprog)); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
802 |
abc2t_correct aprog; as \<le> length aprog\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
803 |
start_of (layout_of aprog) as - Suc 0 = length tp div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
804 |
apply(induct as arbitrary: tp, simp add: start_of.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
805 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
806 |
fix as tp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
807 |
assume h1: "\<And>tp. tp = concat (take as (tms_of aprog)) \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
808 |
start_of (layout_of aprog) as - Suc 0 = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
809 |
length (concat (take as (tms_of aprog))) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
810 |
and h2: " abc2t_correct aprog" "Suc as \<le> length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
811 |
from h2 show "start_of (layout_of aprog) (Suc as) - Suc 0 = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
812 |
length (concat (take (Suc as) (tms_of aprog))) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
813 |
apply(insert h1[of "concat (take as (tms_of aprog))"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
814 |
apply(insert start_of_ind[of as aprog "layout_of aprog"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
815 |
apply(subgoal_tac "(take (Suc as) (tms_of aprog)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
816 |
take as (tms_of aprog) @ [(tms_of aprog) ! as]", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
817 |
apply(subgoal_tac "(length (concat (take as (tms_of aprog))) + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
818 |
length (tms_of aprog ! as)) div 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
819 |
= length (concat (take as (tms_of aprog))) div 2 + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
820 |
length (tms_of aprog ! as) div 2", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
821 |
apply(subgoal_tac "start_of (layout_of aprog) as = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
822 |
length (concat (take as (tms_of aprog))) div 2 + Suc 0", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
823 |
apply(subgoal_tac "start_of (layout_of aprog) as > 0", simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
824 |
rule_tac startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
825 |
apply(insert tm_mod2[of as aprog], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
826 |
apply(insert tms_mod2[of as aprog], simp, arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
827 |
apply(rule take_Suc_last, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
828 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
829 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
830 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
831 |
lemma crsp2stateq: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
832 |
"\<lbrakk>as < length aprog; abc2t_correct aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
833 |
crsp_l (layout_of aprog) (as, am) (a, aa, ba) inres\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
834 |
a = length (concat (take as (tms_of aprog))) div 2 + 1" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
835 |
apply(simp add: crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
836 |
apply(insert pre_lheq[of "(concat (take as (tms_of aprog)))" as aprog] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
837 |
, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
838 |
apply(subgoal_tac "start_of (layout_of aprog) as > 0", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
839 |
auto intro: startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
840 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
841 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
842 |
lemma turing_shift_outside: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
843 |
"\<lbrakk>t_steps (s0, l0, r0) (tp, length tp1 div 2) stp = (s, l, r); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
844 |
s \<noteq> 0; stp > 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
845 |
length tp1 div 2 < s0 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
846 |
s0 \<le> length tp1 div 2 + length tp div 2; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
847 |
t_ncorrect tp1; t_ncorrect tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
848 |
\<not> (length tp1 div 2 < s \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
849 |
s \<le> length tp1 div 2 + length tp div 2)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
850 |
\<Longrightarrow> \<exists>stp' > 0. t_steps (s0, l0, r0) (tp1 @ tp @ tp2, 0) stp' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
851 |
= (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
852 |
apply(rule_tac x = stp in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
853 |
apply(case_tac stp, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
854 |
apply(simp only: stepn) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
855 |
apply(case_tac "t_steps (s0, l0, r0) (tp, length tp1 div 2) nat") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
856 |
apply(subgoal_tac "length tp1 div 2 < a \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
857 |
a \<le> length tp1 div 2 + length tp div 2") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
858 |
apply(subgoal_tac "t_steps (s0, l0, r0) (tp1 @ tp @ tp2, 0) nat |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
859 |
= (a, b, c)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
860 |
apply(rule_tac t_shift_in_step, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
861 |
apply(rule_tac turing_shift_inside, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
862 |
apply(rule classical) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
863 |
apply(subgoal_tac "t_step (a,b,c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
864 |
(tp, length tp1 div 2) = (0, b, c)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
865 |
apply(rule_tac conf_keep_step, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
866 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
867 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
868 |
lemma turing_shift: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
869 |
"\<lbrakk>t_steps (s0, (l0, r0)) (tp, (length tp1 div 2)) stp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
870 |
= (s, (l, r)); s \<noteq> 0; stp > 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
871 |
(length tp1 div 2 < s0 \<and> s0 <= length tp1 div 2 + length tp div 2); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
872 |
t_ncorrect tp1; t_ncorrect tp\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
873 |
\<exists> stp' > 0. t_steps (s0, (l0, r0)) (tp1 @ tp @ tp2, 0) stp' = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
874 |
(s, (l, r))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
875 |
apply(case_tac "s > length tp1 div 2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
876 |
s <= length tp1 div 2 + length tp div 2") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
877 |
apply(subgoal_tac " t_steps (s0, l0, r0) (tp1 @ tp @ tp2, 0) stp = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
878 |
(s, l, r)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
879 |
apply(rule_tac x = stp in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
880 |
apply(rule_tac turing_shift_inside, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
881 |
apply(rule_tac turing_shift_outside, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
882 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
883 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
884 |
lemma inc_startof_not0: "start_of ly as \<ge> Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
885 |
apply(induct as, simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
886 |
apply(simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
887 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
888 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
889 |
lemma s_crsp: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
890 |
"\<lbrakk>as < length aprog; abc_fetch as aprog = Some ins; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
891 |
abc2t_correct aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
892 |
crsp_l (layout_of aprog) (as, am) (a, aa, ba) inres\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
893 |
length (concat (take as (tms_of aprog))) div 2 < a |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
894 |
\<and> a \<le> length (concat (take as (tms_of aprog))) div 2 + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
895 |
length (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
896 |
ins) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
897 |
apply(subgoal_tac "a = length (concat (take as (tms_of aprog))) div |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
898 |
2 + 1", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
899 |
apply(rule_tac ci_length_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
900 |
apply(rule crsp2stateq, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
901 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
902 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
903 |
lemma tms_out_ex: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
904 |
"\<lbrakk>ly = layout_of aprog; tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
905 |
abc2t_correct aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
906 |
crsp_l ly (as, am) tc inres; as < length aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
907 |
abc_fetch as aprog = Some ins; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
908 |
t_steps tc (ci ly (start_of ly as) ins, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
909 |
(start_of ly as) - 1) n = (s, l, r); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
910 |
n > 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
911 |
abc_step_l (as, am) (abc_fetch as aprog) = (as', am'); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
912 |
s = start_of ly as' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
913 |
\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
914 |
\<Longrightarrow> \<exists> stp > 0. (t_steps tc (tprog, 0) stp = (s, (l, r)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
915 |
apply(simp only: tm_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
916 |
apply(subgoal_tac "\<exists> tp1 tp2. concat (tms_of aprog) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
917 |
tp1 @ (ci ly (start_of ly as) ins) @ tp2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
918 |
\<and> tp1 = concat (take as (tms_of aprog)) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
919 |
tp2 = concat (drop (Suc as) (tms_of aprog))") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
920 |
apply(erule exE, erule exE, erule conjE, erule conjE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
921 |
case_tac tc, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
922 |
apply(rule turing_shift) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
923 |
apply(subgoal_tac "start_of (layout_of aprog) as - Suc 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
924 |
= length tp1 div 2", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
925 |
apply(rule_tac pre_lheq, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
926 |
apply(simp add: startof_not0, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
927 |
apply(rule_tac s_crsp, simp, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
928 |
apply(rule tms_ct, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
929 |
apply(rule tm_ct, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
930 |
apply(subgoal_tac "ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
931 |
(start_of (layout_of aprog) as) ins |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
932 |
= (tms_of aprog ! as)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
933 |
apply(simp add: tms_of.simps tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
934 |
apply(simp add: tms_of.simps tpairs_of.simps abc_fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
935 |
apply(erule_tac t_split, auto simp: tm_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
936 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
937 |
|
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
938 |
(* |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
939 |
subsection {* The compilation of @{text "Inc n"} *} |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
940 |
*) |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
941 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
942 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
943 |
The lemmas in this section lead to the correctness of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
944 |
the compilation of @{text "Inc n"} instruction. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
945 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
946 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
947 |
fun at_begin_fst_bwtn :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
948 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
949 |
"at_begin_fst_bwtn (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
950 |
(\<exists> lm1 tn rn. lm1 = (lm @ (0\<^bsup>tn\<^esup>)) \<and> length lm1 = s \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
951 |
(if lm1 = [] then l = Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
952 |
else l = [Bk]@<rev lm1>@Bk#Bk#ires) \<and> r = (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
953 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
954 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
955 |
fun at_begin_fst_awtn :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
956 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
957 |
"at_begin_fst_awtn (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
958 |
(\<exists> lm1 tn rn. lm1 = (lm @ (0\<^bsup>tn\<^esup>)) \<and> length lm1 = s \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
959 |
(if lm1 = [] then l = Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
960 |
else l = [Bk]@<rev lm1>@Bk#Bk#ires) \<and> r = [Oc]@Bk\<^bsup>rn\<^esup> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
961 |
)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
962 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
963 |
fun at_begin_norm :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
964 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
965 |
"at_begin_norm (as, lm) (s, l, r) ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
966 |
(\<exists> lm1 lm2 rn. lm = lm1 @ lm2 \<and> length lm1 = s \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
967 |
(if lm1 = [] then l = Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
968 |
else l = Bk # <rev lm1> @ Bk# Bk # ires ) \<and> r = <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
969 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
970 |
fun in_middle :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
971 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
972 |
"in_middle (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
973 |
(\<exists> lm1 lm2 tn m ml mr rn. lm @ 0\<^bsup>tn\<^esup> = lm1 @ [m] @ lm2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
974 |
\<and> length lm1 = s \<and> m + 1 = ml + mr \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
975 |
ml \<noteq> 0 \<and> tn = s + 1 - length lm \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
976 |
(if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
977 |
else l = (Oc\<^bsup>ml\<^esup>)@[Bk]@<rev lm1>@ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
978 |
Bk # Bk # ires) \<and> (r = (Oc\<^bsup>mr\<^esup>) @ [Bk] @ <lm2>@ (Bk\<^bsup>rn\<^esup>) \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
979 |
(lm2 = [] \<and> r = (Oc\<^bsup>mr\<^esup>))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
980 |
)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
981 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
982 |
fun inv_locate_a :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
983 |
where "inv_locate_a (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
984 |
(at_begin_norm (as, lm) (s, l, r) ires \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
985 |
at_begin_fst_bwtn (as, lm) (s, l, r) ires \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
986 |
at_begin_fst_awtn (as, lm) (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
987 |
)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
988 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
989 |
fun inv_locate_b :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
990 |
where "inv_locate_b (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
991 |
(in_middle (as, lm) (s, l, r)) ires " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
992 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
993 |
fun inv_after_write :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
994 |
where "inv_after_write (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
995 |
(\<exists> rn m lm1 lm2. lm = lm1 @ m # lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
996 |
(if lm1 = [] then l = Oc\<^bsup>m\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
997 |
else Oc # l = Oc\<^bsup>Suc m \<^esup>@ Bk # <rev lm1> @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
998 |
Bk # Bk # ires) \<and> r = [Oc] @ <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
999 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1000 |
fun inv_after_move :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1001 |
where "inv_after_move (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1002 |
(\<exists> rn m lm1 lm2. lm = lm1 @ m # lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1003 |
(if lm1 = [] then l = Oc\<^bsup>Suc m\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1004 |
else l = Oc\<^bsup>Suc m\<^esup>@ Bk # <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1005 |
r = <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1006 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1007 |
fun inv_after_clear :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1008 |
where "inv_after_clear (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1009 |
(\<exists> rn m lm1 lm2 r'. lm = lm1 @ m # lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1010 |
(if lm1 = [] then l = Oc\<^bsup>Suc m\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1011 |
else l = Oc\<^bsup>Suc m\<^esup>@ Bk # <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1012 |
r = Bk # r' \<and> Oc # r' = <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1013 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1014 |
fun inv_on_right_moving :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1015 |
where "inv_on_right_moving (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1016 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1017 |
ml + mr = m \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1018 |
(if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1019 |
else l = (Oc\<^bsup>ml\<^esup>) @ [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1020 |
((r = (Oc\<^bsup>mr\<^esup>) @ [Bk] @ <lm2> @ (Bk\<^bsup>rn\<^esup>)) \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1021 |
(r = (Oc\<^bsup>mr\<^esup>) \<and> lm2 = [])))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1022 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1023 |
fun inv_on_left_moving_norm :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1024 |
where "inv_on_left_moving_norm (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1025 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1026 |
ml + mr = Suc m \<and> mr > 0 \<and> (if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1027 |
else l = (Oc\<^bsup>ml\<^esup>) @ Bk # <rev lm1> @ Bk # Bk # ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1028 |
\<and> (r = (Oc\<^bsup>mr\<^esup>) @ Bk # <lm2> @ (Bk\<^bsup>rn\<^esup>) \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1029 |
(lm2 = [] \<and> r = Oc\<^bsup>mr\<^esup>)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1030 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1031 |
fun inv_on_left_moving_in_middle_B:: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1032 |
where "inv_on_left_moving_in_middle_B (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1033 |
(\<exists> lm1 lm2 rn. lm = lm1 @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1034 |
(if lm1 = [] then l = Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1035 |
else l = <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1036 |
r = Bk # <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1037 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1038 |
fun inv_on_left_moving :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1039 |
where "inv_on_left_moving (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1040 |
(inv_on_left_moving_norm (as, lm) (s, l, r) ires \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1041 |
inv_on_left_moving_in_middle_B (as, lm) (s, l, r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1042 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1043 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1044 |
fun inv_check_left_moving_on_leftmost :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1045 |
where "inv_check_left_moving_on_leftmost (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1046 |
(\<exists> rn. l = ires \<and> r = [Bk, Bk] @ <lm> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1047 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1048 |
fun inv_check_left_moving_in_middle :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1049 |
where "inv_check_left_moving_in_middle (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1050 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1051 |
(\<exists> lm1 lm2 r' rn. lm = lm1 @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1052 |
(Oc # l = <rev lm1> @ Bk # Bk # ires) \<and> r = Oc # Bk # r' \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1053 |
r' = <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1054 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1055 |
fun inv_check_left_moving :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1056 |
where "inv_check_left_moving (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1057 |
(inv_check_left_moving_on_leftmost (as, lm) (s, l, r) ires \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1058 |
inv_check_left_moving_in_middle (as, lm) (s, l, r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1059 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1060 |
fun inv_after_left_moving :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1061 |
where "inv_after_left_moving (as, lm) (s, l, r) ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1062 |
(\<exists> rn. l = Bk # ires \<and> r = Bk # <lm> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1063 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1064 |
fun inv_stop :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1065 |
where "inv_stop (as, lm) (s, l, r) ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1066 |
(\<exists> rn. l = Bk # Bk # ires \<and> r = <lm> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1067 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1068 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1069 |
fun inc_inv :: "layout \<Rightarrow> nat \<Rightarrow> inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1070 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1071 |
"inc_inv ly n (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1072 |
(let ss = start_of ly as in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1073 |
let lm' = abc_lm_s lm n ((abc_lm_v lm n)+1) in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1074 |
if s = 0 then False |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1075 |
else if s < ss then False |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1076 |
else if s < ss + 2 * n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1077 |
if (s - ss) mod 2 = 0 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1078 |
inv_locate_a (as, lm) ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1079 |
else inv_locate_b (as, lm) ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1080 |
else if s = ss + 2 * n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1081 |
inv_locate_a (as, lm) (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1082 |
else if s = ss + 2 * n + 1 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1083 |
inv_locate_b (as, lm) (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1084 |
else if s = ss + 2 * n + 2 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1085 |
inv_after_write (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1086 |
else if s = ss + 2 * n + 3 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1087 |
inv_after_move (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1088 |
else if s = ss + 2 * n + 4 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1089 |
inv_after_clear (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1090 |
else if s = ss + 2 * n + 5 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1091 |
inv_on_right_moving (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1092 |
else if s = ss + 2 * n + 6 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1093 |
inv_on_left_moving (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1094 |
else if s = ss + 2 * n + 7 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1095 |
inv_check_left_moving (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1096 |
else if s = ss + 2 * n + 8 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1097 |
inv_after_left_moving (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1098 |
else if s = ss + 2 * n + 9 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1099 |
inv_stop (as, lm') (s - ss, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1100 |
else False) " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1101 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1102 |
lemma fetch_intro: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1103 |
"\<lbrakk>\<And>xs.\<lbrakk>ba = Oc # xs\<rbrakk> \<Longrightarrow> P (fetch prog i Oc); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1104 |
\<And>xs.\<lbrakk>ba = Bk # xs\<rbrakk> \<Longrightarrow> P (fetch prog i Bk); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1105 |
ba = [] \<Longrightarrow> P (fetch prog i Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1106 |
\<rbrakk> \<Longrightarrow> P (fetch prog i |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1107 |
(case ba of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1108 |
by (auto split:list.splits block.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1109 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1110 |
lemma length_findnth[simp]: "length (findnth n) = 4 * n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1111 |
apply(induct n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1112 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1113 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1114 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1115 |
declare tshift.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1116 |
declare findnth.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1117 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1118 |
lemma findnth_nth: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1119 |
"\<lbrakk>n > q; x < 4\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1120 |
(findnth n) ! (4 * q + x) = (findnth (Suc q) ! (4 * q + x))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1121 |
apply(induct n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1122 |
apply(case_tac "q < n", simp add: findnth.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1123 |
apply(simp add: nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1124 |
apply(subgoal_tac "q = n", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1125 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1126 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1127 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1128 |
lemma Suc_pre[simp]: "\<not> a < start_of ly as \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1129 |
(Suc a - start_of ly as) = Suc (a - start_of ly as)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1130 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1131 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1132 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1133 |
lemma fetch_locate_a_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1134 |
\<And>a q xs. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1135 |
\<lbrakk>\<not> a < start_of (layout_of aprog) as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1136 |
a < start_of (layout_of aprog) as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1137 |
a - start_of (layout_of aprog) as = 2 * q; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1138 |
start_of (layout_of aprog) as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1139 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1140 |
(Inc n)) (Suc (2 * q)) Oc) = (R, a+1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1141 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1142 |
nth_of.simps tshift.simps nth_append Suc_pre) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1143 |
apply(subgoal_tac "(findnth n ! Suc (4 * q)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1144 |
findnth (Suc q) ! (4 * q + 1)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1145 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1146 |
apply(subgoal_tac " findnth n !(4 * q + 1) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1147 |
findnth (Suc q) ! (4 * q + 1)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1148 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1149 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1150 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1151 |
lemma fetch_locate_a_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1152 |
\<And>a q xs. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1153 |
\<lbrakk>abc_fetch as aprog = Some (Inc n); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1154 |
\<not> a < start_of (layout_of aprog) as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1155 |
a < start_of (layout_of aprog) as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1156 |
a - start_of (layout_of aprog) as = 2 * q; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1157 |
start_of (layout_of aprog) as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1158 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1159 |
(start_of (layout_of aprog) as) (Inc n)) (Suc (2 * q)) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1160 |
= (W1, a)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1161 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1162 |
tshift.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1163 |
apply(subgoal_tac "(findnth n ! (4 * q)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1164 |
findnth (Suc q) ! (4 * q )") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1165 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1166 |
apply(subgoal_tac " findnth n !(4 * q + 0) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1167 |
findnth (Suc q) ! (4 * q + 0)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1168 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1169 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1170 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1171 |
lemma [intro]: "x mod 2 = Suc 0 \<Longrightarrow> \<exists> q. x = Suc (2 * q)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1172 |
apply(drule mod_eqD, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1173 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1174 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1175 |
lemma add3_Suc: "x + 3 = Suc (Suc (Suc x))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1176 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1177 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1178 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1179 |
declare start_of.simps[simp] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1180 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1181 |
lemma layout_not0: "start_of ly as > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1182 |
by(induct as, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1183 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1184 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1185 |
"\<lbrakk>\<not> a < start_of (layout_of aprog) as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1186 |
a - start_of (layout_of aprog) as = Suc (2 * q); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1187 |
abc_fetch as aprog = Some (Inc n); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1188 |
start_of (layout_of aprog) as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1189 |
\<Longrightarrow> Suc (Suc (2 * q + start_of (layout_of aprog) as - Suc 0)) = a" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1190 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1191 |
"Suc (Suc (2 * q + start_of (layout_of aprog) as - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1192 |
= 2 + 2 * q + start_of (layout_of aprog) as - Suc 0", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1193 |
simp, simp add: inc_startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1194 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1195 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1196 |
lemma fetch_locate_b_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1197 |
\<And>a xs. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1198 |
\<lbrakk>0 < a; \<not> a < start_of (layout_of aprog) as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1199 |
a < start_of (layout_of aprog) as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1200 |
(a - start_of (layout_of aprog) as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1201 |
start_of (layout_of aprog) as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1202 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1203 |
(Inc n)) (Suc (a - start_of (layout_of aprog) as)) Oc) = (R, a)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1204 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1205 |
nth_of.simps tshift.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1206 |
apply(subgoal_tac "\<exists> q. (a - start_of (layout_of aprog) as) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1207 |
2 * q + 1", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1208 |
apply(subgoal_tac "(findnth n ! Suc (Suc (Suc (4 * q)))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1209 |
= findnth (Suc q) ! (4 * q + 3)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1210 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1211 |
apply(subgoal_tac " findnth n ! (4 * q + 3) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1212 |
findnth (Suc q) ! (4 * q + 3)", simp add: add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1213 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1214 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1215 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1216 |
lemma fetch_locate_b_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1217 |
\<And>a xs. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1218 |
\<lbrakk>0 < a; \<not> a < start_of (layout_of aprog) as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1219 |
a < start_of (layout_of aprog) as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1220 |
(a - start_of (layout_of aprog) as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1221 |
start_of (layout_of aprog) as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1222 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1223 |
(Inc n)) (Suc (a - start_of (layout_of aprog) as)) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1224 |
= (R, a + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1225 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1226 |
nth_of.simps tshift.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1227 |
apply(subgoal_tac "\<exists> q. (a - start_of (layout_of aprog) as) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1228 |
2 * q + 1", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1229 |
apply(subgoal_tac "(findnth n ! Suc ((Suc (4 * q)))) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1230 |
findnth (Suc q) ! (4 * q + 2)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1231 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1232 |
apply(subgoal_tac " findnth n ! (4 * q + 2) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1233 |
findnth (Suc q) ! (4 * q + 2)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1234 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1235 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1236 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1237 |
lemma fetch_locate_n_a_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1238 |
"start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1239 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1240 |
(start_of (layout_of aprog) as) (Inc n)) (Suc (2 * n)) Oc) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1241 |
(R, start_of (layout_of aprog) as + 2 * n + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1242 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1243 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1244 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1245 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1246 |
lemma fetch_locate_n_a_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1247 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1248 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1249 |
(start_of (layout_of aprog) as) (Inc n)) (Suc (2 * n)) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1250 |
= (W1, start_of (layout_of aprog) as + 2 * n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1251 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1252 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1253 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1254 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1255 |
lemma fetch_locate_n_b_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1256 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1257 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1258 |
(Inc n)) (Suc (Suc (2 * n))) Oc) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1259 |
(R, start_of (layout_of aprog) as + 2 * n + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1260 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1261 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1262 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1263 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1264 |
lemma fetch_locate_n_b_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1265 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1266 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1267 |
(Inc n)) (Suc (Suc (2 * n))) Bk) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1268 |
(W1, start_of (layout_of aprog) as + 2 * n + 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1269 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1270 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1271 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1272 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1273 |
lemma fetch_after_write_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1274 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1275 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1276 |
(Inc n)) (Suc (Suc (Suc (2 * n)))) Oc) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1277 |
(R, start_of (layout_of aprog) as + 2*n + 3)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1278 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1279 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1280 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1281 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1282 |
lemma fetch_after_move_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1283 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1284 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1285 |
(start_of (layout_of aprog) as) (Inc n)) (4 + 2 * n) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1286 |
= (W0, start_of (layout_of aprog) as + 2 * n + 4)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1287 |
apply(auto simp: ci.simps findnth.simps tshift.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1288 |
tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1289 |
apply(subgoal_tac "4 + 2*n = Suc (2*n + 3)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1290 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1291 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1292 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1293 |
lemma fetch_after_move_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1294 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1295 |
\<Longrightarrow>(fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1296 |
(start_of (layout_of aprog) as) (Inc n)) (4 + 2 * n) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1297 |
= (L, start_of (layout_of aprog) as + 2 * n + 6)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1298 |
apply(auto simp: ci.simps findnth.simps tshift.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1299 |
tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1300 |
apply(subgoal_tac "4 + 2*n = Suc (2*n + 3)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1301 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1302 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1303 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1304 |
lemma fetch_clear_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1305 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1306 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1307 |
(start_of (layout_of aprog) as) (Inc n)) (5 + 2 * n) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1308 |
= (R, start_of (layout_of aprog) as + 2 * n + 5)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1309 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1310 |
tshift.simps tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1311 |
apply(subgoal_tac "5 + 2*n = Suc (2*n + 4)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1312 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1313 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1314 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1315 |
lemma fetch_right_move_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1316 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1317 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1318 |
(start_of (layout_of aprog) as) (Inc n)) (6 + 2*n) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1319 |
= (R, start_of (layout_of aprog) as + 2 * n + 5)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1320 |
apply(auto simp: ci.simps findnth.simps tshift.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1321 |
tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1322 |
apply(subgoal_tac "6 + 2*n = Suc (2*n + 5)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1323 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1324 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1325 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1326 |
lemma fetch_right_move_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1327 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1328 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1329 |
(start_of (layout_of aprog) as) (Inc n)) (6 + 2*n) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1330 |
= (W1, start_of (layout_of aprog) as + 2 * n + 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1331 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1332 |
tshift.simps tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1333 |
apply(subgoal_tac "6 + 2*n = Suc (2*n + 5)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1334 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1335 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1336 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1337 |
lemma fetch_left_move_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1338 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1339 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1340 |
(start_of (layout_of aprog) as) (Inc n)) (7 + 2*n) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1341 |
= (L, start_of (layout_of aprog) as + 2 * n + 6)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1342 |
apply(auto simp: ci.simps findnth.simps tshift.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1343 |
tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1344 |
apply(subgoal_tac "7 + 2*n = Suc (2*n + 6)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1345 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1346 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1347 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1348 |
lemma fetch_left_move_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1349 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1350 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1351 |
(start_of (layout_of aprog) as) (Inc n)) (7 + 2*n) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1352 |
= (L, start_of (layout_of aprog) as + 2 * n + 7)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1353 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1354 |
tshift.simps tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1355 |
apply(subgoal_tac "7 + 2*n = Suc (2*n + 6)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1356 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1357 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1358 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1359 |
lemma fetch_check_left_move_o: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1360 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1361 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1362 |
(start_of (layout_of aprog) as) (Inc n)) (8 + 2*n) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1363 |
= (L, start_of (layout_of aprog) as + 2 * n + 6)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1364 |
apply(auto simp: ci.simps findnth.simps tshift.simps tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1365 |
apply(subgoal_tac "8 + 2 * n = Suc (2 * n + 7)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1366 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1367 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1368 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1369 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1370 |
lemma fetch_check_left_move_b: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1371 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1372 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1373 |
(start_of (layout_of aprog) as) (Inc n)) (8 + 2*n) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1374 |
= (R, start_of (layout_of aprog) as + 2 * n + 8) " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1375 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1376 |
tshift.simps tinc_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1377 |
apply(subgoal_tac "8 + 2*n= Suc (2*n + 7)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1378 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1379 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1380 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1381 |
lemma fetch_after_left_move: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1382 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1383 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1384 |
(start_of (layout_of aprog) as) (Inc n)) (9 + 2*n) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1385 |
= (R, start_of (layout_of aprog) as + 2 * n + 9)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1386 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1387 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1388 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1389 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1390 |
lemma fetch_stop: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1391 |
start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1392 |
\<Longrightarrow> (fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1393 |
(start_of (layout_of aprog) as) (Inc n)) (10 + 2 *n) b) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1394 |
= (Nop, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1395 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1396 |
nth_of.simps tshift.simps nth_append tinc_b_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1397 |
split: block.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1398 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1399 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1400 |
lemma fetch_state0: " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1401 |
(fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1402 |
(start_of (layout_of aprog) as) (Inc n)) 0 b) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1403 |
= (Nop, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1404 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1405 |
nth_of.simps tshift.simps nth_append tinc_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1406 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1407 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1408 |
lemmas fetch_simps = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1409 |
fetch_locate_a_o fetch_locate_a_b fetch_locate_b_o fetch_locate_b_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1410 |
fetch_locate_n_a_b fetch_locate_n_a_o fetch_locate_n_b_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1411 |
fetch_locate_n_b_b fetch_after_write_o fetch_after_move_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1412 |
fetch_after_move_b fetch_clear_b fetch_right_move_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1413 |
fetch_right_move_b fetch_left_move_o fetch_left_move_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1414 |
fetch_after_left_move fetch_check_left_move_o fetch_stop |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1415 |
fetch_state0 fetch_check_left_move_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1416 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1417 |
text {* *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1418 |
declare exponent_def[simp del] tape_of_nat_list.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1419 |
at_begin_norm.simps[simp del] at_begin_fst_bwtn.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1420 |
at_begin_fst_awtn.simps[simp del] in_middle.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1421 |
abc_lm_s.simps[simp del] abc_lm_v.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1422 |
ci.simps[simp del] t_step.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1423 |
inv_after_move.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1424 |
inv_on_left_moving_norm.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1425 |
inv_on_left_moving_in_middle_B.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1426 |
inv_after_clear.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1427 |
inv_after_write.simps[simp del] inv_on_left_moving.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1428 |
inv_on_right_moving.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1429 |
inv_check_left_moving.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1430 |
inv_check_left_moving_in_middle.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1431 |
inv_check_left_moving_on_leftmost.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1432 |
inv_after_left_moving.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1433 |
inv_stop.simps[simp del] inv_locate_a.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1434 |
inv_locate_b.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1435 |
declare tms_of.simps[simp del] tm_of.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1436 |
layout_of.simps[simp del] abc_fetch.simps [simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1437 |
t_step.simps[simp del] t_steps.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1438 |
tpairs_of.simps[simp del] start_of.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1439 |
fetch.simps [simp del] new_tape.simps [simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1440 |
nth_of.simps [simp del] ci.simps [simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1441 |
length_of.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1442 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1443 |
(*! Start point *) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1444 |
lemma [simp]: "Suc (2 * q) mod 2 = Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1445 |
by arith |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1446 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1447 |
lemma [simp]: "Suc (2 * q) div 2 = q" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1448 |
by arith |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1449 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1450 |
lemma [simp]: "\<lbrakk> \<not> a < start_of ly as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1451 |
a < start_of ly as + 2 * n; a - start_of ly as = 2 * q\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1452 |
\<Longrightarrow> Suc a < start_of ly as + 2 * n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1453 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1454 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1455 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1456 |
lemma [simp]: "x mod 2 = Suc 0 \<Longrightarrow> (Suc x) mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1457 |
by arith |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1458 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1459 |
lemma [simp]: "x mod 2 = Suc 0 \<Longrightarrow> (Suc x) div 2 = Suc (x div 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1460 |
by arith |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1461 |
lemma exp_def[simp]: "a\<^bsup>Suc n \<^esup>= a # a\<^bsup>n\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1462 |
by(simp add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1463 |
lemma [intro]: "Bk # r = Oc\<^bsup>mr\<^esup> @ r' \<Longrightarrow> mr = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1464 |
by(case_tac mr, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1465 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1466 |
lemma [intro]: "Bk # r = replicate mr Oc \<Longrightarrow> mr = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1467 |
by(case_tac mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1468 |
lemma tape_of_nl_abv_cons[simp]: "xs \<noteq> [] \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1469 |
<x # xs> = Oc\<^bsup>Suc x\<^esup>@ Bk # <xs>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1470 |
apply(simp add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1471 |
apply(case_tac xs, simp, simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1472 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1473 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1474 |
lemma [simp]: "<[]::nat list> = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1475 |
by(auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1476 |
lemma [simp]: "Oc # r = <(lm::nat list)> @ Bk\<^bsup>rn\<^esup>\<Longrightarrow> lm \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1477 |
apply(auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1478 |
apply(case_tac rn, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1479 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1480 |
lemma BkCons_nil: "Bk # xs = <lm::nat list> @ Bk\<^bsup>rn\<^esup>\<Longrightarrow> lm = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1481 |
apply(case_tac lm, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1482 |
apply(case_tac list, auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1483 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1484 |
lemma BkCons_nil': "Bk # xs = <lm::nat list> @ Bk\<^bsup>ln\<^esup>\<Longrightarrow> lm = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1485 |
by(auto intro: BkCons_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1486 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1487 |
lemma hd_tl_tape_of_nat_list: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1488 |
"tl (lm::nat list) \<noteq> [] \<Longrightarrow> <lm> = <hd lm> @ Bk # <tl lm>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1489 |
apply(frule tape_of_nl_abv_cons[of "tl lm" "hd lm"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1490 |
apply(simp add: tape_of_nat_abv Bk_def del: tape_of_nl_abv_cons) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1491 |
apply(subgoal_tac "lm = hd lm # tl lm", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1492 |
apply(case_tac lm, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1493 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1494 |
lemma [simp]: "Oc # xs = Oc\<^bsup>mr\<^esup> @ Bk # <lm2> @ Bk\<^bsup>rn\<^esup>\<Longrightarrow> mr > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1495 |
apply(case_tac mr, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1496 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1497 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1498 |
lemma tape_of_nat_list_cons: "xs \<noteq> [] \<Longrightarrow> tape_of_nat_list (x # xs) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1499 |
replicate (Suc x) Oc @ Bk # tape_of_nat_list xs" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1500 |
apply(drule tape_of_nl_abv_cons[of xs x]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1501 |
apply(auto simp: tape_of_nl_abv tape_of_nat_abv Oc_def Bk_def exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1502 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1503 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1504 |
lemma rev_eq: "rev xs = rev ys \<Longrightarrow> xs = ys" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1505 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1506 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1507 |
lemma tape_of_nat_list_eq: " xs = ys \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1508 |
tape_of_nat_list xs = tape_of_nat_list ys" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1509 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1510 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1511 |
lemma tape_of_nl_nil_eq: "<(lm::nat list)> = [] = (lm = [])" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1512 |
apply(simp add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1513 |
apply(case_tac lm, simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1514 |
apply(case_tac "list") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1515 |
apply(auto simp: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1516 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1517 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1518 |
lemma rep_ind: "replicate (Suc n) a = replicate n a @ [a]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1519 |
apply(induct n, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1520 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1521 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1522 |
lemma [simp]: "Oc # r = <lm::nat list> @ replicate rn Bk \<Longrightarrow> Suc 0 \<le> length lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1523 |
apply(rule_tac classical, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1524 |
apply(case_tac lm, simp, case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1525 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1526 |
lemma Oc_Bk_Cons: "Oc # Bk # list = <lm::nat list> @ Bk\<^bsup>ln\<^esup> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1527 |
lm \<noteq> [] \<and> hd lm = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1528 |
apply(case_tac lm, simp, case_tac ln, simp add: exponent_def, simp add: exponent_def, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1529 |
apply(case_tac lista, auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1530 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1531 |
(*lemma Oc_Oc_Cons: "Oc # Oc # list = <lm::nat list> @ Bk\<^bsup>ln\<^esup> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1532 |
lm \<noteq> [] \<and> hd lm > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1533 |
apply(case_tac lm, simp add: exponent_def, case_tac ln, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1534 |
apply(case_tac lista, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1535 |
auto simp: tape_of_nl_abv tape_of_nat_list.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1536 |
apply(case_tac [!] a, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1537 |
apply(case_tac ln, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1538 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1539 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1540 |
lemma Oc_nil_zero[simp]: "[Oc] = <lm::nat list> @ Bk\<^bsup>ln\<^esup> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1541 |
\<Longrightarrow> lm = [0] \<and> ln = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1542 |
apply(case_tac lm, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1543 |
apply(case_tac ln, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1544 |
apply(case_tac [!] list, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1545 |
auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1546 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1547 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1548 |
lemma [simp]: "Oc # r = <lm2> @ replicate rn Bk \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1549 |
(\<exists>rn. r = replicate (hd lm2) Oc @ Bk # <tl lm2> @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1550 |
replicate rn Bk) \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1551 |
tl lm2 = [] \<and> r = replicate (hd lm2) Oc" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1552 |
apply(rule_tac disjCI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1553 |
apply(case_tac "tl lm2 = []", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1554 |
apply(case_tac lm2, simp add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1555 |
apply(case_tac rn, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1556 |
apply(simp add: tape_of_nl_abv tape_of_nat_list.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1557 |
apply(case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1558 |
apply(rule_tac x = rn in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1559 |
apply(simp add: hd_tl_tape_of_nat_list) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1560 |
apply(simp add: tape_of_nat_abv Oc_def exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1561 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1562 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1563 |
(*inv: from locate_a to locate_b*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1564 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1565 |
"inv_locate_a (as, lm) (q, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1566 |
\<Longrightarrow> inv_locate_b (as, lm) (q, Oc # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1567 |
apply(simp only: inv_locate_a.simps inv_locate_b.simps in_middle.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1568 |
at_begin_norm.simps at_begin_fst_bwtn.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1569 |
at_begin_fst_awtn.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1570 |
apply(erule disjE, erule exE, erule exE, erule exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1571 |
apply(rule_tac x = lm1 in exI, rule_tac x = "tl lm2" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1572 |
apply(rule_tac x = "0" in exI, rule_tac x = "hd lm2" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1573 |
auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1574 |
apply(rule_tac x = "Suc 0" in exI, simp add:exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1575 |
apply(rule_tac x = "lm @ replicate tn 0" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1576 |
rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1577 |
rule_tac x = "Suc tn" in exI, rule_tac x = 0 in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1578 |
apply(simp only: rep_ind, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1579 |
apply(rule_tac x = "Suc 0" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1580 |
apply(case_tac [1-3] rn, simp_all ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1581 |
apply(rule_tac x = "lm @ replicate tn 0" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1582 |
rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1583 |
rule_tac x = "Suc tn" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1584 |
rule_tac x = 0 in exI, simp add: rep_ind del: replicate_Suc split:if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1585 |
apply(rule_tac x = "Suc 0" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1586 |
apply(case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1587 |
apply(rule_tac [!] x = "Suc 0" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1588 |
apply(case_tac [!] rn, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1589 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1590 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1591 |
(*inv: from locate_a to _locate_a*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1592 |
lemma locate_a_2_locate_a[simp]: "inv_locate_a (as, am) (q, aaa, Bk # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1593 |
\<Longrightarrow> inv_locate_a (as, am) (q, aaa, Oc # xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1594 |
apply(simp only: inv_locate_a.simps at_begin_norm.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1595 |
at_begin_fst_bwtn.simps at_begin_fst_awtn.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1596 |
apply(erule_tac disjE, erule exE, erule exE, erule exE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1597 |
rule disjI2, rule disjI2) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1598 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1599 |
apply(erule_tac disjE, erule exE, erule exE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1600 |
erule exE, rule disjI2, rule disjI2) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1601 |
prefer 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1602 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1603 |
proof- |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1604 |
fix lm1 tn rn |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1605 |
assume k: "lm1 = am @ 0\<^bsup>tn\<^esup> \<and> length lm1 = q \<and> (if lm1 = [] then aaa = Bk # Bk # |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1606 |
ires else aaa = [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> Bk # xs = Bk\<^bsup>rn\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1607 |
thus "\<exists>lm1 tn rn. lm1 = am @ 0\<^bsup>tn\<^esup> \<and> length lm1 = q \<and> (if lm1 = [] then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1608 |
aaa = Bk # Bk # ires else aaa = [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> Oc # xs = [Oc] @ Bk\<^bsup>rn\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1609 |
(is "\<exists>lm1 tn rn. ?P lm1 tn rn") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1610 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1611 |
from k have "?P lm1 tn (rn - 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1612 |
apply(auto simp: Oc_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1613 |
by(case_tac [!] "rn::nat", auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1614 |
thus ?thesis by blast |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1615 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1616 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1617 |
fix lm1 lm2 rn |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1618 |
assume h1: "am = lm1 @ lm2 \<and> length lm1 = q \<and> (if lm1 = [] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1619 |
then aaa = Bk # Bk # ires else aaa = Bk # <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1620 |
Bk # xs = <lm2> @ Bk\<^bsup>rn\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1621 |
from h1 have h2: "lm2 = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1622 |
proof(rule_tac xs = xs and rn = rn in BkCons_nil, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1623 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1624 |
from h1 and h2 show "\<exists>lm1 tn rn. lm1 = am @ 0\<^bsup>tn\<^esup> \<and> length lm1 = q \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1625 |
(if lm1 = [] then aaa = Bk # Bk # ires else aaa = [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1626 |
Oc # xs = [Oc] @ Bk\<^bsup>rn\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1627 |
(is "\<exists>lm1 tn rn. ?P lm1 tn rn") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1628 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1629 |
from h1 and h2 have "?P lm1 0 (rn - 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1630 |
apply(auto simp: Oc_def exponent_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1631 |
tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1632 |
by(case_tac "rn::nat", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1633 |
thus ?thesis by blast |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1634 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1635 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1636 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1637 |
lemma [intro]: "\<exists>rn. [a] = a\<^bsup>rn\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1638 |
by(rule_tac x = "Suc 0" in exI, simp add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1639 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1640 |
lemma [intro]: "\<exists>tn. [] = a\<^bsup>tn\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1641 |
apply(rule_tac x = 0 in exI, simp add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1642 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1643 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1644 |
lemma [intro]: "at_begin_norm (as, am) (q, aaa, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1645 |
\<Longrightarrow> at_begin_norm (as, am) (q, aaa, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1646 |
apply(simp add: at_begin_norm.simps, erule_tac exE, erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1647 |
apply(rule_tac x = lm1 in exI, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1648 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1649 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1650 |
lemma [intro]: "at_begin_fst_bwtn (as, am) (q, aaa, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1651 |
\<Longrightarrow> at_begin_fst_bwtn (as, am) (q, aaa, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1652 |
apply(simp only: at_begin_fst_bwtn.simps, erule_tac exE, erule_tac exE, erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1653 |
apply(rule_tac x = "am @ 0\<^bsup>tn\<^esup>" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1654 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1655 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1656 |
lemma [intro]: "at_begin_fst_awtn (as, am) (q, aaa, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1657 |
\<Longrightarrow> at_begin_fst_awtn (as, am) (q, aaa, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1658 |
apply(auto simp: at_begin_fst_awtn.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1659 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1660 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1661 |
lemma [intro]: "inv_locate_a (as, am) (q, aaa, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1662 |
\<Longrightarrow> inv_locate_a (as, am) (q, aaa, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1663 |
apply(simp only: inv_locate_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1664 |
apply(erule disj_forward) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1665 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1666 |
apply(erule disj_forward, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1667 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1668 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1669 |
lemma [simp]: "inv_locate_a (as, am) (q, aaa, []) ires \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1670 |
inv_locate_a (as, am) (q, aaa, [Oc]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1671 |
apply(insert locate_a_2_locate_a [of as am q aaa "[]"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1672 |
apply(subgoal_tac "inv_locate_a (as, am) (q, aaa, [Bk]) ires", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1673 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1674 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1675 |
(*inv: from locate_b to locate_b*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1676 |
lemma [simp]: "inv_locate_b (as, am) (q, aaa, Oc # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1677 |
\<Longrightarrow> inv_locate_b (as, am) (q, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1678 |
apply(simp only: inv_locate_b.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1679 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1680 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1681 |
rule_tac x = tn in exI, rule_tac x = m in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1682 |
apply(rule_tac x = "Suc ml" in exI, rule_tac x = "mr - 1" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1683 |
rule_tac x = rn in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1684 |
apply(case_tac mr, simp_all add: exponent_def, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1685 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1686 |
lemma zero_and_nil[intro]: "(Bk # Bk\<^bsup>n\<^esup> = Oc\<^bsup>mr\<^esup> @ Bk # <lm::nat list> @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1687 |
Bk\<^bsup>rn \<^esup>) \<or> (lm2 = [] \<and> Bk # Bk\<^bsup>n\<^esup> = Oc\<^bsup>mr\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1688 |
\<Longrightarrow> mr = 0 \<and> lm = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1689 |
apply(rule context_conjI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1690 |
apply(case_tac mr, auto simp:exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1691 |
apply(insert BkCons_nil[of "replicate (n - 1) Bk" lm rn]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1692 |
apply(case_tac n, auto simp: exponent_def Bk_def tape_of_nl_nil_eq) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1693 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1694 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1695 |
lemma tape_of_nat_def: "<[m::nat]> = Oc # Oc\<^bsup>m\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1696 |
apply(simp add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1697 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1698 |
lemma [simp]: "\<lbrakk>inv_locate_b (as, am) (q, aaa, Bk # xs) ires; \<exists>n. xs = Bk\<^bsup>n\<^esup>\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1699 |
\<Longrightarrow> inv_locate_a (as, am) (Suc q, Bk # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1700 |
apply(simp add: inv_locate_b.simps inv_locate_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1701 |
apply(rule_tac disjI2, rule_tac disjI1) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1702 |
apply(simp only: in_middle.simps at_begin_fst_bwtn.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1703 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1704 |
apply(rule_tac x = "lm1 @ [m]" in exI, rule_tac x = tn in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1705 |
apply(subgoal_tac "mr = 0 \<and> lm2 = []") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1706 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1707 |
apply(rule_tac n = n and mr = mr and lm = "lm2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1708 |
and rn = rn and n = n in zero_and_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1709 |
apply(auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1710 |
apply(case_tac "lm1 = []", auto simp: tape_of_nat_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1711 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1712 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1713 |
lemma length_equal: "xs = ys \<Longrightarrow> length xs = length ys" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1714 |
by auto |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1715 |
lemma [simp]: "a\<^bsup>0\<^esup> = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1716 |
by(simp add: exp_zero) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1717 |
(*inv: from locate_b to locate_a*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1718 |
lemma [simp]: "length (a\<^bsup>b\<^esup>) = b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1719 |
apply(simp add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1720 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1721 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1722 |
lemma [simp]: "\<lbrakk>inv_locate_b (as, am) (q, aaa, Bk # xs) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1723 |
\<not> (\<exists>n. xs = Bk\<^bsup>n\<^esup>)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1724 |
\<Longrightarrow> inv_locate_a (as, am) (Suc q, Bk # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1725 |
apply(simp add: inv_locate_b.simps inv_locate_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1726 |
apply(rule_tac disjI1) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1727 |
apply(simp only: in_middle.simps at_begin_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1728 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1729 |
apply(rule_tac x = "lm1 @ [m]" in exI, rule_tac x = lm2 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1730 |
apply(subgoal_tac "tn = 0", simp add: exponent_def , auto split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1731 |
apply(case_tac [!] mr, simp_all add: tape_of_nat_def, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1732 |
apply(case_tac lm2, simp, erule_tac x = rn in allE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1733 |
apply(case_tac am, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1734 |
apply(case_tac lm2, simp, erule_tac x = rn in allE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1735 |
apply(drule_tac length_equal, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1736 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1737 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1738 |
lemma locate_b_2_a[intro]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1739 |
"inv_locate_b (as, am) (q, aaa, Bk # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1740 |
\<Longrightarrow> inv_locate_a (as, am) (Suc q, Bk # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1741 |
apply(case_tac "\<exists> n. xs = Bk\<^bsup>n\<^esup>", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1742 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1743 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1744 |
lemma locate_b_2_locate_a[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1745 |
"\<lbrakk>\<not> a < start_of ly as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1746 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1747 |
(a - start_of ly as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1748 |
inv_locate_b (as, am) ((a - start_of ly as) div 2, aaa, Bk # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1749 |
\<Longrightarrow> (Suc a < start_of ly as + 2 * n \<longrightarrow> inv_locate_a (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1750 |
(Suc ((a - start_of ly as) div 2), Bk # aaa, xs) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1751 |
(\<not> Suc a < start_of ly as + 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1752 |
inv_locate_a (as, am) (n, Bk # aaa, xs) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1753 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1754 |
apply(subgoal_tac "n > 0") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1755 |
apply(subgoal_tac "(a - start_of ly as) div 2 = n - 1") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1756 |
apply(insert locate_b_2_a [of as am "n - 1" aaa xs], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1757 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1758 |
apply(case_tac n, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1759 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1760 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1761 |
lemma [simp]: "inv_locate_b (as, am) (q, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1762 |
\<Longrightarrow> inv_locate_b (as, am) (q, l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1763 |
apply(simp only: inv_locate_b.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1764 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1765 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1766 |
rule_tac x = tn in exI, rule_tac x = m in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1767 |
rule_tac x = ml in exI, rule_tac x = mr in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1768 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1769 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1770 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1771 |
lemma locate_b_2_locate_a_B[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1772 |
"\<lbrakk>\<not> a < start_of ly as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1773 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1774 |
(a - start_of ly as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1775 |
inv_locate_b (as, am) ((a - start_of ly as) div 2, aaa, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1776 |
\<Longrightarrow> (Suc a < start_of ly as + 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1777 |
inv_locate_a (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1778 |
(Suc ((a - start_of ly as) div 2), Bk # aaa, []) ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1779 |
\<and> (\<not> Suc a < start_of ly as + 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1780 |
inv_locate_a (as, am) (n, Bk # aaa, []) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1781 |
apply(insert locate_b_2_locate_a [of a ly as n am aaa "[]"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1782 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1783 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1784 |
(*inv: from locate_b to after_write*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1785 |
lemma inv_locate_b_2_after_write[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1786 |
"inv_locate_b (as, am) (n, aaa, Bk # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1787 |
\<Longrightarrow> inv_after_write (as, abc_lm_s am n (Suc (abc_lm_v am n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1788 |
(Suc (Suc (2 * n)), aaa, Oc # xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1789 |
apply(auto simp: in_middle.simps inv_after_write.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1790 |
abc_lm_v.simps abc_lm_s.simps inv_locate_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1791 |
apply(subgoal_tac [!] "mr = 0", auto simp: exponent_def split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1792 |
apply(subgoal_tac "lm2 = []", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1793 |
apply(rule_tac x = rn in exI, rule_tac x = "Suc m" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1794 |
rule_tac x = "lm1" in exI, simp, rule_tac x = "[]" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1795 |
apply(case_tac "Suc (length lm1) - length am", simp, simp only: rep_ind, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1796 |
apply(subgoal_tac "length lm1 - length am = nat", simp, arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1797 |
apply(drule_tac length_equal, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1798 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1799 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1800 |
lemma [simp]: "inv_locate_b (as, am) (n, aaa, []) ires \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1801 |
inv_after_write (as, abc_lm_s am n (Suc (abc_lm_v am n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1802 |
(Suc (Suc (2 * n)), aaa, [Oc]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1803 |
apply(insert inv_locate_b_2_after_write [of as am n aaa "[]"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1804 |
by(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1805 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1806 |
(*inv: from after_write to after_move*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1807 |
lemma [simp]: "inv_after_write (as, lm) (Suc (Suc (2 * n)), l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1808 |
\<Longrightarrow> inv_after_move (as, lm) (2 * n + 3, Oc # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1809 |
apply(auto simp:inv_after_move.simps inv_after_write.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1810 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1811 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1812 |
lemma [simp]: "inv_after_write (as, abc_lm_s am n (Suc (abc_lm_v am n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1813 |
)) (Suc (Suc (2 * n)), aaa, Bk # xs) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1814 |
apply(simp add: inv_after_write.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1815 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1816 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1817 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1818 |
"inv_after_write (as, abc_lm_s am n (Suc (abc_lm_v am n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1819 |
(Suc (Suc (2 * n)), aaa, []) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1820 |
apply(simp add: inv_after_write.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1821 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1822 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1823 |
(*inv: from after_move to after_clear*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1824 |
lemma [simp]: "inv_after_move (as, lm) (s, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1825 |
\<Longrightarrow> inv_after_clear (as, lm) (s', l, Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1826 |
apply(auto simp: inv_after_move.simps inv_after_clear.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1827 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1828 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1829 |
(*inv: from after_move to on_leftmoving*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1830 |
lemma inv_after_move_2_inv_on_left_moving[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1831 |
"inv_after_move (as, lm) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1832 |
\<Longrightarrow> (l = [] \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1833 |
inv_on_left_moving (as, lm) (s', [], Bk # Bk # r) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1834 |
(l \<noteq> [] \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1835 |
inv_on_left_moving (as, lm) (s', tl l, hd l # Bk # r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1836 |
apply(simp only: inv_after_move.simps inv_on_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1837 |
apply(subgoal_tac "l \<noteq> []", rule conjI, simp, rule impI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1838 |
rule disjI1, simp only: inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1839 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1840 |
apply(subgoal_tac "lm2 = []") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1841 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1842 |
rule_tac x = m in exI, rule_tac x = m in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1843 |
rule_tac x = 1 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1844 |
rule_tac x = "rn - 1" in exI, simp, case_tac rn) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1845 |
apply(auto simp: exponent_def intro: BkCons_nil split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1846 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1847 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1848 |
lemma [elim]: "[] = <lm::nat list> \<Longrightarrow> lm = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1849 |
using tape_of_nl_nil_eq[of lm] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1850 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1851 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1852 |
lemma inv_after_move_2_inv_on_left_moving_B[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1853 |
"inv_after_move (as, lm) (s, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1854 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_on_left_moving (as, lm) (s', [], [Bk]) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1855 |
(l \<noteq> [] \<longrightarrow> inv_on_left_moving (as, lm) (s', tl l, [hd l]) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1856 |
apply(simp only: inv_after_move.simps inv_on_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1857 |
apply(subgoal_tac "l \<noteq> []", rule conjI, simp, rule impI, rule disjI1, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1858 |
simp only: inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1859 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1860 |
apply(subgoal_tac "lm2 = []") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1861 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1862 |
rule_tac x = m in exI, rule_tac x = m in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1863 |
rule_tac x = 1 in exI, rule_tac x = "rn - 1" in exI, simp, case_tac rn) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1864 |
apply(auto simp: exponent_def tape_of_nl_nil_eq intro: BkCons_nil split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1865 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1866 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1867 |
(*inv: from after_clear to on_right_moving*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1868 |
lemma [simp]: "Oc # r = replicate rn Bk = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1869 |
apply(case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1870 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1871 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1872 |
lemma inv_after_clear_2_inv_on_right_moving[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1873 |
"inv_after_clear (as, lm) (2 * n + 4, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1874 |
\<Longrightarrow> inv_on_right_moving (as, lm) (2 * n + 5, Bk # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1875 |
apply(auto simp: inv_after_clear.simps inv_on_right_moving.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1876 |
apply(subgoal_tac "lm2 \<noteq> []") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1877 |
apply(rule_tac x = "lm1 @ [m]" in exI, rule_tac x = "tl lm2" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1878 |
rule_tac x = "hd lm2" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1879 |
apply(rule_tac x = 0 in exI, rule_tac x = "hd lm2" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1880 |
apply(simp add: exponent_def, rule conjI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1881 |
apply(case_tac [!] "lm2::nat list", auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1882 |
apply(case_tac rn, auto split: if_splits simp: tape_of_nat_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1883 |
apply(case_tac list, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1884 |
simp add: tape_of_nl_abv tape_of_nat_list.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1885 |
apply(erule_tac x = "rn - 1" in allE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1886 |
case_tac rn, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1887 |
apply(case_tac list, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1888 |
simp add: tape_of_nl_abv tape_of_nat_list.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1889 |
apply(erule_tac x = "rn - 1" in allE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1890 |
case_tac rn, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1891 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1892 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1893 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1894 |
lemma [simp]: "inv_after_clear (as, lm) (2 * n + 4, l, []) ires\<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1895 |
inv_after_clear (as, lm) (2 * n + 4, l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1896 |
by(auto simp: inv_after_clear.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1897 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1898 |
lemma [simp]: "inv_after_clear (as, lm) (2 * n + 4, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1899 |
\<Longrightarrow> inv_on_right_moving (as, lm) (2 * n + 5, Bk # l, []) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1900 |
by(insert |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1901 |
inv_after_clear_2_inv_on_right_moving[of as lm n l "[]"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1902 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1903 |
(*inv: from on_right_moving to on_right_movign*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1904 |
lemma [simp]: "inv_on_right_moving (as, lm) (2 * n + 5, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1905 |
\<Longrightarrow> inv_on_right_moving (as, lm) (2 * n + 5, Oc # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1906 |
apply(auto simp: inv_on_right_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1907 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1908 |
rule_tac x = "ml + mr" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1909 |
apply(rule_tac x = "Suc ml" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1910 |
rule_tac x = "mr - 1" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1911 |
apply(case_tac mr, auto simp: exponent_def ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1912 |
apply(rule_tac x = lm1 in exI, rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1913 |
rule_tac x = "ml + mr" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1914 |
apply(rule_tac x = "Suc ml" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1915 |
rule_tac x = "mr - 1" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1916 |
apply(case_tac mr, auto split: if_splits simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1917 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1918 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1919 |
lemma inv_on_right_moving_2_inv_on_right_moving[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1920 |
"inv_on_right_moving (as, lm) (2 * n + 5, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1921 |
\<Longrightarrow> inv_after_write (as, lm) (Suc (Suc (2 * n)), l, Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1922 |
apply(auto simp: inv_on_right_moving.simps inv_after_write.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1923 |
apply(case_tac mr, auto simp: exponent_def split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1924 |
apply(case_tac [!] mr, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1925 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1926 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1927 |
lemma [simp]: "inv_on_right_moving (as, lm) (2 * n + 5, l, []) ires\<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1928 |
inv_on_right_moving (as, lm) (2 * n + 5, l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1929 |
apply(auto simp: inv_on_right_moving.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1930 |
apply(rule_tac x = lm1 in exI, rule_tac x = "[]" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1931 |
apply (rule_tac x = m in exI, auto split: if_splits simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1932 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1933 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1934 |
(*inv: from on_right_moving to after_write*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1935 |
lemma [simp]: "inv_on_right_moving (as, lm) (2 * n + 5, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1936 |
\<Longrightarrow> inv_after_write (as, lm) (Suc (Suc (2 * n)), l, [Oc]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1937 |
apply(rule_tac inv_on_right_moving_2_inv_on_right_moving, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1938 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1939 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1940 |
(*inv: from on_left_moving to on_left_moving*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1941 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1942 |
(s, l, Oc # r) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1943 |
apply(auto simp: inv_on_left_moving_in_middle_B.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1944 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1945 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1946 |
lemma [simp]: "inv_on_left_moving_norm (as, lm) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1947 |
= False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1948 |
apply(auto simp: inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1949 |
apply(case_tac [!] mr, auto simp: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1950 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1951 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1952 |
lemma [intro]: "\<exists>rna. Oc # Oc\<^bsup>m\<^esup> @ Bk # <lm> @ Bk\<^bsup>rn\<^esup> = <m # lm> @ Bk\<^bsup>rna\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1953 |
apply(case_tac lm, simp add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1954 |
apply(rule_tac x = "Suc rn" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1955 |
apply(case_tac list, simp_all add: tape_of_nl_abv tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1956 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1957 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1958 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1959 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1960 |
"\<lbrakk>inv_on_left_moving_norm (as, lm) (s, l, Oc # r) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1961 |
hd l = Bk; l \<noteq> []\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1962 |
inv_on_left_moving_in_middle_B (as, lm) (s, tl l, Bk # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1963 |
apply(case_tac l, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1964 |
apply(simp only: inv_on_left_moving_norm.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1965 |
inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1966 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1967 |
apply(rule_tac x = lm1 in exI, rule_tac x = "m # lm2" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1968 |
apply(case_tac [!] ml, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1969 |
apply(rule_tac [!] x = 0 in exI, simp_all add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1970 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1971 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1972 |
lemma [simp]: "\<lbrakk>inv_on_left_moving_norm (as, lm) (s, l, Oc # r) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1973 |
hd l = Oc; l \<noteq> []\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1974 |
\<Longrightarrow> inv_on_left_moving_norm (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1975 |
(s, tl l, Oc # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1976 |
apply(simp only: inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1977 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1978 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1979 |
rule_tac x = m in exI, rule_tac x = "ml - 1" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1980 |
rule_tac x = "Suc mr" in exI, rule_tac x = rn in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1981 |
apply(case_tac ml, auto simp: exponent_def split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1982 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1983 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1984 |
lemma [simp]: "inv_on_left_moving_norm (as, lm) (s, [], Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1985 |
\<Longrightarrow> inv_on_left_moving_in_middle_B (as, lm) (s, [], Bk # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1986 |
apply(auto simp: inv_on_left_moving_norm.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1987 |
inv_on_left_moving_in_middle_B.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1988 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1989 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1990 |
lemma [simp]:"inv_on_left_moving (as, lm) (s, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1991 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_on_left_moving (as, lm) (s, [], Bk # Oc # r) ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1992 |
\<and> (l \<noteq> [] \<longrightarrow> inv_on_left_moving (as, lm) (s, tl l, hd l # Oc # r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1993 |
apply(simp add: inv_on_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1994 |
apply(case_tac "l \<noteq> []", rule conjI, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1995 |
apply(case_tac "hd l", simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1996 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1997 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1998 |
(*inv: from on_left_moving to check_left_moving*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
1999 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2000 |
(s, Bk # list, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2001 |
\<Longrightarrow> inv_check_left_moving_on_leftmost (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2002 |
(s', list, Bk # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2003 |
apply(auto simp: inv_on_left_moving_in_middle_B.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2004 |
inv_check_left_moving_on_leftmost.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2005 |
apply(case_tac [!] "rev lm1", simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2006 |
apply(case_tac [!] lista, simp_all add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2007 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2008 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2009 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2010 |
"inv_check_left_moving_in_middle (as, lm) (s, l, Bk # r) ires= False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2011 |
by(auto simp: inv_check_left_moving_in_middle.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2012 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2013 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2014 |
"inv_on_left_moving_in_middle_B (as, lm) (s, [], Bk # r) ires\<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2015 |
inv_check_left_moving_on_leftmost (as, lm) (s', [], Bk # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2016 |
apply(auto simp: inv_on_left_moving_in_middle_B.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2017 |
inv_check_left_moving_on_leftmost.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2018 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2019 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2020 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2021 |
lemma [simp]: "inv_check_left_moving_on_leftmost (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2022 |
(s, list, Oc # r) ires= False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2023 |
by(auto simp: inv_check_left_moving_on_leftmost.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2024 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2025 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2026 |
(s, Oc # list, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2027 |
\<Longrightarrow> inv_check_left_moving_in_middle (as, lm) (s', list, Oc # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2028 |
apply(auto simp: inv_on_left_moving_in_middle_B.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2029 |
inv_check_left_moving_in_middle.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2030 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2031 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2032 |
lemma inv_on_left_moving_2_check_left_moving[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2033 |
"inv_on_left_moving (as, lm) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2034 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_check_left_moving (as, lm) (s', [], Bk # Bk # r) ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2035 |
\<and> (l \<noteq> [] \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2036 |
inv_check_left_moving (as, lm) (s', tl l, hd l # Bk # r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2037 |
apply(simp add: inv_on_left_moving.simps inv_check_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2038 |
apply(case_tac l, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2039 |
apply(case_tac a, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2040 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2041 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2042 |
lemma [simp]: "inv_on_left_moving_norm (as, lm) (s, l, []) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2043 |
apply(auto simp: inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2044 |
by(case_tac [!] mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2045 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2046 |
lemma [simp]: "inv_on_left_moving (as, lm) (s, l, []) ires\<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2047 |
inv_on_left_moving (as, lm) (6 + 2 * n, l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2048 |
apply(simp add: inv_on_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2049 |
apply(auto simp: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2050 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2051 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2052 |
lemma [simp]: "inv_on_left_moving (as, lm) (s, l, []) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2053 |
apply(simp add: inv_on_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2054 |
apply(simp add: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2055 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2056 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2057 |
lemma [simp]: "inv_on_left_moving (as, lm) (s, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2058 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_check_left_moving (as, lm) (s', [], [Bk]) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2059 |
(l \<noteq> [] \<longrightarrow> inv_check_left_moving (as, lm) (s', tl l, [hd l]) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2060 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2061 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2062 |
lemma Oc_Bk_Cons_ex[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2063 |
"Oc # Bk # list = <lm::nat list> @ Bk\<^bsup>ln\<^esup> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2064 |
\<exists>ln. list = <tl (lm)> @ Bk\<^bsup>ln\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2065 |
apply(case_tac "lm", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2066 |
apply(case_tac ln, simp_all add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2067 |
apply(case_tac lista, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2068 |
auto simp: tape_of_nl_abv tape_of_nat_list.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2069 |
apply(case_tac [!] a, auto simp: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2070 |
apply(case_tac ln, simp, rule_tac x = nat in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2071 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2072 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2073 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2074 |
"Oc # Bk # list = <rev lm1::nat list> @ Bk\<^bsup>ln\<^esup> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2075 |
\<exists>rna. Oc # Bk # <lm2> @ Bk\<^bsup>rn\<^esup> = <hd (rev lm1) # lm2> @ Bk\<^bsup>rna\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2076 |
apply(frule Oc_Bk_Cons, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2077 |
apply(case_tac lm2, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2078 |
auto simp: tape_of_nl_abv tape_of_nat_list.simps exponent_def ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2079 |
apply(rule_tac x = "Suc rn" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2080 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2081 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2082 |
(*inv: from check_left_moving to on_left_moving*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2083 |
lemma [intro]: "\<exists>rna. a # a\<^bsup>rn\<^esup> = a\<^bsup>rna\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2084 |
apply(rule_tac x = "Suc rn" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2085 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2086 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2087 |
lemma |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2088 |
inv_check_left_moving_in_middle_2_on_left_moving_in_middle_B[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2089 |
"inv_check_left_moving_in_middle (as, lm) (s, Bk # list, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2090 |
\<Longrightarrow> inv_on_left_moving_in_middle_B (as, lm) (s', list, Bk # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2091 |
apply(simp only: inv_check_left_moving_in_middle.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2092 |
inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2093 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2094 |
apply(rule_tac x = "rev (tl (rev lm1))" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2095 |
rule_tac x = "[hd (rev lm1)] @ lm2" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2096 |
apply(case_tac [!] "rev lm1",simp_all add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2097 |
apply(case_tac [!] a, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2098 |
apply(case_tac [1] lm2, simp_all add: tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2099 |
apply(case_tac [3] lm2, simp_all add: tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2100 |
apply(case_tac [!] lista, simp_all add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2101 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2102 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2103 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2104 |
"inv_check_left_moving_in_middle (as, lm) (s, [], Oc # r) ires\<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2105 |
inv_check_left_moving_in_middle (as, lm) (s', [Bk], Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2106 |
apply(auto simp: inv_check_left_moving_in_middle.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2107 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2108 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2109 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2110 |
"inv_check_left_moving_in_middle (as, lm) (s, [], Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2111 |
\<Longrightarrow> inv_on_left_moving_in_middle_B (as, lm) (s', [], Bk # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2112 |
apply(insert |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2113 |
inv_check_left_moving_in_middle_2_on_left_moving_in_middle_B[of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2114 |
as lm n "[]" r], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2115 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2116 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2117 |
lemma [simp]: "a\<^bsup>0\<^esup> = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2118 |
apply(simp add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2119 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2120 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2121 |
lemma [simp]: "inv_check_left_moving_in_middle (as, lm) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2122 |
(s, Oc # list, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2123 |
\<Longrightarrow> inv_on_left_moving_norm (as, lm) (s', list, Oc # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2124 |
apply(auto simp: inv_check_left_moving_in_middle.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2125 |
inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2126 |
apply(rule_tac x = "rev (tl (rev lm1))" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2127 |
rule_tac x = lm2 in exI, rule_tac x = "hd (rev lm1)" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2128 |
apply(rule_tac conjI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2129 |
apply(case_tac "rev lm1", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2130 |
apply(rule_tac x = "hd (rev lm1) - 1" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2131 |
apply(rule_tac [!] x = "Suc (Suc 0)" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2132 |
apply(case_tac [!] "rev lm1", simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2133 |
apply(case_tac [!] a, simp_all add: tape_of_nl_abv tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2134 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2135 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2136 |
lemma [simp]: "inv_check_left_moving (as, lm) (s, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2137 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_on_left_moving (as, lm) (s', [], Bk # Oc # r) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2138 |
(l \<noteq> [] \<longrightarrow> inv_on_left_moving (as, lm) (s', tl l, hd l # Oc # r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2139 |
apply(case_tac l, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2140 |
auto simp: inv_check_left_moving.simps inv_on_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2141 |
apply(case_tac a, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2142 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2143 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2144 |
(*inv: check_left_moving to after_left_moving*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2145 |
lemma [simp]: "inv_check_left_moving (as, lm) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2146 |
\<Longrightarrow> inv_after_left_moving (as, lm) (s', Bk # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2147 |
apply(auto simp: inv_check_left_moving.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2148 |
inv_check_left_moving_on_leftmost.simps inv_after_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2149 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2150 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2151 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2152 |
lemma [simp]:"inv_check_left_moving (as, lm) (s, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2153 |
\<Longrightarrow> inv_after_left_moving (as, lm) (s', Bk # l, []) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2154 |
by(simp add: inv_check_left_moving.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2155 |
inv_check_left_moving_in_middle.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2156 |
inv_check_left_moving_on_leftmost.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2157 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2158 |
(*inv: after_left_moving to inv_stop*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2159 |
lemma [simp]: "inv_after_left_moving (as, lm) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2160 |
\<Longrightarrow> inv_stop (as, lm) (s', Bk # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2161 |
apply(auto simp: inv_after_left_moving.simps inv_stop.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2162 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2163 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2164 |
lemma [simp]: "inv_after_left_moving (as, lm) (s, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2165 |
\<Longrightarrow> inv_stop (as, lm) (s', Bk # l, []) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2166 |
by(auto simp: inv_after_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2167 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2168 |
(*inv: stop to stop*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2169 |
lemma [simp]: "inv_stop (as, lm) (x, l, r) ires \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2170 |
inv_stop (as, lm) (y, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2171 |
apply(simp add: inv_stop.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2172 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2173 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2174 |
lemma [simp]: "inv_after_clear (as, lm) (s, aaa, Oc # xs) ires= False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2175 |
apply(auto simp: inv_after_clear.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2176 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2177 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2178 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2179 |
"inv_after_left_moving (as, lm) (s, aaa, Oc # xs) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2180 |
by(auto simp: inv_after_left_moving.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2181 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2182 |
lemma start_of_not0: "as \<noteq> 0 \<Longrightarrow> start_of ly as > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2183 |
apply(rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2184 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2185 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2186 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2187 |
The single step currectness of the TM complied from Abacus instruction @{text "Inc n"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2188 |
It shows every single step execution of this TM keeps the invariant. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2189 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2190 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2191 |
lemma inc_inv_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2192 |
assumes |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2193 |
-- {* Invariant holds on the start *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2194 |
h11: "inc_inv ly n (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2195 |
-- {* The layout of Abacus program @{text "aprog"} is @{text "ly"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2196 |
and h12: "ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2197 |
-- {* The instruction at position @{text "as"} is @{text "Inc n"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2198 |
and h21: "abc_fetch as aprog = Some (Inc n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2199 |
-- {* TM not yet reach the final state, where @{text "start_of ly as + 2*n + 9"} is the state |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2200 |
where the current TM stops and the next TM starts. *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2201 |
and h22: "(\<lambda> (s, l, r). s \<noteq> start_of ly as + 2*n + 9) tc" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2202 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2203 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2204 |
Single step execution of the TM keeps the invaraint, where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2205 |
the TM compiled from @{text "Inc n"} is @{text "(ci ly (start_of ly as) (Inc n))"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2206 |
@{text "start_of ly as - Suc 0)"} is the offset used to execute this {\em shifted} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2207 |
TM. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2208 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2209 |
"inc_inv ly n (as, am) (t_step tc (ci ly (start_of ly as) (Inc n), start_of ly as - Suc 0)) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2210 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2211 |
from h21 h22 have h3 : "start_of (layout_of aprog) as > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2212 |
apply(case_tac as, simp add: start_of.simps abc_fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2213 |
apply(insert start_of_not0[of as "layout_of aprog"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2214 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2215 |
from h11 h12 and h21 h22 and this show ?thesis |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2216 |
apply(case_tac tc, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2217 |
apply(case_tac "a = 0", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2218 |
auto split:if_splits simp add:t_step.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2219 |
tactic {* ALLGOALS (resolve_tac [@{thm fetch_intro}]) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2220 |
apply (simp_all add:fetch_simps new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2221 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2222 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2223 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2224 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2225 |
lemma t_steps_ind: "t_steps tc (p, off) (Suc n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2226 |
= t_step (t_steps tc (p, off) n) (p, off)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2227 |
apply(induct n arbitrary: tc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2228 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2229 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2230 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2231 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2232 |
definition lex_pair :: "((nat \<times> nat) \<times> (nat \<times> nat)) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2233 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2234 |
"lex_pair \<equiv> less_than <*lex*> less_than" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2235 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2236 |
definition lex_triple :: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2237 |
"((nat \<times> (nat \<times> nat)) \<times> (nat \<times> (nat \<times> nat))) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2238 |
where "lex_triple \<equiv> less_than <*lex*> lex_pair" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2239 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2240 |
definition lex_square :: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2241 |
"((nat \<times> nat \<times> nat \<times> nat) \<times> (nat \<times> nat \<times> nat \<times> nat)) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2242 |
where "lex_square \<equiv> less_than <*lex*> lex_triple" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2243 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2244 |
fun abc_inc_stage1 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2245 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2246 |
"abc_inc_stage1 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2247 |
(if s = 0 then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2248 |
else if s \<le> ss+2*n+1 then 5 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2249 |
else if s\<le> ss+2*n+5 then 4 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2250 |
else if s \<le> ss+2*n+7 then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2251 |
else if s = ss+2*n+8 then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2252 |
else 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2253 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2254 |
fun abc_inc_stage2 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2255 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2256 |
"abc_inc_stage2 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2257 |
(if s \<le> ss + 2*n + 1 then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2258 |
else if s = ss + 2*n + 2 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2259 |
else if s = ss + 2*n + 3 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2260 |
else if s = ss + 2*n + 4 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2261 |
else if s = ss + 2*n + 5 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2262 |
if r \<noteq> [] then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2263 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2264 |
else if s = ss+2*n+6 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2265 |
else if s = ss+2*n+7 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2266 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2267 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2268 |
fun abc_inc_stage3 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> block list \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2269 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2270 |
"abc_inc_stage3 (s, l, r) ss n ires = ( |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2271 |
if s = ss + 2*n + 3 then 4 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2272 |
else if s = ss + 2*n + 4 then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2273 |
else if s = ss + 2*n + 5 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2274 |
if r \<noteq> [] \<and> hd r = Oc then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2275 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2276 |
else if s = ss + 2*n + 2 then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2277 |
else if s = ss + 2*n + 6 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2278 |
if l = Bk # ires \<and> r \<noteq> [] \<and> hd r = Oc then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2279 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2280 |
else if s = ss + 2*n + 7 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2281 |
if r \<noteq> [] \<and> hd r = Oc then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2282 |
else 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2283 |
else ss+2*n+9 - s)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2284 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2285 |
fun abc_inc_stage4 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> block list \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2286 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2287 |
"abc_inc_stage4 (s, l, r) ss n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2288 |
(if s \<le> ss+2*n+1 \<and> (s - ss) mod 2 = 0 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2289 |
if (r\<noteq>[] \<and> hd r = Oc) then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2290 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2291 |
else if (s \<le> ss+2*n+1 \<and> (s - ss) mod 2 = Suc 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2292 |
then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2293 |
else if s = ss + 2*n + 6 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2294 |
if l = Bk # ires \<and> hd r = Bk then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2295 |
else Suc (length l) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2296 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2297 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2298 |
fun abc_inc_measure :: "(t_conf \<times> nat \<times> nat \<times> block list) \<Rightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2299 |
(nat \<times> nat \<times> nat \<times> nat)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2300 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2301 |
"abc_inc_measure (c, ss, n, ires) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2302 |
(abc_inc_stage1 c ss n, abc_inc_stage2 c ss n, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2303 |
abc_inc_stage3 c ss n ires, abc_inc_stage4 c ss n ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2304 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2305 |
definition abc_inc_LE :: "(((nat \<times> block list \<times> block list) \<times> nat \<times> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2306 |
nat \<times> block list) \<times> ((nat \<times> block list \<times> block list) \<times> nat \<times> nat \<times> block list)) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2307 |
where "abc_inc_LE \<equiv> (inv_image lex_square abc_inc_measure)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2308 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2309 |
lemma wf_lex_triple: "wf lex_triple" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2310 |
by (auto intro:wf_lex_prod simp:lex_triple_def lex_pair_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2311 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2312 |
lemma wf_lex_square: "wf lex_square" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2313 |
by (auto intro:wf_lex_triple simp:lex_triple_def lex_square_def lex_pair_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2314 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2315 |
lemma wf_abc_inc_le[intro]: "wf abc_inc_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2316 |
by(auto intro:wf_inv_image wf_lex_square simp:abc_inc_LE_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2317 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2318 |
(********************************************************************) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2319 |
declare inc_inv.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2320 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2321 |
lemma halt_lemma2': |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2322 |
"\<lbrakk>wf LE; \<forall> n. ((\<not> P (f n) \<and> Q (f n)) \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2323 |
(Q (f (Suc n)) \<and> (f (Suc n), (f n)) \<in> LE)); Q (f 0)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2324 |
\<Longrightarrow> \<exists> n. P (f n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2325 |
apply(intro exCI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2326 |
apply(subgoal_tac "\<forall> n. Q (f n)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2327 |
apply(drule_tac f = f in wf_inv_image) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2328 |
apply(simp add: inv_image_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2329 |
apply(erule wf_induct, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2330 |
apply(erule_tac x = x in allE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2331 |
apply(erule_tac x = n in allE, erule_tac x = n in allE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2332 |
apply(erule_tac x = "Suc x" in allE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2333 |
apply(rule_tac allI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2334 |
apply(induct_tac n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2335 |
apply(erule_tac x = na in allE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2336 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2337 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2338 |
lemma halt_lemma2'': |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2339 |
"\<lbrakk>P (f n); \<not> P (f (0::nat))\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2340 |
\<exists> n. (P (f n) \<and> (\<forall> i < n. \<not> P (f i)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2341 |
apply(induct n rule: nat_less_induct, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2342 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2343 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2344 |
lemma halt_lemma2''': |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2345 |
"\<lbrakk>\<forall>n. \<not> P (f n) \<and> Q (f n) \<longrightarrow> Q (f (Suc n)) \<and> (f (Suc n), f n) \<in> LE; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2346 |
Q (f 0); \<forall>i<na. \<not> P (f i)\<rbrakk> \<Longrightarrow> Q (f na)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2347 |
apply(induct na, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2348 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2349 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2350 |
lemma halt_lemma2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2351 |
"\<lbrakk>wf LE; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2352 |
\<forall> n. ((\<not> P (f n) \<and> Q (f n)) \<longrightarrow> (Q (f (Suc n)) \<and> (f (Suc n), (f n)) \<in> LE)); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2353 |
Q (f 0); \<not> P (f 0)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2354 |
\<Longrightarrow> \<exists> n. P (f n) \<and> Q (f n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2355 |
apply(insert halt_lemma2' [of LE P f Q], simp, erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2356 |
apply(subgoal_tac "\<exists> n. (P (f n) \<and> (\<forall> i < n. \<not> P (f i)))") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2357 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2358 |
apply(rule_tac x = na in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2359 |
apply(rule halt_lemma2''', simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2360 |
apply(erule_tac halt_lemma2'', simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2361 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2362 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2363 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2364 |
"\<lbrakk>ly = layout_of aprog; abc_fetch as aprog = Some (Inc n)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2365 |
\<Longrightarrow> start_of ly (Suc as) = start_of ly as + 2*n +9" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2366 |
apply(case_tac as, auto simp: abc_fetch.simps start_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2367 |
layout_of.simps length_of.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2368 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2369 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2370 |
lemma inc_inv_init: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2371 |
"\<lbrakk>abc_fetch as aprog = Some (Inc n); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2372 |
crsp_l ly (as, am) (start_of ly as, l, r) ires; ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2373 |
\<Longrightarrow> inc_inv ly n (as, am) (start_of ly as, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2374 |
apply(auto simp: crsp_l.simps inc_inv.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2375 |
inv_locate_a.simps at_begin_fst_bwtn.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2376 |
at_begin_fst_awtn.simps at_begin_norm.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2377 |
apply(auto intro: startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2378 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2379 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2380 |
lemma inc_inv_stop_pre[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2381 |
"\<lbrakk>ly = layout_of aprog; inc_inv ly n (as, am) (s, l, r) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2382 |
s = start_of ly as; abc_fetch as aprog = Some (Inc n)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2383 |
\<Longrightarrow> (\<forall>na. \<not> (\<lambda>((s, l, r), ss, n', ires'). s = start_of ly (Suc as)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2384 |
(t_steps (s, l, r) (ci ly (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2385 |
(Inc n), start_of ly as - Suc 0) na, s, n, ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2386 |
(\<lambda>((s, l, r), ss, n', ires'). inc_inv ly n (as, am) (s, l, r) ires') |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2387 |
(t_steps (s, l, r) (ci ly (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2388 |
(Inc n), start_of ly as - Suc 0) na, s, n, ires) \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2389 |
(\<lambda>((s, l, r), ss, n', ires'). inc_inv ly n (as, am) (s, l, r) ires') |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2390 |
(t_steps (s, l, r) (ci ly (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2391 |
(Inc n), start_of ly as - Suc 0) (Suc na), s, n, ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2392 |
((t_steps (s, l, r) (ci ly (start_of ly as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2393 |
start_of ly as - Suc 0) (Suc na), s, n, ires), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2394 |
t_steps (s, l, r) (ci ly (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2395 |
(Inc n), start_of ly as - Suc 0) na, s, n, ires) \<in> abc_inc_LE)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2396 |
apply(rule allI, rule impI, simp add: t_steps_ind, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2397 |
rule conjI, erule_tac conjE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2398 |
apply(rule_tac inc_inv_step, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2399 |
apply(case_tac "t_steps (start_of (layout_of aprog) as, l, r) (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2400 |
(start_of (layout_of aprog) as) (Inc n), start_of (layout_of aprog) as - Suc 0) na", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2401 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2402 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2403 |
assume h1: "abc_fetch as aprog = Some (Inc n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2404 |
"\<not> (\<lambda>(s, l, r) (ss, n', ires'). s = start_of (layout_of aprog) as + 2 * n + 9) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2405 |
(t_steps (start_of (layout_of aprog) as, l, r) (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2406 |
(start_of (layout_of aprog) as) (Inc n), start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2407 |
(start_of (layout_of aprog) as, n, ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2408 |
inc_inv (layout_of aprog) n (as, am) (t_steps (start_of (layout_of aprog) as, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2409 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Inc n), start_of (layout_of aprog) as - Suc 0) na) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2410 |
from h1 have h2: "start_of (layout_of aprog) as > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2411 |
apply(rule_tac startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2412 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2413 |
from h1 and h2 show "((t_step (t_steps (start_of (layout_of aprog) as, l, r) (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2414 |
(start_of (layout_of aprog) as) (Inc n), start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2415 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Inc n), start_of (layout_of aprog) as - Suc 0), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2416 |
start_of (layout_of aprog) as, n, ires), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2417 |
t_steps (start_of (layout_of aprog) as, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2418 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Inc n), start_of (layout_of aprog) as - Suc 0) na, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2419 |
start_of (layout_of aprog) as, n, ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2420 |
\<in> abc_inc_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2421 |
apply(case_tac "(t_steps (start_of (layout_of aprog) as, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2422 |
(ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2423 |
(start_of (layout_of aprog) as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2424 |
start_of (layout_of aprog) as - Suc 0) na)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2425 |
apply(case_tac "a = 0", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2426 |
auto split:if_splits simp add:t_step.simps inc_inv.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2427 |
tactic {* ALLGOALS (resolve_tac [@{thm fetch_intro}]) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2428 |
apply(simp_all add:fetch_simps new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2429 |
apply(auto simp add: abc_inc_LE_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2430 |
lex_square_def lex_triple_def lex_pair_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2431 |
inv_after_write.simps inv_after_move.simps inv_after_clear.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2432 |
inv_on_left_moving.simps inv_on_left_moving_norm.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2433 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2434 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2435 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2436 |
lemma inc_inv_stop_pre1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2437 |
"\<lbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2438 |
ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2439 |
abc_fetch as aprog = Some (Inc n); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2440 |
s = start_of ly as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2441 |
inc_inv ly n (as, am) (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2442 |
\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2443 |
(\<exists> stp > 0. (\<lambda> (s', l', r'). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2444 |
s' = start_of ly (Suc as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2445 |
inc_inv ly n (as, am) (s', l', r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2446 |
(t_steps (s, l, r) (ci ly (start_of ly as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2447 |
start_of ly as - Suc 0) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2448 |
apply(insert halt_lemma2[of abc_inc_LE |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2449 |
"\<lambda> ((s, l, r), ss, n', ires'). s = start_of ly (Suc as)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2450 |
"(\<lambda> stp. (t_steps (s, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2451 |
(ci ly (start_of ly as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2452 |
start_of ly as - Suc 0) stp, s, n, ires))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2453 |
"\<lambda> ((s, l, r), ss, n'). inc_inv ly n (as, am) (s, l, r) ires"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2454 |
apply(insert wf_abc_inc_le) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2455 |
apply(insert inc_inv_stop_pre[of ly aprog n as am s l r ires], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2456 |
apply(simp only: t_steps.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2457 |
apply(rule_tac x = na in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2458 |
apply(case_tac "(t_steps (start_of (layout_of aprog) as, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2459 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2460 |
(Inc n), start_of (layout_of aprog) as - Suc 0) na)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2461 |
apply(case_tac na, simp add: t_steps.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2462 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2463 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2464 |
lemma inc_inv_stop: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2465 |
assumes program_and_layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2466 |
-- {* There is an Abacus program @{text "aprog"} and its layout is @{text "ly"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2467 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2468 |
and an_instruction: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2469 |
-- {* There is an instruction @{text "Inc n"} at postion @{text "as"} of @{text "aprog"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2470 |
"abc_fetch as aprog = Some (Inc n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2471 |
and the_start_state: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2472 |
-- {* According to @{text "ly"} and @{text "as"}, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2473 |
the start state of the TM compiled from this |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2474 |
@{text "Inc n"} instruction should be @{text "s"}: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2475 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2476 |
"s = start_of ly as" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2477 |
and inv: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2478 |
-- {* Invariant holds on configuration @{text "(s, l, r)"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2479 |
"inc_inv ly n (as, am) (s, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2480 |
shows -- {* After @{text "stp"} steps of execution, the compiled |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2481 |
TM reaches the start state of next compiled TM and the invariant |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2482 |
still holds. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2483 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2484 |
"(\<exists> stp > 0. (\<lambda> (s', l', r'). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2485 |
s' = start_of ly (Suc as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2486 |
inc_inv ly n (as, am) (s', l', r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2487 |
(t_steps (s, l, r) (ci ly (start_of ly as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2488 |
start_of ly as - Suc 0) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2489 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2490 |
from inc_inv_stop_pre1 [OF program_and_layout an_instruction the_start_state inv] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2491 |
show ?thesis . |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2492 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2493 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2494 |
lemma inc_inv_stop_cond: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2495 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2496 |
s' = start_of ly (as + 1); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2497 |
inc_inv ly n (as, lm) (s', (l', r')) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2498 |
abc_fetch as aprog = Some (Inc n)\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2499 |
crsp_l ly (Suc as, abc_lm_s lm n (Suc (abc_lm_v lm n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2500 |
(s', l', r') ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2501 |
apply(subgoal_tac "s' = start_of ly as + 2*n + 9", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2502 |
apply(auto simp: inc_inv.simps inv_stop.simps crsp_l.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2503 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2504 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2505 |
lemma inc_crsp_ex_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2506 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2507 |
crsp_l ly (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2508 |
abc_fetch as aprog = Some (Inc n)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2509 |
\<Longrightarrow> \<exists>stp > 0. crsp_l ly (abc_step_l (as, am) (Some (Inc n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2510 |
(t_steps tc (ci ly (start_of ly as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2511 |
start_of ly as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2512 |
proof(case_tac tc, simp add: abc_step_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2513 |
fix a b c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2514 |
assume h1: "ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2515 |
"crsp_l (layout_of aprog) (as, am) (a, b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2516 |
"abc_fetch as aprog = Some (Inc n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2517 |
hence h2: "a = start_of ly as" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2518 |
by(auto simp: crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2519 |
from h1 and h2 have h3: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2520 |
"inc_inv ly n (as, am) (start_of ly as, b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2521 |
by(rule_tac inc_inv_init, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2522 |
from h1 and h2 and h3 have h4: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2523 |
"(\<exists> stp > 0. (\<lambda> (s', l', r'). s' = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2524 |
start_of ly (Suc as) \<and> inc_inv ly n (as, am) (s', l', r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2525 |
(t_steps (a, b, c) (ci ly (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2526 |
(Inc n), start_of ly as - Suc 0) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2527 |
apply(rule_tac inc_inv_stop, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2528 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2529 |
from h1 and h2 and h3 and h4 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2530 |
"\<exists>stp > 0. crsp_l (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2531 |
(Suc as, abc_lm_s am n (Suc (abc_lm_v am n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2532 |
(t_steps (a, b, c) (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2533 |
(start_of (layout_of aprog) as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2534 |
start_of (layout_of aprog) as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2535 |
apply(erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2536 |
apply(rule_tac x = stp in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2537 |
apply(case_tac "(t_steps (a, b, c) (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2538 |
(start_of (layout_of aprog) as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2539 |
start_of (layout_of aprog) as - Suc 0) stp)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2540 |
apply(rule_tac inc_inv_stop_cond, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2541 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2542 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2543 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2544 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2545 |
The total correctness of the compilaton of @{text "Inc n"} instruction. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2546 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2547 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2548 |
lemma inc_crsp_ex: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2549 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2550 |
-- {* For any Abacus program @{text "aprog"}, assuming its layout is @{text "ly"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2551 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2552 |
and corresponds: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2553 |
-- {* Abacus configuration @{text "(as, am)"} is in correspondence with |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2554 |
TM configuration @{text "tc"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2555 |
"crsp_l ly (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2556 |
and inc: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2557 |
-- {* There is an instruction @{text "Inc n"} at postion @{text "as"} of @{text "aprog"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2558 |
"abc_fetch as aprog = Some (Inc n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2559 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2560 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2561 |
After @{text "stp"} steps of execution, the TM compiled from this @{text "Inc n"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2562 |
stops with a configuration which corresponds to the Abacus configuration obtained |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2563 |
from the execution of this @{text "Inc n"} instruction. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2564 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2565 |
"\<exists>stp > 0. crsp_l ly (abc_step_l (as, am) (Some (Inc n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2566 |
(t_steps tc (ci ly (start_of ly as) (Inc n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2567 |
start_of ly as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2568 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2569 |
from inc_crsp_ex_pre [OF layout corresponds inc] show ?thesis . |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2570 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2571 |
|
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
2572 |
(* |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
2573 |
subsection {* The compilation of @{text "Dec n e"} *} |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
2574 |
*) |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2575 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2576 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2577 |
The lemmas in this section lead to the correctness of the compilation |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2578 |
of @{text "Dec n e"} instruction using the same techniques as |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2579 |
@{text "Inc n"}. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2580 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2581 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2582 |
type_synonym dec_inv_t = "(nat * nat list) \<Rightarrow> t_conf \<Rightarrow> block list \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2583 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2584 |
fun dec_first_on_right_moving :: "nat \<Rightarrow> dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2585 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2586 |
"dec_first_on_right_moving n (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2587 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2588 |
ml + mr = Suc m \<and> length lm1 = n \<and> ml > 0 \<and> m > 0 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2589 |
(if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2590 |
else l = (Oc\<^bsup>ml\<^esup>) @ [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2591 |
((r = (Oc\<^bsup>mr\<^esup>) @ [Bk] @ <lm2> @ (Bk\<^bsup>rn\<^esup>)) \<or> (r = (Oc\<^bsup>mr\<^esup>) \<and> lm2 = [])))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2592 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2593 |
fun dec_on_right_moving :: "dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2594 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2595 |
"dec_on_right_moving (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2596 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2597 |
ml + mr = Suc (Suc m) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2598 |
(if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2599 |
else l = (Oc\<^bsup>ml\<^esup>) @ [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2600 |
((r = (Oc\<^bsup>mr\<^esup>) @ [Bk] @ <lm2> @ (Bk\<^bsup>rn\<^esup>)) \<or> (r = (Oc\<^bsup>mr\<^esup>) \<and> lm2 = [])))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2601 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2602 |
fun dec_after_clear :: "dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2603 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2604 |
"dec_after_clear (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2605 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2606 |
ml + mr = Suc m \<and> ml = Suc m \<and> r \<noteq> [] \<and> r \<noteq> [] \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2607 |
(if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2608 |
else l = (Oc\<^bsup>ml \<^esup>) @ [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2609 |
(tl r = Bk # <lm2> @ (Bk\<^bsup>rn\<^esup>) \<or> tl r = [] \<and> lm2 = []))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2610 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2611 |
fun dec_after_write :: "dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2612 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2613 |
"dec_after_write (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2614 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2615 |
ml + mr = Suc m \<and> ml = Suc m \<and> lm2 \<noteq> [] \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2616 |
(if lm1 = [] then l = Bk # Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2617 |
else l = Bk # (Oc\<^bsup>ml \<^esup>) @ [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2618 |
tl r = <lm2> @ (Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2619 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2620 |
fun dec_right_move :: "dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2621 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2622 |
"dec_right_move (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2623 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2624 |
\<and> ml = Suc m \<and> mr = (0::nat) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2625 |
(if lm1 = [] then l = Bk # Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2626 |
else l = Bk # Oc\<^bsup>ml\<^esup>@ [Bk] @ <rev lm1> @ Bk # Bk # ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2627 |
\<and> (r = Bk # <lm2> @ Bk\<^bsup>rn\<^esup>\<or> r = [] \<and> lm2 = []))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2628 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2629 |
fun dec_check_right_move :: "dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2630 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2631 |
"dec_check_right_move (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2632 |
(\<exists> lm1 lm2 m ml mr rn. lm = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2633 |
ml = Suc m \<and> mr = (0::nat) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2634 |
(if lm1 = [] then l = Bk # Bk # Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2635 |
else l = Bk # Bk # Oc\<^bsup>ml \<^esup>@ [Bk] @ <rev lm1> @ Bk # Bk # ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2636 |
r = <lm2> @ Bk\<^bsup>rn\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2637 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2638 |
fun dec_left_move :: "dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2639 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2640 |
"dec_left_move (as, lm) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2641 |
(\<exists> lm1 m rn. (lm::nat list) = lm1 @ [m::nat] \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2642 |
rn > 0 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2643 |
(if lm1 = [] then l = Bk # Oc\<^bsup>Suc m\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2644 |
else l = Bk # Oc\<^bsup>Suc m\<^esup> @ Bk # <rev lm1> @ Bk # Bk # ires) \<and> r = Bk\<^bsup>rn\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2645 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2646 |
declare |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2647 |
dec_on_right_moving.simps[simp del] dec_after_clear.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2648 |
dec_after_write.simps[simp del] dec_left_move.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2649 |
dec_check_right_move.simps[simp del] dec_right_move.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2650 |
dec_first_on_right_moving.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2651 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2652 |
fun inv_locate_n_b :: "inc_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2653 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2654 |
"inv_locate_n_b (as, lm) (s, l, r) ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2655 |
(\<exists> lm1 lm2 tn m ml mr rn. lm @ 0\<^bsup>tn\<^esup> = lm1 @ [m] @ lm2 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2656 |
length lm1 = s \<and> m + 1 = ml + mr \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2657 |
ml = 1 \<and> tn = s + 1 - length lm \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2658 |
(if lm1 = [] then l = Oc\<^bsup>ml\<^esup> @ Bk # Bk # ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2659 |
else l = Oc\<^bsup>ml\<^esup>@Bk#<rev lm1>@Bk#Bk#ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2660 |
(r = (Oc\<^bsup>mr\<^esup>) @ [Bk] @ <lm2>@ (Bk\<^bsup>rn\<^esup>) \<or> (lm2 = [] \<and> r = (Oc\<^bsup>mr\<^esup>))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2661 |
)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2662 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2663 |
fun dec_inv_1 :: "layout \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2664 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2665 |
"dec_inv_1 ly n e (as, am) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2666 |
(let ss = start_of ly as in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2667 |
let am' = abc_lm_s am n (abc_lm_v am n - Suc 0) in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2668 |
let am'' = abc_lm_s am n (abc_lm_v am n) in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2669 |
if s = start_of ly e then inv_stop (as, am'') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2670 |
else if s = ss then False |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2671 |
else if ss \<le> s \<and> s < ss + 2*n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2672 |
if (s - ss) mod 2 = 0 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2673 |
inv_locate_a (as, am) ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2674 |
\<or> inv_locate_a (as, am'') ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2675 |
else |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2676 |
inv_locate_b (as, am) ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2677 |
\<or> inv_locate_b (as, am'') ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2678 |
else if s = ss + 2 * n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2679 |
inv_locate_a (as, am) (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2680 |
\<or> inv_locate_a (as, am'') (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2681 |
else if s = ss + 2 * n + 1 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2682 |
inv_locate_b (as, am) (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2683 |
else if s = ss + 2 * n + 13 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2684 |
inv_on_left_moving (as, am'') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2685 |
else if s = ss + 2 * n + 14 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2686 |
inv_check_left_moving (as, am'') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2687 |
else if s = ss + 2 * n + 15 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2688 |
inv_after_left_moving (as, am'') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2689 |
else False)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2690 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2691 |
fun dec_inv_2 :: "layout \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> dec_inv_t" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2692 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2693 |
"dec_inv_2 ly n e (as, am) (s, l, r) ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2694 |
(let ss = start_of ly as in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2695 |
let am' = abc_lm_s am n (abc_lm_v am n - Suc 0) in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2696 |
let am'' = abc_lm_s am n (abc_lm_v am n) in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2697 |
if s = 0 then False |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2698 |
else if s = ss then False |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2699 |
else if ss \<le> s \<and> s < ss + 2*n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2700 |
if (s - ss) mod 2 = 0 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2701 |
inv_locate_a (as, am) ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2702 |
else inv_locate_b (as, am) ((s - ss) div 2, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2703 |
else if s = ss + 2 * n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2704 |
inv_locate_a (as, am) (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2705 |
else if s = ss + 2 * n + 1 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2706 |
inv_locate_n_b (as, am) (n, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2707 |
else if s = ss + 2 * n + 2 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2708 |
dec_first_on_right_moving n (as, am'') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2709 |
else if s = ss + 2 * n + 3 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2710 |
dec_after_clear (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2711 |
else if s = ss + 2 * n + 4 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2712 |
dec_right_move (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2713 |
else if s = ss + 2 * n + 5 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2714 |
dec_check_right_move (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2715 |
else if s = ss + 2 * n + 6 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2716 |
dec_left_move (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2717 |
else if s = ss + 2 * n + 7 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2718 |
dec_after_write (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2719 |
else if s = ss + 2 * n + 8 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2720 |
dec_on_right_moving (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2721 |
else if s = ss + 2 * n + 9 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2722 |
dec_after_clear (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2723 |
else if s = ss + 2 * n + 10 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2724 |
inv_on_left_moving (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2725 |
else if s = ss + 2 * n + 11 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2726 |
inv_check_left_moving (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2727 |
else if s = ss + 2 * n + 12 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2728 |
inv_after_left_moving (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2729 |
else if s = ss + 2 * n + 16 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2730 |
inv_stop (as, am') (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2731 |
else False)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2732 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2733 |
(*begin: dec_fetch lemmas*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2734 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2735 |
lemma dec_fetch_locate_a_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2736 |
"\<lbrakk>start_of ly as \<le> a; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2737 |
a < start_of ly as + 2 * n; start_of ly as > 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2738 |
a - start_of ly as = 2 * q\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2739 |
\<Longrightarrow> fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2740 |
(start_of ly as) (Dec n e)) (Suc (2 * q)) Oc = (R, a + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2741 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2742 |
nth_of.simps tshift.simps nth_append Suc_pre) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2743 |
apply(subgoal_tac "(findnth n ! Suc (4 * q)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2744 |
findnth (Suc q) ! (4 * q + 1)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2745 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2746 |
apply(subgoal_tac " findnth n !(4 * q + 1) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2747 |
findnth (Suc q) ! (4 * q + 1)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2748 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2749 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2750 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2751 |
lemma dec_fetch_locate_a_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2752 |
"\<lbrakk>start_of ly as \<le> a; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2753 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2754 |
start_of ly as > 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2755 |
a - start_of ly as = 2 * q\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2756 |
\<Longrightarrow> fetch (ci (layout_of aprog) (start_of ly as) (Dec n e)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2757 |
(Suc (2 * q)) Bk = (W1, a)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2758 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2759 |
nth_of.simps tshift.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2760 |
apply(subgoal_tac "(findnth n ! (4 * q)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2761 |
findnth (Suc q) ! (4 * q )") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2762 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2763 |
apply(subgoal_tac " findnth n !(4 * q + 0) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2764 |
findnth (Suc q) ! (4 * q + 0)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2765 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2766 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2767 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2768 |
lemma dec_fetch_locate_b_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2769 |
"\<lbrakk>start_of ly as \<le> a; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2770 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2771 |
(a - start_of ly as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2772 |
start_of ly as> 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2773 |
\<Longrightarrow> fetch (ci (layout_of aprog) (start_of ly as) (Dec n e)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2774 |
(Suc (a - start_of ly as)) Oc = (R, a)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2775 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2776 |
nth_of.simps tshift.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2777 |
apply(subgoal_tac "\<exists> q. (a - start_of ly as) = 2 * q + 1", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2778 |
apply(subgoal_tac "(findnth n ! Suc (Suc (Suc (4 * q)))) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2779 |
findnth (Suc q) ! (4 * q + 3)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2780 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2781 |
apply(subgoal_tac " findnth n ! (4 * q + 3) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2782 |
findnth (Suc q) ! (4 * q + 3)", simp add: add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2783 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2784 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2785 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2786 |
lemma dec_fetch_locate_b_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2787 |
"\<lbrakk>\<not> a < start_of ly as; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2788 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2789 |
(a - start_of ly as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2790 |
start_of ly as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2791 |
\<Longrightarrow> fetch (ci (layout_of aprog) (start_of ly as) (Dec n e)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2792 |
(Suc (a - start_of ly as)) Bk = (R, a + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2793 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2794 |
nth_of.simps tshift.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2795 |
apply(subgoal_tac "\<exists> q. (a - start_of ly as) = 2 * q + 1", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2796 |
apply(subgoal_tac "(findnth n ! Suc ((Suc (4 * q)))) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2797 |
findnth (Suc q) ! (4 * q + 2)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2798 |
apply(simp add: findnth.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2799 |
apply(subgoal_tac " findnth n ! (4 * q + 2) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2800 |
findnth (Suc q) ! (4 * q + 2)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2801 |
apply(rule_tac findnth_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2802 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2803 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2804 |
lemma dec_fetch_locate_n_a_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2805 |
"start_of ly as > 0 \<Longrightarrow> fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2806 |
(start_of ly as) (Dec n e)) (Suc (2 * n)) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2807 |
= (R, start_of ly as + 2*n + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2808 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2809 |
nth_of.simps tshift.simps nth_append tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2810 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2811 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2812 |
lemma dec_fetch_locate_n_a_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2813 |
"start_of ly as > 0 \<Longrightarrow> fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2814 |
(start_of ly as) (Dec n e)) (Suc (2 * n)) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2815 |
= (W1, start_of ly as + 2*n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2816 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2817 |
nth_of.simps tshift.simps nth_append tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2818 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2819 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2820 |
lemma dec_fetch_locate_n_b_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2821 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2822 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2823 |
(start_of ly as) (Dec n e)) (Suc (Suc (2 * n))) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2824 |
= (R, start_of ly as + 2*n + 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2825 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2826 |
nth_of.simps tshift.simps nth_append tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2827 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2828 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2829 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2830 |
lemma dec_fetch_locate_n_b_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2831 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2832 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2833 |
(start_of ly as) (Dec n e)) (Suc (Suc (2 * n))) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2834 |
= (L, start_of ly as + 2*n + 13)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2835 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2836 |
nth_of.simps tshift.simps nth_append tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2837 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2838 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2839 |
lemma dec_fetch_first_on_right_move_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2840 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2841 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2842 |
(start_of ly as) (Dec n e)) (Suc (Suc (Suc (2 * n)))) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2843 |
= (R, start_of ly as + 2*n + 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2844 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2845 |
nth_of.simps tshift.simps nth_append tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2846 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2847 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2848 |
lemma dec_fetch_first_on_right_move_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2849 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2850 |
fetch (ci (layout_of aprog) (start_of ly as) (Dec n e)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2851 |
(Suc (Suc (Suc (2 * n)))) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2852 |
= (L, start_of ly as + 2*n + 3)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2853 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2854 |
nth_of.simps tshift.simps nth_append tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2855 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2856 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2857 |
lemma [simp]: "fetch x (a + 2 * n) b = fetch x (2 * n + a) b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2858 |
thm arg_cong |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2859 |
apply(rule_tac x = "a + 2*n" and y = "2*n + a" in arg_cong, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2860 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2861 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2862 |
lemma dec_fetch_first_after_clear_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2863 |
"start_of ly as > 0 \<Longrightarrow> fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2864 |
(start_of ly as) (Dec n e)) (2 * n + 4) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2865 |
= (W0, start_of ly as + 2*n + 3)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2866 |
apply(auto simp: ci.simps findnth.simps tshift.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2867 |
tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2868 |
apply(subgoal_tac "2*n + 4 = Suc (2*n + 3)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2869 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2870 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2871 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2872 |
lemma dec_fetch_first_after_clear_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2873 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2874 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2875 |
(start_of ly as) (Dec n e)) (2 * n + 4) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2876 |
= (R, start_of ly as + 2*n + 4)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2877 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2878 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2879 |
apply(subgoal_tac "2*n + 4= Suc (2*n + 3)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2880 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2881 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2882 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2883 |
lemma dec_fetch_right_move_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2884 |
"start_of ly as > 0 \<Longrightarrow> fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2885 |
(start_of ly as) (Dec n e)) (2 * n + 5) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2886 |
= (R, start_of ly as + 2*n + 5)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2887 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2888 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2889 |
apply(subgoal_tac "2*n + 5= Suc (2*n + 4)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2890 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2891 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2892 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2893 |
lemma dec_fetch_check_right_move_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2894 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2895 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2896 |
(start_of ly as) (Dec n e)) (2 * n + 6) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2897 |
= (L, start_of ly as + 2*n + 6)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2898 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2899 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2900 |
apply(subgoal_tac "2*n + 6 = Suc (2*n + 5)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2901 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2902 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2903 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2904 |
lemma dec_fetch_check_right_move_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2905 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2906 |
fetch (ci (layout_of aprog) (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2907 |
(Dec n e)) (2 * n + 6) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2908 |
= (L, start_of ly as + 2*n + 7)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2909 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2910 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2911 |
apply(subgoal_tac "2*n + 6 = Suc (2*n + 5)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2912 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2913 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2914 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2915 |
lemma dec_fetch_left_move_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2916 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2917 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2918 |
(start_of ly as) (Dec n e)) (2 * n + 7) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2919 |
= (L, start_of ly as + 2*n + 10)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2920 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2921 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2922 |
apply(subgoal_tac "2*n + 7 = Suc (2*n + 6)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2923 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2924 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2925 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2926 |
lemma dec_fetch_after_write_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2927 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2928 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2929 |
(start_of ly as) (Dec n e)) (2 * n + 8) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2930 |
= (W1, start_of ly as + 2*n + 7)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2931 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2932 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2933 |
apply(subgoal_tac "2*n + 8 = Suc (2*n + 7)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2934 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2935 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2936 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2937 |
lemma dec_fetch_after_write_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2938 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2939 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2940 |
(start_of ly as) (Dec n e)) (2 * n + 8) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2941 |
= (R, start_of ly as + 2*n + 8)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2942 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2943 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2944 |
apply(subgoal_tac "2*n + 8 = Suc (2*n + 7)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2945 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2946 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2947 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2948 |
lemma dec_fetch_on_right_move_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2949 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2950 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2951 |
(start_of ly as) (Dec n e)) (2 * n + 9) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2952 |
= (L, start_of ly as + 2*n + 9)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2953 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2954 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2955 |
apply(subgoal_tac "2*n + 9 = Suc (2*n + 8)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2956 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2957 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2958 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2959 |
lemma dec_fetch_on_right_move_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2960 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2961 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2962 |
(start_of ly as) (Dec n e)) (2 * n + 9) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2963 |
= (R, start_of ly as + 2*n + 8)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2964 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2965 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2966 |
apply(subgoal_tac "2*n + 9 = Suc (2*n + 8)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2967 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2968 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2969 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2970 |
lemma dec_fetch_after_clear_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2971 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2972 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2973 |
(start_of ly as) (Dec n e)) (2 * n + 10) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2974 |
= (R, start_of ly as + 2*n + 4)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2975 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2976 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2977 |
apply(subgoal_tac "2*n + 10 = Suc (2*n + 9)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2978 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2979 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2980 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2981 |
lemma dec_fetch_after_clear_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2982 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2983 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2984 |
(start_of ly as) (Dec n e)) (2 * n + 10) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2985 |
= (W0, start_of ly as + 2*n + 9)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2986 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2987 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2988 |
apply(subgoal_tac "2*n + 10= Suc (2*n + 9)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2989 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2990 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2991 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2992 |
lemma dec_fetch_on_left_move1_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2993 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2994 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2995 |
(start_of ly as) (Dec n e)) (2 * n + 11) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2996 |
= (L, start_of ly as + 2*n + 10)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2997 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2998 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
2999 |
apply(subgoal_tac "2*n + 11= Suc (2*n + 10)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3000 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3001 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3002 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3003 |
lemma dec_fetch_on_left_move1_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3004 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3005 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3006 |
(start_of ly as) (Dec n e)) (2 * n + 11) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3007 |
= (L, start_of ly as + 2*n + 11)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3008 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3009 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3010 |
apply(subgoal_tac "2*n + 11 = Suc (2*n + 10)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3011 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3012 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3013 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3014 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3015 |
lemma dec_fetch_check_left_move1_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3016 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3017 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3018 |
(start_of ly as) (Dec n e)) (2 * n + 12) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3019 |
= (L, start_of ly as + 2*n + 10)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3020 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3021 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3022 |
apply(subgoal_tac "2*n + 12= Suc (2*n + 11)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3023 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3024 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3025 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3026 |
lemma dec_fetch_check_left_move1_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3027 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3028 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3029 |
(start_of ly as) (Dec n e)) (2 * n + 12) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3030 |
= (R, start_of ly as + 2*n + 12)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3031 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3032 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3033 |
apply(subgoal_tac "2*n + 12 = Suc (2*n + 11)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3034 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3035 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3036 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3037 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3038 |
lemma dec_fetch_after_left_move1_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3039 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3040 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3041 |
(start_of ly as) (Dec n e)) (2 * n + 13) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3042 |
= (R, start_of ly as + 2*n + 16)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3043 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3044 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3045 |
apply(subgoal_tac "2*n + 13 = Suc (2*n + 12)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3046 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3047 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3048 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3049 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3050 |
lemma dec_fetch_on_left_move2_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3051 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3052 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3053 |
(start_of ly as) (Dec n e)) (2 * n + 14) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3054 |
= (L, start_of ly as + 2*n + 13)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3055 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3056 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3057 |
apply(subgoal_tac "2*n + 14 = Suc (2*n + 13)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3058 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3059 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3060 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3061 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3062 |
lemma dec_fetch_on_left_move2_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3063 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3064 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3065 |
(start_of ly as) (Dec n e)) (2 * n + 14) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3066 |
= (L, start_of ly as + 2*n + 14)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3067 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3068 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3069 |
apply(subgoal_tac "2*n + 14 = Suc (2*n + 13)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3070 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3071 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3072 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3073 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3074 |
lemma dec_fetch_check_left_move2_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3075 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3076 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3077 |
(start_of ly as) (Dec n e)) (2 * n + 15) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3078 |
= (L, start_of ly as + 2*n + 13)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3079 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3080 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3081 |
apply(subgoal_tac "2*n + 15 = Suc (2*n + 14)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3082 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3083 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3084 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3085 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3086 |
lemma dec_fetch_check_left_move2_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3087 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3088 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3089 |
(start_of ly as) (Dec n e)) (2 * n + 15) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3090 |
= (R, start_of ly as + 2*n + 15)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3091 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3092 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3093 |
apply(subgoal_tac "2*n + 15= Suc (2*n + 14)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3094 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3095 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3096 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3097 |
lemma dec_fetch_after_left_move2_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3098 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3099 |
abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3100 |
start_of ly as > 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3101 |
fetch (ci (layout_of aprog) (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3102 |
(Dec n e)) (2 * n + 16) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3103 |
= (R, start_of ly e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3104 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3105 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3106 |
apply(subgoal_tac "2*n + 16 = Suc (2*n + 15)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3107 |
simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3108 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3109 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3110 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3111 |
lemma dec_fetch_next_state: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3112 |
"start_of ly as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3113 |
fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3114 |
(start_of ly as) (Dec n e)) (2* n + 17) b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3115 |
= (Nop, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3116 |
apply(case_tac b) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3117 |
apply(auto simp: ci.simps findnth.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3118 |
tshift.simps tdec_b_def add3_Suc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3119 |
apply(subgoal_tac [!] "2*n + 17 = Suc (2*n + 16)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3120 |
simp_all only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3121 |
apply(auto simp: nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3122 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3123 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3124 |
(*End: dec_fetch lemmas*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3125 |
lemmas dec_fetch_simps = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3126 |
dec_fetch_locate_a_o dec_fetch_locate_a_b dec_fetch_locate_b_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3127 |
dec_fetch_locate_b_b dec_fetch_locate_n_a_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3128 |
dec_fetch_locate_n_a_b dec_fetch_locate_n_b_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3129 |
dec_fetch_locate_n_b_b dec_fetch_first_on_right_move_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3130 |
dec_fetch_first_on_right_move_b dec_fetch_first_after_clear_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3131 |
dec_fetch_first_after_clear_o dec_fetch_right_move_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3132 |
dec_fetch_on_right_move_b dec_fetch_on_right_move_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3133 |
dec_fetch_after_clear_b dec_fetch_after_clear_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3134 |
dec_fetch_check_right_move_b dec_fetch_check_right_move_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3135 |
dec_fetch_left_move_b dec_fetch_on_left_move1_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3136 |
dec_fetch_on_left_move1_o dec_fetch_check_left_move1_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3137 |
dec_fetch_check_left_move1_o dec_fetch_after_left_move1_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3138 |
dec_fetch_on_left_move2_b dec_fetch_on_left_move2_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3139 |
dec_fetch_check_left_move2_o dec_fetch_check_left_move2_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3140 |
dec_fetch_after_left_move2_b dec_fetch_after_write_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3141 |
dec_fetch_after_write_o dec_fetch_next_state |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3142 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3143 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3144 |
"\<lbrakk>start_of ly as \<le> a; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3145 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3146 |
(a - start_of ly as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3147 |
inv_locate_b (as, am) ((a - start_of ly as) div 2, aaa, Bk # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3148 |
\<Longrightarrow> \<not> Suc a < start_of ly as + 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3149 |
inv_locate_a (as, am) (n, Bk # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3150 |
apply(insert locate_b_2_locate_a[of a ly as n am aaa xs], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3151 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3152 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3153 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3154 |
"\<lbrakk>start_of ly as \<le> a; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3155 |
a < start_of ly as + 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3156 |
(a - start_of ly as) mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3157 |
inv_locate_b (as, am) ((a - start_of ly as) div 2, aaa, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3158 |
\<Longrightarrow> \<not> Suc a < start_of ly as + 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3159 |
inv_locate_a (as, am) (n, Bk # aaa, []) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3160 |
apply(insert locate_b_2_locate_a_B[of a ly as n am aaa], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3161 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3162 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3163 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3164 |
lemma [simp]: "a\<^bsup>0\<^esup>=[]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3165 |
apply(simp add: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3166 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3167 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3168 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3169 |
lemma exp_ind: "a\<^bsup>Suc b\<^esup> = a\<^bsup>b\<^esup> @ [a]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3170 |
apply(simp only: exponent_def rep_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3171 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3172 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3173 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3174 |
"inv_locate_b (as, am) (n, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3175 |
\<Longrightarrow> dec_first_on_right_moving n (as, abc_lm_s am n (abc_lm_v am n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3176 |
(Suc (Suc (start_of ly as + 2 * n)), Oc # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3177 |
apply(simp only: inv_locate_b.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3178 |
dec_first_on_right_moving.simps in_middle.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3179 |
abc_lm_s.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3180 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3181 |
apply(erule conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3182 |
apply(case_tac "n < length am", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3183 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3184 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3185 |
apply(rule_tac x = "Suc ml" in exI, rule_tac conjI, rule_tac [1-2] impI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3186 |
prefer 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3187 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3188 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3189 |
apply(subgoal_tac "Suc n - length am = Suc (n - length am)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3190 |
simp only:exponent_def rep_ind, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3191 |
apply(rule_tac x = "Suc ml" in exI, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3192 |
apply(rule_tac [!] x = "mr - 1" in exI, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3193 |
apply(case_tac [!] mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3194 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3195 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3196 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3197 |
"\<lbrakk>inv_locate_b (as, am) (n, l, r) ires; l \<noteq> []\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3198 |
\<not> inv_on_left_moving_in_middle_B (as, abc_lm_s am n (abc_lm_v am n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3199 |
(s, tl l, hd l # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3200 |
apply(auto simp: inv_locate_b.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3201 |
inv_on_left_moving_in_middle_B.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3202 |
apply(case_tac [!] ml, auto split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3203 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3204 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3205 |
lemma [simp]: "inv_locate_b (as, am) (n, l, r) ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3206 |
apply(auto simp: inv_locate_b.simps in_middle.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3207 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3208 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3209 |
lemma [simp]: "\<lbrakk>inv_locate_b (as, am) (n, l, Bk # r) ires; n < length am\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3210 |
\<Longrightarrow> inv_on_left_moving_norm (as, am) (s, tl l, hd l # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3211 |
apply(simp only: inv_locate_b.simps inv_on_left_moving_norm.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3212 |
in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3213 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3214 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3215 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3216 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3217 |
apply(rule_tac x = "ml - 1" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3218 |
apply(rule_tac [!] x = "Suc mr" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3219 |
apply(case_tac [!] mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3220 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3221 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3222 |
lemma [simp]: "\<lbrakk>inv_locate_b (as, am) (n, l, Bk # r) ires; \<not> n < length am\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3223 |
\<Longrightarrow> inv_on_left_moving_norm (as, am @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3224 |
replicate (n - length am) 0 @ [0]) (s, tl l, hd l # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3225 |
apply(simp only: inv_locate_b.simps inv_on_left_moving_norm.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3226 |
in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3227 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3228 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3229 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3230 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3231 |
apply(subgoal_tac "Suc n - length am = Suc (n - length am)", simp only: rep_ind exponent_def, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3232 |
apply(rule_tac x = "Suc mr" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3233 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3234 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3235 |
lemma inv_locate_b_2_on_left_moving[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3236 |
"\<lbrakk>inv_locate_b (as, am) (n, l, Bk # r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3237 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_on_left_moving (as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3238 |
abc_lm_s am n (abc_lm_v am n)) (s, [], Bk # Bk # r) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3239 |
(l \<noteq> [] \<longrightarrow> inv_on_left_moving (as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3240 |
abc_lm_s am n (abc_lm_v am n)) (s, tl l, hd l # Bk # r) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3241 |
apply(subgoal_tac "l\<noteq>[]") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3242 |
apply(subgoal_tac "\<not> inv_on_left_moving_in_middle_B |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3243 |
(as, abc_lm_s am n (abc_lm_v am n)) (s, tl l, hd l # Bk # r) ires") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3244 |
apply(simp add:inv_on_left_moving.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3245 |
abc_lm_s.simps abc_lm_v.simps split: if_splits, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3246 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3247 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3248 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3249 |
"inv_locate_b (as, am) (n, l, []) ires \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3250 |
inv_locate_b (as, am) (n, l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3251 |
apply(auto simp: inv_locate_b.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3252 |
apply(rule_tac x = lm1 in exI, rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3253 |
rule_tac x = "Suc (length lm1) - length am" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3254 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3255 |
apply(rule_tac x = ml in exI, rule_tac x = mr in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3256 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3257 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3258 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3259 |
lemma nil_2_nil: "<lm::nat list> = [] \<Longrightarrow> lm = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3260 |
apply(auto simp: tape_of_nl_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3261 |
apply(case_tac lm, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3262 |
apply(case_tac list, auto simp: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3263 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3264 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3265 |
lemma inv_locate_b_2_on_left_moving_b[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3266 |
"inv_locate_b (as, am) (n, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3267 |
\<Longrightarrow> (l = [] \<longrightarrow> inv_on_left_moving (as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3268 |
abc_lm_s am n (abc_lm_v am n)) (s, [], [Bk]) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3269 |
(l \<noteq> [] \<longrightarrow> inv_on_left_moving (as, abc_lm_s am n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3270 |
(abc_lm_v am n)) (s, tl l, [hd l]) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3271 |
apply(insert inv_locate_b_2_on_left_moving[of as am n l "[]" ires s]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3272 |
apply(simp only: inv_on_left_moving.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3273 |
apply(subgoal_tac "\<not> inv_on_left_moving_in_middle_B |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3274 |
(as, abc_lm_s am n (abc_lm_v am n)) (s, tl l, [hd l]) ires", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3275 |
apply(simp only: inv_on_left_moving_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3276 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3277 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3278 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3279 |
rule_tac x = m in exI, rule_tac x = ml in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3280 |
rule_tac x = mr in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3281 |
apply(case_tac mr, simp, simp, case_tac nat, auto intro: nil_2_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3282 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3283 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3284 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3285 |
"\<lbrakk>dec_first_on_right_moving n (as, am) (s, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3286 |
\<Longrightarrow> dec_first_on_right_moving n (as, am) (s', Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3287 |
apply(simp only: dec_first_on_right_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3288 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3289 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3290 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3291 |
apply(rule_tac x = "Suc ml" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3292 |
rule_tac x = "mr - 1" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3293 |
apply(case_tac [!] mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3294 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3295 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3296 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3297 |
"dec_first_on_right_moving n (as, am) (s, l, Bk # xs) ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3298 |
apply(auto simp: dec_first_on_right_moving.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3299 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3300 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3301 |
lemma [elim]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3302 |
"\<lbrakk>\<not> length lm1 < length am; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3303 |
am @ replicate (length lm1 - length am) 0 @ [0::nat] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3304 |
lm1 @ m # lm2; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3305 |
0 < m\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3306 |
\<Longrightarrow> RR" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3307 |
apply(subgoal_tac "lm2 = []", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3308 |
apply(drule_tac length_equal, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3309 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3310 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3311 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3312 |
"\<lbrakk>dec_first_on_right_moving n (as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3313 |
abc_lm_s am n (abc_lm_v am n)) (s, l, Bk # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3314 |
\<Longrightarrow> dec_after_clear (as, abc_lm_s am n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3315 |
(abc_lm_v am n - Suc 0)) (s', tl l, hd l # Bk # xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3316 |
apply(simp only: dec_first_on_right_moving.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3317 |
dec_after_clear.simps abc_lm_s.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3318 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3319 |
apply(case_tac "n < length am") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3320 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3321 |
rule_tac x = "m - 1" in exI, auto simp: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3322 |
apply(case_tac [!] mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3323 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3324 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3325 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3326 |
"\<lbrakk>dec_first_on_right_moving n (as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3327 |
abc_lm_s am n (abc_lm_v am n)) (s, l, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3328 |
\<Longrightarrow> (l = [] \<longrightarrow> dec_after_clear (as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3329 |
abc_lm_s am n (abc_lm_v am n - Suc 0)) (s', [], [Bk]) ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3330 |
(l \<noteq> [] \<longrightarrow> dec_after_clear (as, abc_lm_s am n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3331 |
(abc_lm_v am n - Suc 0)) (s', tl l, [hd l]) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3332 |
apply(subgoal_tac "l \<noteq> []", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3333 |
simp only: dec_first_on_right_moving.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3334 |
dec_after_clear.simps abc_lm_s.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3335 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3336 |
apply(case_tac "n < length am", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3337 |
apply(rule_tac x = lm1 in exI, rule_tac x = "m - 1" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3338 |
apply(case_tac [1-2] mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3339 |
apply(case_tac [1-2] m, auto simp: dec_first_on_right_moving.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3340 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3341 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3342 |
lemma [simp]: "\<lbrakk>dec_after_clear (as, am) (s, l, Oc # r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3343 |
\<Longrightarrow> dec_after_clear (as, am) (s', l, Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3344 |
apply(auto simp: dec_after_clear.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3345 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3346 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3347 |
lemma [simp]: "\<lbrakk>dec_after_clear (as, am) (s, l, Bk # r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3348 |
\<Longrightarrow> dec_right_move (as, am) (s', Bk # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3349 |
apply(auto simp: dec_after_clear.simps dec_right_move.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3350 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3351 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3352 |
lemma [simp]: "\<lbrakk>dec_after_clear (as, am) (s, l, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3353 |
\<Longrightarrow> dec_right_move (as, am) (s', Bk # l, []) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3354 |
apply(auto simp: dec_after_clear.simps dec_right_move.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3355 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3356 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3357 |
lemma [simp]: "\<exists>rn. a::block\<^bsup>rn\<^esup> = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3358 |
apply(rule_tac x = 0 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3359 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3360 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3361 |
lemma [simp]: "\<lbrakk>dec_after_clear (as, am) (s, l, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3362 |
\<Longrightarrow> dec_right_move (as, am) (s', Bk # l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3363 |
apply(auto simp: dec_after_clear.simps dec_right_move.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3364 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3365 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3366 |
lemma [simp]:"dec_right_move (as, am) (s, l, Oc # r) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3367 |
apply(auto simp: dec_right_move.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3368 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3369 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3370 |
lemma dec_right_move_2_check_right_move[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3371 |
"\<lbrakk>dec_right_move (as, am) (s, l, Bk # r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3372 |
\<Longrightarrow> dec_check_right_move (as, am) (s', Bk # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3373 |
apply(auto simp: dec_right_move.simps dec_check_right_move.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3374 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3375 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3376 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3377 |
"dec_right_move (as, am) (s, l, []) ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3378 |
dec_right_move (as, am) (s, l, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3379 |
apply(simp add: dec_right_move.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3380 |
apply(rule_tac iffI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3381 |
apply(erule_tac [!] exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3382 |
apply(erule_tac [2] exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3383 |
apply(rule_tac [!] x = lm1 in exI, rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3384 |
rule_tac [!] x = m in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3385 |
apply(auto intro: nil_2_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3386 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3387 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3388 |
lemma [simp]: "\<lbrakk>dec_right_move (as, am) (s, l, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3389 |
\<Longrightarrow> dec_check_right_move (as, am) (s, Bk # l, []) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3390 |
apply(insert dec_right_move_2_check_right_move[of as am s l "[]" s'], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3391 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3392 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3393 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3394 |
lemma [simp]: "dec_check_right_move (as, am) (s, l, r) ires\<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3395 |
apply(auto simp: dec_check_right_move.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3396 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3397 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3398 |
lemma [simp]: "\<lbrakk>dec_check_right_move (as, am) (s, l, Oc # r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3399 |
\<Longrightarrow> dec_after_write (as, am) (s', tl l, hd l # Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3400 |
apply(auto simp: dec_check_right_move.simps dec_after_write.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3401 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3402 |
rule_tac x = m in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3403 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3404 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3405 |
lemma [simp]: "\<lbrakk>dec_check_right_move (as, am) (s, l, Bk # r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3406 |
\<Longrightarrow> dec_left_move (as, am) (s', tl l, hd l # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3407 |
apply(auto simp: dec_check_right_move.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3408 |
dec_left_move.simps inv_after_move.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3409 |
apply(rule_tac x = lm1 in exI, rule_tac x = m in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3410 |
apply(auto intro: BkCons_nil nil_2_nil dest: BkCons_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3411 |
apply(rule_tac x = "Suc rn" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3412 |
apply(auto intro: BkCons_nil nil_2_nil dest: BkCons_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3413 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3414 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3415 |
lemma [simp]: "\<lbrakk>dec_check_right_move (as, am) (s, l, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3416 |
\<Longrightarrow> dec_left_move (as, am) (s', tl l, [hd l]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3417 |
apply(auto simp: dec_check_right_move.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3418 |
dec_left_move.simps inv_after_move.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3419 |
apply(rule_tac x = lm1 in exI, rule_tac x = m in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3420 |
apply(auto intro: BkCons_nil nil_2_nil dest: BkCons_nil) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3421 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3422 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3423 |
lemma [simp]: "dec_left_move (as, am) (s, aaa, Oc # xs) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3424 |
apply(auto simp: dec_left_move.simps inv_after_move.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3425 |
apply(case_tac [!] rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3426 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3427 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3428 |
lemma [simp]: "dec_left_move (as, am) (s, l, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3429 |
\<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3430 |
apply(auto simp: dec_left_move.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3431 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3432 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3433 |
lemma tape_of_nl_abv_cons_ex[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3434 |
"\<exists>lna. Oc # Oc\<^bsup>m\<^esup> @ Bk # <rev lm1> @ Bk\<^bsup>ln\<^esup> = <m # rev lm1> @ Bk\<^bsup>lna\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3435 |
apply(case_tac "lm1=[]", auto simp: tape_of_nl_abv |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3436 |
tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3437 |
apply(rule_tac x = "ln" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3438 |
apply(simp add: tape_of_nat_list_cons exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3439 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3440 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3441 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3442 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, lm1 @ [m]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3443 |
(s', Oc # Oc\<^bsup>m\<^esup> @ Bk # <rev lm1> @ Bk\<^bsup>ln\<^esup>, Bk # Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3444 |
apply(simp only: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3445 |
apply(rule_tac x = "lm1 @ [m]" in exI, rule_tac x = "[]" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3446 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3447 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3448 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, [m]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3449 |
(s', Oc # Oc\<^bsup>m\<^esup> @ Bk # Bk # ires, Bk # Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3450 |
apply(simp add: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3451 |
apply(rule_tac x = "[m]" in exI, simp, auto simp: tape_of_nat_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3452 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3453 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3454 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, [m]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3455 |
(s', Oc # Oc\<^bsup>m\<^esup> @ Bk # Bk # ires, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3456 |
apply(simp add: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3457 |
apply(rule_tac x = "[m]" in exI, simp, auto simp: tape_of_nat_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3458 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3459 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3460 |
lemma [simp]: "lm1 \<noteq> [] \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3461 |
inv_on_left_moving_in_middle_B (as, lm1 @ [m]) (s', |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3462 |
Oc # Oc\<^bsup>m\<^esup> @ Bk # <rev lm1> @ Bk # Bk # ires, Bk # Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3463 |
apply(simp only: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3464 |
apply(rule_tac x = "lm1 @ [m ]" in exI, rule_tac x = "[]" in exI, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3465 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3466 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3467 |
lemma [simp]: "lm1 \<noteq> [] \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3468 |
inv_on_left_moving_in_middle_B (as, lm1 @ [m]) (s', |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3469 |
Oc # Oc\<^bsup>m\<^esup> @ Bk # <rev lm1> @ Bk # Bk # ires, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3470 |
apply(simp only: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3471 |
apply(rule_tac x = "lm1 @ [m ]" in exI, rule_tac x = "[]" in exI, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3472 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3473 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3474 |
lemma [simp]: "dec_left_move (as, am) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3475 |
\<Longrightarrow> inv_on_left_moving (as, am) (s', tl l, hd l # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3476 |
apply(auto simp: dec_left_move.simps inv_on_left_moving.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3477 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3478 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3479 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3480 |
lemma [simp]: "inv_on_left_moving_in_middle_B (as, lm1 @ [m]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3481 |
(s', Oc # Oc\<^bsup>m\<^esup> @ Bk # <rev lm1> @ Bk\<^bsup>ln\<^esup>, [Bk]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3482 |
apply(auto simp: inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3483 |
apply(rule_tac x = "lm1 @ [m]" in exI, rule_tac x = "[]" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3484 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3485 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3486 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3487 |
lemma [simp]: "dec_left_move (as, am) (s, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3488 |
\<Longrightarrow> inv_on_left_moving (as, am) (s', tl l, [hd l]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3489 |
apply(auto simp: dec_left_move.simps inv_on_left_moving.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3490 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3491 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3492 |
lemma [simp]: "dec_after_write (as, am) (s, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3493 |
\<Longrightarrow> dec_on_right_moving (as, am) (s', Oc # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3494 |
apply(auto simp: dec_after_write.simps dec_on_right_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3495 |
apply(rule_tac x = "lm1 @ [m]" in exI, rule_tac x = "tl lm2" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3496 |
rule_tac x = "hd lm2" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3497 |
apply(rule_tac x = "Suc 0" in exI,rule_tac x = "Suc (hd lm2)" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3498 |
apply(case_tac lm2, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3499 |
apply(case_tac "list = []", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3500 |
auto simp: tape_of_nl_abv tape_of_nat_list.simps split: if_splits ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3501 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3502 |
apply(case_tac "rev lm1", simp, simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3503 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3504 |
apply(case_tac list, simp_all add: tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3505 |
apply(case_tac "rev lm1", simp, simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3506 |
apply(case_tac list, simp_all add: tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3507 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3508 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3509 |
lemma [simp]: "dec_after_write (as, am) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3510 |
\<Longrightarrow> dec_after_write (as, am) (s', l, Oc # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3511 |
apply(auto simp: dec_after_write.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3512 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3513 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3514 |
lemma [simp]: "dec_after_write (as, am) (s, aaa, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3515 |
\<Longrightarrow> dec_after_write (as, am) (s', aaa, [Oc]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3516 |
apply(auto simp: dec_after_write.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3517 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3518 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3519 |
lemma [simp]: "dec_on_right_moving (as, am) (s, l, Oc # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3520 |
\<Longrightarrow> dec_on_right_moving (as, am) (s', Oc # l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3521 |
apply(simp only: dec_on_right_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3522 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3523 |
apply(erule conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3524 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3525 |
rule_tac x = "m" in exI, rule_tac x = "Suc ml" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3526 |
rule_tac x = "mr - 1" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3527 |
apply(case_tac mr, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3528 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3529 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3530 |
lemma [simp]: "dec_on_right_moving (as, am) (s, l, r) ires\<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3531 |
apply(auto simp: dec_on_right_moving.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3532 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3533 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3534 |
lemma [simp]: "dec_on_right_moving (as, am) (s, l, Bk # r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3535 |
\<Longrightarrow> dec_after_clear (as, am) (s', tl l, hd l # Bk # r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3536 |
apply(auto simp: dec_on_right_moving.simps dec_after_clear.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3537 |
apply(case_tac [!] mr, auto split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3538 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3539 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3540 |
lemma [simp]: "dec_on_right_moving (as, am) (s, l, []) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3541 |
\<Longrightarrow> dec_after_clear (as, am) (s', tl l, [hd l]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3542 |
apply(auto simp: dec_on_right_moving.simps dec_after_clear.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3543 |
apply(case_tac mr, simp_all split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3544 |
apply(rule_tac x = lm1 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3545 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3546 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3547 |
lemma start_of_le: "a < b \<Longrightarrow> start_of ly a \<le> start_of ly b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3548 |
proof(induct b arbitrary: a, simp, case_tac "a = b", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3549 |
fix b a |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3550 |
show "start_of ly b \<le> start_of ly (Suc b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3551 |
apply(case_tac "b::nat", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3552 |
simp add: start_of.simps, simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3553 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3554 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3555 |
fix b a |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3556 |
assume h1: "\<And>a. a < b \<Longrightarrow> start_of ly a \<le> start_of ly b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3557 |
"a < Suc b" "a \<noteq> b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3558 |
hence "a < b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3559 |
by(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3560 |
from h1 and this have h2: "start_of ly a \<le> start_of ly b" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3561 |
by(drule_tac h1, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3562 |
from h2 show "start_of ly a \<le> start_of ly (Suc b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3563 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3564 |
have "start_of ly b \<le> start_of ly (Suc b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3565 |
apply(case_tac "b::nat", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3566 |
simp add: start_of.simps, simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3567 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3568 |
from h2 and this show "start_of ly a \<le> start_of ly (Suc b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3569 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3570 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3571 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3572 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3573 |
lemma start_of_dec_length[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3574 |
"\<lbrakk>abc_fetch a aprog = Some (Dec n e)\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3575 |
start_of (layout_of aprog) (Suc a) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3576 |
= start_of (layout_of aprog) a + 2*n + 16" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3577 |
apply(case_tac a, auto simp: abc_fetch.simps start_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3578 |
layout_of.simps length_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3579 |
split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3580 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3581 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3582 |
lemma start_of_ge: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3583 |
"\<lbrakk>abc_fetch a aprog = Some (Dec n e); a < e\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3584 |
start_of (layout_of aprog) e > |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3585 |
start_of (layout_of aprog) a + 2*n + 15" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3586 |
apply(case_tac "e = Suc a", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3587 |
simp add: start_of.simps abc_fetch.simps layout_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3588 |
length_of.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3589 |
apply(subgoal_tac "Suc a < e", drule_tac a = "Suc a" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3590 |
and ly = "layout_of aprog" in start_of_le) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3591 |
apply(subgoal_tac "start_of (layout_of aprog) (Suc a) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3592 |
= start_of (layout_of aprog) a + 2*n + 16", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3593 |
apply(rule_tac start_of_dec_length, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3594 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3595 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3596 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3597 |
lemma starte_not_equal[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3598 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3599 |
\<Longrightarrow> (start_of ly e \<noteq> Suc (Suc (start_of ly as + 2 * n)) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3600 |
start_of ly e \<noteq> start_of ly as + 2 * n + 3 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3601 |
start_of ly e \<noteq> start_of ly as + 2 * n + 4 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3602 |
start_of ly e \<noteq> start_of ly as + 2 * n + 5 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3603 |
start_of ly e \<noteq> start_of ly as + 2 * n + 6 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3604 |
start_of ly e \<noteq> start_of ly as + 2 * n + 7 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3605 |
start_of ly e \<noteq> start_of ly as + 2 * n + 8 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3606 |
start_of ly e \<noteq> start_of ly as + 2 * n + 9 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3607 |
start_of ly e \<noteq> start_of ly as + 2 * n + 10 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3608 |
start_of ly e \<noteq> start_of ly as + 2 * n + 11 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3609 |
start_of ly e \<noteq> start_of ly as + 2 * n + 12 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3610 |
start_of ly e \<noteq> start_of ly as + 2 * n + 13 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3611 |
start_of ly e \<noteq> start_of ly as + 2 * n + 14 \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3612 |
start_of ly e \<noteq> start_of ly as + 2 * n + 15)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3613 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3614 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3615 |
apply(drule_tac a = e and b = as and ly = ly in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3616 |
apply(drule_tac a = as and e = e in start_of_ge, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3617 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3618 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3619 |
lemma [simp]: "\<lbrakk>abc_fetch as aprog = Some (Dec n e); ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3620 |
\<Longrightarrow> (Suc (Suc (start_of ly as + 2 * n)) \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3621 |
start_of ly as + 2 * n + 3 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3622 |
start_of ly as + 2 * n + 4 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3623 |
start_of ly as + 2 * n + 5 \<noteq>start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3624 |
start_of ly as + 2 * n + 6 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3625 |
start_of ly as + 2 * n + 7 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3626 |
start_of ly as + 2 * n + 8 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3627 |
start_of ly as + 2 * n + 9 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3628 |
start_of ly as + 2 * n + 10 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3629 |
start_of ly as + 2 * n + 11 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3630 |
start_of ly as + 2 * n + 12 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3631 |
start_of ly as + 2 * n + 13 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3632 |
start_of ly as + 2 * n + 14 \<noteq> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3633 |
start_of ly as + 2 * n + 15 \<noteq> start_of ly e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3634 |
apply(insert starte_not_equal[of as aprog n e ly], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3635 |
simp del: starte_not_equal) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3636 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3637 |
apply(rule_tac conjI, simp del: starte_not_equal)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3638 |
apply(rule not_sym, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3639 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3640 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3641 |
lemma [simp]: "start_of (layout_of aprog) as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3642 |
fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3643 |
(Dec n as)) (Suc 0) Oc = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3644 |
(R, Suc (start_of (layout_of aprog) as))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3645 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3646 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3647 |
nth_of.simps tshift.simps nth_append |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3648 |
Suc_pre tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3649 |
apply(insert findnth_nth[of 0 n "Suc 0"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3650 |
apply(simp add: findnth.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3651 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3652 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3653 |
lemma start_of_inj[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3654 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); e \<noteq> as; ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3655 |
\<Longrightarrow> start_of ly as \<noteq> start_of ly e" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3656 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3657 |
apply(case_tac "as", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3658 |
apply(case_tac "e = nat", simp add: start_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3659 |
layout_of.simps length_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3660 |
apply(subgoal_tac "e < length aprog", simp add: length_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3661 |
split: abc_inst.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3662 |
apply(simp add: abc_fetch.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3663 |
apply(subgoal_tac "e < nat", drule_tac a = e and b = nat |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3664 |
and ly =ly in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3665 |
apply(subgoal_tac "start_of ly nat < start_of ly (Suc nat)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3666 |
simp, simp add: start_of.simps layout_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3667 |
apply(subgoal_tac "nat < length aprog", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3668 |
apply(case_tac "aprog ! nat", auto simp: length_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3669 |
apply(simp add: abc_fetch.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3670 |
apply(subgoal_tac "e > as", drule_tac start_of_ge, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3671 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3672 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3673 |
lemma [simp]: "\<lbrakk>abc_fetch as aprog = Some (Dec n e); e < as\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3674 |
\<Longrightarrow> Suc (start_of (layout_of aprog) e) - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3675 |
start_of (layout_of aprog) as = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3676 |
apply(frule_tac ly = "layout_of aprog" in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3677 |
apply(subgoal_tac "start_of (layout_of aprog) as \<noteq> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3678 |
start_of (layout_of aprog) e", arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3679 |
apply(rule start_of_inj, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3680 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3681 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3682 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3683 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3684 |
0 < start_of (layout_of aprog) as\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3685 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3686 |
(Dec n e)) (Suc (start_of (layout_of aprog) e) - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3687 |
start_of (layout_of aprog) as) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3688 |
= (if e = as then (R, start_of (layout_of aprog) as + 1) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3689 |
else (Nop, 0))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3690 |
apply(auto split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3691 |
apply(case_tac "e < as", simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3692 |
apply(subgoal_tac " e > as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3693 |
apply(drule start_of_ge, simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3694 |
auto simp: fetch.simps ci_length nth_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3695 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3696 |
"length (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3697 |
(Dec n e)) div 2= length_of (Dec n e)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3698 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3699 |
apply(simp add: ci_length) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3700 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3701 |
"length (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3702 |
(Dec n e)) mod 2 = 0", auto simp: length_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3703 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3704 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3705 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3706 |
"start_of (layout_of aprog) as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3707 |
fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3708 |
(Dec n as)) (Suc 0) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3709 |
= (W1, start_of (layout_of aprog) as)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3710 |
apply(auto simp: ci.simps findnth.simps fetch.simps nth_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3711 |
tshift.simps nth_append Suc_pre tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3712 |
apply(insert findnth_nth[of 0 n "0"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3713 |
apply(simp add: findnth.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3714 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3715 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3716 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3717 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3718 |
0 < start_of (layout_of aprog) as\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3719 |
\<Longrightarrow> (fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3720 |
(Dec n e)) (Suc (start_of (layout_of aprog) e) - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3721 |
start_of (layout_of aprog) as) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3722 |
= (if e = as then (W1, start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3723 |
else (Nop, 0))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3724 |
apply(auto split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3725 |
apply(case_tac "e < as", simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3726 |
apply(subgoal_tac " e > as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3727 |
apply(drule start_of_ge, simp, auto simp: fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3728 |
ci_length nth_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3729 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3730 |
"length (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3731 |
(Dec n e)) div 2= length_of (Dec n e)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3732 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3733 |
apply(simp add: ci_length) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3734 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3735 |
"length (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3736 |
(Dec n e)) mod 2 = 0", auto simp: length_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3737 |
apply(simp add: ci.simps tshift.simps tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3738 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3739 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3740 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3741 |
"inv_stop (as, abc_lm_s am n (abc_lm_v am n)) (s, l, r) ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3742 |
apply(auto simp: inv_stop.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3743 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3744 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3745 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3746 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); e \<noteq> as; ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3747 |
\<Longrightarrow> (\<not> (start_of ly as \<le> start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3748 |
start_of ly e < start_of ly as + 2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3749 |
\<and> start_of ly e \<noteq> start_of ly as + 2*n \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3750 |
start_of ly e \<noteq> Suc (start_of ly as + 2*n) " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3751 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3752 |
apply(drule_tac ly = ly in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3753 |
apply(case_tac n, simp, drule start_of_inj, simp, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3754 |
apply(drule_tac start_of_ge, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3755 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3756 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3757 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3758 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); start_of ly as \<le> s; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3759 |
s < start_of ly as + 2 * n; ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3760 |
\<Longrightarrow> Suc s \<noteq> start_of ly e " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3761 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3762 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3763 |
apply(drule_tac a = e and b = as and ly = ly in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3764 |
apply(drule_tac start_of_ge, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3765 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3766 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3767 |
lemma [simp]: "\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3768 |
ly = layout_of aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3769 |
\<Longrightarrow> Suc (start_of ly as + 2 * n) \<noteq> start_of ly e" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3770 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3771 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3772 |
apply(drule_tac a = e and b = as and ly = ly in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3773 |
apply(drule_tac start_of_ge, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3774 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3775 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3776 |
lemma dec_false_1[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3777 |
"\<lbrakk>abc_lm_v am n = 0; inv_locate_b (as, am) (n, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3778 |
\<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3779 |
apply(auto simp: inv_locate_b.simps in_middle.simps exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3780 |
apply(case_tac "length lm1 \<ge> length am", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3781 |
apply(subgoal_tac "lm2 = []", simp, subgoal_tac "m = 0", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3782 |
apply(case_tac mr, auto simp: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3783 |
apply(subgoal_tac "Suc (length lm1) - length am = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3784 |
Suc (length lm1 - length am)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3785 |
simp add: rep_ind del: replicate.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3786 |
apply(drule_tac xs = "am @ replicate (Suc (length lm1) - length am) 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3787 |
and ys = "lm1 @ m # lm2" in length_equal, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3788 |
apply(case_tac mr, auto simp: abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3789 |
apply(case_tac "mr = 0", simp_all add: exponent_def split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3790 |
apply(subgoal_tac "Suc (length lm1) - length am = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3791 |
Suc (length lm1 - length am)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3792 |
simp add: rep_ind del: replicate.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3793 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3794 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3795 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3796 |
"\<lbrakk>inv_locate_b (as, am) (n, aaa, Bk # xs) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3797 |
abc_lm_v am n = 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3798 |
\<Longrightarrow> inv_on_left_moving (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3799 |
(s, tl aaa, hd aaa # Bk # xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3800 |
apply(insert inv_locate_b_2_on_left_moving[of as am n aaa xs ires s], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3801 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3802 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3803 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3804 |
"\<lbrakk>abc_lm_v am n = 0; inv_locate_b (as, am) (n, aaa, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3805 |
\<Longrightarrow> inv_on_left_moving (as, abc_lm_s am n 0) (s, tl aaa, [hd aaa]) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3806 |
apply(insert inv_locate_b_2_on_left_moving_b[of as am n aaa ires s], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3807 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3808 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3809 |
lemma [simp]: "\<lbrakk>am ! n = (0::nat); n < length am\<rbrakk> \<Longrightarrow> am[n := 0] = am" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3810 |
apply(simp add: list_update_same_conv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3811 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3812 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3813 |
lemma [simp]: "\<lbrakk>abc_lm_v am n = 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3814 |
inv_locate_b (as, abc_lm_s am n 0) (n, Oc # aaa, xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3815 |
\<Longrightarrow> inv_locate_b (as, am) (n, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3816 |
apply(simp only: inv_locate_b.simps in_middle.simps abc_lm_s.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3817 |
abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3818 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3819 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3820 |
apply(case_tac "n < length am", simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3821 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3822 |
apply(rule_tac x = tn in exI, rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3823 |
apply(rule_tac x = ml in exI, rule_tac x = mr in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3824 |
defer |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3825 |
apply(rule_tac x = "Suc n - length am" in exI, rule_tac x = m in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3826 |
apply(subgoal_tac "Suc n - length am = Suc (n - length am)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3827 |
apply(simp add: exponent_def rep_ind del: replicate.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3828 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3829 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3830 |
lemma [intro]: "\<lbrakk>abc_lm_v (a # list) 0 = 0\<rbrakk> \<Longrightarrow> a = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3831 |
apply(simp add: abc_lm_v.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3832 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3833 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3834 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3835 |
"inv_stop (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3836 |
(start_of (layout_of aprog) e, aaa, Oc # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3837 |
\<Longrightarrow> inv_locate_a (as, abc_lm_s am n 0) (0, aaa, Oc # xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3838 |
apply(simp add: inv_locate_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3839 |
apply(rule disjI1) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3840 |
apply(auto simp: inv_stop.simps at_begin_norm.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3841 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3842 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3843 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3844 |
"\<lbrakk>abc_lm_v am 0 = 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3845 |
inv_stop (as, abc_lm_s am 0 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3846 |
(start_of (layout_of aprog) e, aaa, Oc # xs) ires\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3847 |
inv_locate_b (as, am) (0, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3848 |
apply(auto simp: inv_stop.simps inv_locate_b.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3849 |
in_middle.simps abc_lm_s.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3850 |
apply(case_tac "am = []", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3851 |
apply(rule_tac x = "[]" in exI, rule_tac x = "Suc 0" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3852 |
rule_tac x = 0 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3853 |
apply(rule_tac x = "Suc 0" in exI, rule_tac x = 0 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3854 |
simp add: tape_of_nl_abv tape_of_nat_list.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3855 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3856 |
apply(rule_tac x = "tl am" in exI, rule_tac x = 0 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3857 |
rule_tac x = "hd am" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3858 |
apply(rule_tac x = "Suc 0" in exI, rule_tac x = "hd am" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3859 |
apply(case_tac am, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3860 |
apply(subgoal_tac "a = 0", case_tac list, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3861 |
auto simp: tape_of_nat_list.simps tape_of_nl_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3862 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3863 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3864 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3865 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3866 |
"\<lbrakk>inv_stop (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3867 |
(start_of (layout_of aprog) e, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3868 |
\<Longrightarrow> inv_locate_b (as, am) (0, Oc # aaa, xs) ires \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3869 |
inv_locate_b (as, abc_lm_s am n 0) (0, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3870 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3871 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3872 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3873 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3874 |
"\<lbrakk>abc_lm_v am n = 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3875 |
inv_stop (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3876 |
(start_of (layout_of aprog) e, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3877 |
\<Longrightarrow> \<not> Suc 0 < 2 * n \<longrightarrow> e = as \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3878 |
inv_locate_b (as, am) (n, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3879 |
apply(case_tac n, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3880 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3881 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3882 |
lemma dec_false2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3883 |
"inv_stop (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3884 |
(start_of (layout_of aprog) e, aaa, Bk # xs) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3885 |
apply(auto simp: inv_stop.simps abc_lm_s.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3886 |
apply(case_tac "am", simp, case_tac n, simp add: tape_of_nl_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3887 |
apply(case_tac list, simp add: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3888 |
apply(simp add: tape_of_nat_list.simps , simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3889 |
apply(case_tac "list[nat := 0]", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3890 |
simp add: tape_of_nat_list.simps tape_of_nl_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3891 |
apply(simp add: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3892 |
apply(case_tac "am @ replicate (n - length am) 0 @ [0]", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3893 |
apply(case_tac list, auto simp: tape_of_nl_abv |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3894 |
tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3895 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3896 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3897 |
lemma dec_false3: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3898 |
"inv_stop (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3899 |
(start_of (layout_of aprog) e, aaa, []) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3900 |
apply(auto simp: inv_stop.simps abc_lm_s.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3901 |
apply(case_tac "am", case_tac n, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3902 |
apply(case_tac n, auto simp: tape_of_nl_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3903 |
apply(case_tac "list::nat list", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3904 |
simp add: tape_of_nat_list.simps tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3905 |
apply(simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3906 |
apply(case_tac "list[nat := 0]", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3907 |
simp add: tape_of_nat_list.simps tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3908 |
apply(simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3909 |
apply(case_tac "(am @ replicate (n - length am) 0 @ [0])", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3910 |
apply(case_tac list, auto simp: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3911 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3912 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3913 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3914 |
"fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3915 |
(start_of (layout_of aprog) as) (Dec n e)) 0 b = (Nop, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3916 |
by(simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3917 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3918 |
declare dec_inv_1.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3919 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3920 |
declare inv_locate_n_b.simps [simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3921 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3922 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3923 |
"\<lbrakk>0 < abc_lm_v am n; 0 < n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3924 |
at_begin_norm (as, am) (n, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3925 |
\<Longrightarrow> inv_locate_n_b (as, am) (n, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3926 |
apply(simp only: at_begin_norm.simps inv_locate_n_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3927 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3928 |
apply(rule_tac x = lm1 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3929 |
apply(case_tac "length lm2", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3930 |
apply(case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3931 |
apply(rule_tac x = "tl lm2" in exI, rule_tac x = "hd lm2" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3932 |
apply(rule conjI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3933 |
apply(case_tac "lm2", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3934 |
apply(case_tac "lm2", auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3935 |
apply(case_tac [!] "list", auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3936 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3937 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3938 |
lemma [simp]: "(\<exists>rn. Oc # xs = Bk\<^bsup>rn\<^esup>) = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3939 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3940 |
apply(case_tac rn, auto simp: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3941 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3942 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3943 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3944 |
"\<lbrakk>0 < abc_lm_v am n; 0 < n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3945 |
at_begin_fst_bwtn (as, am) (n, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3946 |
\<Longrightarrow> inv_locate_n_b (as, am) (n, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3947 |
apply(simp add: at_begin_fst_bwtn.simps inv_locate_n_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3948 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3949 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3950 |
lemma Suc_minus:"length am + tn = n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3951 |
\<Longrightarrow> Suc tn = Suc n - length am " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3952 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3953 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3954 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3955 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3956 |
"\<lbrakk>0 < abc_lm_v am n; 0 < n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3957 |
at_begin_fst_awtn (as, am) (n, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3958 |
\<Longrightarrow> inv_locate_n_b (as, am) (n, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3959 |
apply(simp only: at_begin_fst_awtn.simps inv_locate_n_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3960 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3961 |
apply(erule conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3962 |
apply(rule_tac x = lm1 in exI, rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3963 |
rule_tac x = "Suc tn" in exI, rule_tac x = 0 in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3964 |
apply(simp add: exponent_def rep_ind del: replicate.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3965 |
apply(rule conjI)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3966 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3967 |
apply(case_tac [!] rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3968 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3969 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3970 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3971 |
"\<lbrakk>0 < abc_lm_v am n; 0 < n; inv_locate_a (as, am) (n, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3972 |
\<Longrightarrow> inv_locate_n_b (as, am) (n, Oc#aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3973 |
apply(auto simp: inv_locate_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3974 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3975 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3976 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3977 |
"\<lbrakk>inv_locate_n_b (as, am) (n, aaa, Oc # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3978 |
\<Longrightarrow> dec_first_on_right_moving n (as, abc_lm_s am n (abc_lm_v am n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3979 |
(s, Oc # aaa, xs) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3980 |
apply(auto simp: inv_locate_n_b.simps dec_first_on_right_moving.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3981 |
abc_lm_s.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3982 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3983 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3984 |
apply(rule_tac x = "Suc (Suc 0)" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3985 |
rule_tac x = "m - 1" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3986 |
apply(case_tac m, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3987 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3988 |
rule_tac x = m in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3989 |
simp add: Suc_diff_le rep_ind del: replicate.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3990 |
apply(rule_tac x = "Suc (Suc 0)" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3991 |
rule_tac x = "m - 1" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3992 |
apply(case_tac m, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3993 |
apply(rule_tac x = lm1 in exI, rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3994 |
rule_tac x = m in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3995 |
apply(rule_tac x = "Suc (Suc 0)" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3996 |
rule_tac x = "m - 1" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3997 |
apply(case_tac m, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3998 |
apply(rule_tac x = lm1 in exI, rule_tac x = lm2 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
3999 |
rule_tac x = m in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4000 |
simp add: Suc_diff_le rep_ind del: replicate.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4001 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4002 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4003 |
lemma dec_false_2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4004 |
"\<lbrakk>0 < abc_lm_v am n; inv_locate_n_b (as, am) (n, aaa, Bk # xs) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4005 |
\<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4006 |
apply(auto simp: inv_locate_n_b.simps abc_lm_v.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4007 |
apply(case_tac [!] m, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4008 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4009 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4010 |
lemma dec_false_2_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4011 |
"\<lbrakk>0 < abc_lm_v am n; inv_locate_n_b (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4012 |
(n, aaa, []) ires\<rbrakk> \<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4013 |
apply(auto simp: inv_locate_n_b.simps abc_lm_v.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4014 |
apply(case_tac [!] m, auto simp: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4015 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4016 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4017 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4018 |
(*begin: dec halt1 lemmas*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4019 |
thm abc_inc_stage1.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4020 |
fun abc_dec_1_stage1:: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4021 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4022 |
"abc_dec_1_stage1 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4023 |
(if s > ss \<and> s \<le> ss + 2*n + 1 then 4 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4024 |
else if s = ss + 2 * n + 13 \<or> s = ss + 2*n + 14 then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4025 |
else if s = ss + 2*n + 15 then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4026 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4027 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4028 |
fun abc_dec_1_stage2:: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4029 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4030 |
"abc_dec_1_stage2 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4031 |
(if s \<le> ss + 2 * n + 1 then (ss + 2 * n + 16 - s) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4032 |
else if s = ss + 2*n + 13 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4033 |
else if s = ss + 2*n + 14 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4034 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4035 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4036 |
fun abc_dec_1_stage3 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> block list \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4037 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4038 |
"abc_dec_1_stage3 (s, l, r) ss n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4039 |
(if s \<le> ss + 2*n + 1 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4040 |
if (s - ss) mod 2 = 0 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4041 |
if r \<noteq> [] \<and> hd r = Oc then 0 else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4042 |
else length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4043 |
else if s = ss + 2 * n + 13 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4044 |
if l = Bk # ires \<and> r \<noteq> [] \<and> hd r = Oc then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4045 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4046 |
else if s = ss + 2 * n + 14 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4047 |
if r \<noteq> [] \<and> hd r = Oc then 3 else 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4048 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4049 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4050 |
fun abc_dec_1_measure :: "(t_conf \<times> nat \<times> nat \<times> block list) \<Rightarrow> (nat \<times> nat \<times> nat)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4051 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4052 |
"abc_dec_1_measure (c, ss, n, ires) = (abc_dec_1_stage1 c ss n, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4053 |
abc_dec_1_stage2 c ss n, abc_dec_1_stage3 c ss n ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4054 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4055 |
definition abc_dec_1_LE :: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4056 |
"(((nat \<times> block list \<times> block list) \<times> nat \<times> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4057 |
nat \<times> block list) \<times> ((nat \<times> block list \<times> block list) \<times> nat \<times> nat \<times> block list)) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4058 |
where "abc_dec_1_LE \<equiv> (inv_image lex_triple abc_dec_1_measure)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4059 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4060 |
lemma wf_dec_le: "wf abc_dec_1_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4061 |
by(auto intro:wf_inv_image wf_lex_triple simp:abc_dec_1_LE_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4062 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4063 |
declare dec_inv_1.simps[simp del] dec_inv_2.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4064 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4065 |
lemma [elim]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4066 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4067 |
start_of (layout_of aprog) as < start_of (layout_of aprog) e; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4068 |
start_of (layout_of aprog) e \<le> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4069 |
Suc (start_of (layout_of aprog) as + 2 * n)\<rbrakk> \<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4070 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4071 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4072 |
apply(drule_tac a = e and b = as and ly = "layout_of aprog" in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4073 |
start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4074 |
apply(drule_tac start_of_ge, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4075 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4076 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4077 |
lemma [elim]: "\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4078 |
start_of (layout_of aprog) e |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4079 |
= start_of (layout_of aprog) as + 2 * n + 13\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4080 |
\<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4081 |
apply(insert starte_not_equal[of as aprog n e "layout_of aprog"], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4082 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4083 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4084 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4085 |
lemma [elim]: "\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4086 |
start_of (layout_of aprog) e = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4087 |
start_of (layout_of aprog) as + 2 * n + 14\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4088 |
\<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4089 |
apply(insert starte_not_equal[of as aprog n e "layout_of aprog"], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4090 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4091 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4092 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4093 |
lemma [elim]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4094 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4095 |
start_of (layout_of aprog) as < start_of (layout_of aprog) e; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4096 |
start_of (layout_of aprog) e \<le> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4097 |
Suc (start_of (layout_of aprog) as + 2 * n)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4098 |
\<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4099 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4100 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4101 |
apply(drule_tac a = e and b = as and ly = "layout_of aprog" in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4102 |
start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4103 |
apply(drule_tac start_of_ge, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4104 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4105 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4106 |
lemma [elim]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4107 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4108 |
start_of (layout_of aprog) e = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4109 |
start_of (layout_of aprog) as + 2 * n + 13\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4110 |
\<Longrightarrow> False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4111 |
apply(insert starte_not_equal[of as aprog n e "layout_of aprog"], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4112 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4113 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4114 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4115 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4116 |
"abc_fetch as aprog = Some (Dec n e) \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4117 |
Suc (start_of (layout_of aprog) as) \<noteq> start_of (layout_of aprog) e" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4118 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4119 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4120 |
apply(drule_tac a = e and b = as and ly = "(layout_of aprog)" in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4121 |
start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4122 |
apply(drule_tac a = as and e = e in start_of_ge, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4123 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4124 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4125 |
lemma [simp]: "inv_on_left_moving (as, am) (s, [], r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4126 |
= False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4127 |
apply(simp add: inv_on_left_moving.simps inv_on_left_moving_norm.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4128 |
inv_on_left_moving_in_middle_B.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4129 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4130 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4131 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4132 |
"inv_check_left_moving (as, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4133 |
(start_of (layout_of aprog) as + 2 * n + 14, [], Oc # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4134 |
= False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4135 |
apply(simp add: inv_check_left_moving.simps inv_check_left_moving_in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4136 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4137 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4138 |
lemma dec_inv_stop1_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4139 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); abc_lm_v am n = 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4140 |
start_of (layout_of aprog) as > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4141 |
\<Longrightarrow> \<forall>na. \<not> (\<lambda>(s, l, r) (ss, n', ires'). s = start_of (layout_of aprog) e) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4142 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4143 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4144 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4145 |
(start_of (layout_of aprog) as, n, ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4146 |
dec_inv_1 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4147 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4148 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4149 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) na) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4150 |
\<longrightarrow> dec_inv_1 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4151 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4152 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4153 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4154 |
(Suc na)) ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4155 |
((t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4156 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4157 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) (Suc na), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4158 |
start_of (layout_of aprog) as, n, ires), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4159 |
t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4160 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4161 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) na, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4162 |
start_of (layout_of aprog) as, n, ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4163 |
\<in> abc_dec_1_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4164 |
apply(rule allI, rule impI, simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4165 |
apply(case_tac "(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4166 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4167 |
start_of (layout_of aprog) as - Suc 0) na)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4168 |
apply(auto split:if_splits simp add:t_step.simps dec_inv_1.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4169 |
tactic {* ALLGOALS (resolve_tac [@{thm fetch_intro}]) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4170 |
apply(simp_all add:dec_fetch_simps new_tape.simps dec_inv_1.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4171 |
apply(auto simp add: abc_dec_1_LE_def lex_square_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4172 |
lex_triple_def lex_pair_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4173 |
split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4174 |
apply(rule dec_false_1, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4175 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4176 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4177 |
lemma dec_inv_stop1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4178 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4179 |
dec_inv_1 ly n e (as, am) (start_of ly as + 1, l, r) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4180 |
abc_fetch as aprog = Some (Dec n e); abc_lm_v am n = 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4181 |
(\<exists> stp. (\<lambda> (s', l', r'). s' = start_of ly e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4182 |
dec_inv_1 ly n e (as, am) (s', l' , r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4183 |
(t_steps (start_of ly as + 1, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4184 |
(ci ly (start_of ly as) (Dec n e), start_of ly as - Suc 0) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4185 |
apply(insert halt_lemma2[of abc_dec_1_LE |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4186 |
"\<lambda> ((s, l, r), ss, n', ires'). s = start_of ly e" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4187 |
"(\<lambda> stp. (t_steps (start_of ly as + 1, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4188 |
(ci ly (start_of ly as) (Dec n e), start_of ly as - Suc 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4189 |
stp, start_of ly as, n, ires))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4190 |
"\<lambda> ((s, l, r), ss, n, ires'). dec_inv_1 ly n e (as, am) (s, l, r) ires'"], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4191 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4192 |
apply(insert wf_dec_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4193 |
apply(insert dec_inv_stop1_pre[of as aprog n e am l r], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4194 |
apply(subgoal_tac "start_of (layout_of aprog) as > 0", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4195 |
simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4196 |
apply(erule_tac exE, rule_tac x = na in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4197 |
apply(case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4198 |
"(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4199 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4200 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) na)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4201 |
case_tac b, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4202 |
apply(rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4203 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4204 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4205 |
(*begin: dec halt2 lemmas*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4206 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4207 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4208 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4209 |
ly = layout_of aprog\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4210 |
start_of ly (Suc as) = start_of ly as + 2*n + 16" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4211 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4212 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4213 |
fun abc_dec_2_stage1 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4214 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4215 |
"abc_dec_2_stage1 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4216 |
(if s \<le> ss + 2*n + 1 then 7 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4217 |
else if s = ss + 2*n + 2 then 6 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4218 |
else if s = ss + 2*n + 3 then 5 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4219 |
else if s \<ge> ss + 2*n + 4 \<and> s \<le> ss + 2*n + 9 then 4 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4220 |
else if s = ss + 2*n + 6 then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4221 |
else if s = ss + 2*n + 10 \<or> s = ss + 2*n + 11 then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4222 |
else if s = ss + 2*n + 12 then 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4223 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4224 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4225 |
thm new_tape.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4226 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4227 |
fun abc_dec_2_stage2 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4228 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4229 |
"abc_dec_2_stage2 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4230 |
(if s \<le> ss + 2 * n + 1 then (ss + 2 * n + 16 - s) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4231 |
else if s = ss + 2*n + 10 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4232 |
else if s = ss + 2*n + 11 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4233 |
else if s = ss + 2*n + 4 then length r - 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4234 |
else if s = ss + 2*n + 5 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4235 |
else if s = ss + 2*n + 7 then length r - 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4236 |
else if s = ss + 2*n + 8 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4237 |
length r + length (takeWhile (\<lambda> a. a = Oc) l) - 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4238 |
else if s = ss + 2*n + 9 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4239 |
length r + length (takeWhile (\<lambda> a. a = Oc) l) - 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4240 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4241 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4242 |
fun abc_dec_2_stage3 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> block list \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4243 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4244 |
"abc_dec_2_stage3 (s, l, r) ss n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4245 |
(if s \<le> ss + 2*n + 1 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4246 |
if (s - ss) mod 2 = 0 then if r \<noteq> [] \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4247 |
hd r = Oc then 0 else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4248 |
else length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4249 |
else if s = ss + 2 * n + 10 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4250 |
if l = Bk # ires \<and> r \<noteq> [] \<and> hd r = Oc then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4251 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4252 |
else if s = ss + 2 * n + 11 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4253 |
if r \<noteq> [] \<and> hd r = Oc then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4254 |
else 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4255 |
else (ss + 2 * n + 16 - s))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4256 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4257 |
fun abc_dec_2_stage4 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4258 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4259 |
"abc_dec_2_stage4 (s, l, r) ss n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4260 |
(if s = ss + 2*n + 2 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4261 |
else if s = ss + 2*n + 8 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4262 |
else if s = ss + 2*n + 3 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4263 |
if r \<noteq> [] \<and> hd r = Oc then 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4264 |
else 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4265 |
else if s = ss + 2*n + 7 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4266 |
if r \<noteq> [] \<and> hd r = Oc then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4267 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4268 |
else if s = ss + 2*n + 9 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4269 |
if r \<noteq> [] \<and> hd r = Oc then 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4270 |
else 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4271 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4272 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4273 |
fun abc_dec_2_measure :: "(t_conf \<times> nat \<times> nat \<times> block list) \<Rightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4274 |
(nat \<times> nat \<times> nat \<times> nat)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4275 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4276 |
"abc_dec_2_measure (c, ss, n, ires) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4277 |
(abc_dec_2_stage1 c ss n, abc_dec_2_stage2 c ss n, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4278 |
abc_dec_2_stage3 c ss n ires, abc_dec_2_stage4 c ss n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4279 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4280 |
definition abc_dec_2_LE :: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4281 |
"(((nat \<times> block list \<times> block list) \<times> nat \<times> nat \<times> block list) \<times> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4282 |
((nat \<times> block list \<times> block list) \<times> nat \<times> nat \<times> block list)) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4283 |
where "abc_dec_2_LE \<equiv> (inv_image lex_square abc_dec_2_measure)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4284 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4285 |
lemma wf_dec_2_le: "wf abc_dec_2_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4286 |
by(auto intro:wf_inv_image wf_lex_triple wf_lex_square |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4287 |
simp:abc_dec_2_LE_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4288 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4289 |
lemma [simp]: "dec_after_write (as, am) (s, aa, r) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4290 |
\<Longrightarrow> takeWhile (\<lambda>a. a = Oc) aa = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4291 |
apply(simp only : dec_after_write.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4292 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4293 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4294 |
apply(case_tac aa, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4295 |
apply(case_tac a, simp only: takeWhile.simps , simp, simp split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4296 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4297 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4298 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4299 |
"\<lbrakk>dec_on_right_moving (as, lm) (s, aa, []) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4300 |
length (takeWhile (\<lambda>a. a = Oc) (tl aa)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4301 |
\<noteq> length (takeWhile (\<lambda>a. a = Oc) aa) - Suc 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4302 |
\<Longrightarrow> length (takeWhile (\<lambda>a. a = Oc) (tl aa)) < |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4303 |
length (takeWhile (\<lambda>a. a = Oc) aa) - Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4304 |
apply(simp only: dec_on_right_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4305 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4306 |
apply(erule_tac conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4307 |
apply(case_tac mr, auto split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4308 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4309 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4310 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4311 |
"dec_after_clear (as, abc_lm_s am n (abc_lm_v am n - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4312 |
(start_of (layout_of aprog) as + 2 * n + 9, aa, Bk # xs) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4313 |
\<Longrightarrow> length xs - Suc 0 < length xs + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4314 |
length (takeWhile (\<lambda>a. a = Oc) aa)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4315 |
apply(simp only: dec_after_clear.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4316 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4317 |
apply(erule conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4318 |
apply(simp split: if_splits ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4319 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4320 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4321 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4322 |
"\<lbrakk>dec_after_clear (as, abc_lm_s am n (abc_lm_v am n - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4323 |
(start_of (layout_of aprog) as + 2 * n + 9, aa, []) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4324 |
\<Longrightarrow> Suc 0 < length (takeWhile (\<lambda>a. a = Oc) aa)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4325 |
apply(simp add: dec_after_clear.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4326 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4327 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4328 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4329 |
"\<lbrakk>dec_on_right_moving (as, am) (s, aa, Bk # xs) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4330 |
Suc (length (takeWhile (\<lambda>a. a = Oc) (tl aa))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4331 |
\<noteq> length (takeWhile (\<lambda>a. a = Oc) aa)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4332 |
\<Longrightarrow> Suc (length (takeWhile (\<lambda>a. a = Oc) (tl aa))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4333 |
< length (takeWhile (\<lambda>a. a = Oc) aa)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4334 |
apply(simp only: dec_on_right_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4335 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4336 |
apply(erule conjE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4337 |
apply(case_tac ml, auto split: if_splits ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4338 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4339 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4340 |
(* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4341 |
lemma abc_dec_2_wf: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4342 |
"\<lbrakk>ly = layout_of aprog; dec_inv_2 ly n e (as, am) (start_of ly as + 1, l, r); abc_fetch as aprog = Dec n e; abc_lm_v am n > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4343 |
\<Longrightarrow> \<forall>na. \<not> (\<lambda>(s, l, r) (ss, n'). s = start_of (layout_of aprog) as + 2*n + 16) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4344 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4345 |
(start_of (layout_of aprog) as, n) \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4346 |
((t_steps (Suc (start_of (layout_of aprog) as), l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) (Suc na), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4347 |
start_of (layout_of aprog) as, n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4348 |
t_steps (Suc (start_of (layout_of aprog) as), l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) na, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4349 |
start_of (layout_of aprog) as, n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4350 |
\<in> abc_dec_2_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4351 |
proof(rule allI, rule impI, simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4352 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4353 |
assume h1 :"ly = layout_of aprog" "dec_inv_2 (layout_of aprog) n e (as, am) (Suc (start_of (layout_of aprog) as), l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4354 |
"abc_fetch as aprog = Dec n e" "abc_lm_v am n > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4355 |
"\<not> (\<lambda>(s, l, r) (ss, n'). s = start_of (layout_of aprog) as + 2*n + 16) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4356 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4357 |
(start_of (layout_of aprog) as, n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4358 |
thus "((t_step (t_steps (Suc (start_of (layout_of aprog) as), l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4359 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4360 |
start_of (layout_of aprog) as, n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4361 |
t_steps (Suc (start_of (layout_of aprog) as), l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) na, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4362 |
start_of (layout_of aprog) as, n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4363 |
\<in> abc_dec_2_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4364 |
proof(insert dec_inv_2_steps[of "layout_of aprog" n e as am "(start_of (layout_of aprog) as + 1, l, r)" aprog na], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4365 |
case_tac "(t_steps (start_of (layout_of aprog) as + 1, l, r) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0) na)", case_tac b, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4366 |
fix a b aa ba |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4367 |
assume "dec_inv_2 (layout_of aprog) n e (as, am) (a, aa, ba)" " a \<noteq> start_of (layout_of aprog) as + 2*n + 16" "abc_lm_v am n > 0" "abc_fetch as aprog = Dec n e " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4368 |
thus "((t_step (a, aa, ba) (ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), start_of (layout_of aprog) as - Suc 0), start_of (layout_of aprog) as, n), (a, aa, ba), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4369 |
start_of (layout_of aprog) as, n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4370 |
\<in> abc_dec_2_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4371 |
apply(case_tac "a = 0", auto split:if_splits simp add:t_step.simps dec_inv_2.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4372 |
tactic {* ALLGOALS (resolve_tac (thms "fetch_intro")) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4373 |
apply(simp_all add:dec_fetch_simps new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4374 |
apply(auto simp add: abc_dec_2_LE_def lex_square_def lex_triple_def lex_pair_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4375 |
split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4376 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4377 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4378 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4379 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4380 |
*) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4381 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4382 |
lemma [simp]: "inv_check_left_moving (as, abc_lm_s am n (abc_lm_v am n - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4383 |
(start_of (layout_of aprog) as + 2 * n + 11, [], Oc # xs) ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4384 |
apply(simp add: inv_check_left_moving.simps inv_check_left_moving_in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4385 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4386 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4387 |
lemma dec_inv_stop2_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4388 |
"\<lbrakk>abc_fetch as aprog = Some (Dec n e); abc_lm_v am n > 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4389 |
\<forall>na. \<not> (\<lambda>(s, l, r) (ss, n', ires'). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4390 |
s = start_of (layout_of aprog) as + 2 * n + 16) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4391 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4392 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4393 |
start_of (layout_of aprog) as - Suc 0) na) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4394 |
(start_of (layout_of aprog) as, n, ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4395 |
dec_inv_2 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4396 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4397 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4398 |
start_of (layout_of aprog) as - Suc 0) na) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4399 |
\<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4400 |
dec_inv_2 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4401 |
(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4402 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4403 |
start_of (layout_of aprog) as - Suc 0) (Suc na)) ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4404 |
((t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4405 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4406 |
start_of (layout_of aprog) as - Suc 0) (Suc na), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4407 |
start_of (layout_of aprog) as, n, ires), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4408 |
t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4409 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4410 |
start_of (layout_of aprog) as - Suc 0) na, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4411 |
start_of (layout_of aprog) as, n, ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4412 |
\<in> abc_dec_2_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4413 |
apply(subgoal_tac "start_of (layout_of aprog) as > 0") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4414 |
apply(rule allI, rule impI, simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4415 |
apply(case_tac "(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4416 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4417 |
start_of (layout_of aprog) as - Suc 0) na)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4418 |
apply(auto split:if_splits simp add:t_step.simps dec_inv_2.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4419 |
tactic {* ALLGOALS (resolve_tac [@{thm fetch_intro}]) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4420 |
apply(simp_all add:dec_fetch_simps new_tape.simps dec_inv_2.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4421 |
apply(auto simp add: abc_dec_2_LE_def lex_square_def lex_triple_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4422 |
lex_pair_def split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4423 |
apply(auto intro: dec_false_2_b dec_false_2) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4424 |
apply(rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4425 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4426 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4427 |
lemma dec_stop2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4428 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4429 |
dec_inv_2 ly n e (as, am) (start_of ly as + 1, l, r) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4430 |
abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4431 |
abc_lm_v am n > 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4432 |
(\<exists> stp. (\<lambda> (s', l', r'). s' = start_of ly (Suc as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4433 |
dec_inv_2 ly n e (as, am) (s', l', r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4434 |
(t_steps (start_of ly as+1, l, r) (ci ly (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4435 |
(Dec n e), start_of ly as - Suc 0) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4436 |
apply(insert halt_lemma2[of abc_dec_2_LE |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4437 |
"\<lambda> ((s, l, r), ss, n', ires'). s = start_of ly (Suc as)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4438 |
"(\<lambda> stp. (t_steps (start_of ly as + 1, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4439 |
(ci ly (start_of ly as) (Dec n e), start_of ly as - Suc 0) stp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4440 |
start_of ly as, n, ires))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4441 |
"(\<lambda> ((s, l, r), ss, n, ires'). dec_inv_2 ly n e (as, am) (s, l, r) ires')"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4442 |
apply(insert wf_dec_2_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4443 |
apply(insert dec_inv_stop2_pre[of as aprog n e am l r], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4444 |
simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4445 |
apply(erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4446 |
apply(rule_tac x = na in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4447 |
apply(case_tac "(t_steps (Suc (start_of (layout_of aprog) as), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4448 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4449 |
start_of (layout_of aprog) as - Suc 0) na)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4450 |
case_tac b, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4451 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4452 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4453 |
lemma dec_inv_stop_cond1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4454 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4455 |
dec_inv_1 ly n e (as, lm) (s, (l, r)) ires; s = start_of ly e; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4456 |
abc_fetch as aprog = Some (Dec n e); abc_lm_v lm n = 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4457 |
\<Longrightarrow> crsp_l ly (e, abc_lm_s lm n 0) (s, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4458 |
apply(simp add: dec_inv_1.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4459 |
apply(auto simp: crsp_l.simps inv_stop.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4460 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4461 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4462 |
lemma dec_inv_stop_cond2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4463 |
"\<lbrakk>ly = layout_of aprog; s = start_of ly (Suc as); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4464 |
dec_inv_2 ly n e (as, lm) (s, (l, r)) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4465 |
abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4466 |
abc_lm_v lm n > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4467 |
\<Longrightarrow> crsp_l ly (Suc as, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4468 |
abc_lm_s lm n (abc_lm_v lm n - Suc 0)) (s, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4469 |
apply(simp add: dec_inv_2.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4470 |
apply(auto simp: crsp_l.simps inv_stop.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4471 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4472 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4473 |
lemma [simp]: "(case Bk\<^bsup>rn\<^esup> of [] \<Rightarrow> Bk | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4474 |
Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc) = Bk" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4475 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4476 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4477 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4478 |
lemma [simp]: "t_steps tc (p,off) (m + n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4479 |
t_steps (t_steps tc (p, off) m) (p, off) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4480 |
apply(induct m arbitrary: n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4481 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4482 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4483 |
fix m n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4484 |
assume h1: "\<And>n. t_steps tc (p, off) (m + n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4485 |
t_steps (t_steps tc (p, off) m) (p, off) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4486 |
hence h2: "t_steps tc (p, off) (Suc m + n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4487 |
t_steps tc (p, off) (m + Suc n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4488 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4489 |
from h1 and this show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4490 |
"t_steps tc (p, off) (Suc m + n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4491 |
t_steps (t_steps tc (p, off) (Suc m)) (p, off) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4492 |
proof(simp only: h2, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4493 |
have h3: "(t_step (t_steps tc (p, off) m) (p, off)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4494 |
(t_steps (t_step tc (p, off)) (p, off) m)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4495 |
apply(simp add: t_steps.simps[THEN sym] t_steps_ind[THEN sym]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4496 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4497 |
from h3 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4498 |
"t_steps (t_step (t_steps tc (p, off) m) (p, off)) (p, off) n = t_steps (t_steps (t_step tc (p, off)) (p, off) m) (p, off) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4499 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4500 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4501 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4502 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4503 |
lemma [simp]: " abc_fetch as aprog = Some (Dec n e) \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4504 |
Suc (start_of (layout_of aprog) as) \<noteq> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4505 |
start_of (layout_of aprog) e" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4506 |
apply(case_tac "e = as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4507 |
apply(case_tac "e < as") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4508 |
apply(drule_tac a = e and b = as and ly = "layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4509 |
in start_of_le, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4510 |
apply(drule_tac start_of_ge, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4511 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4512 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4513 |
lemma [simp]: "inv_locate_b (as, []) (0, Oc # Bk # Bk # ires, Bk\<^bsup>rn - Suc 0\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4514 |
apply(auto simp: inv_locate_b.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4515 |
apply(rule_tac x = "[]" in exI, rule_tac x = "Suc 0" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4516 |
rule_tac x = 0 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4517 |
apply(rule_tac x = "Suc 0" in exI, rule_tac x = 0 in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4518 |
apply(case_tac rn, simp, case_tac nat, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4519 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4520 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4521 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4522 |
"inv_locate_n_b (as, []) (0, Oc # Bk # Bk # ires, Bk\<^bsup>rn - Suc 0\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4523 |
apply(auto simp: inv_locate_n_b.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4524 |
apply(case_tac rn, simp, case_tac nat, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4525 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4526 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4527 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4528 |
"abc_fetch as aprog = Some (Dec n e) \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4529 |
dec_inv_1 (layout_of aprog) n e (as, []) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4530 |
(Suc (start_of (layout_of aprog) as), Oc # Bk # Bk # ires, Bk\<^bsup>rn - Suc 0\<^esup>) ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4531 |
\<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4532 |
dec_inv_2 (layout_of aprog) n e (as, []) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4533 |
(Suc (start_of (layout_of aprog) as), Oc # Bk # Bk # ires, Bk\<^bsup>rn - Suc 0\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4534 |
apply(simp add: dec_inv_1.simps dec_inv_2.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4535 |
apply(case_tac n, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4536 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4537 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4538 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4539 |
"\<lbrakk>am \<noteq> []; <am> = Oc # r'; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4540 |
abc_fetch as aprog = Some (Dec n e)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4541 |
\<Longrightarrow> inv_locate_b (as, am) (0, Oc # Bk # Bk # ires, r' @ Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4542 |
apply(auto simp: inv_locate_b.simps in_middle.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4543 |
apply(rule_tac x = "tl am" in exI, rule_tac x = 0 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4544 |
rule_tac x = "hd am" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4545 |
apply(rule_tac x = "Suc 0" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4546 |
apply(rule_tac x = "hd am" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4547 |
apply(case_tac am, simp, case_tac list, auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4548 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4549 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4550 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4551 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4552 |
"\<lbrakk><am> = Oc # r'; abc_fetch as aprog = Some (Dec n e)\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4553 |
inv_locate_n_b (as, am) (0, Oc # Bk # Bk # ires, r' @ Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4554 |
apply(auto simp: inv_locate_n_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4555 |
apply(rule_tac x = "tl am" in exI, rule_tac x = "hd am" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4556 |
apply(case_tac [!] am, auto simp: tape_of_nl_abv tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4557 |
apply(case_tac [!]list, auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4558 |
apply(case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4559 |
apply(erule_tac x = nat in allE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4560 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4561 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4562 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4563 |
"\<lbrakk>am \<noteq> []; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4564 |
<am> = Oc # r'; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4565 |
abc_fetch as aprog = Some (Dec n e)\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4566 |
dec_inv_1 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4567 |
(Suc (start_of (layout_of aprog) as), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4568 |
Oc # Bk # Bk # ires, r' @ Bk\<^bsup>rn\<^esup>) ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4569 |
dec_inv_2 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4570 |
(Suc (start_of (layout_of aprog) as), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4571 |
Oc # Bk # Bk # ires, r' @ Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4572 |
apply(simp add: dec_inv_1.simps dec_inv_2.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4573 |
apply(case_tac n, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4574 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4575 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4576 |
lemma [simp]: "am \<noteq> [] \<Longrightarrow> \<exists>r'. <am::nat list> = Oc # r'" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4577 |
apply(case_tac am, simp, case_tac list) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4578 |
apply(auto simp: tape_of_nl_abv tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4579 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4580 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4581 |
lemma [simp]: "start_of (layout_of aprog) as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4582 |
(fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4583 |
(start_of (layout_of aprog) as) (Dec n e)) (Suc 0) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4584 |
= (W1, start_of (layout_of aprog) as)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4585 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4586 |
nth_of.simps tshift.simps nth_append Suc_pre tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4587 |
thm findnth_nth |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4588 |
apply(insert findnth_nth[of 0 n 0], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4589 |
apply(simp add: findnth.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4590 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4591 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4592 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4593 |
"start_of (layout_of aprog) as > 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4594 |
\<Longrightarrow> (t_step (start_of (layout_of aprog) as, Bk # Bk # ires, Bk\<^bsup>rn\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4595 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4596 |
start_of (layout_of aprog) as - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4597 |
= (start_of (layout_of aprog) as, Bk # Bk # ires, Oc # Bk\<^bsup>rn- Suc 0\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4598 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4599 |
apply(case_tac "start_of (layout_of aprog) as", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4600 |
auto simp: new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4601 |
apply(case_tac rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4602 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4603 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4604 |
lemma [simp]: "start_of (layout_of aprog) as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4605 |
(fetch (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4606 |
(Dec n e)) (Suc 0) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4607 |
= (R, Suc (start_of (layout_of aprog) as))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4608 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4609 |
apply(auto simp: ci.simps findnth.simps fetch.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4610 |
nth_of.simps tshift.simps nth_append |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4611 |
Suc_pre tdec_b_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4612 |
apply(insert findnth_nth[of 0 n "Suc 0"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4613 |
apply(simp add: findnth.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4614 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4615 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4616 |
lemma [simp]: "start_of (layout_of aprog) as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4617 |
(t_step (start_of (layout_of aprog) as, Bk # Bk # ires, Oc # Bk\<^bsup>rn - Suc 0\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4618 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4619 |
start_of (layout_of aprog) as - Suc 0)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4620 |
(Suc (start_of (layout_of aprog) as), Oc # Bk # Bk # ires, Bk\<^bsup>rn-Suc 0\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4621 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4622 |
apply(case_tac "start_of (layout_of aprog) as", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4623 |
auto simp: new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4624 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4625 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4626 |
lemma [simp]: "start_of (layout_of aprog) as > 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4627 |
t_step (start_of (layout_of aprog) as, Bk # Bk # ires, Oc # r' @ Bk\<^bsup>rn\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4628 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4629 |
start_of (layout_of aprog) as - Suc 0) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4630 |
(Suc (start_of (layout_of aprog) as), Oc # Bk # Bk # ires, r' @ Bk\<^bsup>rn\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4631 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4632 |
apply(case_tac "start_of (layout_of aprog) as", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4633 |
auto simp: new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4634 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4635 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4636 |
lemma crsp_next_state: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4637 |
"\<lbrakk>crsp_l (layout_of aprog) (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4638 |
abc_fetch as aprog = Some (Dec n e)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4639 |
\<Longrightarrow> \<exists> stp' > 0. (\<lambda> (s, l, r). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4640 |
(s = Suc (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4641 |
\<and> (dec_inv_1 (layout_of aprog) n e (as, am) (s, l, r) ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4642 |
\<and> (dec_inv_2 (layout_of aprog) n e (as, am) (s, l, r)) ires)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4643 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4644 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp')" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4645 |
apply(subgoal_tac "start_of (layout_of aprog) as > 0") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4646 |
apply(case_tac tc, case_tac b, auto simp: crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4647 |
apply(case_tac "am = []", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4648 |
apply(rule_tac x = "Suc (Suc 0)" in exI, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4649 |
proof- |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4650 |
fix rn |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4651 |
assume h1: "am \<noteq> []" "abc_fetch as aprog = Some (Dec n e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4652 |
"start_of (layout_of aprog) as > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4653 |
hence h2: "\<exists> r'. <am> = Oc # r'" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4654 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4655 |
from h1 and h2 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4656 |
"\<exists>stp'>0. case t_steps (start_of (layout_of aprog) as, Bk # Bk # ires, <am> @ Bk\<^bsup>rn\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4657 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4658 |
start_of (layout_of aprog) as - Suc 0) stp' of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4659 |
(s, ab) \<Rightarrow> s = Suc (start_of (layout_of aprog) as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4660 |
dec_inv_1 (layout_of aprog) n e (as, am) (s, ab) ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4661 |
dec_inv_2 (layout_of aprog) n e (as, am) (s, ab) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4662 |
proof(erule_tac exE, simp, rule_tac x = "Suc 0" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4663 |
simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4664 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4665 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4666 |
assume "abc_fetch as aprog = Some (Dec n e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4667 |
thus "0 < start_of (layout_of aprog) as" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4668 |
apply(insert startof_not0[of "layout_of aprog" as], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4669 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4670 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4671 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4672 |
lemma dec_crsp_ex1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4673 |
"\<lbrakk>crsp_l (layout_of aprog) (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4674 |
abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4675 |
abc_lm_v am n = 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4676 |
\<Longrightarrow> \<exists>stp > 0. crsp_l (layout_of aprog) (e, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4677 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4678 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4679 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4680 |
assume h1: "crsp_l (layout_of aprog) (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4681 |
"abc_fetch as aprog = Some (Dec n e)" "abc_lm_v am n = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4682 |
hence h2: "\<exists> stp' > 0. (\<lambda> (s, l, r). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4683 |
(s = Suc (start_of (layout_of aprog) as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4684 |
(dec_inv_1 (layout_of aprog) n e (as, am) (s, l, r)) ires)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4685 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4686 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp')" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4687 |
apply(insert crsp_next_state[of aprog as am tc ires n e], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4688 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4689 |
from h1 and h2 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4690 |
"\<exists>stp > 0. crsp_l (layout_of aprog) (e, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4691 |
(t_steps tc (ci (layout_of aprog) (start_of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4692 |
(layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4693 |
start_of (layout_of aprog) as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4694 |
proof(erule_tac exE, case_tac "(t_steps tc (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4695 |
(start_of (layout_of aprog) as) (Dec n e), start_of |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4696 |
(layout_of aprog) as - Suc 0) stp')", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4697 |
fix stp' a b c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4698 |
assume h3: "stp' > 0 \<and> a = Suc (start_of (layout_of aprog) as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4699 |
dec_inv_1 (layout_of aprog) n e (as, am) (a, b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4700 |
"abc_fetch as aprog = Some (Dec n e)" "abc_lm_v am n = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4701 |
"t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4702 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4703 |
= (Suc (start_of (layout_of aprog) as), b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4704 |
thus "\<exists>stp > 0. crsp_l (layout_of aprog) (e, abc_lm_s am n 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4705 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4706 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4707 |
proof(erule_tac conjE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4708 |
assume "dec_inv_1 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4709 |
(Suc (start_of (layout_of aprog) as), b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4710 |
"abc_fetch as aprog = Some (Dec n e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4711 |
"abc_lm_v am n = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4712 |
" t_steps tc (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4713 |
(start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4714 |
start_of (layout_of aprog) as - Suc 0) stp' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4715 |
= (Suc (start_of (layout_of aprog) as), b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4716 |
hence h4: "\<exists>stp. (\<lambda>(s', l', r'). s' = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4717 |
start_of (layout_of aprog) e \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4718 |
dec_inv_1 (layout_of aprog) n e (as, am) (s', l', r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4719 |
(t_steps (start_of (layout_of aprog) as + 1, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4720 |
(ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4721 |
(start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4722 |
start_of (layout_of aprog) as - Suc 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4723 |
apply(rule_tac dec_inv_stop1, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4724 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4725 |
from h3 and h4 show ?thesis |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4726 |
apply(erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4727 |
apply(rule_tac x = "stp' + stp" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4728 |
apply(case_tac "(t_steps (Suc (start_of (layout_of aprog) as), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4729 |
b, c) (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4730 |
(start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4731 |
start_of (layout_of aprog) as - Suc 0) stp)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4732 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4733 |
apply(rule_tac dec_inv_stop_cond1, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4734 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4735 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4736 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4737 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4738 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4739 |
lemma dec_crsp_ex2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4740 |
"\<lbrakk>crsp_l (layout_of aprog) (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4741 |
abc_fetch as aprog = Some (Dec n e); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4742 |
0 < abc_lm_v am n\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4743 |
\<Longrightarrow> \<exists>stp > 0. crsp_l (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4744 |
(Suc as, abc_lm_s am n (abc_lm_v am n - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4745 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4746 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4747 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4748 |
assume h1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4749 |
"crsp_l (layout_of aprog) (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4750 |
"abc_fetch as aprog = Some (Dec n e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4751 |
"abc_lm_v am n > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4752 |
hence h2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4753 |
"\<exists> stp' > 0. (\<lambda> (s, l, r). (s = Suc (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4754 |
\<and> (dec_inv_2 (layout_of aprog) n e (as, am) (s, l, r)) ires)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4755 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4756 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp')" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4757 |
apply(insert crsp_next_state[of aprog as am tc ires n e], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4758 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4759 |
from h1 and h2 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4760 |
"\<exists>stp >0. crsp_l (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4761 |
(Suc as, abc_lm_s am n (abc_lm_v am n - Suc 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4762 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4763 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4764 |
proof(erule_tac exE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4765 |
case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4766 |
"(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4767 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp')", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4768 |
fix stp' a b c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4769 |
assume h3: "0 < stp' \<and> a = Suc (start_of (layout_of aprog) as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4770 |
dec_inv_2 (layout_of aprog) n e (as, am) (a, b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4771 |
"abc_fetch as aprog = Some (Dec n e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4772 |
"abc_lm_v am n > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4773 |
"t_steps tc (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4774 |
(start_of (layout_of aprog) as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4775 |
start_of (layout_of aprog) as - Suc 0) stp' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4776 |
= (Suc (start_of (layout_of aprog) as), b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4777 |
thus "?thesis" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4778 |
proof(erule_tac conjE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4779 |
assume |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4780 |
"dec_inv_2 (layout_of aprog) n e (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4781 |
(Suc (start_of (layout_of aprog) as), b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4782 |
"abc_fetch as aprog = Some (Dec n e)" "abc_lm_v am n > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4783 |
"t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4784 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4785 |
= (Suc (start_of (layout_of aprog) as), b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4786 |
hence h4: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4787 |
"\<exists>stp. (\<lambda>(s', l', r'). s' = start_of (layout_of aprog) (Suc as) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4788 |
dec_inv_2 (layout_of aprog) n e (as, am) (s', l', r') ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4789 |
(t_steps (start_of (layout_of aprog) as + 1, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4790 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4791 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4792 |
apply(rule_tac dec_stop2, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4793 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4794 |
from h3 and h4 show ?thesis |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4795 |
apply(erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4796 |
apply(rule_tac x = "stp' + stp" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4797 |
apply(case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4798 |
"(t_steps (Suc (start_of (layout_of aprog) as), b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4799 |
(ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4800 |
(Dec n e), start_of (layout_of aprog) as - Suc 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4801 |
,simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4802 |
apply(rule_tac dec_inv_stop_cond2, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4803 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4804 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4805 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4806 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4807 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4808 |
lemma dec_crsp_ex_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4809 |
"\<lbrakk>ly = layout_of aprog; crsp_l ly (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4810 |
abc_fetch as aprog = Some (Dec n e)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4811 |
\<Longrightarrow> \<exists>stp > 0. crsp_l ly (abc_step_l (as, am) (Some (Dec n e))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4812 |
(t_steps tc (ci (layout_of aprog) (start_of ly as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4813 |
start_of ly as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4814 |
apply(auto simp: abc_step_l.simps intro: dec_crsp_ex2 dec_crsp_ex1) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4815 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4816 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4817 |
lemma dec_crsp_ex: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4818 |
assumes layout: -- {* There is an Abacus program @{text "aprog"} with layout @{text "ly"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4819 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4820 |
and dec: -- {* There is an @{text "Dec n e"} instruction at postion @{text "as"} of @{text "aprog"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4821 |
"abc_fetch as aprog = Some (Dec n e)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4822 |
and correspond: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4823 |
-- {* Abacus configuration @{text "(as, am)"} is in correspondence with TM |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4824 |
configuration @{text "tc"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4825 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4826 |
"crsp_l ly (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4827 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4828 |
"\<exists>stp > 0. crsp_l ly (abc_step_l (as, am) (Some (Dec n e))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4829 |
(t_steps tc (ci (layout_of aprog) (start_of ly as) (Dec n e), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4830 |
start_of ly as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4831 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4832 |
from dec_crsp_ex_pre layout dec correspond show ?thesis by blast |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4833 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4834 |
|
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
4835 |
(* |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
4836 |
subsection {* Compilation of @{text "Goto n"}*} |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
4837 |
*) |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
4838 |
|
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4839 |
lemma goto_fetch: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4840 |
"fetch (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4841 |
(start_of (layout_of aprog) as) (Goto n)) (Suc 0) b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4842 |
= (Nop, start_of (layout_of aprog) n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4843 |
apply(auto simp: ci.simps fetch.simps nth_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4844 |
split: block.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4845 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4846 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4847 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4848 |
Correctness of complied @{text "Goto n"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4849 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4850 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4851 |
lemma goto_crsp_ex_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4852 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4853 |
crsp_l ly (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4854 |
abc_fetch as aprog = Some (Goto n)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4855 |
\<Longrightarrow> \<exists>stp > 0. crsp_l ly (abc_step_l (as, am) (Some (Goto n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4856 |
(t_steps tc (ci (layout_of aprog) (start_of ly as) (Goto n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4857 |
start_of ly as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4858 |
apply(rule_tac x = 1 in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4859 |
apply(simp add: abc_step_l.simps t_steps.simps t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4860 |
apply(case_tac tc, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4861 |
apply(subgoal_tac "a = start_of (layout_of aprog) as", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4862 |
apply(subgoal_tac "start_of (layout_of aprog) as > 0", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4863 |
apply(auto simp: goto_fetch new_tape.simps crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4864 |
apply(rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4865 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4866 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4867 |
lemma goto_crsp_ex: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4868 |
assumes layout: "ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4869 |
and goto: "abc_fetch as aprog = Some (Goto n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4870 |
and correspondence: "crsp_l ly (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4871 |
shows "\<exists>stp>0. crsp_l ly (abc_step_l (as, am) (Some (Goto n))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4872 |
(t_steps tc (ci (layout_of aprog) (start_of ly as) (Goto n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4873 |
start_of ly as - Suc 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4874 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4875 |
from goto_crsp_ex_pre and layout goto correspondence show "?thesis" by blast |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4876 |
qed |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
4877 |
|
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
4878 |
subsection {* |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4879 |
The correctness of the compiler |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4880 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4881 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4882 |
declare abc_step_l.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4883 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4884 |
lemma tm_crsp_ex: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4885 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4886 |
crsp_l ly (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4887 |
as < length aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4888 |
abc_fetch as aprog = Some ins\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4889 |
\<Longrightarrow> \<exists> n > 0. crsp_l ly (abc_step_l (as,am) (Some ins)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4890 |
(t_steps tc (ci (layout_of aprog) (start_of ly as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4891 |
(ins), (start_of ly as) - (Suc 0)) n) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4892 |
apply(case_tac "ins", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4893 |
apply(auto intro: inc_crsp_ex_pre dec_crsp_ex goto_crsp_ex) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4894 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4895 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4896 |
lemma start_of_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4897 |
"n < length aprog \<Longrightarrow> start_of (layout_of aprog) n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4898 |
= start_of (layout_of (butlast aprog)) n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4899 |
apply(induct n, simp add: start_of.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4900 |
apply(simp add: layout_of.simps start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4901 |
apply(subgoal_tac "n < length aprog - Suc 0", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4902 |
apply(subgoal_tac "(aprog ! n) = (butlast aprog ! n)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4903 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4904 |
fix n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4905 |
assume h1: "Suc n < length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4906 |
thus "aprog ! n = butlast aprog ! n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4907 |
apply(case_tac "length aprog", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4908 |
apply(insert nth_append[of "butlast aprog" "[last aprog]" n]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4909 |
apply(subgoal_tac "(butlast aprog @ [last aprog]) = aprog") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4910 |
apply(simp split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4911 |
apply(rule append_butlast_last_id, case_tac aprog, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4912 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4913 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4914 |
fix n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4915 |
assume "Suc n < length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4916 |
thus "n < length aprog - Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4917 |
apply(case_tac aprog, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4918 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4919 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4920 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4921 |
lemma zip_eq: "xs = ys \<Longrightarrow> zip xs zs = zip ys zs" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4922 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4923 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4924 |
lemma tpairs_of_append_iff: "length aprog = Suc n \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4925 |
tpairs_of aprog = tpairs_of (butlast aprog) @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4926 |
[(start_of (layout_of aprog) n, aprog ! n)]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4927 |
apply(simp add: tpairs_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4928 |
apply(insert zip_append[of "map (start_of (layout_of aprog)) [0..<n]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4929 |
"butlast aprog" "[start_of (layout_of aprog) n]" "[last aprog]"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4930 |
apply(simp del: zip_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4931 |
apply(subgoal_tac "(butlast aprog @ [last aprog]) = aprog", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4932 |
apply(rule_tac zip_eq, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4933 |
apply(rule_tac start_of_pre, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4934 |
apply(insert last_conv_nth[of aprog], case_tac aprog, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4935 |
apply(rule append_butlast_last_id, case_tac aprog, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4936 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4937 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4938 |
lemma [simp]: "list_all (\<lambda>(n, tm). abacus.t_ncorrect (ci layout n tm)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4939 |
(zip (map (start_of layout) [0..<length aprog]) aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4940 |
proof(induct "length aprog" arbitrary: aprog, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4941 |
fix x aprog |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4942 |
assume ind: "\<And>aprog. x = length aprog \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4943 |
list_all (\<lambda>(n, tm). abacus.t_ncorrect (ci layout n tm)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4944 |
(zip (map (start_of layout) [0..<length aprog]) aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4945 |
and h: "Suc x = length (aprog::abc_inst list)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4946 |
have g1: "list_all (\<lambda>(n, tm). abacus.t_ncorrect (ci layout n tm)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4947 |
(zip (map (start_of layout) [0..<length (butlast aprog)]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4948 |
(butlast aprog))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4949 |
using h |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4950 |
apply(rule_tac ind, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4951 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4952 |
have g2: "(map (start_of layout) [0..<length aprog]) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4953 |
map (start_of layout) ([0..<length aprog - 1] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4954 |
@ [length aprog - 1])" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4955 |
using h |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4956 |
apply(case_tac aprog, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4957 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4958 |
have "\<exists> xs a. aprog = xs @ [a]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4959 |
using h |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4960 |
apply(rule_tac x = "butlast aprog" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4961 |
rule_tac x = "last aprog" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4962 |
apply(case_tac "aprog = []", simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4963 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4964 |
from this obtain xs where "\<exists> a. aprog = xs @ [a]" .. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4965 |
from this obtain a where g3: "aprog = xs @ [a]" .. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4966 |
from g1 and g2 and g3 show "list_all (\<lambda>(n, tm). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4967 |
abacus.t_ncorrect (ci layout n tm)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4968 |
(zip (map (start_of layout) [0..<length aprog]) aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4969 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4970 |
apply(auto simp: t_ncorrect.simps ci.simps tshift.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4971 |
tinc_b_def tdec_b_def split: abc_inst.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4972 |
apply arith+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4973 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4974 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4975 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4976 |
lemma [intro]: "abc2t_correct aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4977 |
apply(simp add: abc2t_correct.simps tpairs_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4978 |
split: abc_inst.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4979 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4980 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4981 |
lemma as_out: "\<lbrakk>ly = layout_of aprog; tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4982 |
crsp_l ly (as, am) tc ires; length aprog \<le> as\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4983 |
\<Longrightarrow> abc_step_l (as, am) (abc_fetch as aprog) = (as, am)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4984 |
apply(simp add: abc_fetch.simps abc_step_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4985 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4986 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4987 |
lemma tm_merge_ex: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4988 |
"\<lbrakk>crsp_l (layout_of aprog) (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4989 |
as < length aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4990 |
abc_fetch as aprog = Some a; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4991 |
abc2t_correct aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4992 |
crsp_l (layout_of aprog) (abc_step_l (as, am) (Some a)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4993 |
(t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4994 |
a, start_of (layout_of aprog) as - Suc 0) n) ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4995 |
n > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4996 |
\<Longrightarrow> \<exists>stp > 0. crsp_l (layout_of aprog) (abc_step_l (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4997 |
(Some a)) (t_steps tc (tm_of aprog, 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4998 |
apply(case_tac "(t_steps tc (ci (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
4999 |
(start_of (layout_of aprog) as) a, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5000 |
start_of (layout_of aprog) as - Suc 0) n)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5001 |
apply(case_tac "(abc_step_l (as, am) (Some a))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5002 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5003 |
fix aa b c aaa ba |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5004 |
assume h: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5005 |
"crsp_l (layout_of aprog) (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5006 |
"as < length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5007 |
"abc_fetch as aprog = Some a" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5008 |
"crsp_l (layout_of aprog) (aaa, ba) (aa, b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5009 |
"abc2t_correct aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5010 |
"n>0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5011 |
"t_steps tc (ci (layout_of aprog) (start_of (layout_of aprog) as) a, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5012 |
start_of (layout_of aprog) as - Suc 0) n = (aa, b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5013 |
"abc_step_l (as, am) (Some a) = (aaa, ba)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5014 |
hence "aa = start_of (layout_of aprog) aaa" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5015 |
apply(simp add: crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5016 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5017 |
from this and h show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5018 |
"\<exists>stp > 0. crsp_l (layout_of aprog) (aaa, ba) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5019 |
(t_steps tc (tm_of aprog, 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5020 |
apply(insert tms_out_ex[of "layout_of aprog" aprog |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5021 |
"tm_of aprog" as am tc ires a n aa b c aaa ba], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5022 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5023 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5024 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5025 |
lemma crsp_inside: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5026 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5027 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5028 |
crsp_l ly (as, am) tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5029 |
as < length aprog\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5030 |
(\<exists> stp > 0. crsp_l ly (abc_step_l (as,am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5031 |
(t_steps tc (tprog, 0) stp) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5032 |
apply(case_tac "abc_fetch as aprog", simp add: abc_fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5033 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5034 |
fix a |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5035 |
assume "ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5036 |
"tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5037 |
"crsp_l ly (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5038 |
"as < length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5039 |
"abc_fetch as aprog = Some a" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5040 |
thus "\<exists>stp > 0. crsp_l ly (abc_step_l (as, am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5041 |
(abc_fetch as aprog)) (t_steps tc (tprog, 0) stp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5042 |
proof(insert tm_crsp_ex[of ly aprog as am tc ires a], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5043 |
auto intro: tm_merge_ex) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5044 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5045 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5046 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5047 |
lemma crsp_outside: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5048 |
"\<lbrakk>ly = layout_of aprog; tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5049 |
crsp_l ly (as, am) tc ires; as \<ge> length aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5050 |
\<Longrightarrow> (\<exists> stp. crsp_l ly (abc_step_l (as,am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5051 |
(t_steps tc (tprog, 0) stp) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5052 |
apply(subgoal_tac "abc_step_l (as, am) (abc_fetch as aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5053 |
= (as, am)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5054 |
apply(rule_tac x = 0 in exI, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5055 |
apply(rule as_out, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5056 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5057 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5058 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5059 |
Single-step correntess of the compiler. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5060 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5061 |
lemma astep_crsp_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5062 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5063 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5064 |
crsp_l ly (as, am) tc ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5065 |
\<Longrightarrow> (\<exists> stp. crsp_l ly (abc_step_l (as,am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5066 |
(abc_fetch as aprog)) (t_steps tc (tprog, 0) stp) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5067 |
apply(case_tac "as < length aprog") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5068 |
apply(drule_tac crsp_inside, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5069 |
apply(rule_tac crsp_outside, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5070 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5071 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5072 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5073 |
Single-step correntess of the compiler. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5074 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5075 |
lemma astep_crsp_pre1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5076 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5077 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5078 |
crsp_l ly (as, am) tc ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5079 |
\<Longrightarrow> (\<exists> stp. crsp_l ly (abc_step_l (as,am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5080 |
(abc_fetch as aprog)) (t_steps tc (tprog, 0) stp) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5081 |
apply(case_tac "as < length aprog") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5082 |
apply(drule_tac crsp_inside, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5083 |
apply(rule_tac crsp_outside, simp+) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5084 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5085 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5086 |
lemma astep_crsp: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5087 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5088 |
-- {* There is a Abacus program @{text "aprog"} with layout @{text "ly"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5089 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5090 |
and compiled: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5091 |
-- {* @{text "tprog"} is the TM compiled from @{text "aprog"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5092 |
"tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5093 |
and corresponds: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5094 |
-- {* Abacus configuration @{text "(as, am)"} is in correspondence with TM configuration |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5095 |
@{text "tc"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5096 |
"crsp_l ly (as, am) tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5097 |
-- {* One step execution of @{text "aprog"} can be simulated by multi-step execution |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5098 |
of @{text "tprog"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5099 |
shows "(\<exists> stp. crsp_l ly (abc_step_l (as,am) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5100 |
(abc_fetch as aprog)) (t_steps tc (tprog, 0) stp) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5101 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5102 |
from astep_crsp_pre1 [OF layout compiled corresponds] show ?thesis . |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5103 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5104 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5105 |
lemma steps_crsp_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5106 |
"\<lbrakk>ly = layout_of aprog; tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5107 |
crsp_l ly ac tc ires; ac' = abc_steps_l ac aprog n\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5108 |
(\<exists> n'. crsp_l ly ac' (t_steps tc (tprog, 0) n') ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5109 |
apply(induct n arbitrary: ac' ac tc, simp add: abc_steps_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5110 |
apply(rule_tac x = 0 in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5111 |
apply(case_tac ac, simp add: abc_steps_l.simps t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5112 |
apply(case_tac ac, simp add: abc_steps_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5113 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5114 |
"(\<exists> stp. crsp_l ly (abc_step_l (a, b) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5115 |
(abc_fetch a aprog)) (t_steps tc (tprog, 0) stp) ires)") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5116 |
apply(erule exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5117 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5118 |
"\<exists>n'. crsp_l (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5119 |
(abc_steps_l (abc_step_l (a, b) (abc_fetch a aprog)) aprog n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5120 |
(t_steps ((t_steps tc (tprog, 0) stp)) (tm_of aprog, 0) n') ires") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5121 |
apply(erule exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5122 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5123 |
"t_steps (t_steps tc (tprog, 0) stp) (tm_of aprog, 0) n' = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5124 |
t_steps tc (tprog, 0) (stp + n')") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5125 |
apply(rule_tac x = "stp + n'" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5126 |
apply(auto intro: astep_crsp simp: t_step_add) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5127 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5128 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5129 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5130 |
Multi-step correctess of the compiler. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5131 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5132 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5133 |
lemma steps_crsp: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5134 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5135 |
-- {* There is an Abacus program @{text "aprog"} with layout @{text "ly"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5136 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5137 |
and compiled: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5138 |
-- {* @{text "tprog"} is the TM compiled from @{text "aprog"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5139 |
"tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5140 |
and correspond: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5141 |
-- {* Abacus configuration @{text "ac"} is in correspondence with TM configuration @{text "tc"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5142 |
"crsp_l ly ac tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5143 |
and execution: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5144 |
-- {* @{text "ac'"} is the configuration obtained from @{text "n"}-step execution |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5145 |
of @{text "aprog"} starting from configuration @{text "ac"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5146 |
"ac' = abc_steps_l ac aprog n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5147 |
-- {* There exists steps @{text "n'"} steps, after these steps of execution, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5148 |
the Turing configuration such obtained is in correspondence with @{text "ac'"} *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5149 |
shows "(\<exists> n'. crsp_l ly ac' (t_steps tc (tprog, 0) n') ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5150 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5151 |
from steps_crsp_pre [OF layout compiled correspond execution] show ?thesis . |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5152 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5153 |
|
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
5154 |
subsection {* The Mop-up machine *} |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5155 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5156 |
fun mop_bef :: "nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5157 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5158 |
"mop_bef 0 = []" | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5159 |
"mop_bef (Suc n) = mop_bef n @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5160 |
[(R, 2*n + 3), (W0, 2*n + 2), (R, 2*n + 1), (W1, 2*n + 2)]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5161 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5162 |
definition mp_up :: "tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5163 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5164 |
"mp_up \<equiv> [(R, 2), (R, 1), (L, 5), (W0, 3), (R, 4), (W0, 3), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5165 |
(R, 2), (W0, 3), (L, 5), (L, 6), (R, 0), (L, 6)]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5166 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5167 |
fun tMp :: "nat \<Rightarrow> nat \<Rightarrow> tprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5168 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5169 |
"tMp n off = tshift (mop_bef n @ tshift mp_up (2*n)) off" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5170 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5171 |
declare mp_up_def[simp del] tMp.simps[simp del] mop_bef.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5172 |
(**********Begin: equiv among aba and turing***********) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5173 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5174 |
lemma tm_append_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5175 |
"\<lbrakk>t_ncorrect tp1; t_step tc (tp1, 0) = (s, l, r); s \<noteq> 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5176 |
\<Longrightarrow> t_step tc (tp1 @ tp2, 0) = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5177 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5178 |
apply(case_tac tc, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5179 |
apply(case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5180 |
"(fetch tp1 a (case c of [] \<Rightarrow> Bk | |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5181 |
Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5182 |
apply(case_tac a, simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5183 |
apply(simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5184 |
apply(case_tac c, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5185 |
apply(case_tac [!] "ab::block") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5186 |
apply(auto simp: nth_of.simps nth_append t_ncorrect.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5187 |
split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5188 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5189 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5190 |
lemma state0_ind: "t_steps (0, l, r) (tp, 0) stp = (0, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5191 |
apply(induct stp, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5192 |
apply(simp add: t_steps.simps t_step.simps fetch.simps new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5193 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5194 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5195 |
lemma tm_append_steps: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5196 |
"\<lbrakk>t_ncorrect tp1; t_steps tc (tp1, 0) stp = (s, l ,r); s \<noteq> 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5197 |
\<Longrightarrow> t_steps tc (tp1 @ tp2, 0) stp = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5198 |
apply(induct stp arbitrary: tc s l r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5199 |
apply(case_tac tc, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5200 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5201 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5202 |
fix stp tc s l r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5203 |
assume h1: "\<And>tc s l r. \<lbrakk>t_ncorrect tp1; t_steps tc (tp1, 0) stp = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5204 |
(s, l, r); s \<noteq> 0\<rbrakk> \<Longrightarrow> t_steps tc (tp1 @ tp2, 0) stp = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5205 |
and h2: "t_steps tc (tp1, 0) (Suc stp) = (s, l, r)" "s \<noteq> 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5206 |
"t_ncorrect tp1" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5207 |
thus "t_steps tc (tp1 @ tp2, 0) (Suc stp) = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5208 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5209 |
apply(case_tac "(t_step tc (tp1, 0))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5210 |
proof- |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5211 |
fix a b c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5212 |
assume g1: "\<And>tc s l r. \<lbrakk>t_steps tc (tp1, 0) stp = (s, l, r); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5213 |
0 < s\<rbrakk> \<Longrightarrow> t_steps tc (tp1 @ tp2, 0) stp = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5214 |
and g2: "t_step tc (tp1, 0) = (a, b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5215 |
"t_steps (a, b, c) (tp1, 0) stp = (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5216 |
"0 < s" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5217 |
"t_ncorrect tp1" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5218 |
hence g3: "a > 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5219 |
apply(case_tac "a::nat", auto simp: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5220 |
apply(simp add: state0_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5221 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5222 |
from g1 and g2 and this have g4: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5223 |
"(t_step tc (tp1 @ tp2, 0)) = (a, b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5224 |
apply(rule_tac tm_append_step, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5225 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5226 |
from g1 and g2 and g3 and g4 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5227 |
"t_steps (t_step tc (tp1 @ tp2, 0)) (tp1 @ tp2, 0) stp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5228 |
= (s, l, r)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5229 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5230 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5231 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5232 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5233 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5234 |
lemma shift_fetch: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5235 |
"\<lbrakk>n < length tp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5236 |
(tp:: (taction \<times> nat) list) ! n = (aa, ba); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5237 |
ba \<noteq> 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5238 |
\<Longrightarrow> (tshift tp (length tp div 2)) ! n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5239 |
(aa , ba + length tp div 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5240 |
apply(simp add: tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5241 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5242 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5243 |
lemma tshift_length_equal: "length (tshift tp q) = length tp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5244 |
apply(auto simp: tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5245 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5246 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5247 |
thm nth_of.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5248 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5249 |
lemma [simp]: "t_ncorrect tp \<Longrightarrow> 2 * (length tp div 2) = length tp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5250 |
apply(auto simp: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5251 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5252 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5253 |
lemma tm_append_step_equal': |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5254 |
"\<lbrakk>t_ncorrect tp; t_ncorrect tp'; off = length tp div 2\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5255 |
(\<lambda> (s, l, r). ((\<lambda> (s', l', r'). |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5256 |
(s'\<noteq> 0 \<longrightarrow> (s = s' + off \<and> l = l' \<and> r = r'))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5257 |
(t_step (a, b, c) (tp', 0)))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5258 |
(t_step (a + off, b, c) (tp @ tshift tp' off, 0))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5259 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5260 |
apply(case_tac a, simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5261 |
apply(case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5262 |
"(fetch tp' a (case c of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc))", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5263 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5264 |
apply(case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5265 |
"(fetch (tp @ tshift tp' (length tp div 2)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5266 |
(Suc (nat + length tp div 2)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5267 |
(case c of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc))", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5268 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5269 |
apply(case_tac "(new_tape aa (b, c))", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5270 |
case_tac "(new_tape aaa (b, c))", simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5271 |
rule impI, simp add: fetch.simps split: block.splits option.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5272 |
apply (auto simp: nth_of.simps t_ncorrect.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5273 |
nth_append tshift_length_equal tshift.simps split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5274 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5275 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5276 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5277 |
lemma tm_append_step_equal: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5278 |
"\<lbrakk>t_ncorrect tp; t_ncorrect tp'; off = length tp div 2; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5279 |
t_step (a, b, c) (tp', 0) = (aa, ab, bb); aa \<noteq> 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5280 |
\<Longrightarrow> t_step (a + length tp div 2, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5281 |
(tp @ tshift tp' (length tp div 2), 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5282 |
= (aa + length tp div 2, ab, bb)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5283 |
apply(insert tm_append_step_equal'[of tp tp' off a b c], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5284 |
apply(case_tac "(t_step (a + length tp div 2, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5285 |
(tp @ tshift tp' (length tp div 2), 0))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5286 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5287 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5288 |
lemma tm_append_steps_equal: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5289 |
"\<lbrakk>t_ncorrect tp; t_ncorrect tp'; off = length tp div 2\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5290 |
(\<lambda> (s, l, r). ((\<lambda> (s', l', r'). ((s'\<noteq> 0 \<longrightarrow> s = s' + off \<and> l = l' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5291 |
\<and> r = r'))) (t_steps (a, b, c) (tp', 0) stp))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5292 |
(t_steps (a + off, b, c) (tp @ tshift tp' off, 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5293 |
apply(induct stp arbitrary : a b c, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5294 |
apply(simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5295 |
apply(case_tac "(t_step (a, b, c) (tp', 0))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5296 |
apply(case_tac "aa = 0", simp add: state0_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5297 |
apply(subgoal_tac "(t_step (a + length tp div 2, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5298 |
(tp @ tshift tp' (length tp div 2), 0)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5299 |
= (aa + length tp div 2, ba, ca)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5300 |
apply(rule tm_append_step_equal, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5301 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5302 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5303 |
(*********Begin: mop_up***************) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5304 |
type_synonym mopup_type = "t_conf \<Rightarrow> nat list \<Rightarrow> nat \<Rightarrow> block list \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5305 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5306 |
fun mopup_stop :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5307 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5308 |
"mopup_stop (s, l, r) lm n ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5309 |
(\<exists> ln rn. l = Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires \<and> r = <abc_lm_v lm n> @ Bk\<^bsup>rn\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5310 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5311 |
fun mopup_bef_erase_a :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5312 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5313 |
"mopup_bef_erase_a (s, l, r) lm n ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5314 |
(\<exists> ln m rn. l = Bk \<^bsup>ln\<^esup> @ Bk # Bk # ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5315 |
r = Oc\<^bsup>m \<^esup>@ Bk # <(drop ((s + 1) div 2) lm)> @ Bk\<^bsup>rn\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5316 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5317 |
fun mopup_bef_erase_b :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5318 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5319 |
"mopup_bef_erase_b (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5320 |
(\<exists> ln m rn. l = Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires \<and> r = Bk # Oc\<^bsup>m\<^esup> @ Bk # |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5321 |
<(drop (s div 2) lm)> @ Bk\<^bsup>rn\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5322 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5323 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5324 |
fun mopup_jump_over1 :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5325 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5326 |
"mopup_jump_over1 (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5327 |
(\<exists> ln m1 m2 rn. m1 + m2 = Suc (abc_lm_v lm n) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5328 |
l = Oc\<^bsup>m1\<^esup> @ Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5329 |
(r = Oc\<^bsup>m2\<^esup> @ Bk # <(drop (Suc n) lm)> @ Bk\<^bsup>rn \<^esup>\<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5330 |
(r = Oc\<^bsup>m2\<^esup> \<and> (drop (Suc n) lm) = [])))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5331 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5332 |
fun mopup_aft_erase_a :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5333 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5334 |
"mopup_aft_erase_a (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5335 |
(\<exists> lnl lnr rn (ml::nat list) m. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5336 |
m = Suc (abc_lm_v lm n) \<and> l = Bk\<^bsup>lnr \<^esup>@ Oc\<^bsup>m \<^esup>@ Bk\<^bsup>lnl\<^esup> @ Bk # Bk # ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5337 |
(r = <ml> @ Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5338 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5339 |
fun mopup_aft_erase_b :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5340 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5341 |
"mopup_aft_erase_b (s, l, r) lm n ires= |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5342 |
(\<exists> lnl lnr rn (ml::nat list) m. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5343 |
m = Suc (abc_lm_v lm n) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5344 |
l = Bk\<^bsup>lnr \<^esup>@ Oc\<^bsup>m \<^esup>@ Bk\<^bsup>lnl\<^esup> @ Bk # Bk # ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5345 |
(r = Bk # <ml> @ Bk\<^bsup>rn \<^esup>\<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5346 |
r = Bk # Bk # <ml> @ Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5347 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5348 |
fun mopup_aft_erase_c :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5349 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5350 |
"mopup_aft_erase_c (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5351 |
(\<exists> lnl lnr rn (ml::nat list) m. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5352 |
m = Suc (abc_lm_v lm n) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5353 |
l = Bk\<^bsup>lnr \<^esup>@ Oc\<^bsup>m \<^esup>@ Bk\<^bsup>lnl\<^esup> @ Bk # Bk # ires \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5354 |
(r = <ml> @ Bk\<^bsup>rn \<^esup>\<or> r = Bk # <ml> @ Bk\<^bsup>rn\<^esup>))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5355 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5356 |
fun mopup_left_moving :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5357 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5358 |
"mopup_left_moving (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5359 |
(\<exists> lnl lnr rn m. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5360 |
m = Suc (abc_lm_v lm n) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5361 |
((l = Bk\<^bsup>lnr \<^esup>@ Oc\<^bsup>m \<^esup>@ Bk\<^bsup>lnl\<^esup> @ Bk # Bk # ires \<and> r = Bk\<^bsup>rn\<^esup>) \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5362 |
(l = Oc\<^bsup>m - 1\<^esup> @ Bk\<^bsup>lnl\<^esup> @ Bk # Bk # ires \<and> r = Oc # Bk\<^bsup>rn\<^esup>)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5363 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5364 |
fun mopup_jump_over2 :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5365 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5366 |
"mopup_jump_over2 (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5367 |
(\<exists> ln rn m1 m2. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5368 |
m1 + m2 = Suc (abc_lm_v lm n) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5369 |
\<and> r \<noteq> [] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5370 |
\<and> (hd r = Oc \<longrightarrow> (l = Oc\<^bsup>m1\<^esup> @ Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires \<and> r = Oc\<^bsup>m2\<^esup> @ Bk\<^bsup>rn\<^esup>)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5371 |
\<and> (hd r = Bk \<longrightarrow> (l = Bk\<^bsup>ln\<^esup> @ Bk # ires \<and> r = Bk # Oc\<^bsup>m1 + m2\<^esup> @ Bk\<^bsup>rn\<^esup>)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5372 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5373 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5374 |
fun mopup_inv :: "mopup_type" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5375 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5376 |
"mopup_inv (s, l, r) lm n ires = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5377 |
(if s = 0 then mopup_stop (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5378 |
else if s \<le> 2*n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5379 |
if s mod 2 = 1 then mopup_bef_erase_a (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5380 |
else mopup_bef_erase_b (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5381 |
else if s = 2*n + 1 then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5382 |
mopup_jump_over1 (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5383 |
else if s = 2*n + 2 then mopup_aft_erase_a (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5384 |
else if s = 2*n + 3 then mopup_aft_erase_b (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5385 |
else if s = 2*n + 4 then mopup_aft_erase_c (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5386 |
else if s = 2*n + 5 then mopup_left_moving (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5387 |
else if s = 2*n + 6 then mopup_jump_over2 (s, l, r) lm n ires |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5388 |
else False)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5389 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5390 |
declare |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5391 |
mopup_jump_over2.simps[simp del] mopup_left_moving.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5392 |
mopup_aft_erase_c.simps[simp del] mopup_aft_erase_b.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5393 |
mopup_aft_erase_a.simps[simp del] mopup_jump_over1.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5394 |
mopup_bef_erase_a.simps[simp del] mopup_bef_erase_b.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5395 |
mopup_stop.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5396 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5397 |
lemma mopup_fetch_0[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5398 |
"(fetch (mop_bef n @ tshift mp_up (2 * n)) 0 b) = (Nop, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5399 |
by(simp add: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5400 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5401 |
lemma mop_bef_length[simp]: "length (mop_bef n) = 4 * n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5402 |
apply(induct n, simp add: mop_bef.simps, simp add: mop_bef.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5403 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5404 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5405 |
thm findnth_nth |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5406 |
lemma mop_bef_nth: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5407 |
"\<lbrakk>q < n; x < 4\<rbrakk> \<Longrightarrow> mop_bef n ! (4 * q + x) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5408 |
mop_bef (Suc q) ! ((4 * q) + x)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5409 |
apply(induct n, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5410 |
apply(case_tac "q < n", simp add: mop_bef.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5411 |
apply(simp add: nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5412 |
apply(subgoal_tac "q = n", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5413 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5414 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5415 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5416 |
lemma fetch_bef_erase_a_o[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5417 |
"\<lbrakk>0 < s; s \<le> 2 * n; s mod 2 = Suc 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5418 |
\<Longrightarrow> (fetch (mop_bef n @ tshift mp_up (2 * n)) s Oc) = (W0, s + 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5419 |
apply(subgoal_tac "\<exists> q. s = 2*q + 1", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5420 |
apply(subgoal_tac "length (mop_bef n) = 4*n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5421 |
apply(auto simp: fetch.simps nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5422 |
apply(subgoal_tac "mop_bef n ! (4 * q + 1) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5423 |
mop_bef (Suc q) ! ((4 * q) + 1)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5424 |
simp add: mop_bef.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5425 |
apply(rule mop_bef_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5426 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5427 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5428 |
lemma fetch_bef_erase_a_b[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5429 |
"\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; s mod 2 = Suc 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5430 |
\<Longrightarrow> (fetch (mop_bef n @ tshift mp_up (2 * n)) s Bk) = (R, s + 2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5431 |
apply(subgoal_tac "\<exists> q. s = 2*q + 1", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5432 |
apply(subgoal_tac "length (mop_bef n) = 4*n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5433 |
apply(auto simp: fetch.simps nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5434 |
apply(subgoal_tac "mop_bef n ! (4 * q + 0) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5435 |
mop_bef (Suc q) ! ((4 * q + 0))", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5436 |
simp add: mop_bef.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5437 |
apply(rule mop_bef_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5438 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5439 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5440 |
lemma fetch_bef_erase_b_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5441 |
"\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; s mod 2 = 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5442 |
(fetch (mop_bef n @ tshift mp_up (2 * n)) s Bk) = (R, s - 1)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5443 |
apply(subgoal_tac "\<exists> q. s = 2 * q", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5444 |
apply(case_tac qa, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5445 |
apply(auto simp: fetch.simps nth_of.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5446 |
apply(subgoal_tac "mop_bef n ! (4 * nat + 2) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5447 |
mop_bef (Suc nat) ! ((4 * nat) + 2)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5448 |
simp add: mop_bef.simps nth_append) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5449 |
apply(rule mop_bef_nth, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5450 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5451 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5452 |
lemma fetch_jump_over1_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5453 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (Suc (2 * n)) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5454 |
= (R, Suc (2 * n))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5455 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5456 |
apply(auto simp: fetch.simps nth_of.simps mp_up_def nth_append |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5457 |
tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5458 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5459 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5460 |
lemma fetch_jump_over1_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5461 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (Suc (2 * n)) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5462 |
= (R, Suc (Suc (2 * n)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5463 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5464 |
apply(auto simp: fetch.simps nth_of.simps mp_up_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5465 |
nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5466 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5467 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5468 |
lemma fetch_aft_erase_a_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5469 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (Suc (Suc (2 * n))) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5470 |
= (W0, Suc (2 * n + 2))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5471 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5472 |
apply(auto simp: fetch.simps nth_of.simps mp_up_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5473 |
nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5474 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5475 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5476 |
lemma fetch_aft_erase_a_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5477 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (Suc (Suc (2 * n))) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5478 |
= (L, Suc (2 * n + 4))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5479 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5480 |
apply(auto simp: fetch.simps nth_of.simps mp_up_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5481 |
nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5482 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5483 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5484 |
lemma fetch_aft_erase_b_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5485 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (2*n + 3) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5486 |
= (R, Suc (2 * n + 3))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5487 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5488 |
apply(subgoal_tac "2*n + 3 = Suc (2*n + 2)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5489 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5490 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5491 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5492 |
lemma fetch_aft_erase_c_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5493 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (2 * n + 4) Oc |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5494 |
= (W0, Suc (2 * n + 2))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5495 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5496 |
apply(subgoal_tac "2*n + 4 = Suc (2*n + 3)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5497 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5498 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5499 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5500 |
lemma fetch_aft_erase_c_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5501 |
"fetch (mop_bef n @ tshift mp_up (2 * n)) (2 * n + 4) Bk |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5502 |
= (R, Suc (2 * n + 1))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5503 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5504 |
apply(subgoal_tac "2*n + 4 = Suc (2*n + 3)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5505 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5506 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5507 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5508 |
lemma fetch_left_moving_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5509 |
"(fetch (mop_bef n @ tshift mp_up (2 * n)) (2 * n + 5) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5510 |
= (L, 2*n + 6)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5511 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5512 |
apply(subgoal_tac "2*n + 5 = Suc (2*n + 4)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5513 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5514 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5515 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5516 |
lemma fetch_left_moving_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5517 |
"(fetch (mop_bef n @ tshift mp_up (2 * n)) (2 * n + 5) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5518 |
= (L, 2*n + 5)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5519 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5520 |
apply(subgoal_tac "2*n + 5 = Suc (2*n + 4)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5521 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5522 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5523 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5524 |
lemma fetch_jump_over2_b: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5525 |
"(fetch (mop_bef n @ tshift mp_up (2 * n)) (2 * n + 6) Bk) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5526 |
= (R, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5527 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5528 |
apply(subgoal_tac "2*n + 6 = Suc (2*n + 5)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5529 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5530 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5531 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5532 |
lemma fetch_jump_over2_o: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5533 |
"(fetch (mop_bef n @ tshift mp_up (2 * n)) (2 * n + 6) Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5534 |
= (L, 2*n + 6)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5535 |
apply(subgoal_tac "length (mop_bef n) = 4 * n") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5536 |
apply(subgoal_tac "2*n + 6 = Suc (2*n + 5)", simp only: fetch.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5537 |
apply(auto simp: nth_of.simps mp_up_def nth_append tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5538 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5539 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5540 |
lemmas mopupfetchs = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5541 |
fetch_bef_erase_a_o fetch_bef_erase_a_b fetch_bef_erase_b_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5542 |
fetch_jump_over1_o fetch_jump_over1_b fetch_aft_erase_a_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5543 |
fetch_aft_erase_a_b fetch_aft_erase_b_b fetch_aft_erase_c_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5544 |
fetch_aft_erase_c_b fetch_left_moving_o fetch_left_moving_b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5545 |
fetch_jump_over2_b fetch_jump_over2_o |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5546 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5547 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5548 |
"\<lbrakk>n < length lm; 0 < s; s mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5549 |
mopup_bef_erase_a (s, l, Oc # xs) lm n ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5550 |
Suc s \<le> 2 * n\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5551 |
mopup_bef_erase_b (Suc s, l, Bk # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5552 |
apply(auto simp: mopup_bef_erase_a.simps mopup_bef_erase_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5553 |
apply(rule_tac x = "m - 1" in exI, rule_tac x = rn in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5554 |
apply(case_tac m, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5555 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5556 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5557 |
lemma mopup_false1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5558 |
"\<lbrakk>0 < s; s \<le> 2 * n; s mod 2 = Suc 0; \<not> Suc s \<le> 2 * n\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5559 |
\<Longrightarrow> RR" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5560 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5561 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5562 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5563 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5564 |
"\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; s mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5565 |
mopup_bef_erase_a (s, l, Oc # xs) lm n ires; r = Oc # xs\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5566 |
\<Longrightarrow> (Suc s \<le> 2 * n \<longrightarrow> mopup_bef_erase_b (Suc s, l, Bk # xs) lm n ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5567 |
(\<not> Suc s \<le> 2 * n \<longrightarrow> mopup_jump_over1 (Suc s, l, Bk # xs) lm n ires) " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5568 |
apply(auto elim: mopup_false1) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5569 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5570 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5571 |
lemma drop_abc_lm_v_simp[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5572 |
"n < length lm \<Longrightarrow> drop n lm = abc_lm_v lm n # drop (Suc n) lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5573 |
apply(auto simp: abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5574 |
apply(drule drop_Suc_conv_tl, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5575 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5576 |
lemma [simp]: "(\<exists>rna. Bk\<^bsup>rn\<^esup> = Bk # Bk\<^bsup>rna\<^esup>) \<or> Bk\<^bsup>rn\<^esup> = []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5577 |
apply(case_tac rn, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5578 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5579 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5580 |
lemma [simp]: "\<exists>lna. Bk # Bk\<^bsup>ln\<^esup> = Bk\<^bsup>lna\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5581 |
apply(rule_tac x = "Suc ln" in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5582 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5583 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5584 |
lemma mopup_bef_erase_a_2_jump_over[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5585 |
"\<lbrakk>n < length lm; 0 < s; s mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5586 |
mopup_bef_erase_a (s, l, Bk # xs) lm n ires; Suc s = 2 * n\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5587 |
\<Longrightarrow> mopup_jump_over1 (Suc (2 * n), Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5588 |
apply(auto simp: mopup_bef_erase_a.simps mopup_jump_over1.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5589 |
apply(case_tac m, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5590 |
apply(rule_tac x = "Suc ln" in exI, rule_tac x = 0 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5591 |
simp add: tape_of_nl_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5592 |
apply(case_tac "drop (Suc n) lm", auto simp: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5593 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5594 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5595 |
lemma Suc_Suc_div: "\<lbrakk>0 < s; s mod 2 = Suc 0; Suc (Suc s) \<le> 2 * n\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5596 |
\<Longrightarrow> (Suc (Suc (s div 2))) \<le> n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5597 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5598 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5599 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5600 |
lemma mopup_bef_erase_a_2_a[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5601 |
"\<lbrakk>n < length lm; 0 < s; s mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5602 |
mopup_bef_erase_a (s, l, Bk # xs) lm n ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5603 |
Suc (Suc s) \<le> 2 * n\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5604 |
mopup_bef_erase_a (Suc (Suc s), Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5605 |
apply(auto simp: mopup_bef_erase_a.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5606 |
apply(subgoal_tac "drop (Suc (Suc (s div 2))) lm \<noteq> []") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5607 |
apply(case_tac m, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5608 |
apply(rule_tac x = "Suc (abc_lm_v lm (Suc (s div 2)))" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5609 |
rule_tac x = rn in exI, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5610 |
apply(subgoal_tac "(Suc (Suc (s div 2))) \<le> n", simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5611 |
rule_tac Suc_Suc_div, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5612 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5613 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5614 |
lemma mopup_false2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5615 |
"\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5616 |
s mod 2 = Suc 0; Suc s \<noteq> 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5617 |
\<not> Suc (Suc s) \<le> 2 * n\<rbrakk> \<Longrightarrow> RR" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5618 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5619 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5620 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5621 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5622 |
"\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5623 |
s mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5624 |
mopup_bef_erase_a (s, l, Bk # xs) lm n ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5625 |
r = Bk # xs\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5626 |
\<Longrightarrow> (Suc s = 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5627 |
mopup_jump_over1 (Suc (2 * n), Bk # l, xs) lm n ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5628 |
(Suc s \<noteq> 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5629 |
(Suc (Suc s) \<le> 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5630 |
mopup_bef_erase_a (Suc (Suc s), Bk # l, xs) lm n ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5631 |
(\<not> Suc (Suc s) \<le> 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5632 |
mopup_aft_erase_a (Suc (Suc s), Bk # l, xs) lm n ires))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5633 |
apply(auto elim: mopup_false2) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5634 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5635 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5636 |
lemma [simp]: "mopup_bef_erase_a (s, l, []) lm n ires \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5637 |
mopup_bef_erase_a (s, l, [Bk]) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5638 |
apply(auto simp: mopup_bef_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5639 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5640 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5641 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5642 |
"\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; s mod 2 = Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5643 |
mopup_bef_erase_a (s, l, []) lm n ires; r = []\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5644 |
\<Longrightarrow> (Suc s = 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5645 |
mopup_jump_over1 (Suc (2 * n), Bk # l, []) lm n ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5646 |
(Suc s \<noteq> 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5647 |
(Suc (Suc s) \<le> 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5648 |
mopup_bef_erase_a (Suc (Suc s), Bk # l, []) lm n ires) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5649 |
(\<not> Suc (Suc s) \<le> 2 * n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5650 |
mopup_aft_erase_a (Suc (Suc s), Bk # l, []) lm n ires))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5651 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5652 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5653 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5654 |
lemma "mopup_bef_erase_b (s, l, Oc # xs) lm n ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5655 |
apply(auto simp: mopup_bef_erase_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5656 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5657 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5658 |
lemma [simp]: "mopup_bef_erase_b (s, l, Oc # xs) lm n ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5659 |
apply(auto simp: mopup_bef_erase_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5660 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5661 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5662 |
lemma [simp]: "\<lbrakk>0 < s; s \<le> 2 *n; s mod 2 \<noteq> Suc 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5663 |
(s - Suc 0) mod 2 = Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5664 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5665 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5666 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5667 |
lemma [simp]: "\<lbrakk>0 < s; s \<le> 2 *n; s mod 2 \<noteq> Suc 0\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5668 |
s - Suc 0 \<le> 2 * n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5669 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5670 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5671 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5672 |
lemma [simp]: "\<lbrakk>0 < s; s \<le> 2 *n; s mod 2 \<noteq> Suc 0\<rbrakk> \<Longrightarrow> \<not> s \<le> Suc 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5673 |
apply(arith) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5674 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5675 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5676 |
lemma [simp]: "\<lbrakk>n < length lm; 0 < s; s \<le> 2 * n; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5677 |
s mod 2 \<noteq> Suc 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5678 |
mopup_bef_erase_b (s, l, Bk # xs) lm n ires; r = Bk # xs\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5679 |
\<Longrightarrow> mopup_bef_erase_a (s - Suc 0, Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5680 |
apply(auto simp: mopup_bef_erase_b.simps mopup_bef_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5681 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5682 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5683 |
lemma [simp]: "\<lbrakk>mopup_bef_erase_b (s, l, []) lm n ires\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5684 |
mopup_bef_erase_a (s - Suc 0, Bk # l, []) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5685 |
apply(auto simp: mopup_bef_erase_b.simps mopup_bef_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5686 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5687 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5688 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5689 |
"\<lbrakk>n < length lm; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5690 |
mopup_jump_over1 (Suc (2 * n), l, Oc # xs) lm n ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5691 |
r = Oc # xs\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5692 |
\<Longrightarrow> mopup_jump_over1 (Suc (2 * n), Oc # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5693 |
apply(auto simp: mopup_jump_over1.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5694 |
apply(rule_tac x = ln in exI, rule_tac x = "Suc m1" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5695 |
rule_tac x = "m2 - 1" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5696 |
apply(case_tac "m2", simp, simp, rule_tac x = rn in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5697 |
apply(rule_tac x = ln in exI, rule_tac x = "Suc m1" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5698 |
rule_tac x = "m2 - 1" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5699 |
apply(case_tac m2, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5700 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5701 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5702 |
lemma mopup_jump_over1_2_aft_erase_a[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5703 |
"\<lbrakk>n < length lm; mopup_jump_over1 (Suc (2 * n), l, Bk # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5704 |
\<Longrightarrow> mopup_aft_erase_a (Suc (Suc (2 * n)), Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5705 |
apply(simp only: mopup_jump_over1.simps mopup_aft_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5706 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5707 |
apply(rule_tac x = ln in exI, rule_tac x = "Suc 0" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5708 |
apply(case_tac m2, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5709 |
apply(rule_tac x = rn in exI, rule_tac x = "drop (Suc n) lm" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5710 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5711 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5712 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5713 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5714 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5715 |
"\<lbrakk>n < length lm; mopup_jump_over1 (Suc (2 * n), l, []) lm n ires\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5716 |
mopup_aft_erase_a (Suc (Suc (2 * n)), Bk # l, []) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5717 |
apply(rule mopup_jump_over1_2_aft_erase_a, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5718 |
apply(auto simp: mopup_jump_over1.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5719 |
apply(rule_tac x = ln in exI, rule_tac x = m1 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5720 |
rule_tac x = m2 in exI, simp add: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5721 |
apply(rule_tac x = 0 in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5722 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5723 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5724 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5725 |
"\<lbrakk>n < length lm; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5726 |
mopup_aft_erase_a (Suc (Suc (2 * n)), l, Oc # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5727 |
\<Longrightarrow> mopup_aft_erase_b (Suc (Suc (Suc (2 * n))), l, Bk # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5728 |
apply(auto simp: mopup_aft_erase_a.simps mopup_aft_erase_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5729 |
apply(case_tac ml, simp, case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5730 |
apply(case_tac list, auto simp: tape_of_nl_abv |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5731 |
tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5732 |
apply(case_tac a, simp, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5733 |
rule_tac x = "[]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5734 |
simp add: tape_of_nat_list.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5735 |
apply(rule_tac x = rn in exI, rule_tac x = "[nat]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5736 |
simp add: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5737 |
apply(case_tac a, simp, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5738 |
rule_tac x = "aa # lista" in exI, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5739 |
apply(rule_tac x = rn in exI, rule_tac x = "nat # aa # lista" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5740 |
simp add: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5741 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5742 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5743 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5744 |
"mopup_aft_erase_a (Suc (Suc (2 * n)), l, Bk # xs) lm n ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5745 |
apply(auto simp: mopup_aft_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5746 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5747 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5748 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5749 |
"\<lbrakk>n < length lm; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5750 |
mopup_aft_erase_a (Suc (Suc (2 * n)), l, Bk # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5751 |
\<Longrightarrow> mopup_left_moving (5 + 2 * n, tl l, hd l # Bk # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5752 |
apply(simp only: mopup_aft_erase_a.simps mopup_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5753 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5754 |
apply(case_tac lnr, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5755 |
apply(rule_tac x = lnl in exI, simp, rule_tac x = rn in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5756 |
apply(subgoal_tac "ml = []", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5757 |
apply(rule_tac xs = xs and rn = rn in BkCons_nil, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5758 |
apply(subgoal_tac "ml = []", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5759 |
apply(rule_tac xs = xs and rn = rn in BkCons_nil, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5760 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5761 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5762 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5763 |
"mopup_aft_erase_a (Suc (Suc (2 * n)), l, []) lm n ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5764 |
apply(simp only: mopup_aft_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5765 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5766 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5767 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5768 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5769 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5770 |
"\<lbrakk>n < length lm; mopup_aft_erase_a (Suc (Suc (2 * n)), l, []) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5771 |
\<Longrightarrow> mopup_left_moving (5 + 2 * n, tl l, [hd l]) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5772 |
apply(simp only: mopup_aft_erase_a.simps mopup_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5773 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5774 |
apply(subgoal_tac "ml = [] \<and> rn = 0", erule conjE, erule conjE, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5775 |
apply(case_tac lnr, simp, rule_tac x = lnl in exI, simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5776 |
rule_tac x = 0 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5777 |
apply(rule_tac x = lnl in exI, rule_tac x = nat in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5778 |
rule_tac x = "Suc 0" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5779 |
apply(case_tac ml, simp, case_tac rn, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5780 |
apply(case_tac list, auto simp: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5781 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5782 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5783 |
lemma [simp]: "mopup_aft_erase_b (2 * n + 3, l, Oc # xs) lm n ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5784 |
apply(auto simp: mopup_aft_erase_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5785 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5786 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5787 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5788 |
"\<lbrakk>n < length lm; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5789 |
mopup_aft_erase_c (2 * n + 4, l, Oc # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5790 |
\<Longrightarrow> mopup_aft_erase_b (Suc (Suc (Suc (2 * n))), l, Bk # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5791 |
apply(auto simp: mopup_aft_erase_c.simps mopup_aft_erase_b.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5792 |
apply(case_tac ml, simp, case_tac rn, simp, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5793 |
apply(case_tac list, auto simp: tape_of_nl_abv |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5794 |
tape_of_nat_list.simps tape_of_nat_abv ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5795 |
apply(case_tac a, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5796 |
rule_tac x = "[]" in exI, simp add: tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5797 |
apply(rule_tac x = rn in exI, rule_tac x = "[nat]" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5798 |
simp add: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5799 |
apply(case_tac a, simp, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5800 |
rule_tac x = "aa # lista" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5801 |
apply(rule_tac x = rn in exI, rule_tac x = "nat # aa # lista" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5802 |
simp add: tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5803 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5804 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5805 |
lemma mopup_aft_erase_c_aft_erase_a[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5806 |
"\<lbrakk>n < length lm; mopup_aft_erase_c (2 * n + 4, l, Bk # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5807 |
\<Longrightarrow> mopup_aft_erase_a (Suc (Suc (2 * n)), Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5808 |
apply(simp only: mopup_aft_erase_c.simps mopup_aft_erase_a.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5809 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5810 |
apply(erule conjE, erule conjE, erule disjE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5811 |
apply(subgoal_tac "ml = []", simp, case_tac rn, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5812 |
simp, simp, rule conjI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5813 |
apply(rule_tac x = lnl in exI, rule_tac x = "Suc lnr" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5814 |
apply(rule_tac x = nat in exI, rule_tac x = "[]" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5815 |
apply(rule_tac xs = xs and rn = rn in BkCons_nil, simp, simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5816 |
rule conjI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5817 |
apply(rule_tac x = lnl in exI, rule_tac x = "Suc lnr" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5818 |
apply(rule_tac x = rn in exI, rule_tac x = "ml" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5819 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5820 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5821 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5822 |
"\<lbrakk>n < length lm; mopup_aft_erase_c (2 * n + 4, l, []) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5823 |
\<Longrightarrow> mopup_aft_erase_a (Suc (Suc (2 * n)), Bk # l, []) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5824 |
apply(rule mopup_aft_erase_c_aft_erase_a, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5825 |
apply(simp only: mopup_aft_erase_c.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5826 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5827 |
apply(rule_tac x = lnl in exI, rule_tac x = lnr in exI, simp add: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5828 |
apply(rule_tac x = 0 in exI, rule_tac x = "[]" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5829 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5830 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5831 |
lemma mopup_aft_erase_b_2_aft_erase_c[simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5832 |
"\<lbrakk>n < length lm; mopup_aft_erase_b (2 * n + 3, l, Bk # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5833 |
\<Longrightarrow> mopup_aft_erase_c (4 + 2 * n, Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5834 |
apply(auto simp: mopup_aft_erase_b.simps mopup_aft_erase_c.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5835 |
apply(rule_tac x = "lnl" in exI, rule_tac x = "Suc lnr" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5836 |
apply(rule_tac x = "lnl" in exI, rule_tac x = "Suc lnr" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5837 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5838 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5839 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5840 |
"\<lbrakk>n < length lm; mopup_aft_erase_b (2 * n + 3, l, []) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5841 |
\<Longrightarrow> mopup_aft_erase_c (4 + 2 * n, Bk # l, []) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5842 |
apply(rule_tac mopup_aft_erase_b_2_aft_erase_c, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5843 |
apply(simp add: mopup_aft_erase_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5844 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5845 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5846 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5847 |
"mopup_left_moving (2 * n + 5, l, Oc # xs) lm n ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5848 |
apply(auto simp: mopup_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5849 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5850 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5851 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5852 |
"\<lbrakk>n < length lm; mopup_left_moving (2 * n + 5, l, Oc # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5853 |
\<Longrightarrow> mopup_jump_over2 (2 * n + 6, tl l, hd l # Oc # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5854 |
apply(simp only: mopup_left_moving.simps mopup_jump_over2.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5855 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5856 |
apply(erule conjE, erule disjE, erule conjE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5857 |
apply(case_tac rn, simp, simp add: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5858 |
apply(case_tac "hd l", simp add: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5859 |
apply(case_tac "abc_lm_v lm n", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5860 |
apply(rule_tac x = "lnl" in exI, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5861 |
rule_tac x = "Suc 0" in exI, rule_tac x = 0 in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5862 |
apply(case_tac lnl, simp, simp, simp add: exp_ind[THEN sym], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5863 |
apply(case_tac "abc_lm_v lm n", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5864 |
apply(case_tac lnl, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5865 |
apply(rule_tac x = lnl in exI, rule_tac x = rn in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5866 |
apply(rule_tac x = nat in exI, rule_tac x = "Suc (Suc 0)" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5867 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5868 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5869 |
lemma [simp]: "mopup_left_moving (2 * n + 5, l, xs) lm n ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5870 |
apply(auto simp: mopup_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5871 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5872 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5873 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5874 |
"\<lbrakk>n < length lm; mopup_left_moving (2 * n + 5, l, Bk # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5875 |
\<Longrightarrow> mopup_left_moving (2 * n + 5, tl l, hd l # Bk # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5876 |
apply(simp only: mopup_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5877 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5878 |
apply(case_tac lnr, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5879 |
apply(rule_tac x = lnl in exI, rule_tac x = 0 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5880 |
rule_tac x = rn in exI, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5881 |
apply(rule_tac x = lnl in exI, rule_tac x = nat in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5882 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5883 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5884 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5885 |
"\<lbrakk>n < length lm; mopup_left_moving (2 * n + 5, l, []) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5886 |
\<Longrightarrow> mopup_left_moving (2 * n + 5, tl l, [hd l]) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5887 |
apply(simp only: mopup_left_moving.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5888 |
apply(erule exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5889 |
apply(case_tac lnr, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5890 |
apply(rule_tac x = lnl in exI, rule_tac x = 0 in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5891 |
rule_tac x = 0 in exI, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5892 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5893 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5894 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5895 |
"mopup_jump_over2 (2 * n + 6, l, Oc # xs) lm n ires \<Longrightarrow> l \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5896 |
apply(auto simp: mopup_jump_over2.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5897 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5898 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5899 |
lemma [intro]: "\<exists>lna. Bk # Bk\<^bsup>ln\<^esup> = Bk\<^bsup>lna\<^esup> @ [Bk]" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5900 |
apply(simp only: exp_ind[THEN sym], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5901 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5902 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5903 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5904 |
"\<lbrakk>n < length lm; mopup_jump_over2 (2 * n + 6, l, Oc # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5905 |
\<Longrightarrow> mopup_jump_over2 (2 * n + 6, tl l, hd l # Oc # xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5906 |
apply(simp only: mopup_jump_over2.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5907 |
apply(erule_tac exE)+ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5908 |
apply(simp add: , erule conjE, erule_tac conjE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5909 |
apply(case_tac m1, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5910 |
apply(rule_tac x = ln in exI, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5911 |
rule_tac x = 0 in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5912 |
apply(case_tac ln, simp, simp, simp only: exp_ind[THEN sym], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5913 |
apply(rule_tac x = ln in exI, rule_tac x = rn in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5914 |
rule_tac x = nat in exI, rule_tac x = "Suc m2" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5915 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5916 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5917 |
lemma [simp]: "\<exists>rna. Oc # Oc\<^bsup>a\<^esup> @ Bk\<^bsup>rn\<^esup> = <a> @ Bk\<^bsup>rna\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5918 |
apply(case_tac a, auto simp: tape_of_nat_abv ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5919 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5920 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5921 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5922 |
"\<lbrakk>n < length lm; mopup_jump_over2 (2 * n + 6, l, Bk # xs) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5923 |
\<Longrightarrow> mopup_stop (0, Bk # l, xs) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5924 |
apply(auto simp: mopup_jump_over2.simps mopup_stop.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5925 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5926 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5927 |
lemma [simp]: "mopup_jump_over2 (2 * n + 6, l, []) lm n ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5928 |
apply(simp only: mopup_jump_over2.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5929 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5930 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5931 |
lemma mopup_inv_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5932 |
"\<lbrakk>n < length lm; mopup_inv (s, l, r) lm n ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5933 |
\<Longrightarrow> mopup_inv (t_step (s, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5934 |
((mop_bef n @ tshift mp_up (2 * n)), 0)) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5935 |
apply(auto split:if_splits simp add:t_step.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5936 |
tactic {* ALLGOALS (resolve_tac [@{thm "fetch_intro"}]) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5937 |
apply(simp_all add: mopupfetchs new_tape.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5938 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5939 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5940 |
declare mopup_inv.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5941 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5942 |
lemma mopup_inv_steps: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5943 |
"\<lbrakk>n < length lm; mopup_inv (s, l, r) lm n ires\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5944 |
mopup_inv (t_steps (s, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5945 |
((mop_bef n @ tshift mp_up (2 * n)), 0) stp) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5946 |
apply(induct stp, simp add: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5947 |
apply(simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5948 |
apply(case_tac "(t_steps (s, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5949 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5950 |
apply(rule_tac mopup_inv_step, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5951 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5952 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5953 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5954 |
"\<lbrakk>n < length lm; Suc 0 \<le> n\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5955 |
mopup_bef_erase_a (Suc 0, Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5956 |
apply(auto simp: mopup_bef_erase_a.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5957 |
apply(case_tac lm, simp, case_tac list, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5958 |
apply(rule_tac x = "Suc a" in exI, rule_tac x = rn in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5959 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5960 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5961 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5962 |
"lm \<noteq> [] \<Longrightarrow> mopup_jump_over1 (Suc 0, Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>) lm 0 ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5963 |
apply(auto simp: mopup_jump_over1.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5964 |
apply(rule_tac x = ln in exI, rule_tac x = 0 in exI, simp add: ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5965 |
apply(case_tac lm, simp, simp add: abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5966 |
apply(case_tac rn, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5967 |
apply(case_tac list, rule_tac disjI2, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5968 |
simp add: tape_of_nl_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5969 |
apply(rule_tac disjI1, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5970 |
simp add: tape_of_nl_abv tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5971 |
apply(rule_tac disjI1, case_tac list, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5972 |
simp add: tape_of_nl_abv tape_of_nat_list.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5973 |
rule_tac x = nat in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5974 |
apply(simp add: tape_of_nl_abv tape_of_nat_list.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5975 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5976 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5977 |
lemma mopup_init: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5978 |
"\<lbrakk>n < length lm; crsp_l ly (as, lm) (ac, l, r) ires\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5979 |
mopup_inv (Suc 0, l, r) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5980 |
apply(auto simp: crsp_l.simps mopup_inv.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5981 |
apply(case_tac n, simp, auto simp: mopup_bef_erase_a.simps ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5982 |
apply(rule_tac x = "Suc (hd lm)" in exI, rule_tac x = rn in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5983 |
apply(case_tac lm, simp, case_tac list, simp, case_tac lista, simp add: abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5984 |
apply(simp add: tape_of_nl_abv tape_of_nat_list.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5985 |
apply(simp add: mopup_jump_over1.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5986 |
apply(rule_tac x = 0 in exI, rule_tac x = 0 in exI, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5987 |
apply(case_tac [!] n, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5988 |
apply(case_tac [!] lm, simp, case_tac list, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5989 |
apply(case_tac rn, simp add: tape_of_nl_abv tape_of_nat_list.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5990 |
apply(erule_tac x = nat in allE, simp add: tape_of_nl_abv tape_of_nat_list.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5991 |
apply(simp add: abc_lm_v.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5992 |
apply(case_tac list, simp_all add: tape_of_nl_abv tape_of_nat_list.simps abc_lm_v.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5993 |
apply(erule_tac x = rn in allE, simp_all) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5994 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5995 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5996 |
fun abc_mopup_stage1 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5997 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5998 |
"abc_mopup_stage1 (s, l, r) n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
5999 |
(if s > 0 \<and> s \<le> 2*n then 6 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6000 |
else if s = 2*n + 1 then 4 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6001 |
else if s \<ge> 2*n + 2 \<and> s \<le> 2*n + 4 then 3 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6002 |
else if s = 2*n + 5 then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6003 |
else if s = 2*n + 6 then 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6004 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6005 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6006 |
fun abc_mopup_stage2 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6007 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6008 |
"abc_mopup_stage2 (s, l, r) n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6009 |
(if s > 0 \<and> s \<le> 2*n then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6010 |
else if s = 2*n + 1 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6011 |
else if s = 2*n + 5 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6012 |
else if s = 2*n + 6 then length l |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6013 |
else if s \<ge> 2*n + 2 \<and> s \<le> 2*n + 4 then length r |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6014 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6015 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6016 |
fun abc_mopup_stage3 :: "t_conf \<Rightarrow> nat \<Rightarrow> nat" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6017 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6018 |
"abc_mopup_stage3 (s, l, r) n = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6019 |
(if s > 0 \<and> s \<le> 2*n then |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6020 |
if hd r = Bk then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6021 |
else 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6022 |
else if s = 2*n + 2 then 1 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6023 |
else if s = 2*n + 3 then 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6024 |
else if s = 2*n + 4 then 2 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6025 |
else 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6026 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6027 |
fun abc_mopup_measure :: "(t_conf \<times> nat) \<Rightarrow> (nat \<times> nat \<times> nat)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6028 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6029 |
"abc_mopup_measure (c, n) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6030 |
(abc_mopup_stage1 c n, abc_mopup_stage2 c n, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6031 |
abc_mopup_stage3 c n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6032 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6033 |
definition abc_mopup_LE :: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6034 |
"(((nat \<times> block list \<times> block list) \<times> nat) \<times> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6035 |
((nat \<times> block list \<times> block list) \<times> nat)) set" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6036 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6037 |
"abc_mopup_LE \<equiv> (inv_image lex_triple abc_mopup_measure)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6038 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6039 |
lemma wf_abc_mopup_le[intro]: "wf abc_mopup_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6040 |
by(auto intro:wf_inv_image wf_lex_triple simp:abc_mopup_LE_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6041 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6042 |
lemma [simp]: "mopup_bef_erase_a (a, aa, []) lm n ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6043 |
apply(auto simp: mopup_bef_erase_a.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6044 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6045 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6046 |
lemma [simp]: "mopup_bef_erase_b (a, aa, []) lm n ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6047 |
apply(auto simp: mopup_bef_erase_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6048 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6049 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6050 |
lemma [simp]: "mopup_aft_erase_b (2 * n + 3, aa, []) lm n ires = False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6051 |
apply(auto simp: mopup_aft_erase_b.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6052 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6053 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6054 |
lemma mopup_halt_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6055 |
"\<lbrakk>n < length lm; mopup_inv (Suc 0, l, r) lm n ires; wf abc_mopup_LE\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6056 |
\<Longrightarrow> \<forall>na. \<not> (\<lambda>(s, l, r) n. s = 0) (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6057 |
(mop_bef n @ tshift mp_up (2 * n), 0) na) n \<longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6058 |
((t_steps (Suc 0, l, r) (mop_bef n @ tshift mp_up (2 * n), 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6059 |
(Suc na), n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6060 |
t_steps (Suc 0, l, r) (mop_bef n @ tshift mp_up (2 * n), 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6061 |
na, n) \<in> abc_mopup_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6062 |
apply(rule allI, rule impI, simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6063 |
apply(subgoal_tac "mopup_inv (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6064 |
(mop_bef n @ tshift mp_up (2 * n), 0) na) lm n ires") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6065 |
apply(case_tac "(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6066 |
(mop_bef n @ tshift mp_up (2 * n), 0) na)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6067 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6068 |
fix na a b c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6069 |
assume "n < length lm" "mopup_inv (a, b, c) lm n ires" "0 < a" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6070 |
thus "((t_step (a, b, c) (mop_bef n @ tshift mp_up (2 * n), 0), n), |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6071 |
(a, b, c), n) \<in> abc_mopup_LE" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6072 |
apply(auto split:if_splits simp add:t_step.simps mopup_inv.simps, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6073 |
tactic {* ALLGOALS (resolve_tac [@{thm "fetch_intro"}]) *}) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6074 |
apply(simp_all add: mopupfetchs new_tape.simps abc_mopup_LE_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6075 |
lex_triple_def lex_pair_def ) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6076 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6077 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6078 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6079 |
assume "n < length lm" "mopup_inv (Suc 0, l, r) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6080 |
thus "mopup_inv (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6081 |
(mop_bef n @ tshift mp_up (2 * n), 0) na) lm n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6082 |
apply(rule mopup_inv_steps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6083 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6084 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6085 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6086 |
lemma mopup_halt: "\<lbrakk>n < length lm; crsp_l ly (as, lm) (s, l, r) ires\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6087 |
\<exists> stp. (\<lambda> (s, l, r). s = 0) (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6088 |
((mop_bef n @ tshift mp_up (2 * n)), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6089 |
apply(subgoal_tac "mopup_inv (Suc 0, l, r) lm n ires") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6090 |
apply(insert wf_abc_mopup_le) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6091 |
apply(insert halt_lemma[of abc_mopup_LE |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6092 |
"\<lambda> ((s, l, r), n). s = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6093 |
"\<lambda> stp. (t_steps (Suc 0, l, r) ((mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6094 |
, 0) stp, n)"], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6095 |
apply(insert mopup_halt_pre[of n lm l r], simp, erule exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6096 |
apply(rule_tac x = na in exI, case_tac "(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6097 |
(mop_bef n @ tshift mp_up (2 * n), 0) na)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6098 |
apply(rule_tac mopup_init, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6099 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6100 |
(***End: mopup stop****) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6101 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6102 |
lemma mopup_halt_conf_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6103 |
"\<lbrakk>n < length lm; crsp_l ly (as, lm) (s, l, r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6104 |
\<Longrightarrow> \<exists> na. (\<lambda> (s', l', r'). s' = 0 \<and> mopup_stop (s', l', r') lm n ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6105 |
(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6106 |
((mop_bef n @ tshift mp_up (2 * n)), 0) na)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6107 |
apply(subgoal_tac "\<exists> stp. (\<lambda> (s, l, r). s = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6108 |
(t_steps (Suc 0, l, r) ((mop_bef n @ tshift mp_up (2 * n)), 0) stp)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6109 |
erule exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6110 |
apply(rule_tac x = stp in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6111 |
case_tac "(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6112 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6113 |
apply(subgoal_tac " mopup_inv (Suc 0, l, r) lm n ires") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6114 |
apply(subgoal_tac "mopup_inv (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6115 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp) lm n ires", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6116 |
apply(simp only: mopup_inv.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6117 |
apply(rule_tac mopup_inv_steps, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6118 |
apply(rule_tac mopup_init, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6119 |
apply(rule_tac mopup_halt, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6120 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6121 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6122 |
lemma mopup_halt_conf: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6123 |
assumes len: "n < length lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6124 |
and correspond: "crsp_l ly (as, lm) (s, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6125 |
shows |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6126 |
"\<exists> na. (\<lambda> (s', l', r'). ((\<exists>ln rn. s' = 0 \<and> l' = Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6127 |
\<and> r' = Oc\<^bsup>Suc (abc_lm_v lm n)\<^esup> @ Bk\<^bsup>rn\<^esup>))) |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6128 |
(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6129 |
((mop_bef n @ tshift mp_up (2 * n)), 0) na)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6130 |
using len correspond mopup_halt_conf_pre[of n lm ly as s l r ires] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6131 |
apply(simp add: mopup_stop.simps tape_of_nat_abv tape_of_nat_list.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6132 |
done |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6133 |
|
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6134 |
subsection {* Final results about Abacus machine *} |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6135 |
|
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6136 |
lemma mopup_halt_bef: "\<lbrakk>n < length lm; crsp_l ly (as, lm) (s, l, r) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6137 |
\<Longrightarrow> \<exists>stp. (\<lambda>(s, l, r). s \<noteq> 0 \<and> ((\<lambda> (s', l', r'). s' = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6138 |
(t_step (s, l, r) (mop_bef n @ tshift mp_up (2 * n), 0)))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6139 |
(t_steps (Suc 0, l, r) (mop_bef n @ tshift mp_up (2 * n), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6140 |
apply(insert mopup_halt[of n lm ly as s l r ires], simp, erule_tac exE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6141 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6142 |
fix stp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6143 |
assume "n < length lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6144 |
"crsp_l ly (as, lm) (s, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6145 |
"(\<lambda>(s, l, r). s = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6146 |
(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6147 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6148 |
thus "\<exists>stp. (\<lambda>(s, ab). 0 < s \<and> (\<lambda>(s', l', r'). s' = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6149 |
(t_step (s, ab) (mop_bef n @ tshift mp_up (2 * n), 0))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6150 |
(t_steps (Suc 0, l, r) (mop_bef n @ tshift mp_up (2 * n), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6151 |
proof(induct stp, simp add: t_steps.simps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6152 |
fix stpa |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6153 |
assume h1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6154 |
"(\<lambda>(s, l, r). s = 0) (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6155 |
(mop_bef n @ tshift mp_up (2 * n), 0) stpa) \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6156 |
\<exists>stp. (\<lambda>(s, ab). 0 < s \<and> (\<lambda>(s', l', r'). s' = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6157 |
(t_step (s, ab) (mop_bef n @ tshift mp_up (2 * n), 0))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6158 |
(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6159 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6160 |
and h2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6161 |
"(\<lambda>(s, l, r). s = 0) (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6162 |
(mop_bef n @ tshift mp_up (2 * n), 0) (Suc stpa))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6163 |
"n < length lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6164 |
"crsp_l ly (as, lm) (s, l, r) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6165 |
thus "\<exists>stp. (\<lambda>(s, ab). 0 < s \<and> (\<lambda>(s', l', r'). s' = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6166 |
(t_step (s, ab) (mop_bef n @ tshift mp_up (2 * n), 0))) ( |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6167 |
t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6168 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6169 |
apply(case_tac "(\<lambda>(s, l, r). s = 0) (t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6170 |
(mop_bef n @ tshift mp_up (2 * n), 0) stpa)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6171 |
simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6172 |
apply(rule_tac x = "stpa" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6173 |
apply(case_tac "(t_steps (Suc 0, l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6174 |
(mop_bef n @ tshift mp_up (2 * n), 0) stpa)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6175 |
simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6176 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6177 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6178 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6179 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6180 |
lemma tshift_nth_state0: "\<lbrakk>n < length tp; tp ! n = (a, 0)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6181 |
\<Longrightarrow> tshift tp off ! n = (a, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6182 |
apply(induct n, case_tac tp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6183 |
apply(auto simp: tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6184 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6185 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6186 |
lemma shift_length: "length (tshift tp n) = length tp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6187 |
apply(auto simp: tshift.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6188 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6189 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6190 |
lemma even_Suc_le: "\<lbrakk>y mod 2 = 0; 2 * x < y\<rbrakk> \<Longrightarrow> Suc (2 * x) < y" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6191 |
by arith |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6192 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6193 |
lemma [simp]: "(4::nat) * n mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6194 |
by arith |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6195 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6196 |
lemma tm_append_fetch_equal: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6197 |
"\<lbrakk>t_ncorrect (tm_of aprog); s'> 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6198 |
fetch (mop_bef n @ tshift mp_up (2 * n)) s' b = (a, 0)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6199 |
\<Longrightarrow> fetch (tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6200 |
(length (tm_of aprog) div 2)) (s' + length (tm_of aprog) div 2) b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6201 |
= (a, 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6202 |
apply(case_tac s', simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6203 |
apply(auto simp: fetch.simps nth_of.simps t_ncorrect.simps shift_length nth_append |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6204 |
tshift.simps split: list.splits block.splits split: if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6205 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6206 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6207 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6208 |
"\<lbrakk>t_ncorrect (tm_of aprog); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6209 |
t_step (s', l', r') (mop_bef n @ tshift mp_up (2 * n), 0) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6210 |
(0, l'', r''); s' > 0\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6211 |
\<Longrightarrow> t_step (s' + length (tm_of aprog) div 2, l', r') |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6212 |
(tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6213 |
(length (tm_of aprog) div 2), 0) = (0, l'', r'')" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6214 |
apply(simp add: t_step.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6215 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6216 |
"(fetch (mop_bef n @ tshift mp_up (2 * n)) s' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6217 |
(case r' of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6218 |
= (fetch (tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6219 |
(length (tm_of aprog) div 2)) (s' + length (tm_of aprog) div 2) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6220 |
(case r' of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6221 |
apply(case_tac "(fetch (mop_bef n @ tshift mp_up (2 * n)) s' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6222 |
(case r' of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6223 |
apply(drule_tac tm_append_fetch_equal, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6224 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6225 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6226 |
lemma [intro]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6227 |
"start_of (layout_of aprog) (length aprog) - Suc 0 = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6228 |
length (tm_of aprog) div 2" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6229 |
apply(subgoal_tac "abc2t_correct aprog") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6230 |
apply(insert pre_lheq[of "concat (take (length aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6231 |
(tms_of aprog))" "length aprog" aprog], simp add: tm_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6232 |
by auto |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6233 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6234 |
lemma tm_append_stop_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6235 |
"\<lbrakk>t_ncorrect (tm_of aprog); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6236 |
t_ncorrect (mop_bef n @ tshift mp_up (2 * n)); n < length lm; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6237 |
(t_steps (Suc 0, l, r) (mop_bef n @ tshift mp_up (2 * n), 0) stp) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6238 |
(s', l', r'); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6239 |
s' \<noteq> 0; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6240 |
t_step (s', l', r') (mop_bef n @ tshift mp_up (2 * n), 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6241 |
= (0, l'', r'')\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6242 |
\<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6243 |
(t_steps ((start_of (layout_of aprog) (length aprog), l, r)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6244 |
(tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6245 |
(start_of (layout_of aprog) (length aprog) - Suc 0), 0) (Suc stp)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6246 |
= (0, l'', r'')" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6247 |
apply(insert tm_append_steps_equal[of "tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6248 |
"(mop_bef n @ tshift mp_up (2 * n))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6249 |
"(start_of (layout_of aprog) (length aprog) - Suc 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6250 |
"Suc 0" l r stp], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6251 |
apply(subgoal_tac "(start_of (layout_of aprog) (length aprog) - Suc 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6252 |
= (length (tm_of aprog) div 2)", simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6253 |
apply(case_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6254 |
"(t_steps (start_of (layout_of aprog) (length aprog), l, r) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6255 |
(tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6256 |
(length (tm_of aprog) div 2), 0) stp)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6257 |
apply(subgoal_tac "start_of (layout_of aprog) (length aprog) > 0", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6258 |
case_tac "start_of (layout_of aprog) (length aprog)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6259 |
simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6260 |
apply(rule startof_not0, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6261 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6262 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6263 |
lemma start_of_out_range: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6264 |
"as \<ge> length aprog \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6265 |
start_of (layout_of aprog) as = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6266 |
start_of (layout_of aprog) (length aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6267 |
apply(induct as, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6268 |
apply(case_tac "length aprog = Suc as", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6269 |
apply(simp add: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6270 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6271 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6272 |
lemma [intro]: "t_ncorrect (tm_of aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6273 |
apply(simp add: tm_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6274 |
apply(insert tms_mod2[of "length aprog" aprog], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6275 |
simp add: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6276 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6277 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6278 |
lemma abacus_turing_eq_halt_case_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6279 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6280 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6281 |
crsp_l ly ac tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6282 |
n < length am; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6283 |
abc_steps_l ac aprog stp = (as, am); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6284 |
mop_ss = start_of ly (length aprog); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6285 |
as \<ge> length aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6286 |
\<Longrightarrow> \<exists> stp. (\<lambda> (s, l, r). s = 0 \<and> mopup_inv (0, l, r) am n ires) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6287 |
(t_steps tc (tprog @ (tMp n (mop_ss - 1)), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6288 |
apply(insert steps_crsp[of ly aprog tprog ac tc ires "(as, am)" stp], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6289 |
apply(case_tac "(t_steps tc (tm_of aprog, 0) n')", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6290 |
simp add: tMp.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6291 |
apply(subgoal_tac "t_ncorrect (mop_bef n @ tshift mp_up (2 * n))") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6292 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6293 |
fix n' a b c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6294 |
assume h1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6295 |
"crsp_l (layout_of aprog) ac tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6296 |
"abc_steps_l ac aprog stp = (as, am)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6297 |
"length aprog \<le> as" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6298 |
"crsp_l (layout_of aprog) (as, am) (a, b, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6299 |
"t_steps tc (tm_of aprog, 0) n' = (a, b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6300 |
"n < length am" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6301 |
"t_ncorrect (mop_bef n @ tshift mp_up (2 * n))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6302 |
hence h2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6303 |
"t_steps tc (tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6304 |
(start_of (layout_of aprog) (length aprog) - Suc 0), 0) n' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6305 |
= (a, b, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6306 |
apply(rule_tac tm_append_steps, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6307 |
apply(simp add: crsp_l.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6308 |
apply(simp add: crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6309 |
apply(rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6310 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6311 |
from h1 have h3: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6312 |
"\<exists>stp. (\<lambda>(s, l, r). s \<noteq> 0 \<and> ((\<lambda> (s', l', r'). s' = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6313 |
(t_step (s, l, r) (mop_bef n @ tshift mp_up (2 * n), 0)))) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6314 |
(t_steps (Suc 0, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6315 |
(mop_bef n @ tshift mp_up (2 * n), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6316 |
apply(rule_tac mopup_halt_bef, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6317 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6318 |
from h1 and h2 and h3 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6319 |
"\<exists>stp. case t_steps tc (tm_of aprog @ abacus.tshift (mop_bef n @ abacus.tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6320 |
(start_of (layout_of aprog) (length aprog) - Suc 0), 0) stp of (s, ab) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6321 |
\<Rightarrow> s = 0 \<and> mopup_inv (0, ab) am n ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6322 |
proof(erule_tac exE, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6323 |
case_tac "(t_steps (Suc 0, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6324 |
(mop_bef n @ tshift mp_up (2 * n), 0) stpa)", simp, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6325 |
case_tac "(t_step (aa, ba, ca) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6326 |
(mop_bef n @ tshift mp_up (2 * n), 0))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6327 |
fix stpa aa ba ca aaa baa caa |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6328 |
assume g1: "0 < aa \<and> aaa = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6329 |
"t_steps (Suc 0, b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6330 |
(mop_bef n @ tshift mp_up (2 * n), 0) stpa = (aa, ba,ca)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6331 |
"t_step (aa, ba, ca) (mop_bef n @ tshift mp_up (2 * n), 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6332 |
= (0, baa, caa)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6333 |
from h1 and this have g2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6334 |
"t_steps (start_of (layout_of aprog) (length aprog), b, c) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6335 |
(tm_of aprog @ tshift (mop_bef n @ tshift mp_up (2 * n)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6336 |
(start_of (layout_of aprog) (length aprog) - Suc 0), 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6337 |
(Suc stpa) = (0, baa, caa)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6338 |
apply(rule_tac tm_append_stop_step, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6339 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6340 |
from h1 and h2 and g1 and this show "?thesis" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6341 |
apply(rule_tac x = "n' + Suc stpa" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6342 |
apply(simp add: t_steps_ind del: t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6343 |
apply(subgoal_tac "a = start_of (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6344 |
(length aprog)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6345 |
apply(insert mopup_inv_steps[of n am "Suc 0" b c ires "Suc stpa"], |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6346 |
simp add: t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6347 |
apply(subgoal_tac "mopup_inv (Suc 0, b, c) am n ires", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6348 |
apply(rule_tac mopup_init, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6349 |
apply(simp add: crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6350 |
apply(erule_tac start_of_out_range) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6351 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6352 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6353 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6354 |
show " t_ncorrect (mop_bef n @ tshift mp_up (2 * n))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6355 |
apply(auto simp: t_ncorrect.simps tshift.simps mp_up_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6356 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6357 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6358 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6359 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6360 |
One of the main theorems about Abacus compilation. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6361 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6362 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6363 |
lemma abacus_turing_eq_halt_case: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6364 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6365 |
-- {* There is an Abacus program @{text "aprog"} with layout @{text "ly"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6366 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6367 |
and complied: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6368 |
-- {* The TM compiled from @{text "aprog"} is @{text "tprog"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6369 |
"tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6370 |
and correspond: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6371 |
-- {* TM configuration @{text "tc"} and Abacus configuration @{text "ac"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6372 |
are in correspondence: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6373 |
"crsp_l ly ac tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6374 |
and halt_state: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6375 |
-- {* @{text "as"} is a program label outside the range of @{text "aprog"}. So |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6376 |
if Abacus is in such a state, it is in halt state: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6377 |
"as \<ge> length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6378 |
and abc_exec: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6379 |
-- {* Supposing after @{text "stp"} step of execution, Abacus program @{text "aprog"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6380 |
reaches such a halt state: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6381 |
"abc_steps_l ac aprog stp = (as, am)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6382 |
and rs_len: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6383 |
-- {* @{text "n"} is a memory address in the range of Abacus memory @{text "am"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6384 |
"n < length am" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6385 |
and mopup_start: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6386 |
-- {* The startling label for mopup mahines, according to the layout and Abacus program |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6387 |
should be @{text "mop_ss"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6388 |
"mop_ss = start_of ly (length aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6389 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6390 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6391 |
After @{text "stp"} steps of execution of the TM composed of @{text "tprog"} and the mopup |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6392 |
TM @{text "(tMp n (mop_ss - 1))"} will halt and gives rise to a configuration which |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6393 |
only hold the content of memory cell @{text "n"}: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6394 |
*} |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6395 |
"\<exists> stp. (\<lambda> (s, l, r). \<exists> ln rn. s = 0 \<and> l = Bk\<^bsup>ln\<^esup> @ Bk # Bk # ires |
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6396 |
\<and> r = Oc\<^bsup>Suc (abc_lm_v am n)\<^esup> @ Bk\<^bsup>rn\<^esup>) |
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6397 |
(t_steps tc (tprog @ (tMp n (mop_ss - 1)), 0) stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6398 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6399 |
from layout complied correspond halt_state abc_exec rs_len mopup_start |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6400 |
and abacus_turing_eq_halt_case_pre [of ly aprog tprog ac tc ires n am stp as mop_ss] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6401 |
show "?thesis" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6402 |
apply(simp add: mopup_inv.simps mopup_stop.simps tape_of_nat_abv) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6403 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6404 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6405 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6406 |
lemma abc_unhalt_case_zero: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6407 |
"\<lbrakk>crsp_l (layout_of aprog) ac tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6408 |
n < length am; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6409 |
\<forall>stp. (\<lambda>(as, am). as < length aprog) (abc_steps_l ac aprog stp)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6410 |
\<Longrightarrow> \<exists>astp bstp. 0 \<le> bstp \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6411 |
crsp_l (layout_of aprog) (abc_steps_l ac aprog astp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6412 |
(t_steps tc (tm_of aprog, 0) bstp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6413 |
apply(rule_tac x = "Suc 0" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6414 |
apply(case_tac " abc_steps_l ac aprog (Suc 0)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6415 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6416 |
fix a b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6417 |
assume "crsp_l (layout_of aprog) ac tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6418 |
"abc_steps_l ac aprog (Suc 0) = (a, b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6419 |
thus "\<exists>bstp. crsp_l (layout_of aprog) (a, b) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6420 |
(t_steps tc (tm_of aprog, 0) bstp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6421 |
apply(insert steps_crsp[of "layout_of aprog" aprog |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6422 |
"tm_of aprog" ac tc ires "(a, b)" "Suc 0"], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6423 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6424 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6425 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6426 |
declare abc_steps_l.simps[simp del] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6427 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6428 |
lemma abc_steps_ind: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6429 |
"let (as, am) = abc_steps_l ac aprog stp in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6430 |
abc_steps_l ac aprog (Suc stp) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6431 |
abc_step_l (as, am) (abc_fetch as aprog) " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6432 |
proof(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6433 |
show "(\<lambda>(as, am). abc_steps_l ac aprog (Suc stp) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6434 |
abc_step_l (as, am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6435 |
(abc_steps_l ac aprog stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6436 |
proof(induct stp arbitrary: ac) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6437 |
fix ac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6438 |
show "(\<lambda>(as, am). abc_steps_l ac aprog (Suc 0) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6439 |
abc_step_l (as, am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6440 |
(abc_steps_l ac aprog 0)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6441 |
apply(case_tac "ac:: nat \<times> nat list", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6442 |
simp add: abc_steps_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6443 |
apply(case_tac "(abc_step_l (a, b) (abc_fetch a aprog))", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6444 |
simp add: abc_steps_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6445 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6446 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6447 |
fix stp ac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6448 |
assume h1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6449 |
"(\<And>ac. (\<lambda>(as, am). abc_steps_l ac aprog (Suc stp) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6450 |
abc_step_l (as, am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6451 |
(abc_steps_l ac aprog stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6452 |
thus |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6453 |
"(\<lambda>(as, am). abc_steps_l ac aprog (Suc (Suc stp)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6454 |
abc_step_l (as, am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6455 |
(abc_steps_l ac aprog (Suc stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6456 |
apply(case_tac "ac::nat \<times> nat list", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6457 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6458 |
"abc_steps_l (a, b) aprog (Suc (Suc stp)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6459 |
abc_steps_l (abc_step_l (a, b) (abc_fetch a aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6460 |
aprog (Suc stp)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6461 |
apply(case_tac "(abc_step_l (a, b) (abc_fetch a aprog))", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6462 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6463 |
fix a b aa ba |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6464 |
assume h2: "abc_step_l (a, b) (abc_fetch a aprog) = (aa, ba)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6465 |
from h1 and h2 show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6466 |
"(\<lambda>(as, am). abc_steps_l (aa, ba) aprog (Suc stp) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6467 |
abc_step_l (as, am) (abc_fetch as aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6468 |
(abc_steps_l (a, b) aprog (Suc stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6469 |
apply(insert h1[of "(aa, ba)"]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6470 |
apply(simp add: abc_steps_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6471 |
apply(insert h2, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6472 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6473 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6474 |
fix a b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6475 |
show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6476 |
"abc_steps_l (a, b) aprog (Suc (Suc stp)) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6477 |
abc_steps_l (abc_step_l (a, b) (abc_fetch a aprog)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6478 |
aprog (Suc stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6479 |
apply(simp only: abc_steps_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6480 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6481 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6482 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6483 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6484 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6485 |
lemma abc_unhalt_case_induct: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6486 |
"\<lbrakk>crsp_l (layout_of aprog) ac tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6487 |
n < length am; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6488 |
\<forall>stp. (\<lambda>(as, am). as < length aprog) (abc_steps_l ac aprog stp); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6489 |
stp \<le> bstp; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6490 |
crsp_l (layout_of aprog) (abc_steps_l ac aprog astp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6491 |
(t_steps tc (tm_of aprog, 0) bstp) ires\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6492 |
\<Longrightarrow> \<exists>astp bstp. Suc stp \<le> bstp \<and> crsp_l (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6493 |
(abc_steps_l ac aprog astp) (t_steps tc (tm_of aprog, 0) bstp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6494 |
apply(rule_tac x = "Suc astp" in exI) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6495 |
apply(case_tac "abc_steps_l ac aprog astp") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6496 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6497 |
fix a b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6498 |
assume |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6499 |
"\<forall>stp. (\<lambda>(as, am). as < length aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6500 |
(abc_steps_l ac aprog stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6501 |
"stp \<le> bstp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6502 |
"crsp_l (layout_of aprog) (abc_steps_l ac aprog astp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6503 |
(t_steps tc (tm_of aprog, 0) bstp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6504 |
"abc_steps_l ac aprog astp = (a, b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6505 |
thus |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6506 |
"\<exists>bstp\<ge>Suc stp. crsp_l (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6507 |
(abc_steps_l ac aprog (Suc astp)) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6508 |
(t_steps tc (tm_of aprog, 0) bstp) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6509 |
apply(insert crsp_inside[of "layout_of aprog" aprog |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6510 |
"tm_of aprog" a b "(t_steps tc (tm_of aprog, 0) bstp)" "ires"], auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6511 |
apply(erule_tac x = astp in allE, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6512 |
apply(rule_tac x = "bstp + stpa" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6513 |
apply(insert abc_steps_ind[of ac aprog "astp"], simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6514 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6515 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6516 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6517 |
lemma abc_unhalt_case: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6518 |
"\<lbrakk>crsp_l (layout_of aprog) ac tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6519 |
\<forall>stp. (\<lambda>(as, am). as < length aprog) (abc_steps_l ac aprog stp)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6520 |
\<Longrightarrow> (\<exists> astp bstp. bstp \<ge> stp \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6521 |
crsp_l (layout_of aprog) (abc_steps_l ac aprog astp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6522 |
(t_steps tc (tm_of aprog, 0) bstp) ires)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6523 |
apply(induct stp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6524 |
apply(rule_tac abc_unhalt_case_zero, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6525 |
apply(rule_tac abc_unhalt_case_induct, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6526 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6527 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6528 |
lemma abacus_turing_eq_unhalt_case_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6529 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6530 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6531 |
crsp_l ly ac tc ires; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6532 |
\<forall> stp. ((\<lambda> (as, am). as < length aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6533 |
(abc_steps_l ac aprog stp)); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6534 |
mop_ss = start_of ly (length aprog)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6535 |
\<Longrightarrow> (\<not> (\<exists> stp. (\<lambda> (s, l, r). s = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6536 |
(t_steps tc (tprog @ (tMp n (mop_ss - 1)), 0) stp)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6537 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6538 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6539 |
fix stp a b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6540 |
assume h1: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6541 |
"crsp_l (layout_of aprog) ac tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6542 |
"\<forall>stp. (\<lambda>(as, am). as < length aprog) (abc_steps_l ac aprog stp)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6543 |
"t_steps tc (tm_of aprog @ tMp n (start_of (layout_of aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6544 |
(length aprog) - Suc 0), 0) stp = (0, a, b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6545 |
thus "False" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6546 |
proof(insert abc_unhalt_case[of aprog ac tc ires stp], auto, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6547 |
case_tac "(abc_steps_l ac aprog astp)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6548 |
case_tac "(t_steps tc (tm_of aprog, 0) bstp)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6549 |
fix astp bstp aa ba aaa baa c |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6550 |
assume h2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6551 |
"abc_steps_l ac aprog astp = (aa, ba)" "stp \<le> bstp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6552 |
"t_steps tc (tm_of aprog, 0) bstp = (aaa, baa, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6553 |
"crsp_l (layout_of aprog) (aa, ba) (aaa, baa, c) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6554 |
hence h3: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6555 |
"t_steps tc (tm_of aprog @ tMp n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6556 |
(start_of (layout_of aprog) (length aprog) - Suc 0), 0) bstp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6557 |
= (aaa, baa, c)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6558 |
apply(intro tm_append_steps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6559 |
apply(simp add: crsp_l.simps, rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6560 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6561 |
from h2 have h4: "\<exists> diff. bstp = stp + diff" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6562 |
apply(rule_tac x = "bstp - stp" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6563 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6564 |
from h4 and h3 and h2 and h1 show "?thesis" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6565 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6566 |
apply(simp add: state0_ind crsp_l.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6567 |
apply(subgoal_tac "start_of (layout_of aprog) aa > 0", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6568 |
apply(rule startof_not0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6569 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6570 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6571 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6572 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6573 |
lemma abacus_turing_eq_unhalt_case: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6574 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6575 |
-- {* There is an Abacus program @{text "aprog"} with layout @{text "ly"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6576 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6577 |
and compiled: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6578 |
-- {* The TM compiled from @{text "aprog"} is @{text "tprog"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6579 |
"tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6580 |
and correspond: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6581 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6582 |
TM configuration @{text "tc"} and Abacus configuration @{text "ac"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6583 |
are in correspondence: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6584 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6585 |
"crsp_l ly ac tc ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6586 |
and abc_unhalt: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6587 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6588 |
If, no matter how many steps the Abacus program @{text "aprog"} executes, it |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6589 |
may never reach a halt state. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6590 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6591 |
"\<forall> stp. ((\<lambda> (as, am). as < length aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6592 |
(abc_steps_l ac aprog stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6593 |
and mopup_start: "mop_ss = start_of ly (length aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6594 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6595 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6596 |
The the TM composed of TM @{text "tprog"} and the moupup TM may never reach a halt state as well. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6597 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6598 |
"\<not> (\<exists> stp. (\<lambda> (s, l, r). s = 0) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6599 |
(t_steps tc (tprog @ (tMp n (mop_ss - 1)), 0) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6600 |
using layout compiled correspond abc_unhalt mopup_start |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6601 |
apply(rule_tac abacus_turing_eq_unhalt_case_pre, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6602 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6603 |
|
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6604 |
|
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6605 |
definition abc_list_crsp:: "nat list \<Rightarrow> nat list \<Rightarrow> bool" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6606 |
where |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6607 |
"abc_list_crsp xs ys = (\<exists> n. xs = ys @ 0\<^bsup>n\<^esup> \<or> ys = xs @ 0\<^bsup>n\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6608 |
lemma [intro]: "abc_list_crsp (lm @ 0\<^bsup>m\<^esup>) lm" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6609 |
apply(auto simp: abc_list_crsp_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6610 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6611 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6612 |
lemma abc_list_crsp_lm_v: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6613 |
"abc_list_crsp lma lmb \<Longrightarrow> abc_lm_v lma n = abc_lm_v lmb n" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6614 |
apply(auto simp: abc_list_crsp_def abc_lm_v.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6615 |
nth_append exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6616 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6617 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6618 |
lemma rep_app_cons_iff: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6619 |
"k < n \<Longrightarrow> replicate n a[k:=b] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6620 |
replicate k a @ b # replicate (n - k - 1) a" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6621 |
apply(induct n arbitrary: k, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6622 |
apply(simp split:nat.splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6623 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6624 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6625 |
lemma abc_list_crsp_lm_s: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6626 |
"abc_list_crsp lma lmb \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6627 |
abc_list_crsp (abc_lm_s lma m n) (abc_lm_s lmb m n)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6628 |
apply(auto simp: abc_list_crsp_def abc_lm_v.simps abc_lm_s.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6629 |
apply(simp_all add: list_update_append, auto simp: exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6630 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6631 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6632 |
assume h: "m < length lmb + na" " \<not> m < length lmb" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6633 |
hence "m - length lmb < na" by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6634 |
hence "replicate na 0[(m- length lmb):= n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6635 |
replicate (m - length lmb) 0 @ n # |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6636 |
replicate (na - (m - length lmb) - 1) 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6637 |
apply(erule_tac rep_app_cons_iff) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6638 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6639 |
thus "\<exists>nb. replicate na 0[m - length lmb := n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6640 |
replicate (m - length lmb) 0 @ n # replicate nb 0 \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6641 |
replicate (m - length lmb) 0 @ [n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6642 |
replicate na 0[m - length lmb := n] @ replicate nb 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6643 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6644 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6645 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6646 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6647 |
assume h: "\<not> m < length lmb + na" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6648 |
show |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6649 |
"\<exists>nb. replicate na 0 @ replicate (m - (length lmb + na)) 0 @ [n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6650 |
replicate (m - length lmb) 0 @ n # replicate nb 0 \<or> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6651 |
replicate (m - length lmb) 0 @ [n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6652 |
replicate na 0 @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6653 |
replicate (m - (length lmb + na)) 0 @ n # replicate nb 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6654 |
apply(rule_tac x = 0 in exI, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6655 |
using h |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6656 |
apply(simp add: replicate_add[THEN sym]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6657 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6658 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6659 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6660 |
assume h: "\<not> m < length lma" "m < length lma + na" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6661 |
hence "m - length lma < na" by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6662 |
hence |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6663 |
"replicate na 0[(m- length lma):= n] = replicate (m - length lma) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6664 |
0 @ n # replicate (na - (m - length lma) - 1) 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6665 |
apply(erule_tac rep_app_cons_iff) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6666 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6667 |
thus "\<exists>nb. replicate (m - length lma) 0 @ [n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6668 |
replicate na 0[m - length lma := n] @ replicate nb 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6669 |
\<or> replicate na 0[m - length lma := n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6670 |
replicate (m - length lma) 0 @ n # replicate nb 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6671 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6672 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6673 |
next |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6674 |
fix na |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6675 |
assume "\<not> m < length lma + na" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6676 |
thus " \<exists>nb. replicate (m - length lma) 0 @ [n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6677 |
replicate na 0 @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6678 |
replicate (m - (length lma + na)) 0 @ n # replicate nb 0 |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6679 |
\<or> replicate na 0 @ |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6680 |
replicate (m - (length lma + na)) 0 @ [n] = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6681 |
replicate (m - length lma) 0 @ n # replicate nb 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6682 |
apply(rule_tac x = 0 in exI, simp, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6683 |
apply(simp add: replicate_add[THEN sym]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6684 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6685 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6686 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6687 |
lemma abc_list_crsp_step: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6688 |
"\<lbrakk>abc_list_crsp lma lmb; abc_step_l (aa, lma) i = (a, lma'); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6689 |
abc_step_l (aa, lmb) i = (a', lmb')\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6690 |
\<Longrightarrow> a' = a \<and> abc_list_crsp lma' lmb'" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6691 |
apply(case_tac i, auto simp: abc_step_l.simps |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6692 |
abc_list_crsp_lm_s abc_list_crsp_lm_v Let_def |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6693 |
split: abc_inst.splits if_splits) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6694 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6695 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6696 |
lemma abc_steps_red: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6697 |
"abc_steps_l ac aprog stp = (as, am) \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6698 |
abc_steps_l ac aprog (Suc stp) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6699 |
abc_step_l (as, am) (abc_fetch as aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6700 |
using abc_steps_ind[of ac aprog stp] |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6701 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6702 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6703 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6704 |
lemma abc_list_crsp_steps: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6705 |
"\<lbrakk>abc_steps_l (0, lm @ 0\<^bsup>m\<^esup>) aprog stp = (a, lm'); aprog \<noteq> []\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6706 |
\<Longrightarrow> \<exists> lma. abc_steps_l (0, lm) aprog stp = (a, lma) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6707 |
abc_list_crsp lm' lma" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6708 |
apply(induct stp arbitrary: a lm', simp add: abc_steps_l.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6709 |
apply(case_tac "abc_steps_l (0, lm @ 0\<^bsup>m\<^esup>) aprog stp", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6710 |
simp add: abc_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6711 |
proof - |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6712 |
fix stp a lm' aa b |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6713 |
assume ind: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6714 |
"\<And>a lm'. aa = a \<and> b = lm' \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6715 |
\<exists>lma. abc_steps_l (0, lm) aprog stp = (a, lma) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6716 |
abc_list_crsp lm' lma" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6717 |
and h: "abc_steps_l (0, lm @ 0\<^bsup>m\<^esup>) aprog (Suc stp) = (a, lm')" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6718 |
"abc_steps_l (0, lm @ 0\<^bsup>m\<^esup>) aprog stp = (aa, b)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6719 |
"aprog \<noteq> []" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6720 |
hence g1: "abc_steps_l (0, lm @ 0\<^bsup>m\<^esup>) aprog (Suc stp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6721 |
= abc_step_l (aa, b) (abc_fetch aa aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6722 |
apply(rule_tac abc_steps_red, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6723 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6724 |
have "\<exists>lma. abc_steps_l (0, lm) aprog stp = (aa, lma) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6725 |
abc_list_crsp b lma" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6726 |
apply(rule_tac ind, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6727 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6728 |
from this obtain lma where g2: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6729 |
"abc_steps_l (0, lm) aprog stp = (aa, lma) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6730 |
abc_list_crsp b lma" .. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6731 |
hence g3: "abc_steps_l (0, lm) aprog (Suc stp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6732 |
= abc_step_l (aa, lma) (abc_fetch aa aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6733 |
apply(rule_tac abc_steps_red, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6734 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6735 |
show "\<exists>lma. abc_steps_l (0, lm) aprog (Suc stp) = (a, lma) \<and> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6736 |
abc_list_crsp lm' lma" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6737 |
using g1 g2 g3 h |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6738 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6739 |
apply(case_tac "abc_step_l (aa, b) (abc_fetch aa aprog)", |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6740 |
case_tac "abc_step_l (aa, lma) (abc_fetch aa aprog)", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6741 |
apply(rule_tac abc_list_crsp_step, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6742 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6743 |
qed |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6744 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6745 |
lemma [simp]: "(case ca of [] \<Rightarrow> Bk | Bk # xs \<Rightarrow> Bk | Oc # xs \<Rightarrow> Oc) = |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6746 |
(case ca of [] \<Rightarrow> Bk | x # xs \<Rightarrow> x)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6747 |
by(case_tac ca, simp_all, case_tac a, simp, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6748 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6749 |
lemma steps_eq: "length t mod 2 = 0 \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6750 |
t_steps c (t, 0) stp = steps c t stp" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6751 |
apply(induct stp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6752 |
apply(simp add: steps.simps t_steps.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6753 |
apply(simp add:tstep_red t_steps_ind) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6754 |
apply(case_tac "steps c t stp", simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6755 |
apply(auto simp: t_step.simps tstep.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6756 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6757 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6758 |
lemma crsp_l_start: "crsp_l ly (0, lm) (Suc 0, Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>) ires" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6759 |
apply(simp add: crsp_l.simps, auto simp: start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6760 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6761 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6762 |
lemma t_ncorrect_app: "\<lbrakk>t_ncorrect t1; t_ncorrect t2\<rbrakk> \<Longrightarrow> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6763 |
t_ncorrect (t1 @ t2)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6764 |
apply(simp add: t_ncorrect.simps, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6765 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6766 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6767 |
lemma [simp]: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6768 |
"(length (tm_of aprog) + |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6769 |
length (tMp n (start_of ly (length aprog) - Suc 0))) mod 2 = 0" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6770 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6771 |
"t_ncorrect (tm_of aprog @ tMp n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6772 |
(start_of ly (length aprog) - Suc 0))") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6773 |
apply(simp add: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6774 |
apply(rule_tac t_ncorrect_app, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6775 |
auto simp: tMp.simps t_ncorrect.simps tshift.simps mp_up_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6776 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6777 |
"t_ncorrect (tm_of aprog)", simp add: t_ncorrect.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6778 |
apply(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6779 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6780 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6781 |
lemma [simp]: "takeWhile (\<lambda>a. a = Oc) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6782 |
(replicate rs Oc @ replicate rn Bk) = replicate rs Oc" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6783 |
apply(induct rs, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6784 |
apply(induct rn, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6785 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6786 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6787 |
lemma abacus_turing_eq_halt': |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6788 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6789 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6790 |
n < length am; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6791 |
abc_steps_l (0, lm) aprog stp = (as, am); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6792 |
mop_ss = start_of ly (length aprog); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6793 |
as \<ge> length aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6794 |
\<Longrightarrow> \<exists> stp m l. steps (Suc 0, Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6795 |
(tprog @ (tMp n (mop_ss - 1))) stp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6796 |
= (0, Bk\<^bsup>m\<^esup> @ Bk # Bk # ires, Oc\<^bsup>Suc (abc_lm_v am n)\<^esup> @ Bk\<^bsup>l\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6797 |
apply(drule_tac tc = "(Suc 0, Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>)" in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6798 |
abacus_turing_eq_halt_case, auto intro: crsp_l_start) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6799 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6800 |
"length (tm_of aprog @ tMp n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6801 |
(start_of ly (length aprog) - Suc 0)) mod 2 = 0") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6802 |
apply(simp add: steps_eq) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6803 |
apply(rule_tac x = stpa in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6804 |
simp add: exponent_def, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6805 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6806 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6807 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6808 |
lemma list_length: "xs = ys \<Longrightarrow> length xs = length ys" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6809 |
by simp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6810 |
lemma [elim]: "tinres (Bk\<^bsup>m\<^esup>) b \<Longrightarrow> \<exists>m. b = Bk\<^bsup>m\<^esup>" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6811 |
apply(auto simp: tinres_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6812 |
apply(rule_tac x = "m-n" in exI, |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6813 |
auto simp: exponent_def replicate_add[THEN sym]) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6814 |
apply(case_tac "m < n", auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6815 |
apply(drule_tac list_length, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6816 |
apply(subgoal_tac "\<exists> d. m = d + n", auto simp: replicate_add) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6817 |
apply(rule_tac x = "m - n" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6818 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6819 |
lemma [intro]: "tinres [Bk] (Bk\<^bsup>k\<^esup>) " |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6820 |
apply(auto simp: tinres_def exponent_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6821 |
apply(case_tac k, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6822 |
apply(rule_tac x = "Suc 0" in exI, simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6823 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6824 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6825 |
lemma abacus_turing_eq_halt_pre: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6826 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6827 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6828 |
n < length am; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6829 |
abc_steps_l (0, lm) aprog stp = (as, am); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6830 |
mop_ss = start_of ly (length aprog); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6831 |
as \<ge> length aprog\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6832 |
\<Longrightarrow> \<exists> stp m l. steps (Suc 0, Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6833 |
(tprog @ (tMp n (mop_ss - 1))) stp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6834 |
= (0, Bk\<^bsup>m\<^esup> @ Bk # Bk # ires, Oc\<^bsup>Suc (abc_lm_v am n)\<^esup> @ Bk\<^bsup>l\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6835 |
using abacus_turing_eq_halt' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6836 |
apply(simp) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6837 |
done |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6838 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6839 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6840 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6841 |
Main theorem for the case when the original Abacus program does halt. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6842 |
*} |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6843 |
|
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6844 |
lemma abacus_turing_eq_halt: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6845 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6846 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6847 |
-- {* There is an Abacus program @{text "aprog"} with layout @{text "ly"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6848 |
and compiled: "tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6849 |
-- {* The TM compiled from @{text "aprog"} is @{text "tprog"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6850 |
and halt_state: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6851 |
-- {* @{text "as"} is a program label outside the range of @{text "aprog"}. So |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6852 |
if Abacus is in such a state, it is in halt state: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6853 |
"as \<ge> length aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6854 |
and abc_exec: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6855 |
-- {* Supposing after @{text "stp"} step of execution, Abacus program @{text "aprog"} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6856 |
reaches such a halt state: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6857 |
"abc_steps_l (0, lm) aprog stp = (as, am)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6858 |
and rs_locate: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6859 |
-- {* @{text "n"} is a memory address in the range of Abacus memory @{text "am"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6860 |
"n < length am" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6861 |
and mopup_start: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6862 |
-- {* The startling label for mopup mahines, according to the layout and Abacus program |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6863 |
should be @{text "mop_ss"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6864 |
"mop_ss = start_of ly (length aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6865 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6866 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6867 |
After @{text "stp"} steps of execution of the TM composed of @{text "tprog"} and the mopup |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6868 |
TM @{text "(tMp n (mop_ss - 1))"} will halt and gives rise to a configuration which |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6869 |
only hold the content of memory cell @{text "n"}: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6870 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6871 |
"\<exists> stp m l. steps (Suc 0, Bk # Bk # ires, <lm> @ Bk\<^bsup>rn\<^esup>) (tprog @ (tMp n (mop_ss - 1))) stp |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6872 |
= (0, Bk\<^bsup>m\<^esup> @ Bk # Bk # ires, Oc\<^bsup>Suc (abc_lm_v am n)\<^esup> @ Bk\<^bsup>l\<^esup>)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6873 |
using layout compiled halt_state abc_exec rs_locate mopup_start |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6874 |
by(rule_tac abacus_turing_eq_halt_pre, auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6875 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6876 |
lemma abacus_turing_eq_uhalt': |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6877 |
"\<lbrakk>ly = layout_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6878 |
tprog = tm_of aprog; |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6879 |
\<forall> stp. ((\<lambda> (as, am). as < length aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6880 |
(abc_steps_l (0, lm) aprog stp)); |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6881 |
mop_ss = start_of ly (length aprog)\<rbrakk> |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6882 |
\<Longrightarrow> (\<not> (\<exists> stp. isS0 (steps (Suc 0, [Bk, Bk], <lm>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6883 |
(tprog @ (tMp n (mop_ss - 1))) stp)))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6884 |
apply(drule_tac tc = "(Suc 0, [Bk, Bk], <lm>)" and n = n and ires = "[]" in |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6885 |
abacus_turing_eq_unhalt_case, auto intro: crsp_l_start) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6886 |
apply(simp add: crsp_l.simps start_of.simps) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6887 |
apply(erule_tac x = stp in allE, erule_tac x = stp in allE) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6888 |
apply(subgoal_tac |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6889 |
"length (tm_of aprog @ tMp n |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6890 |
(start_of ly (length aprog) - Suc 0)) mod 2 = 0") |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6891 |
apply(simp add: steps_eq, auto simp: isS0_def) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6892 |
done |
371
48b231495281
Some illustration added together with more explanations.
zhang
parents:
370
diff
changeset
|
6893 |
|
370
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6894 |
text {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6895 |
Main theorem for the case when the original Abacus program does not halt. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6896 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6897 |
lemma abacus_turing_eq_uhalt: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6898 |
assumes layout: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6899 |
-- {* There is an Abacus program @{text "aprog"} with layout @{text "ly"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6900 |
"ly = layout_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6901 |
and compiled: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6902 |
-- {* The TM compiled from @{text "aprog"} is @{text "tprog"}: *} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6903 |
"tprog = tm_of aprog" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6904 |
and abc_unhalt: |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6905 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6906 |
If, no matter how many steps the Abacus program @{text "aprog"} executes, it |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6907 |
may never reach a halt state. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6908 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6909 |
"\<forall> stp. ((\<lambda> (as, am). as < length aprog) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6910 |
(abc_steps_l (0, lm) aprog stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6911 |
and mop_start: "mop_ss = start_of ly (length aprog)" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6912 |
shows |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6913 |
-- {* |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6914 |
The the TM composed of TM @{text "tprog"} and the moupup TM may never reach a halt state as well. |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6915 |
*} |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6916 |
"\<not> (\<exists> stp. isS0 (steps (Suc 0, [Bk, Bk], <lm>) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6917 |
(tprog @ (tMp n (mop_ss - 1))) stp))" |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6918 |
using abacus_turing_eq_uhalt' |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6919 |
layout compiled abc_unhalt mop_start |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6920 |
by(auto) |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6921 |
|
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6922 |
end |
1ce04eb1c8ad
Initial upload of the formal construction of Universal Turing Machine.
zhang
parents:
diff
changeset
|
6923 |