Documentation

Seymour.Matrix.TotalUnimodularityTest

Total Unimodularity Test #

This file provides means to (computably) test total unimodularity of small matrices.

Formally verified algorithm for testing total unimodularity.

Equations
Instances For
    theorem Matrix.isTotallyUnimodular_of_aux_le {m n : } {A : Matrix (Fin m) (Fin n) } (hA : km, ∀ (x : Fin kFin m) (y : Fin kFin n), (A.submatrix x y).det SignType.cast.range) :
    theorem filter_length_card {n : } (s : Finset (Fin n)) :
    (List.filter (fun (x : Fin n) => decide (x s)) (List.finRange n)).length = s.card

    Faster algorithm for testing total unimodularity without permutation with pending formal guarantees.

    Equations
    Instances For
      theorem range_of_list_get {α : Type u_1} [DecidableEq α] {n : } {s : List α} (hn : n = s.length) :
      (fun (x : Fin n) => s[x]).range = s.toFinset
      theorem Matrix.submatrix_eq_submatrix_reindex {r : Type u_1} {c : Type u_2} {n : Type u_3} {o : Type u_4} {p : Type u_5} {q : Type u_6} {α : Type u_7} [DecidableEq r] [Fintype r] [DecidableEq c] [Fintype c] [DecidableEq n] [Fintype n] [DecidableEq o] [Fintype o] [DecidableEq p] [Fintype p] [DecidableEq q] [Fintype q] {f₁ : nr} {g₁ : oc} {f₂ : pr} {g₂ : qc} (A : Matrix r c α) (hf₁ : Function.Injective f₁) (hg₁ : Function.Injective g₁) (hf₂ : Function.Injective f₂) (hg₂ : Function.Injective g₂) (hff : f₁.range = f₂.range) (hgg : g₁.range = g₂.range) :
      ∃ (e₁ : p n) (e₂ : q o), A.submatrix f₁ g₁ = (reindex e₁ e₂) (A.submatrix f₂ g₂)

      A fast version of Matrix.testTotallyUnimodular which doesn't test every permutation.