@[implicit_reducible]
Instances For
Instances For
Instances For
Instances For
Instances For
def
Matchings.PartialMatching.unmatchedLeft
{n : ℕ}
{G : BipartiteGraph n}
(M : PartialMatching G)
:
Instances For
def
Matchings.PartialMatching.unmatchedRight
{n : ℕ}
{G : BipartiteGraph n}
(M : PartialMatching G)
:
Instances For
theorem
Matchings.PartialMatching.fst_injOn_edges
{n : ℕ}
{G : BipartiteGraph n}
(M : PartialMatching G)
:
theorem
Matchings.PartialMatching.matchedLeft_card
{n : ℕ}
{G : BipartiteGraph n}
(M : PartialMatching G)
:
Instances For
Instances For
Instances For
theorem
Matchings.augmenting_path_of_min_degree
{n : ℕ}
{G : BipartiteGraph n}
{M : PartialMatching G}
(hLeft : G.denseLeft)
(hRight : G.denseRight)
(hu : M.unmatchedLeft.Nonempty)
(hv : M.unmatchedRight.Nonempty)
:
Instances For
@[implicit_reducible]
instance
Matchings.sizedMatchingDecEq
{n : ℕ}
{G : BipartiteGraph n}
{k : ℕ}
:
DecidableEq (SizedMatching G k)
@[implicit_reducible]
noncomputable instance
Matchings.sizedMatchingFintype
{n : ℕ}
{G : BipartiteGraph n}
{k : ℕ}
:
Fintype (SizedMatching G k)
@[implicit_reducible]
noncomputable instance
Matchings.chainVertexFintype
{n : ℕ}
{G : BipartiteGraph n}
:
Fintype (ChainVertex G)
@[implicit_reducible]
@[reducible, inline]
Instances For
- source : ChainVertex G
- target : ChainVertex G
Instances For
Instances For
Instances For
def
Matchings.chainVertexEdges
{n : ℕ}
{G : BipartiteGraph n}
:
ChainVertex G → Finset (Fin n × Fin n)
Instances For
theorem
Matchings.symDiff_determines_target
{n : ℕ}
{G : BipartiteGraph n}
{s t₁ t₂ : PerfMatching G}
(hD : matchingSymDiff s t₁ = matchingSymDiff s t₂)
:
structure
Matchings.TypeBPathData
{n : ℕ}
{G : BipartiteGraph n}
(T : Transition G)
(s t : PerfMatching G)
:
- encodingVertex : ChainVertex G
- canon_removed_spec : self.canonRemoved = chainVertexEdges T.source \ chainVertexEdges self.encodingVertex
- canon_added_spec : self.canonAdded = chainVertexEdges self.encodingVertex \ chainVertexEdges T.source
- canon_symDiff_spec : self.canonSymDiff = s.edges \ chainVertexEdges self.encodingVertex ∪ chainVertexEdges self.encodingVertex \ s.edges
Instances For
def
Matchings.transitionEncoding
{n : ℕ}
{G : BipartiteGraph n}
{T : Transition G}
{s t : PerfMatching G}
(data : TypeBPathData T s t)
:
Instances For
def
Matchings.typeBUsesTransition
{n : ℕ}
{G : BipartiteGraph n}
(T : Transition G)
(s t : PerfMatching G)
:
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)
:
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)
:
theorem
Matchings.transition_bound
{n : ℕ}
{G : BipartiteGraph n}
(T : Transition G)
(hT : chainIsAdj T.source T.target)
:
{p : PerfMatching G × PerfMatching G | typeBUsesTransition T p.1 p.2}.card ≤ Fintype.card (ChainVertex G)
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)
:
Finset (ChainVertex G)
Instances For
- self {n : ℕ} : PartnerWitness n
- reduced {n : ℕ} : Fin n → PartnerWitness n
- reducedRotated {n : ℕ} : Fin n → Fin n → PartnerWitness n
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)
:
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)
:
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
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))
:
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))