/// <summary>
                /// Converts conditional statements whose top-most condition is an AND.
                /// Creates a nested structure without the top-most AND.
                /// </summary>
                private (bool, QsConditionalStatement) ProcessAND(QsConditionalStatement conditionStatment)
                {
                    // This method expects elif blocks to have been abstracted out
                    if (conditionStatment.ConditionalBlocks.Length != 1)
                    {
                        return(false, conditionStatment);
                    }

                    var(condition, block) = conditionStatment.ConditionalBlocks[0];

                    if (condition.Expression is ExpressionKind.AND andCondition)
                    {
                        var subCondition  = new QsConditionalStatement(ImmutableArray.Create(Tuple.Create(andCondition.Item2, block)), conditionStatment.Default);
                        var subIfStatment = new QsStatement(
                            QsStatementKind.NewQsConditionalStatement(subCondition),
                            LocalDeclarations.Empty,
                            block.Location,
                            QsComments.Empty);
                        var newBlock = new QsPositionedBlock(
                            new QsScope(ImmutableArray.Create(subIfStatment), block.Body.KnownSymbols),
                            block.Location,
                            QsComments.Empty);

                        return(true, new QsConditionalStatement(ImmutableArray.Create(Tuple.Create(andCondition.Item1, newBlock)), conditionStatment.Default));
                    }
                    else
                    {
                        return(false, conditionStatment);
                    }
                }
            public override QsStatementKind onConjugation(QsConjugation stm)
            {
                var inner            = stm.InnerTransformation;
                var innerLoc         = this._Scope.onLocation(inner.Location);
                var transformedInner = new QsPositionedBlock(this._Scope.Transform(inner.Body), innerLoc, inner.Comments);

                return(QsStatementKind.NewQsConjugation(new QsConjugation(stm.OuterTransformation, transformedInner)));
            }