проверить, что детерминированная конечная функция перехода автоматов имеет ровно одно выходное состояние для каждого уникального входного алфавита - PullRequest
0 голосов
/ 07 мая 2018

Предположим, что мой DFA имеет следующую структуру:

dfa = DFA(
    {'q0','q1'}, # States
    {'0','1'}, # Alphabets
    {'q0':{'0':'q0', '1': 'q1'},
     'q1':{'0':'q1', '1': 'q0'}}, # Transition_funcs
    'q0', # Start_state
    {'q1'} # Final_state
    )

То, что я пытаюсь сделать, это проверить, что для каждого состояния моя таблица переходов имеет одну и только одну функцию перехода для каждого алфавита или сигмы. Я сделал следующее:

class DFA(object):
    def __init__(self, States=None, Alphabets=None, Transitio_funcs=None, Start_state=None, Final_states=None):
        self.States = Sates
        self.Alphabets = Alphabets
        self.Transition_funcs = Transition_funcs
        self.Start_state = Start_state
        self.Final_state = Final_state

    def validate(self):

        input = {}
        output = {}

        for k,v in self.Transition_funcs.items():
            for k1,v1 in v.items():
                input[k1] = count.get(k1,0) +1
                output[v1] = count.get(v1,0) +1
                for ks,vals in input:
                    if vals != 1
                        return False
                for ks,vals in output:
                    if vals != 1
                        return False   


        return True    

Насколько я понимаю, поскольку каждый уникальный вход имеет уникальное состояние вывода, мне нужно проверить, есть ли только один счетчик для каждого входного алфавита и только один счетчик для каждого выходного состояния. Однако я получаю следующую ошибку:

if vals != 1
           ^
SyntaxError: invalid syntax

Буду признателен, если кто-нибудь покажет мне, что именно мне не хватает.

1 Ответ

0 голосов
/ 07 мая 2018

Вы пропускаете : в обоих ваших if утверждениях, следовательно SyntaxError.

Следует читать,

if vals != 1:
...