5 #include <machine/Turing/simpleTuringMachine.h>
6 #include <transition/Turing/simpleTuringMachineTransition.h>
24 bool hasHalfTape =
false,
38 using typename SimpleTuringMachine_::StateType;
39 using typename SimpleTuringMachine_::SymbolType;
40 using typename SimpleTuringMachine_::HasHalfTape;
41 using typename SimpleTuringMachine_::IsAccepting;
42 using typename SimpleTuringMachine_::StorageType;
43 using typename SimpleTuringMachine_::IsAlternating;
44 using typename SimpleTuringMachine_::TransitionType;
45 using typename SimpleTuringMachine_::ApplyHelperType;
46 using typename SimpleTuringMachine_::IsDeterministic;
47 using typename SimpleTuringMachine_::TransitionContainer;
48 using typename SimpleTuringMachine_::InitialStateContainer;
49 using typename SimpleTuringMachine_::OptionalHelpedTransition;
51 static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
52 static_assert(std::is_same_v<StateType, StateType_>);
53 static_assert(std::is_same_v<SymbolType, typename StorageType::SymbolType>);
54 static_assert(std::is_same_v<SymbolType, SymbolType_>);
55 static_assert(std::is_same_v<HasHalfTape, typename TransitionType::HasHalfTape>);
56 static_assert(HasHalfTape::value == hasHalfTape);
58 static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
59 static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
60 static_assert(std::is_same_v<IsDeterministic, std::true_type>);
61 static_assert(std::is_same_v<TransitionContainer, std::set<std::pair<const TransitionType&, ApplyHelperType>>>);
62 static_assert(std::is_same_v<InitialStateContainer, std::set<StateType>>);
63 static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
92 const StateType& initialState,
93 const std::set<StateType>& finalStates,
94 const std::set<TransitionType>& transitions
97 initialState(initialState),
99 for(
const TransitionType& transition : transitions) {
100 this->transitions[transition.getPreState()].insert({transition.getPreSymbol(), transition});
127 return {{transitions.at(state).at(symbol), std::monostate()}};
129 catch (std::out_of_range) {
130 return {std::nullopt};
135 StateType initialState;
136 std::map<StateType, std::map<SymbolType, TransitionType>> transitions;