Sha256: acce5b10aec8b37bbbe9c766e6fc7facba3e2eda416f648f5bb4df6cadc24d01

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

# encoding: utf-8

module Axiom
  class Optimizer
    module Function

      # Abstract base class representing Predicate optimizations
      class Predicate < Optimizer
        include AbstractType, Binary

        # Optimize when the operands are constants
        class ConstantOperands < self
          include Binary::ConstantOperands

          # A Predicate with constant values is equivalent to a Proposition
          #
          # @return [Proposition]
          #
          # @api private
          def optimize
            Axiom::Function::Proposition.coerce(super)
          end

        end # class ConstantOperands

        # Optimize when the operands are unoptimized
        class UnoptimizedOperands < self
          include Binary::UnoptimizedOperands
        end # class UnoptimizedOperands

        # Optimize when the operands are a contradiction
        module Contradiction

          # Return a contradiction
          #
          # @return [Contradiction]
          #
          # @api private
          def optimize
            Axiom::Function::Proposition::Contradiction.instance
          end

        end # module Contradiction

        # Optimize when the operands are a tautology
        module Tautology

          # Return a tautology
          #
          # @return [Tautology]
          #
          # @api private
          def optimize
            Axiom::Function::Proposition::Tautology.instance
          end

        end # module Tautology
      end # class Predicate
    end # module Function
  end # class Optimizer
end # module Axiom

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
axiom-optimizer-0.2.0 lib/axiom/optimizer/function/predicate.rb