Documentation

Atlas.AnAlgorithmistsToolkit.code.Matchings

Instances For
    @[implicit_reducible]
    Instances For
      Instances For
        Instances For
          Instances For
            Instances For
              theorem Matchings.geom_contraction_bound (r : ) (hr_pos : 0 < r) (S : ) (hcontract : ∀ (i : ), (S (i + 1)) r * (S i)) (k : ) :
              (S k) r ^ k * (S 0)
              theorem Matchings.pow_mul_lt_one_of_log_bound (N : ) (hN : 0 < N) (r : ) (hr_pos : 0 < r) (hr_lt : r < 1) (k : ) (hk : k > Real.log N / Real.log (1 / r)) :
              r ^ k * N < 1
              theorem Matchings.matching_terminates_log_steps (N d : ) (β : ) (hd_pos : 0 < d) (hβ_bound : β > d / 2) (hβ_lt_d : β < d) (S : ) (hS0 : S 0 N) (hcontract : ∀ (i : ), (S (i + 1)) 2 * (1 - β / d) * (S i)) :
              kReal.log N / Real.log (1 / (2 * (1 - β / d)))⌉₊ + 1, S k = 0
              structure Matchings.SizedMatching {n : } (G : BipartiteGraph n) (k : ) :
              Instances For
                @[implicit_reducible]
                @[implicit_reducible]
                noncomputable instance Matchings.sizedMatchingFintype {n : } {G : BipartiteGraph n} {k : } :
                Instances For
                  @[implicit_reducible]
                  noncomputable instance Matchings.chainVertexFintype {n : } {G : BipartiteGraph n} :
                  @[implicit_reducible]
                  @[reducible, inline]
                  Instances For
                    structure Matchings.Transition {n : } (G : BipartiteGraph n) :
                    Instances For
                      Instances For
                        Instances For
                          Instances For
                            theorem Matchings.encoding_source_recovery {α : Type u_1} [DecidableEq α] {s₁ s₂ P R : Finset α} (hP₁ : Disjoint P s₁) (hP₂ : Disjoint P s₂) (hR₁ : R s₁) (hR₂ : R s₂) (heq : s₁ \ R P = s₂ \ R P) :
                            s₁ = s₂
                            theorem Matchings.symDiff_determines_target {n : } {G : BipartiteGraph n} {s t₁ t₂ : PerfMatching G} (hD : matchingSymDiff s t₁ = matchingSymDiff s t₂) :
                            t₁ = t₂
                            structure Matchings.TypeBPathData {n : } {G : BipartiteGraph n} (T : Transition G) (s t : PerfMatching G) :
                            Instances For
                              Instances For
                                Instances For
                                  theorem Matchings.encoding_determines_source_from_structure {n : } {G : BipartiteGraph n} {T : Transition G} {s₁ t₁ s₂ t₂ : PerfMatching G} (d₁ : TypeBPathData T s₁ t₁) (d₂ : TypeBPathData T s₂ t₂) (heq : d₁.encodingVertex = d₂.encodingVertex) :
                                  s₁ = s₂
                                  theorem Matchings.encoding_determines_symDiff_from_structure {n : } {G : BipartiteGraph n} {T : Transition G} {s₁ t₁ s₂ t₂ : PerfMatching G} (d₁ : TypeBPathData T s₁ t₁) (d₂ : TypeBPathData T s₂ t₂) (heq : d₁.encodingVertex = d₂.encodingVertex) :
                                  matchingSymDiff s₁ t₁ = matchingSymDiff s₂ t₂
                                  noncomputable def Matchings.partner {n : } {G : BipartiteGraph n} (augment : SizedMatching G (n - 1)PerfMatching G) (v : ChainVertex G) :
                                  Instances For
                                    noncomputable def Matchings.partnerPreimage {n : } {G : BipartiteGraph n} (augment : SizedMatching G (n - 1)PerfMatching G) (s : PerfMatching G) :
                                    Instances For
                                      Instances For
                                        @[implicit_reducible]
                                        theorem Matchings.partner_preimage_card_le_exact {n : } {G : BipartiteGraph n} (hn : 0 < n) (augment : SizedMatching G (n - 1)PerfMatching G) (s : PerfMatching G) (h_edges_diff : ∀ (m : SizedMatching G (n - 1)), augment m = s(m.edges \ s.edges).card 1) :
                                        (partnerPreimage augment s).card 1 + n + n * n
                                        theorem Matchings.partner_preimage_card_le {n : } {G : BipartiteGraph n} (hn : 0 < n) (augment : SizedMatching G (n - 1)PerfMatching G) (s : PerfMatching G) (h_edges_diff : ∀ (m : SizedMatching G (n - 1)), augment m = s(m.edges \ s.edges).card 1) :
                                        (partnerPreimage augment s).card (n + 1) ^ 2
                                        def Matchings.HasConductanceLB {V : Type u_1} [Fintype V] [DecidableEq V] (cutEdges vol : Finset V) (c : ) :
                                        Instances For
                                          def Matchings.HasConductanceUB {V : Type u_1} [Fintype V] [DecidableEq V] (cutEdges vol : Finset V) (c : ) :
                                          Instances For
                                            theorem Matchings.canonical_paths_cut_bound (cutEdges_S vol_S S_card b d_max : ) (hb_pos : 0 < b) (hd_pos : 0 < d_max) (hvol_pos : 0 < vol_S) (hcut : cutEdges_S S_card / (2 * b)) (hvol : vol_S S_card * d_max) :
                                            cutEdges_S / vol_S 1 / (2 * b * d_max)
                                            noncomputable def Matchings.chainDegree {n : } {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (v : ChainVertex G) :
                                            Instances For
                                              noncomputable def Matchings.chainVol {n : } {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (S : Finset (ChainVertex G)) :
                                              Instances For
                                                noncomputable def Matchings.chainCutEdges {n : } {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (S : Finset (ChainVertex G)) :
                                                Instances For
                                                  theorem Matchings.matching_chain_conductance_bound {n : } (hn : 0 < n) {G : BipartiteGraph n} (cutEdges vol : Finset (ChainVertex G)) (hvol_pos : ∀ (S : Finset (ChainVertex G)), S.Nonempty0 < vol S) (hmax_degree : ∀ (S : Finset (ChainVertex G)), vol S S.card * n ^ 2) (hcongestion : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univcutEdges S S.card / (2 * (n + 1) ^ 4)) :
                                                  HasConductanceLB cutEdges vol (1 / (2 * (n + 1) ^ 4 * n ^ 2))
                                                  theorem Matchings.matching_chain_conductance_concrete {n : } (hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (hmin_deg : ∀ (v : ChainVertex G), 0 < (neighbors v).card) (hmax_deg : ∀ (v : ChainVertex G), (neighbors v).card n ^ 2) (hcongestion : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univchainCutEdges neighbors S S.card / (2 * (n + 1) ^ 4)) :
                                                  HasConductanceLB (chainCutEdges neighbors) (chainVol neighbors) (1 / (2 * (n + 1) ^ 4 * n ^ 2))
                                                  theorem Matchings.matching_chain_conductance_theta {n : } (hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (hmin_deg : ∀ (v : ChainVertex G), 0 < (neighbors v).card) (hmax_deg : ∀ (v : ChainVertex G), (neighbors v).card n ^ 2) (hcongestion : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univchainCutEdges neighbors S S.card / (2 * (n + 1) ^ 4)) :
                                                  HasConductanceLB (chainCutEdges neighbors) (chainVol neighbors) (1 / (2 * (n + 1) ^ 6))
                                                  theorem Matchings.matching_chain_conductance_upper_bound {n : } (hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (hmin_deg : ∀ (v : ChainVertex G), 0 < (neighbors v).card) (hmax_deg : ∀ (v : ChainVertex G), (neighbors v).card n ^ 2) :
                                                  HasConductanceUB (chainCutEdges neighbors) (chainVol neighbors) (2 * (1 / n ^ 6))
                                                  theorem Matchings.chain_congestion_bound {n : } (_hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (_hmin_deg : ∀ (v : ChainVertex G), 0 < (neighbors v).card) (_hmax_deg : ∀ (v : ChainVertex G), (neighbors v).card n ^ 2) (hpaths : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univS.card * (Finset.univ \ S).card chainCutEdges neighbors S * (n + 1) ^ 4) (S : Finset (ChainVertex G)) :
                                                  S.NonemptyS Finset.univchainCutEdges neighbors S S.card / (2 * (n + 1) ^ 4)
                                                  theorem Matchings.chain_canonical_paths_crossing {n : } (hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (hmin_deg : ∀ (v : ChainVertex G), 0 < (neighbors v).card) (hmax_deg : ∀ (v : ChainVertex G), (neighbors v).card n ^ 2) (path_assign : Finset (ChainVertex G)ChainVertex GChainVertex GChainVertex G × ChainVertex G) (hassign_valid : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univsS, tFinset.univ \ S, (path_assign S s t).1 S (path_assign S s t).2 {xneighbors (path_assign S s t).1 | xS}) (hassign_bound : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univvS, w{xneighbors v | xS}, {pS ×ˢ (Finset.univ \ S) | path_assign S p.1 p.2 = (v, w)}.card (n + 1) ^ 4) (S : Finset (ChainVertex G)) :
                                                  S.NonemptyS Finset.univS.card * (Finset.univ \ S).card chainCutEdges neighbors S * (n + 1) ^ 4
                                                  theorem Matchings.matching_chain_conductance_theta_full {n : } (hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex GFinset (ChainVertex G)) (hmin_deg : ∀ (v : ChainVertex G), 0 < (neighbors v).card) (hmax_deg : ∀ (v : ChainVertex G), (neighbors v).card n ^ 2) (path_assign : Finset (ChainVertex G)ChainVertex GChainVertex GChainVertex G × ChainVertex G) (hassign_valid : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univsS, tFinset.univ \ S, (path_assign S s t).1 S (path_assign S s t).2 {xneighbors (path_assign S s t).1 | xS}) (hassign_bound : ∀ (S : Finset (ChainVertex G)), S.NonemptyS Finset.univvS, w{xneighbors v | xS}, {pS ×ˢ (Finset.univ \ S) | path_assign S p.1 p.2 = (v, w)}.card (n + 1) ^ 4) :
                                                  HasConductanceLB (chainCutEdges neighbors) (chainVol neighbors) (1 / (2 * (n + 1) ^ 6)) HasConductanceUB (chainCutEdges neighbors) (chainVol neighbors) (2 * (1 / n ^ 6))
                                                  def Matchings.permanent {n : } (A : Matrix (Fin n) (Fin n) ) :
                                                  Instances For