TuringSim
C++ framework to simulate abstract computing models
turingStyleMConfigurationTuringMachine.h
1 #pragma once
2 
3 #include <variant>
4 
5 #include <machine/Turing/localTuringMachine.h>
6 #include <state/mConfiguration/mConfigurationMap.h>
7 #include <transition/Turing/turingStyleMConfigurationTuringMachineTransition.h>
8 
24  template <
25  typename SymbolType_,
26  bool deterministic = false,
27  bool hasHalfTape = false,
28  AcceptingStyle acceptingStyle = AcceptingStyle::NonAccepting
29  >
31  public LocalTuringMachine<
32  Transition::Turing::TuringStyleMConfigurationTuringMachineTransition<SymbolType_, hasHalfTape>,
33  deterministic,
34  acceptingStyle,
35  std::set,
36  std::set
37  >
38  {
41  public:
42  using typename LocalTuringMachine_::StateType;
43  using typename LocalTuringMachine_::SymbolType;
44  using typename LocalTuringMachine_::HasHalfTape;
45  using typename LocalTuringMachine_::IsAccepting;
46  using typename LocalTuringMachine_::StorageType;
47  using typename LocalTuringMachine_::IsAlternating;
48  using typename LocalTuringMachine_::TransitionType;
49  using typename LocalTuringMachine_::ApplyHelperType;
50  using typename LocalTuringMachine_::IsDeterministic;
51  using typename LocalTuringMachine_::TransitionContainer;
52  using typename LocalTuringMachine_::InitialStateContainer;
53  using typename LocalTuringMachine_::OptionalHelpedTransition;
54 
55  static_assert(std::is_same_v<StateType, typename TransitionType::StateType>);
56  static_assert(std::is_same_v<SymbolType, typename StorageType::SymbolType>);
57  static_assert(std::is_same_v<SymbolType, SymbolType_>);
58  static_assert(std::is_same_v<HasHalfTape, typename TransitionType::HasHalfTape>);
59  static_assert(HasHalfTape::value == hasHalfTape);
60  static_assert(std::is_same_v<StorageType, Memory::TapeLike<hasHalfTape, SymbolType>>);
61  static_assert(std::is_same_v<StorageType, typename TransitionType::StorageType>);
62  static_assert(std::is_same_v<ApplyHelperType, typename TransitionType::ApplyHelperType>);
63  static_assert(IsDeterministic::value == deterministic);
64  static_assert(std::is_same_v<TransitionContainer, std::set<std::pair<const TransitionType&, ApplyHelperType>>>);
65  static_assert(std::is_same_v<InitialStateContainer, std::set<StateType>>);
66  static_assert(std::is_same_v<OptionalHelpedTransition, std::optional<std::pair<const TransitionType&, ApplyHelperType>>>);
67 
68  static_assert(std::is_same_v<StateType, std::shared_ptr<const State::MConfiguration::MConfiguration<SymbolType>>>,
69  "StateType must be std::shared_ptr<State::MConfiguration<SymbolType>>");
71  "TransitionType must be a TuringStyleMConfigurationTuringMachineTransition");
72 
88  virtual ~TuringStyleMConfigurationTuringMachine() override = default;
89 
96  const std::set<State::MConfiguration::MConfiguration<SymbolType>>& finalStates
97  ) :
98  finalStates(finalStates)
99  {}
100 
114  virtual bool isHaltingState(const StateType& state) const noexcept override final {
115  return finalStates.count(*state) > 0;
116  }
117 
118  private:
119  std::set<State::MConfiguration::MConfiguration<SymbolType>> finalStates;
120  };
121 }
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::TuringStyleMConfigurationTuringMachine
TuringStyleMConfigurationTuringMachine()=delete
The deleted default constructor.
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::TuringStyleMConfigurationTuringMachine
TuringStyleMConfigurationTuringMachine(const TuringStyleMConfigurationTuringMachine &)=default
The default copy constructor.
TuringSim::State::MConfiguration::MConfiguration
The base class for m-configurations.
Definition: mConfiguration.h:25
TuringSim::Memory::TapeLike
std::conditional_t< isHalfTape, HalfTape::HalfTape< SymbolType >, Tape::Tape< SymbolType > > TapeLike
Definition: tapeLike.h:12
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::operator=
TuringStyleMConfigurationTuringMachine & operator=(const TuringStyleMConfigurationTuringMachine &)=default
The default copy assignment operator.
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::TuringStyleMConfigurationTuringMachine
Machines whose transitions are Transition::TuringStyleMConfigurationTuringMachineTransition.
Definition: turingStyleMConfigurationTuringMachine.h:38
TuringSim::Transition::Turing::TuringStyleMConfigurationTuringMachineTransition
Transitions as we find in 1936 Turing's paper.
Definition: turingStyleMConfigurationTuringMachineTransition.h:19
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::isHaltingState
virtual bool isHaltingState(const StateType &state) const noexcept override final
Test if a given state is a halting one.
Definition: turingStyleMConfigurationTuringMachine.h:114
TuringSim::Machine::AcceptingStyle
AcceptingStyle
Whether the machine is accepting, alternating or nothing.
Definition: acceptingMachine.h:11
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::TuringStyleMConfigurationTuringMachine
TuringStyleMConfigurationTuringMachine(TuringStyleMConfigurationTuringMachine &&)=default
The default move constructor.
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::operator=
TuringStyleMConfigurationTuringMachine & operator=(TuringStyleMConfigurationTuringMachine &&)=default
The default move assignment operator.
TuringSim::Machine::Turing
Namespace of Turing machines, that is whose storage is a tape.
Definition: deterministicSimpleTuringMachine.h:8
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::~TuringStyleMConfigurationTuringMachine
virtual ~TuringStyleMConfigurationTuringMachine() override=default
The default virtual destructor.
TuringSim::Machine::Turing::TuringStyleMConfigurationTuringMachine::TuringStyleMConfigurationTuringMachine
TuringStyleMConfigurationTuringMachine(const std::set< State::MConfiguration::MConfiguration< SymbolType >> &finalStates)
Build a TuringStyleMConfigurationTuringMachine from a set of final states.
Definition: turingStyleMConfigurationTuringMachine.h:95