private boolean applyLawOfAbsorption(final IExpressionContext context,
            ASTNode result) 
    {
        // Absorptionsgesetze 	 => a or (a and b) = a 	
        //                       => a and(a or  b) = a			
        final MutatingNodeVisitor visitor6 = new MutatingNodeVisitor( context ) {

            @Override
            public void visit(ASTNode node,IExpressionContext context,IIterationContext it) 
            {
                final ASTNode unwrapped = unwrap( node );
                if ( unwrapped.hasParent() && ( unwrapped.isOR() || unwrapped.isAND() ) ) 
                {
                    final ASTNode leftChild = unwrap( unwrapped.child(0) );					
                    final ASTNode rightChild = unwrap( unwrapped.child(1) );

                    if ( ( ( unwrapped.isOR()  && rightChild.isAND() ) ||
                            ( unwrapped.isAND() && rightChild.isOR()  ) ) ) 
                    {
                        ASTNode subTerm = unwrap( rightChild.child(0) );
                        if ( subTerm.isEquals( leftChild) ) 
                        { 
                            debugPrintln("ABSORPTION: Replacing "+unwrapped.toString(false)+
                                    " -> "+leftChild);
                            unwrapped.replaceWith( leftChild );
                            it.astMutated();			
                        }
                    } 
                } 
            }
        };

        return applyInOrder( result , visitor6 );
    }