Class DebuggingBitvectorFormulaManager

    • Constructor Detail

      • DebuggingBitvectorFormulaManager

        public DebuggingBitvectorFormulaManager​(BitvectorFormulaManager pDelegate,
                                                org.sosy_lab.java_smt.delegate.debugging.DebuggingAssertions pDebugging)
    • Method Detail

      • add

        public BitvectorFormula add​(BitvectorFormula number1,
                                    BitvectorFormula number2)
        Description copied from interface: BitvectorFormulaManager
        This method returns the addition of the given bitvectors. The result has the same length as the given parameters. There can be an overflow, i.e., as one would expect from bitvector logic. There is no difference in signed and unsigned numbers.
        Specified by:
        add in interface BitvectorFormulaManager
        Parameters:
        number1 - a Formula
        number2 - a Formula
        Returns:
        number1 + number2
      • subtract

        public BitvectorFormula subtract​(BitvectorFormula number1,
                                         BitvectorFormula number2)
        Description copied from interface: BitvectorFormulaManager
        This method returns the subtraction of the given bitvectors. The result has the same length as the given parameters. There can be an overflow, i.e., as one would expect from bitvector logic. There is no difference in signed and unsigned numbers.
        Specified by:
        subtract in interface BitvectorFormulaManager
        Parameters:
        number1 - a Formula
        number2 - a Formula
        Returns:
        number1 - number2
      • divide

        public BitvectorFormula divide​(BitvectorFormula numerator,
                                       BitvectorFormula denominator,
                                       boolean signed)
        Description copied from interface: BitvectorFormulaManager
        This method returns the division for two bitvector formulas.

        For signed bitvectors, the result is rounded towards zero (also called "truncated integer division", similar to the division in the C99 standard), e.g., a user can assume the following equations:

        • 10 / 5 = 2
        • 10 / 3 = 3
        • 10 / (-3) = -3
        • -10 / 5 = -2
        • -10 / 3 = -3
        • -10 / (-3) = 3

        If the divisor evaluates to zero (division-by-zero), either directly as value or indirectly via an additional constraint, then the result of the division is defined as:

        • "-1" interpreted as bitvector (i.e., all bits set to "1"), if the dividend is non-negative, and
        • "1" interpreted as bitvector (i.e., all bits set to "0", except the last bit), if the dividend is negative.

        We refer to the SMTLIB standard version 2.6 for the division and remainder operators in BV theory.

        Specified by:
        divide in interface BitvectorFormulaManager
        Parameters:
        numerator - dividend of the operation.
        denominator - divisor of the operation.
        signed - whether to interpret all operands as signed or as unsigned numbers.
      • smodulo

        public BitvectorFormula smodulo​(BitvectorFormula numerator,
                                        BitvectorFormula denominator)
        Description copied from interface: BitvectorFormulaManager
        This method returns the two complement signed remainder for the Euclidean division (modulo) of two bitvector formulas.

        The sign of the result follows the sign of the divisor, i.e. the quotient calculated in the modulo operation is rounded in such a way that the result of the smodulo operation follows the sign of the divisor, e.g., a user can assume the following equations, with bitvectors interpreted as signed decimal numbers and % representing signed modulo, to hold:

        • 10 % 5 == 0
        • 10 % 3 == 1
        • 10 % (-3) == -2
        • -10 % 5 == 0
        • -10 % 3 == 2
        • -10 % (-3) == -1

        If the divisor evaluates to zero (modulo-by-zero), either directly as value or indirectly via an additional constraint, then the result of the modulo operation is defined as the dividend itself. We refer to the SMTLIB standard version 2.6 for the division and remainder operators in BV theory.

        For unsigned modulo, we refer to the unsigned remainder method.

        Specified by:
        smodulo in interface BitvectorFormulaManager
        Parameters:
        numerator - dividend of the operation.
        denominator - divisor of the operation.
      • remainder

        public BitvectorFormula remainder​(BitvectorFormula numerator,
                                          BitvectorFormula denominator,
                                          boolean signed)
        Description copied from interface: BitvectorFormulaManager
        This method returns the remainder for two bitvector formulas using the BitvectorFormulaManager.divide(BitvectorFormula, BitvectorFormula, boolean) operation.

        For unsigned bitvectors, this returns the remainder of unsigned bitvector division.

        For signed bitvectors, the sign of the result follows the sign of the dividend, i.e. the quotient of the division is rounded in such a way that the sign of the result of the remainder operation follows the sign of the dividend, e.g., a user can assume the following equations, with bitvectors interpreted as signed decimal numbers and % representing signed remainder (similar to the C programming language), to hold:

        • 10 % 5 == 0
        • 10 % 3 == 1
        • 10 % (-3) == 1
        • -10 % 5 == 0
        • -10 % 3 == -1
        • -10 % (-3) == -1

        If the divisor evaluates to zero (modulo-by-zero), either directly as value or indirectly via an additional constraint, then the result of the modulo operation is defined as the dividend itself. We refer to the SMTLIB standard version 2.6 for the division and remainder operators in BV theory.

        Specified by:
        remainder in interface BitvectorFormulaManager
        Parameters:
        numerator - dividend of the operation. The sign bit is carried over from this bitvector for signed operations.
        denominator - divisor of the operation.
        signed - whether to interpret all operands as signed or as unsigned numbers.
      • multiply

        public BitvectorFormula multiply​(BitvectorFormula number1,
                                         BitvectorFormula number2)
        Description copied from interface: BitvectorFormulaManager
        This method returns the multiplication of the given bitvectors. The result has the same length as the given parameters. There can be an overflow, i.e., as one would expect from bitvector logic. There is no difference in signed and unsigned numbers.
        Specified by:
        multiply in interface BitvectorFormulaManager
        Parameters:
        number1 - a Formula
        number2 - a Formula
        Returns:
        number1 - number2
      • shiftRight

        public BitvectorFormula shiftRight​(BitvectorFormula number,
                                           BitvectorFormula toShift,
                                           boolean signed)
        Description copied from interface: BitvectorFormulaManager
        This method returns a term representing the right shift (towards least-significant bit) of number by toShift. The result has the same length as the given number. On the left side, we fill up the most significant bits with ones (i.e., arithmetic shift), if the number is signed and negative, else we fill up with zeroes. For "toShift >= bitsize", we return a bitvector with value zero, if number was zero or positive, or all bits set to one, if negative.
        Specified by:
        shiftRight in interface BitvectorFormulaManager
      • shiftLeft

        public BitvectorFormula shiftLeft​(BitvectorFormula number,
                                          BitvectorFormula toShift)
        Description copied from interface: BitvectorFormulaManager
        This method returns a term representing the left shift (towards most-significant bit) of number by toShift. The result has the same length as the given number. On the right side, we fill up the least significant bits with zeroes. For "toShift >= bitsize", we return a bitvector with value zero.
        Specified by:
        shiftLeft in interface BitvectorFormulaManager
      • rotateLeft

        public BitvectorFormula rotateLeft​(BitvectorFormula number,
                                           int toRotate)
        Description copied from interface: BitvectorFormulaManager
        This method returns a term representing the left rotation (towards most-significant bit) of number by toRotate. The result has the same length as the given number. For "toRotate % bitsize == 0", we return the number itself.
        Specified by:
        rotateLeft in interface BitvectorFormulaManager
        toRotate - the number of bits to be moved
      • rotateLeft

        public BitvectorFormula rotateLeft​(BitvectorFormula number,
                                           BitvectorFormula toRotate)
        Description copied from interface: BitvectorFormulaManager
        This method returns a term representing the left rotation (towards most-significant bit) of number by toRotate. The result has the same length as the given number. For "toRotate % bitsize == 0", we return the number itself.
        Specified by:
        rotateLeft in interface BitvectorFormulaManager
        toRotate - unsigned bitvector, represents the number of bits to be moved
      • rotateRight

        public BitvectorFormula rotateRight​(BitvectorFormula number,
                                            int toRotate)
        Description copied from interface: BitvectorFormulaManager
        This method returns a term representing the right rotation (towards least-significant bit) of number by toRotate. The result has the same length as the given number. For "toRotate % bitsize == 0", we return the number itself.
        Specified by:
        rotateRight in interface BitvectorFormulaManager
        toRotate - the number of bits to be moved
      • rotateRight

        public BitvectorFormula rotateRight​(BitvectorFormula number,
                                            BitvectorFormula toRotate)
        Description copied from interface: BitvectorFormulaManager
        This method returns a term representing the right rotation (towards least-significant bit) of number by toRotate. The result has the same length as the given number. For "toRotate % bitsize == 0", we return the number itself.
        Specified by:
        rotateRight in interface BitvectorFormulaManager
        toRotate - unsigned bitvector, represents the number of bits to be moved
      • extract

        public BitvectorFormula extract​(BitvectorFormula number,
                                        int msb,
                                        int lsb)
        Description copied from interface: BitvectorFormulaManager
        Extract a range of bits from a bitvector. We require 0 <= lsb <= msb < bitsize.

        If msb equals lsb, then a single bit will be returned, i.e., the bit from the given position. If lsb equals 0 and msb equals bitsize-1, then the complete bitvector will be returned.

        Specified by:
        extract in interface BitvectorFormulaManager
        Parameters:
        number - from where the bits are extracted.
        msb - Upper index for the most significant bit. Must be in interval from lsb to bitsize-1.
        lsb - Lower index for the least significant bit. Must be in interval from 0 to msb.
      • extend

        public BitvectorFormula extend​(BitvectorFormula number,
                                       int extensionBits,
                                       boolean signed)
        Description copied from interface: BitvectorFormulaManager
        Extend a bitvector to the left (add most significant bits). If signed is set and the given number is negative, then the bit "1" will be added several times, else "0".
        Specified by:
        extend in interface BitvectorFormulaManager
        Parameters:
        number - The bitvector to extend.
        extensionBits - How many bits to add.
        signed - Whether the extension should depend on the sign bit.