Documentation

Atlas.AnAlgorithmistsToolkit.code.Cheeger

noncomputable def SimpleGraph.edgeCut {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) :
Instances For
    noncomputable def SimpleGraph.cutRatio {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) :
    Instances For
      noncomputable def SimpleGraph.edgeExpansion {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
      Instances For
        noncomputable def SimpleGraph.volume {V : Type u_1} [Fintype V] (G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) :
        Instances For
          noncomputable def SimpleGraph.setConductance {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] (S : Finset V) :
          Instances For
            noncomputable def SimpleGraph.conductance {V : Type u_1} [Fintype V] [DecidableEq V] (G : SimpleGraph V) [DecidableRel G.Adj] :
            Instances For
              noncomputable def Cheeger.sqNorm {n : ℕ} (f : Fin n → ℝ) :
              Instances For
                noncomputable def Cheeger.quadForm {n : ℕ} (edges : Finset (Fin n × Fin n)) (f : Fin n → ℝ) :
                Instances For
                  theorem Cheeger.quadForm_nonneg {n : ℕ} (edges : Finset (Fin n × Fin n)) (f : Fin n → ℝ) :
                  0 ≤ quadForm edges f
                  theorem Cheeger.quadForm_shift {n : ℕ} (edges : Finset (Fin n × Fin n)) (x : Fin n → ℝ) (c : ℝ) :
                  quadForm edges x = quadForm edges fun (i : Fin n) => x i - c
                  theorem Cheeger.sqNorm_shift_ge {n : ℕ} (x : Fin n → ℝ) (c : ℝ) (hx : ∑ i : Fin n, x i = 0) :
                  sqNorm x ≤ sqNorm fun (i : Fin n) => x i - c
                  theorem Cheeger.claim6 {n : ℕ} (edges : Finset (Fin n × Fin n)) (x : Fin n → ℝ) (c : ℝ) (hx : ∑ i : Fin n, x i = 0) (hxn : 0 < sqNorm x) :
                  ((quadForm edges fun (i : Fin n) => x i - c) / sqNorm fun (i : Fin n) => x i - c) ≤ quadForm edges x / sqNorm x
                  noncomputable def Cheeger.splitQuadForm {n : ℕ} (crossing : Finset (Fin n × Fin n)) (f : Fin n → ℝ) (m : Fin n) :
                  Instances For
                    theorem Cheeger.quadForm_ge_splitQuadForm {n : ℕ} (crossing : Finset (Fin n × Fin n)) (y : Fin n → ℝ) (m : Fin n) (hm : y m = 0) (hcross : ∀ e ∈ crossing, y e.1 * y e.2 ≤ 0) :
                    splitQuadForm crossing y m ≤ quadForm crossing y
                    theorem Cheeger.claim7 {n : ℕ} (noncrossing crossing : Finset (Fin n × Fin n)) (y : Fin n → ℝ) (m : Fin n) (hm : y m = 0) (hcross : ∀ e ∈ crossing, y e.1 * y e.2 ≤ 0) (hdisjoint : Disjoint noncrossing crossing) (hd : 0 < sqNorm y) :
                    (quadForm noncrossing y + splitQuadForm crossing y m) / sqNorm y ≤ quadForm (noncrossing ∪ crossing) y / sqNorm y
                    theorem Cheeger.abel_summation (m : ℕ) (a : ℕ → ℝ) :
                    ∑ k ∈ Finset.range m, (↑k + 1) * (a (k + 1) - a k) = ↑m * a m - ∑ k ∈ Finset.range m, a k
                    theorem Cheeger.lemma8_summation_by_parts (m : ℕ) (z : ℕ → ℝ) (φ : ℝ) (hmono : ∀ (i j : ℕ), i ≤ j → j ≤ m → z i ≤ z j) (hzm : z m = 0) (C : ℕ → ℝ) (hC : ∀ k < m, φ * (↑k + 1) ≤ C k) :
                    φ * ∑ k ∈ Finset.range m, -z k ≤ ∑ k ∈ Finset.range m, C k * (z (k + 1) - z k)
                    theorem Cheeger.lemma8_summation_by_parts_abs (m : ℕ) (z : ℕ → ℝ) (φ : ℝ) (hmono : ∀ (i j : ℕ), i ≤ j → j ≤ m → z i ≤ z j) (hzm : z m = 0) (C : ℕ → ℝ) (hC : ∀ k < m, φ * (↑k + 1) ≤ C k) :
                    φ * ∑ k ∈ Finset.range m, |z k| ≤ ∑ k ∈ Finset.range m, C k * (z (k + 1) - z k)
                    theorem Cheeger.crossing_number_decomposition (m : ℕ) (z : ℕ → ℝ) (edges : Finset (ℕ × ℕ)) (hedge : ∀ e ∈ edges, e.1 < e.2 ∧ e.2 ≤ m) :
                    ∑ e ∈ edges, (z e.2 - z e.1) = ∑ k ∈ Finset.range m, ↑{e ∈ edges | e.1 ≤ k ∧ k < e.2}.card * (z (k + 1) - z k)
                    theorem Cheeger.lemma8_summation_by_parts_edges (m : ℕ) (z : ℕ → ℝ) (φ : ℝ) (edges : Finset (ℕ × ℕ)) (hmono : ∀ (i j : ℕ), i ≤ j → j ≤ m → z i ≤ z j) (hzm : z m = 0) (hedge : ∀ e ∈ edges, e.1 < e.2 ∧ e.2 ≤ m) (hC : ∀ k < m, φ * (↑k + 1) ≤ ↑{e ∈ edges | e.1 ≤ k ∧ k < e.2}.card) :
                    φ * ∑ k ∈ Finset.range m, |z k| ≤ ∑ e ∈ edges, |z e.2 - z e.1|
                    noncomputable def Cheeger.indicatorVec {n : ℕ} (S : Finset (Fin n)) :
                    Fin n → ℝ
                    Instances For
                      theorem Cheeger.indicatorVec_sum {n : ℕ} (S : Finset (Fin n)) :
                      ∑ i : Fin n, indicatorVec S i = 0
                      theorem Cheeger.sqNorm_indicatorVec {n : ℕ} (S : Finset (Fin n)) :
                      sqNorm (indicatorVec S) = ↑S.card * ↑Sᶜ.card * ↑n
                      theorem Cheeger.sqNorm_indicatorVec_pos {n : ℕ} (S : Finset (Fin n)) (hS : S.Nonempty) (hSc : Sᶜ.Nonempty) :
                      noncomputable def Cheeger.prefixCutRatio {n : ℕ} (edges : Finset (Fin n × Fin n)) (i : ℕ) :
                      Instances For
                        theorem Cheeger.prefixCutRatio_nonneg {n : ℕ} (edges : Finset (Fin n × Fin n)) (i : ℕ) (hi : 0 < i) (hin : i < n) :
                        theorem Cheeger.sum_fst_fiber {n : ℕ} (edges : Finset (Fin n × Fin n)) (f : Fin n → ℝ) :
                        ∑ e ∈ edges, f e.1 = ∑ v : Fin n, ↑{e ∈ edges | e.1 = v}.card * f v
                        theorem Cheeger.sum_endpoints_sq_le {n : ℕ} (edges : Finset (Fin n × Fin n)) (x : Fin n → ℝ) (dmax : ℝ) (hno : ∀ e ∈ edges, e.1 ≠ e.2) (hd : ∀ (v : Fin n), ↑{e ∈ edges | e.1 = v ∨ e.2 = v}.card ≤ dmax) :
                        ∑ e ∈ edges, (x e.1 ^ 2 + x e.2 ^ 2) ≤ dmax * sqNorm x
                        theorem Cheeger.degree_bound_sum_add_sq {n : ℕ} (edges : Finset (Fin n × Fin n)) (x : Fin n → ℝ) (dmax : ℝ) (hno : ∀ e ∈ edges, e.1 ≠ e.2) (hd : ∀ (v : Fin n), ↑{e ∈ edges | e.1 = v ∨ e.2 = v}.card ≤ dmax) :
                        ∑ e ∈ edges, (x e.1 + x e.2) ^ 2 ≤ 2 * dmax * sqNorm x
                        theorem Cheeger.theorem5_sorted_rayleigh_bound {n : ℕ} (edges : Finset (Fin n × Fin n)) (x : Fin n → ℝ) (dmax : ℝ) (_hn : 2 ≤ n) (hdmax : 0 < dmax) (_hx_orth : ∑ i : Fin n, x i = 0) (_hx_sorted : ∀ (i j : Fin n), i ≤ j → x i ≤ x j) (hx_nonzero : x ≠ 0) (hdmax_bound : ∀ (v : Fin n), ↑{e ∈ edges | e.1 = v ∨ e.2 = v}.card ≤ dmax) (h_edges_sorted : ∀ e ∈ edges, ↑e.1 < ↑e.2) (i₀ : ℕ) (hi₀_pos : 0 < i₀) (hi₀_lt : i₀ < n) (neg_norm : ℝ) (h_neg_nn : 0 ≤ neg_norm) (h_neg_bound : prefixCutRatio edges i₀ * neg_norm ≤ ∑ e ∈ edges with ↑e.2 ≤ i₀, |x e.1 ^ 2 - x e.2 ^ 2|) (pos_norm : ℝ) (h_pos_nn : 0 ≤ pos_norm) (h_pos_bound : prefixCutRatio edges i₀ * pos_norm ≤ ∑ e ∈ edges with i₀ ≤ ↑e.1, |x e.1 ^ 2 - x e.2 ^ 2|) (h_sqnorm_decomp : sqNorm x = neg_norm + pos_norm) :
                        ∃ (i : ℕ), 0 < i ∧ i < n ∧ prefixCutRatio edges i ^ 2 / (2 * dmax) ≤ quadForm edges x / sqNorm x
                        noncomputable def Cheeger.dirEdges {n : ℕ} (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] :
                        Instances For
                          theorem Cheeger.dirEdges_filter_cut {n : ℕ} (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] (S : Finset (Fin n)) :
                          {e ∈ dirEdges G | e.1 ∈ S ∧ e.2 ∉ S} = G.interedges S Sᶜ
                          theorem Cheeger.cheeger_hard_preprocess_from_graph {n : ℕ} (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] (phi dmax : ℝ) (hphi_nonneg : 0 ≤ phi) (hdmax_pos : 0 < dmax) (hphi_eq : phi = ↑G.edgeExpansion) (hdmax_bound : ∀ (v : Fin n), ↑(G.degree v) ≤ dmax) (f : Fin n → ℝ) (hf : f ≠ 0) (hfsum : ∑ i : Fin n, f i = 0) :
                          ∃ (y : Fin n → ℝ) (edges' : Finset (Fin n × Fin n)), quadForm edges' y / sqNorm y ≤ quadForm (dirEdges G) f / (2 * sqNorm f) ∧ phi * sqNorm y ≤ ∑ e ∈ edges', |y e.1 ^ 2 - y e.2 ^ 2| ∧ ∑ e ∈ edges', (y e.1 + y e.2) ^ 2 ≤ 2 * dmax * sqNorm y ∧ 0 < sqNorm y
                          theorem Cheeger.cheeger_inequality_graph {n : ℕ} (G : SimpleGraph (Fin n)) [DecidableRel G.Adj] (phi dmax lam2 : ℝ) (hphi_nonneg : 0 ≤ phi) (hdmax_pos : 0 < dmax) (hn : 2 ≤ n) (hphi_eq : phi = ↑G.edgeExpansion) (hdmax_bound : ∀ (v : Fin n), ↑(G.degree v) ≤ dmax) (hlam2_def : ∀ (f : Fin n → ℝ), f ≠ 0 → ∑ i : Fin n, f i = 0 → lam2 ≤ quadForm (dirEdges G) f / (2 * sqNorm f)) (hlam2_achieve : ∃ (f : Fin n → ℝ), f ≠ 0 ∧ ∑ i : Fin n, f i = 0 ∧ quadForm (dirEdges G) f / (2 * sqNorm f) = lam2) :
                          phi ^ 2 / (2 * dmax) ≤ lam2 ∧ lam2 ≤ 2 * phi