aboutsummaryrefslogtreecommitdiff
path: root/TuringMachines.dcl
diff options
context:
space:
mode:
Diffstat (limited to 'TuringMachines.dcl')
-rw-r--r--TuringMachines.dcl40
1 files changed, 40 insertions, 0 deletions
diff --git a/TuringMachines.dcl b/TuringMachines.dcl
new file mode 100644
index 0000000..d97600a
--- /dev/null
+++ b/TuringMachines.dcl
@@ -0,0 +1,40 @@
+definition module TuringMachines
+
+import StdMaybe
+import IterableClass
+from StdOverloaded import class ==, class toString
+from StdClass import class Eq
+
+:: TuringMachine a = { alphabet :: [a],
+ inputs :: [a],
+ transition :: Int (Maybe a) -> TuringMachineMove a }
+
+:: TuringMachineState a = { machine :: TuringMachine a,
+ state :: Int,
+ tapeHead :: Int,
+ tape :: Tape a,
+ running :: TuringMachineTermination }
+
+:: TuringMachineTermination = Running | Normal | Abnormal
+
+:: TuringMachineMove a = Step Int (Maybe a) Direction | Halt
+
+:: Direction = Left | Right
+
+:: Tape a :== [Maybe a]
+
+instance == Direction
+instance == (TuringMachineMove a) | == a
+instance == TuringMachineTermination
+
+instance toString Direction
+instance toString (TuringMachineMove a) | toString a
+instance toString TuringMachineTermination
+instance toString (Tape a) | toString a
+instance toString (TuringMachineState a) | toString a
+
+instance step (TuringMachineState a) | == a
+
+initTuringMachine :: (TuringMachine a) (Tape a) -> TuringMachineState a | Eq a
+run :: (TuringMachineState a) -> TuringMachineState a | == a
+