public override void CheckNCGNodesHaveTheSameSymbol(MEAPContext meapContext)
        {
            log.Info("CheckNCGNodesHaveTheSameSymbolFrom");

            foreach (KeyValuePair <long, FwdBkwdNCommsGraphPair> ncgItemPair in
                     meapContext.muToNestedCommsGraphPair)
            {
                NCGraphType bkwdNestedCommsGraph = ncgItemPair.Value.BkwdNestedCommsGraph;

                foreach (KeyValuePair <long, DAGNode> ncgNodeItemPair in bkwdNestedCommsGraph.NodeEnumeration)
                {
                    long    uNCGNodeId = ncgNodeItemPair.Key;
                    DAGNode uNCGNode   = ncgNodeItemPair.Value;

                    if (!meapContext.Commodities.TryGetValue(uNCGNodeId, out Commodity? uComm))
                    {
                        continue;
                    }

                    long            uNodeId   = uComm.tNodeId;
                    ComputationStep uCompStep = meapContext.TArbSeqCFG.IdToNodeInfoMap[uNodeId].CompStep;

                    bool firstEdge = true;
                    int  sTo       = OneTapeTuringMachine.blankSymbol;

                    foreach (DAGEdge e in uNCGNode.InEdges)
                    {
                        long            vNCGNodeId = e.FromNode.Id;
                        Commodity       vComm      = meapContext.Commodities[vNCGNodeId];
                        long            vNodeId    = vComm.tNodeId;
                        ComputationStep vCompStep  = meapContext.TArbSeqCFG.IdToNodeInfoMap[vNodeId].CompStep;

                        if (vNodeId == meapContext.TArbSeqCFG.GetSinkNodeId())
                        {
                            continue;
                        }

                        if (firstEdge)
                        {
                            sTo       = vCompStep.s;
                            firstEdge = false;
                        }
                        else
                        {
                            Ensure.That(vCompStep.s).Is(sTo);
                        }
                    }
                }
            }
        }
        public override void CheckTASGNodesHaveTheSameSymbol(MEAPContext meapContext)
        {
            log.Info("CheckTASGNodesHaveTheSameSymbolFrom");

            foreach (KeyValuePair <long, DAGNode> itemPair in meapContext.TArbSeqCFG.NodeEnumeration)
            {
                long uNodeId = itemPair.Key;

                if (uNodeId == meapContext.TArbSeqCFG.GetSourceNodeId())
                {
                    continue;
                }

                DAGNode         uNode     = itemPair.Value;
                ComputationStep uCompStep = meapContext.TArbSeqCFG.IdToNodeInfoMap[uNodeId].CompStep;

                bool firstEdge = true;
                int  sTo       = OneTapeTuringMachine.blankSymbol;

                foreach (DAGEdge e in uNode.OutEdges)
                {
                    long            vNodeId   = e.ToNode.Id;
                    ComputationStep vCompStep = meapContext.TArbSeqCFG.IdToNodeInfoMap[vNodeId].CompStep;

                    if (vNodeId == meapContext.TArbSeqCFG.GetSinkNodeId())
                    {
                        continue;
                    }

                    if (firstEdge)
                    {
                        sTo       = vCompStep.s;
                        firstEdge = false;
                    }
                    else
                    {
                        Ensure.That(vCompStep.s).Is(sTo);
                    }
                }
            }
        }