Documentation

Mathlib.Tactic.Linarith.Oracle.SimplexAlgorithm.SimplexAlgorithm

Simplex Algorithm #

To obtain required vector in Linarith.SimplexAlgorithm.findPositiveVector we run the Simplex Algorithm. We use Bland's rule for pivoting, which guarantees that the algorithm terminates.

An exception in the SimplexAlgorithmM monad.

Instances For
    @[reducible, inline]
    abbrev Mathlib.Tactic.Linarith.SimplexAlgorithm.SimplexAlgorithmM (matType : ℕ → ℕ → Type) [UsableInSimplexAlgorithm matType] (α : Type) :

    The monad for the Simplex Algorithm.

    Instances For
      def Mathlib.Tactic.Linarith.SimplexAlgorithm.doPivotOperation {matType : ℕ → ℕ → Type} [UsableInSimplexAlgorithm matType] (exitIdx enterIdx : ℕ) :
      SimplexAlgorithmM matType Unit

      Given indexes exitIdx and enterIdx of exiting and entering variables in the basic and free arrays, performs pivot operation, i.e. expresses one through the other and makes the free one basic and vice versa.

      Instances For
        def Mathlib.Tactic.Linarith.SimplexAlgorithm.checkSuccess {matType : ℕ → ℕ → Type} [UsableInSimplexAlgorithm matType] :
        SimplexAlgorithmM matType Bool

        Check if the solution is found: the objective function is positive and all basic variables are nonnegative.

        Instances For
          def Mathlib.Tactic.Linarith.SimplexAlgorithm.chooseEnteringVar {matType : ℕ → ℕ → Type} [UsableInSimplexAlgorithm matType] :
          SimplexAlgorithmM matType â„•

          Chooses an entering variable: among the variables with a positive coefficient in the objective function, the one with the smallest index (in the initial indexing).

          Instances For
            def Mathlib.Tactic.Linarith.SimplexAlgorithm.chooseExitingVar {matType : ℕ → ℕ → Type} [UsableInSimplexAlgorithm matType] (enterIdx : ℕ) :
            SimplexAlgorithmM matType â„•

            Chooses an exiting variable: the variable imposing the strictest limit on the increase of the entering variable, breaking ties by choosing the variable with smallest index.

            Instances For
              def Mathlib.Tactic.Linarith.SimplexAlgorithm.choosePivots {matType : ℕ → ℕ → Type} [UsableInSimplexAlgorithm matType] :
              SimplexAlgorithmM matType (ℕ × ℕ)

              Chooses entering and exiting variables using (Bland's rule)[(https://en.wikipedia.org/wiki/Bland%27s_rule)] that guarantees that the Simplex Algorithm terminates.

              Instances For
                def Mathlib.Tactic.Linarith.SimplexAlgorithm.runSimplexAlgorithm {matType : ℕ → ℕ → Type} [UsableInSimplexAlgorithm matType] :
                SimplexAlgorithmM matType Unit

                Runs the Simplex Algorithm inside the SimplexAlgorithmM. It always terminates, finding solution if such exists.

                Instances For