TuringSim
C++ framework to simulate abstract computing models
simpleTuringMachine.h
1 #pragma once
2 
3 #include <map>
4 #include <variant>
5 
6 #include <machine/Turing/localTuringMachine.h>
7 #include <transition/Turing/simpleTuringMachineTransition.h>
8 
27  template<
28  typename StateType_,
29  typename SymbolType_,
30  bool deterministic = false,
31  bool hasHalfTape = false,
32  AcceptingStyle acceptingStyle = AcceptingStyle::NonAccepting
33  >
35  public LocalTuringMachine<
36  Transition::Turing::SimpleTuringMachineTransition<StateType_, SymbolType_, hasHalfTape>,
37  deterministic,
38  acceptingStyle,
39  std::set,
40  std::set> {
43  public:
44  using typename LocalTuringMachine_::StateType;
45  using typename LocalTuringMachine_::SymbolType;
46  using typename LocalTuringMachine_::HasHalfTape;
47  using typename LocalTuringMachine_::IsAccepting;
48  using typename LocalTuringMachine_::StorageType;
49  using typename LocalTuringMachine_::IsAlternating;
50  using typename LocalTuringMachine_::TransitionType;
51  using typename LocalTuringMachine_::ApplyHelperType;
52  using typename LocalTuringMachine_::IsDeterministic;
53  using typename LocalTuringMachine_::TransitionContainer;
54  using typename LocalTuringMachine_::InitialStateContainer;
55  using typename LocalTuringMachine_::OptionalHelpedTransition;
56 
57  static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
58  static_assert(std::is_same_v<StateType, StateType_>);
59  static_assert(std::is_same_v<SymbolType, typename StorageType::SymbolType>);
60  static_assert(std::is_same_v<SymbolType, SymbolType_>);
61  static_assert(std::is_same_v<HasHalfTape, typename TransitionType::HasHalfTape>);
62  static_assert(HasHalfTape::value == hasHalfTape);
63  static_assert(std::is_same_v<StorageType, Memory::TapeLike<hasHalfTape, SymbolType>>);
64  static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
65  static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
66  static_assert(IsDeterministic::value == deterministic);
67  static_assert(std::is_same_v<TransitionContainer, std::set<std::pair<const TransitionType&, ApplyHelperType>>>);
68  static_assert(std::is_same_v<InitialStateContainer, std::set<StateType>>);
69  static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
70 
71  static_assert(std::is_same_v<ApplyHelperType, std::monostate>);
73  "TransitionType must be SimpleTuringMachineTransition");
74 
76  SimpleTuringMachine() = delete;
90  virtual ~SimpleTuringMachine() override = default;
91 
96  SimpleTuringMachine(const std::set<StateType>& finalStates) : finalStates(finalStates) {}
97 
111  virtual bool isHaltingState(const StateType& state) const noexcept override final {
112  return finalStates.count(state) > 0;
113  }
114 
115  private:
116  std::set<StateType> finalStates;
117  };
118 }
TuringSim::Machine::Turing::SimpleTuringMachine::SimpleTuringMachine
SimpleTuringMachine()=delete
The default deleted constructor.
TuringSim::Machine::Turing::SimpleTuringMachine::SimpleTuringMachine
SimpleTuringMachine(SimpleTuringMachine &&)=default
The default move constructor.
TuringSim::Memory::TapeLike
std::conditional_t< isHalfTape, HalfTape::HalfTape< SymbolType >, Tape::Tape< SymbolType > > TapeLike
Definition: tapeLike.h:12
TuringSim::Machine::Turing::LocalTuringMachine
Turing machines that only reads the current cell on the tape to select matching transitions.
Definition: localTuringMachine.h:29
TuringSim::Machine::Turing::SimpleTuringMachine::isHaltingState
virtual bool isHaltingState(const StateType &state) const noexcept override final
Test if a given state is a halting one.
Definition: simpleTuringMachine.h:111
TuringSim::Machine::AcceptingStyle
AcceptingStyle
Whether the machine is accepting, alternating or nothing.
Definition: acceptingMachine.h:11
TuringSim::Machine::Turing::SimpleTuringMachine::operator=
SimpleTuringMachine & operator=(const SimpleTuringMachine &)=default
The default copy assignment operator.
TuringSim::Machine::Turing::SimpleTuringMachine
The class to represent a simple turing machine.
Definition: simpleTuringMachine.h:40
TuringSim::Machine::Turing::SimpleTuringMachine::~SimpleTuringMachine
virtual ~SimpleTuringMachine() override=default
The default virtual destructor.
TuringSim::Machine::Turing::SimpleTuringMachine::SimpleTuringMachine
SimpleTuringMachine(const SimpleTuringMachine &)=default
The default copy constructor.
TuringSim::Transition::Turing::SimpleTuringMachineTransition
Turing machine transition where the state pattern is a TuringSim::State::SimpleStatePattern and the s...
Definition: simpleTuringMachineTransition.h:29
TuringSim::Machine::Turing
Namespace of Turing machines, that is whose storage is a tape.
Definition: deterministicSimpleTuringMachine.h:8
TuringSim::Machine::Turing::SimpleTuringMachine::SimpleTuringMachine
SimpleTuringMachine(const std::set< StateType > &finalStates)
Build a SimpleTuringMachine from a set of final states.
Definition: simpleTuringMachine.h:96
TuringSim::Machine::Turing::SimpleTuringMachine::operator=
SimpleTuringMachine & operator=(SimpleTuringMachine &&)=default
The default move assignment operator.