aboutsummaryrefslogtreecommitdiff
path: root/TuringMachines.dcl
blob: d97600a8126c95d343e887b3537ef7c1bdc2f8c8 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
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