turing-machines

Multiplication and Module Turing Machine


I need help designing a turing machine that will compute the following f(x,y) = x*y mod 4. how to approach this problem in binary base where $x$ and $y$ have two bits?


Solution

  • Could probably be slightly optimised, but it does the trick:

    Assumption - input consists (solely) of two binary numbers (with leading 0, so 01 instead of 1 and 00 instead of 0), separated by a blank symbol (_). Result is a binary number with leading, representing x * y mod 4.

    Transition table (state current_symbol new_symbol move_direction new_state):

    0 0 0 r 0
    0 1 1 r 0
    0 _ _ r 1
    1 0 0 r 1
    1 1 1 r 1
    1 _ x r 2
    2 _ 0 r 3 
    3 _ 0 l 4
    4 0 0 l 4
    4 x x l 5
    5 0 0 l 5
    5 1 1 l 5
    5 x x l 5
    5 _ _ l 6
    6 1 0 r 7
    6 0 0 l 16
    7 0 0 r 7
    7 1 1 r 7
    7 _ _ r 7
    7 x x l 8
    8 0 0 l 9
    8 1 1 r 10
    9 0 0 l 5
    9 1 1 r 14
    10 x x r 10
    10 0 0 r 11
    10 1 1 r 11
    11 0 1 l 12
    11 1 0 l 18
    12 0 0 l 12
    12 1 1 l 12
    12 x x l 13
    13 0 0 l 9
    13 1 1 l 9
    14 0 0 r 14
    14 1 1 r 14
    14 x x r 15
    15 0 1 r 5
    15 1 0 r 5
    16 0 _ r 19
    16 1 0 r 17
    17 0 1 r 7
    18 0 1 l 12
    18 1 0 l 12
    19 0 _ r 19
    19 1 _ r 19
    19 _ _ r 19
    19 x _ r halt
    

    Rough state description: