public override void PrepareTapeFwd(int[] input, TMInstance instance)
    {
      int frameLength = FrameLength(input.Length);

      long frameStart1 = 1 + frameLength;
      long frameStart2 = 1 + (2 * frameLength);
      long frameStart3 = 1 + (3 * frameLength);
      long frameEnd4 = 1 + (4 * frameLength);

      instance.SetTapeSymbol(frameStart1, delimiter1);
      instance.SetTapeSymbol(frameStart2, delimiter2);
      instance.SetTapeSymbol(frameStart3, delimiter3);
      instance.SetTapeSymbol(frameEnd4, delimiter4);

      IDebugOptions debugOptions = configuration.Get<IDebugOptions>();
    }
        public override void Run(uint[] states)
        {
            log.InfoFormat("mu: {0}", meapContext.mu);

            CreateTASGBuilder();

            tasgBuilder.CreateTArbitrarySeqGraph();
            tasgBuilder.CreateTArbSeqCFG(states);
            meapContext.TArbSeqCFG.Trace();

            if (meapContext.TArbSeqCFG.IsTrivial())
            {
                return;
            }

            ComputeNodeVLevels(meapContext.TArbSeqCFG);

            ICommonOptions       commonOptions       = configuration.Get <ICommonOptions>();
            ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>();

            if (commonOptions.CheckDataStructures)
            {
                checkDataStructures.CheckTASGHasNoBackAndCrossEdges(meapContext.TArbSeqCFG);
            }

            log.DebugFormat("states = {0}", AppHelper.ArrayToString(states));

            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();

            if (!debugOptions.RunRDA)
            {
                return;
            }

            ComputeCommodities();

            DetermineIfExistsTCPath determineIfExistsTCSeq = new(meapContext);

            determineIfExistsTCSeq.RunForMultipleTapeSegs();

            CopyResultFromTapeSegContext();
        }
        public override void Run(uint[] states)
        {
            log.InfoFormat("mu: {0}", meapContext.mu);
            log.DebugFormat("states = {0}", AppHelper.ArrayToString(states));

            tasgBuilder.CreateTArbitrarySeqGraph();
            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();

            if (!debugOptions.RunRDA)
            {
                return;
            }

            uint maxMu = meapContext.MEAPSharedContext.CPLTMInfo.PathLength;

            if (meapContext.mu < maxMu)
            {
                return;
            }

            tasgBuilder.CreateTArbSeqCFG(states);

            if (meapContext.TArbSeqCFG.IsTrivial())
            {
                return;
            }

            ICommonOptions       commonOptions       = configuration.Get <ICommonOptions>();
            ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>();

            ComputeDUPairs();

            meapContext.CommoditiesBuilder = new CommoditiesBuilderFactCPLTM(meapContext);
            meapContext.CommoditiesBuilder.EnumeratePairs();
            meapContext.Commodities        = meapContext.CommoditiesBuilder.CreateCommodities();
            meapContext.CommoditiesBuilder = default !;
Ejemplo n.º 4
0
        public (bool, int[]) Determine(int[] input)
        {
            MEAPSharedContext MEAPSharedContext = new();

            MEAPSharedContext.MNP   = tMachine;
            MEAPSharedContext.Input = input;

            MEAPSharedContext.InitInstance = new TMInstance(
                MEAPSharedContext.MNP,
                MEAPSharedContext.Input);

            MEAPSharedContext.MNP.PrepareTapeFwd(
                MEAPSharedContext.Input,
                MEAPSharedContext.InitInstance);

            MEAPSharedContext.CancellationTokenSource = new CancellationTokenSource();
            MEAPSharedContext.CancellationToken       = MEAPSharedContext.CancellationTokenSource.Token;

            ITPLOptions tplOptions = configuration.Get <ITPLOptions>();
            uint        determinePathRunnersCount = tplOptions.DeterminePathRunnersCount;

            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();
            ulong         currentMu    = debugOptions.muStart;

            while (true)
            {
                List <DeterminePathRunner> determinePathRunners = new();
                ulong baseMu = currentMu;

                for (long i = 0; i < determinePathRunnersCount; i++)
                {
                    DeterminePathRunnerCtorArgs determinePathRunnerCtorArgs = new()
                    {
                        tMachine          = tMachine,
                        input             = input,
                        currentMu         = currentMu++,
                        MEAPSharedContext = MEAPSharedContext
                    };

                    DeterminePathRunner determinePathRunner = configuration.Get <DeterminePathRunner>(
                        new Ninject.Parameters.ConstructorArgument(
                            nameof(determinePathRunnerCtorArgs),
                            determinePathRunnerCtorArgs));

                    determinePathRunners.Add(determinePathRunner);
                }

                TPLCollectionRunner <DeterminePathRunner> determinePathRunnerSet = new
                                                                                   (
                    determinePathRunners,
                    determinePathRunnersCount,
                    WaitMethod.WaitAll,
                    itemsArray => Array.Find(itemsArray, s => s.Done) !
                                                                                   );
                determinePathRunnerSet.Run();

                if (determinePathRunnerSet.Done)
                {
                    bool  result = determinePathRunnerSet.CurrentItem.Result;
                    int[] output = determinePathRunnerSet.CurrentItem.Output;

                    return(result, output);
                }
            }
        }
Ejemplo n.º 5
0
        public (bool, int[]) Determine(int[] input)
        {
            int inputLength = input.Length;

            ICPLTMInfo cpltmInfo = configuration.Get <ICPLTMInfo>(
                new Ninject.Parameters.ConstructorArgument(
                    nameof(inputLength),
                    input.Length));
            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();

            cpltmInfo.ComputeSequences();

            uint  maxMu     = cpltmInfo.PathLength;
            ulong currentMu = debugOptions.muStart;

            log.InfoFormat($"path length: {cpltmInfo.PathLength}");

            MEAPSharedContext MEAPSharedContext = new()
            {
                MNP       = tMachine,
                Input     = input,
                CPLTMInfo = cpltmInfo
            };

            MEAPSharedContext.InitInstance = new TMInstance(
                MEAPSharedContext.MNP,
                MEAPSharedContext.Input);

            MEAPSharedContext.MNP.PrepareTapeFwd(
                MEAPSharedContext.Input,
                MEAPSharedContext.InitInstance);

            MEAPSharedContext.CancellationTokenSource = new CancellationTokenSource();
            MEAPSharedContext.CancellationToken       = MEAPSharedContext.CancellationTokenSource.Token;

            MEAPSharedContext.NodeLevelInfo = new NodeLevelInfo();

            ITASGBuilder tasgBuilder = configuration.Get <ITASGBuilder>();

            MEAPSharedContext.TASGBuilder = tasgBuilder;
            tasgBuilder.MEAPSharedContext = MEAPSharedContext;

            tasgBuilder.Init();

            ITPLOptions tplOptions = configuration.Get <ITPLOptions>();
            uint        determinePathRunnersCount = tplOptions.DeterminePathRunnersCount;

            bool result;

            int[] output;

            while (currentMu <= maxMu)
            {
                List <DeterminePathRunner> determinePathRunners = new();

                for (long i = 0; i < determinePathRunnersCount; i++)
                {
                    DeterminePathRunnerCtorArgs determinePathRunnerCtorArgs = new()
                    {
                        tMachine          = tMachine,
                        input             = input,
                        currentMu         = currentMu,
                        MEAPSharedContext = MEAPSharedContext
                    };

                    currentMu++;

                    DeterminePathRunner determinePathRunner =
                        configuration.Get <DeterminePathRunner>(
                            new Ninject.Parameters.ConstructorArgument(
                                nameof(determinePathRunnerCtorArgs),
                                determinePathRunnerCtorArgs));

                    determinePathRunners.Add(determinePathRunner);
                }

                TPLCollectionRunner <DeterminePathRunner> determinePathRunnerSet = new
                                                                                   (
                    determinePathRunners,
                    determinePathRunnersCount,
                    WaitMethod.WaitAll,
                    itemsArray => Array.Find(itemsArray, s => s.Done) !
                                                                                   );

                determinePathRunnerSet.Run();

                if (determinePathRunnerSet.Done)
                {
                    result = determinePathRunnerSet.CurrentItem.Result;
                    output = determinePathRunnerSet.CurrentItem.Output;

                    break;
                }
            }

            result = true;
            output = Array.Empty <int>();

            return(result, output);
        }
Ejemplo n.º 6
0
        public override void Setup()
        {
            Q = new uint[]
            {
                qStart,

                (uint)InitStates.MoveRightToDelim1,

                (uint)GenNumber1States.GenBitA,
                (uint)GenNumber1States.GenBitB,
                (uint)GenNumber1States.MoveRightToDelim2,
                (uint)GenNumber1States.StopGenNumber,

                (uint)GenNumber2States.GenBitA,
                (uint)GenNumber2States.GenBitB,
                (uint)GenNumber2States.MoveRightToDelim3,
                (uint)GenNumber2States.StopGenNumber,

                (uint)MultiplyStates.MultReady,
                (uint)MultiplyStates.StartLoopInC,
                (uint)MultiplyStates.Process1f_D,
                (uint)MultiplyStates.MoveToCRight,
                (uint)MultiplyStates.EraseMarkInC,
                (uint)MultiplyStates.StartAddC,
                (uint)MultiplyStates.AddC0f_D,
                (uint)MultiplyStates.AddC0f_sm_D,
                (uint)MultiplyStates.MoveToCLeft,
                (uint)MultiplyStates.SetMarkInC,
                (uint)MultiplyStates.MoveToMarkInB,
                (uint)MultiplyStates.MoveToMarkInB_inB,
                (uint)MultiplyStates.AddC1f_D,
                (uint)MultiplyStates.AddC1f_sm_D,
                (uint)MultiplyStates.MoveToMarkInD_L,
                (uint)MultiplyStates.MoveToMarkInD_R,
                (uint)MultiplyStates.MoveMarkInD,
                (uint)MultiplyStates.StopMultiplying,

                (uint)AddStates.StartAdding,
                (uint)AddStates.AddBitC0,
                (uint)AddStates.AddBitC1,

                (uint)CompareStates.CompareReady,
                (uint)CompareStates.StartComparing,
                (uint)CompareStates.MoveLeftToA,
                (uint)CompareStates.MoveToStartA,
                (uint)CompareStates.BitLoopStart,
                (uint)CompareStates.BitLoopStart_f,
                (uint)CompareStates.BitLoopD0,
                (uint)CompareStates.BitLoopD1,

                acceptingState,
                rejectingState
            };

            Gamma = new int[]
            {
                blankSymbol,
                0,
                1,
                delimiter0,
                delimiter1,
                delimiter2,
                delimiter3,
                delimiter4,
                markB0,
                markB1,
                markC0,
                markC1,
                markD0,
                markD1
            };

            Sigma = new int[]
            {
                blankSymbol,
                0,
                1,
                delimiter0,
                delimiter1,
                delimiter2,
                delimiter3,
                delimiter4
            };

            Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> > delta;
            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();

            int frameLength = FrameLength(inputLength);

            delta = new Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> >();

            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Init.Delta());
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta1());
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta2(frameLength));
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta1(frameLength));
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta2(frameLength));
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta3(frameLength));
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Add.Delta());
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta(frameLength));

            Delta = delta;

            qStart = qStartState;
            F      = new uint[] { acceptingState };

            CheckDeltaRelation();
        }
        public override void Run(uint[] states)
        {
            log.InfoFormat("mu: {0}", meapContext.mu);

            ITASGBuilder tasgBuilder = configuration.Get <ITASGBuilder>();

            meapContext.TASGBuilder = tasgBuilder;
            tasgBuilder.meapContext = meapContext;

            tasgBuilder.Init();
            tasgBuilder.CreateTArbitrarySeqGraph();
            tasgBuilder.CreateTArbSeqCFG(states);
            meapContext.TArbSeqCFG.Trace();

            if (meapContext.TArbSeqCFG.IsTrivial())
            {
                return;
            }

            ComputeNodeVLevels(meapContext.TArbSeqCFG);

            ICommonOptions       commonOptions       = configuration.Get <ICommonOptions>();
            ICheckDataStructures checkDataStructures = configuration.Get <ICheckDataStructures>();

            if (commonOptions.CheckDataStructures)
            {
                checkDataStructures.CheckTASGHasNoBackAndCrossEdges(meapContext.TArbSeqCFG);
            }

            meapContext.DUPairCount       = 0;
            meapContext.TConsistPairCount = 0;

            TConsistPairSetBuilderOrd tConsistPairSetBuilder = new(meapContext);

            tConsistPairSetBuilder.Run();

            log.InfoFormat("defUsePairSet: {0}", meapContext.DUPairCount);
            log.InfoFormat("TConsistPairSet: {0}", meapContext.TConsistPairCount);

            meapContext.CommoditiesBuilder = new CommoditiesBuilderOrd(meapContext);
            meapContext.CommoditiesBuilder.EnumeratePairs();

            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();

            if (debugOptions.ComputeCommoditiesExplicitely)
            {
                meapContext.Commodities = meapContext.CommoditiesBuilder.CreateCommodities();
                meapContext.CommoditiesBuilder.CreateCommodityGraphs();
            }
            else
            {
                meapContext.Commodities = new SortedDictionary <long, Commodity>();
            }

            log.DebugFormat("states = {0}", AppHelper.ArrayToString(states));

            DetermineIfExistsTCPath determineIfExistsTCSeq = new(meapContext);

            determineIfExistsTCSeq.RunForMultipleTapeSegs();

            CopyResultFromTapeSegContext();
        }
Ejemplo n.º 8
0
        public override void Setup()
        {
            Q = new uint[]
            {
                qStart,

                (uint)InitStates.MoveToRightDelim,

                (uint)GenNumber1States.GenBitA,
                (uint)GenNumber1States.GenBitB,
                (uint)GenNumber1States.MoveToDelimiter2,

                (uint)GenNumber2States.GenBitA,
                (uint)GenNumber2States.GenBitB,
                (uint)GenNumber2States.MoveToDelimiter3,
                (uint)GenNumber2States.MoveToDelimiter4,
                (uint)GenNumber2States.MoveToDelimiter0,
                (uint)GenNumber2States.MoveToDelimiter1,

                (uint)MultiplyStates.MultReady,
                (uint)MultiplyStates.MoveToDelimeter2_0I,
                (uint)MultiplyStates.MoveTo01InC_0I,
                (uint)MultiplyStates.MoveToDelimeter3_0II,
                (uint)MultiplyStates.MoveTo01InD_0II,
                (uint)MultiplyStates.MoveToDelimeter4_0II,
                (uint)MultiplyStates.MoveToDelimeter0_0II,
                (uint)MultiplyStates.MoveToDelimeter2_0II,
                (uint)MultiplyStates.MoveToDelimeter2_1I,
                (uint)MultiplyStates.MoveTo01InC_1I,
                (uint)MultiplyStates.MoveToDelimeter3_Bit0_1II,
                (uint)MultiplyStates.MoveTo01InD_Bit0_1II,
                (uint)MultiplyStates.MoveToDelimeter4_Bit0_1II,
                (uint)MultiplyStates.MoveToDelimeter0_Bit0_1II,
                (uint)MultiplyStates.MoveToDelimeter2_Bit0_1II,
                (uint)MultiplyStates.MoveToDelimeter3_Bit1_1II,
                (uint)MultiplyStates.MoveTo01InD_Bit1_1II,
                (uint)MultiplyStates.MoveToDelimeter0_Bit1_1II,
                (uint)MultiplyStates.MoveToDelimeter2_Bit1_1II,
                (uint)MultiplyStates.MoveToD01InD_III,
                (uint)MultiplyStates.MoveToDelimeter4_III,
                (uint)MultiplyStates.MoveToDelimeter0_III,
                (uint)MultiplyStates.MoveToDelimeter1_III,
                (uint)MultiplyStates.MoveTo01InB_III,
                (uint)MultiplyStates.MoveToDelimeter4_IV,
                (uint)MultiplyStates.MoveToDelimeter0_IV,
                (uint)MultiplyStates.MoveToDelimeter1_IV,
                (uint)MultiplyStates.MoveToBlankInB_IV,

                (uint)AddStates.AddBit0,
                (uint)AddStates.AddBit1,

                (uint)CompareStates.StartComparing,
                (uint)CompareStates.MoveToStartA,
                (uint)CompareStates.BitLoopStart,
                (uint)CompareStates.MoveToDelimiter3_bit0,
                (uint)CompareStates.MoveToDelimiter3_bit1,
                (uint)CompareStates.SkipF_bit0,
                (uint)CompareStates.SkipF_bit1,
                (uint)CompareStates.MoveToDelimiter4,
                (uint)CompareStates.MoveToDelimiter0,
                (uint)CompareStates.SkipE,
                (uint)CompareStates.MoveToDelimiter4_accept,

                acceptingState,
                rejectingState
            };

            Gamma = new int[]
            {
                blankSymbol,
                0,
                1,
                delimiter0,
                delimiter1,
                delimiter2,
                delimiter3,
                delimiter4,
                markB0,
                markB1,
                markC0,
                markC1,
                markD0,
                markD1,
                markD2,
                markD3,
                markE0,
                markE1,
                markF0,
                markF1
            };

            Sigma = new int[]
            {
                blankSymbol,
                0,
                1,
                delimiter0,
                delimiter1,
                delimiter2,
                delimiter3,
                delimiter4
            };

            Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> > delta;
            IDebugOptions debugOptions = configuration.Get <IDebugOptions>();

            int frameLength = FrameLength(inputLength);

            delta = new Dictionary <StateSymbolPair, List <StateSymbolDirectionTriple> >();

            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Init.Delta);

            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta1);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_GenNumber.Delta2);

            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta01);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta02);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta03);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta04);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta05);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta06);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta07);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta08);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta09);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta10);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta11);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta12);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta13);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta14);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta15);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Multiply.Delta16);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_Add.Delta);

            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta1);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta2);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta3);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta4);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta5);
            AppHelper.MergeDictionaryWith(delta, IF_NDTM_RSP_CompareResult.Delta6);

            Delta = delta;

            qStart = qStartState;
            F      = new uint[] { acceptingState };

            CheckDeltaRelation();

            SetupTapeSymbol();
        }