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 : ecrossing, 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 : ecrossing, 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 : ) :
                    kFinset.range m, (k + 1) * (a (k + 1) - a k) = m * a m - kFinset.range m, a k
                    theorem Cheeger.lemma8_summation_by_parts (m : ) (z : ) (φ : ) (hmono : ∀ (i j : ), i jj mz i z j) (hzm : z m = 0) (C : ) (hC : k < m, φ * (k + 1) C k) :
                    φ * kFinset.range m, -z k kFinset.range m, C k * (z (k + 1) - z k)
                    theorem Cheeger.lemma8_summation_by_parts_abs (m : ) (z : ) (φ : ) (hmono : ∀ (i j : ), i jj mz i z j) (hzm : z m = 0) (C : ) (hC : k < m, φ * (k + 1) C k) :
                    φ * kFinset.range m, |z k| kFinset.range m, C k * (z (k + 1) - z k)
                    theorem Cheeger.crossing_number_decomposition (m : ) (z : ) (edges : Finset ( × )) (hedge : eedges, e.1 < e.2 e.2 m) :
                    eedges, (z e.2 - z e.1) = kFinset.range m, {eedges | 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 jj mz i z j) (hzm : z m = 0) (hedge : eedges, e.1 < e.2 e.2 m) (hC : k < m, φ * (k + 1) {eedges | e.1 k k < e.2}.card) :
                    φ * kFinset.range m, |z k| eedges, |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) :
                        eedges, f e.1 = v : Fin n, {eedges | e.1 = v}.card * f v
                        theorem Cheeger.sum_endpoints_sq_le {n : } (edges : Finset (Fin n × Fin n)) (x : Fin n) (dmax : ) (hno : eedges, e.1 e.2) (hd : ∀ (v : Fin n), {eedges | e.1 = v e.2 = v}.card dmax) :
                        eedges, (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 : eedges, e.1 e.2) (hd : ∀ (v : Fin n), {eedges | e.1 = v e.2 = v}.card dmax) :
                        eedges, (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 jx i x j) (hx_nonzero : x 0) (hdmax_bound : ∀ (v : Fin n), {eedges | e.1 = v e.2 = v}.card dmax) (h_edges_sorted : eedges, 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 eedges 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 eedges 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)) :
                          {edirEdges G | e.1 S e.2S} = 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 eedges', |y e.1 ^ 2 - y e.2 ^ 2| eedges', (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 0i : Fin n, f i = 0lam2 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