Sha256: 3904fce46aa7f16f4480f3d7f085868ca50ed032757ce6e46ad494744b93d768

Contents?: true

Size: 1.54 KB

Versions: 2

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.new(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

2 entries across 2 versions & 1 rubygems

Version Path
axiom-optimizer-0.1.1 lib/axiom/optimizer/function/predicate.rb
axiom-optimizer-0.1.0 lib/axiom/optimizer/function/predicate.rb