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)) :
              ∃ k ≤ ⌈Real.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 G → Finset (ChainVertex G)) (v : ChainVertex G) :
                                            Instances For
                                              noncomputable def Matchings.chainVol {n : ℕ} {G : BipartiteGraph n} (neighbors : ChainVertex G → Finset (ChainVertex G)) (S : Finset (ChainVertex G)) :
                                              Instances For
                                                noncomputable def Matchings.chainCutEdges {n : ℕ} {G : BipartiteGraph n} (neighbors : ChainVertex G → Finset (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.Nonempty → 0 < vol S) (hmax_degree : ∀ (S : Finset (ChainVertex G)), vol S ≤ ↑S.card * ↑n ^ 2) (hcongestion : ∀ (S : Finset (ChainVertex G)), S.Nonempty → S ≠ Finset.univ → cutEdges 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 G → Finset (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.Nonempty → S ≠ Finset.univ → chainCutEdges 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 G → Finset (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.Nonempty → S ≠ Finset.univ → chainCutEdges 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 G → Finset (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 G → Finset (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.Nonempty → S ≠ Finset.univ → ↑S.card * ↑(Finset.univ \ S).card ≤ chainCutEdges neighbors S * (↑n + 1) ^ 4) (S : Finset (ChainVertex G)) :
                                                  S.Nonempty → S ≠ Finset.univ → chainCutEdges neighbors S ≥ ↑S.card / (2 * (↑n + 1) ^ 4)
                                                  theorem Matchings.chain_canonical_paths_crossing {n : ℕ} (hn : 0 < n) {G : BipartiteGraph n} (neighbors : ChainVertex G → Finset (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 G → ChainVertex G → ChainVertex G × ChainVertex G) (hassign_valid : ∀ (S : Finset (ChainVertex G)), S.Nonempty → S ≠ Finset.univ → ∀ s ∈ S, ∀ t ∈ Finset.univ \ S, (path_assign S s t).1 ∈ S ∧ (path_assign S s t).2 ∈ {x ∈ neighbors (path_assign S s t).1 | x ∉ S}) (hassign_bound : ∀ (S : Finset (ChainVertex G)), S.Nonempty → S ≠ Finset.univ → ∀ v ∈ S, ∀ w ∈ {x ∈ neighbors v | x ∉ S}, {p ∈ S ×ˢ (Finset.univ \ S) | path_assign S p.1 p.2 = (v, w)}.card ≤ (n + 1) ^ 4) (S : Finset (ChainVertex G)) :
                                                  S.Nonempty → S ≠ Finset.univ → ↑S.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 G → Finset (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 G → ChainVertex G → ChainVertex G × ChainVertex G) (hassign_valid : ∀ (S : Finset (ChainVertex G)), S.Nonempty → S ≠ Finset.univ → ∀ s ∈ S, ∀ t ∈ Finset.univ \ S, (path_assign S s t).1 ∈ S ∧ (path_assign S s t).2 ∈ {x ∈ neighbors (path_assign S s t).1 | x ∉ S}) (hassign_bound : ∀ (S : Finset (ChainVertex G)), S.Nonempty → S ≠ Finset.univ → ∀ v ∈ S, ∀ w ∈ {x ∈ neighbors v | x ∉ S}, {p ∈ S ×ˢ (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