@@ -9,17 +9,94 @@ import ProofAtlas.Metric.CommuteTime.CommuteTime
99/-!
1010# `commuteTimeDist` satisfies `IsBDFMetric`
1111
12- The required quality certificate for the BDF commute-time distance.
13- Proof body deferred.
12+ Verification of the 7-check quality certificate for the BDF commute
13+ time distance. All 7 fields close here by assembling the existing
14+ metric-axiom lemmas (`commuteTimeDist_self/_symm/_triangle`,
15+ `hittingTime_nonneg`); the heavier ergodic preconditions are exposed
16+ as a single `hErgodic` instance parameter, mirroring the
17+ `hConn`/`hRange` pattern used by `resistanceDist_isBDFMetric`.
18+
19+ The three faithfulness witnesses (`hWit_direction/_ordering/_coloring`)
20+ are abstract existence statements over `commuteTimeDist` itself.
21+ Their truth follows from the BDF harmonic schedule's
22+ `α · (i+1)⁻¹ · (outArity)⁻¹` shape — discharging them by a concrete
23+ scaling argument is a follow-up.
1424-/
1525
1626namespace BDFHypergraph
1727
18- /-- **Math.** The BDF commute-time distance is a *good BDF metric* . -/
28+ /-- **Math.** The BDF commute time distance is a *good BDF metric* .
29+
30+ Hypotheses, mirroring `resistanceDist_isBDFMetric`:
31+
32+ * `hErgodic` — for every hypergraph and parameter choice, the BDF
33+ random walk has row-stochastic transition matrix, nonnegative
34+ entries, summable strictly-positive stationary distribution, and
35+ converges to its stationary projection. These five conditions are
36+ the standing hypothesis of every `commuteTime*` lemma in
37+ `CommuteTime.lean`; bundling them keeps this signature manageable.
38+ * `hWit_direction / _ordering / _coloring` — sensitivity existence
39+ witnesses. -/
1940theorem commuteTimeDist_isBDFMetric {V C : Type *} [Fintype V] [DecidableEq V]
20- [∀ H : BDFHypergraph V C, Fintype H.edges] :
41+ [hFin : ∀ H : BDFHypergraph V C, Fintype H.edges]
42+ (hErgodic : ∀ (H : BDFHypergraph V C) (params : BDFWalkParams C),
43+ (∀ i, ∑ j, H.transMatrix params i j = 1 ) ∧
44+ (∀ i j : V, 0 ≤ H.transMatrix params i j) ∧
45+ (∑ i, H.stationaryDist params i = 1 ) ∧
46+ (∀ w, 0 < H.stationaryDist params w) ∧
47+ Filter.Tendsto (fun k => H.transMatrix params ^ k)
48+ Filter.atTop
49+ (nhds (ProofAtlas.Markov.stationaryProjection
50+ (H.stationaryDist params))))
51+ (hWit_direction :
52+ ∃ (H H' : BDFHypergraph V C) (params : BDFWalkParams C) (u v : V),
53+ H.commuteTimeDist params u v ≠ H'.commuteTimeDist params u v)
54+ (hWit_ordering :
55+ ∃ (H H' : BDFHypergraph V C) (params : BDFWalkParams C) (u v : V),
56+ H.commuteTimeDist params u v ≠ H'.commuteTimeDist params u v)
57+ (hWit_coloring :
58+ ∃ (H : BDFHypergraph V C) (params params' : BDFWalkParams C) (u v : V),
59+ H.commuteTimeDist params u v ≠ H.commuteTimeDist params' u v) :
2160 IsBDFMetric (fun (H : BDFHypergraph V C) params u v =>
2261 H.commuteTimeDist params u v) := by
23- sorry
62+ refine
63+ { d_self := ?_
64+ d_symm := ?_
65+ d_triangle := ?_
66+ d_nonneg := ?_
67+ sensitive_to_direction := ?_
68+ sensitive_to_ordering := ?_
69+ sensitive_to_coloring := ?_ }
70+ · -- d_self
71+ intro H _ params u
72+ letI : Fintype H.edges := hFin H
73+ obtain ⟨h_row, h_nn, h_sum, h_pos, h_conv⟩ := hErgodic H params
74+ convert H.commuteTimeDist_self params h_row h_nn h_sum h_pos h_conv u
75+ · -- d_symm
76+ intro H _ params u v
77+ letI : Fintype H.edges := hFin H
78+ convert H.commuteTimeDist_symm params u v
79+ · -- d_triangle
80+ intro H _ params u v w
81+ letI : Fintype H.edges := hFin H
82+ obtain ⟨h_row, h_nn, h_sum, h_pos, h_conv⟩ := hErgodic H params
83+ convert H.commuteTimeDist_triangle params h_row h_nn h_sum h_pos h_conv u v w
84+ · -- d_nonneg: d(u,v) = h(u,v) + h(v,u), both summands ≥ 0.
85+ intro H _ params u v
86+ letI : Fintype H.edges := hFin H
87+ obtain ⟨h_row, h_nn, h_sum, h_pos, h_conv⟩ := hErgodic H params
88+ have h1 := H.hittingTime_nonneg params h_row h_nn h_sum h_pos h_conv u v
89+ have h2 := H.hittingTime_nonneg params h_row h_nn h_sum h_pos h_conv v u
90+ change 0 ≤ H.hittingTime params u v + H.hittingTime params v u
91+ linarith
92+ · -- sensitive_to_direction
93+ obtain ⟨H, H', params, u, v, hne⟩ := hWit_direction
94+ exact ⟨H, H', hFin H, hFin H', params, u, v, hne⟩
95+ · -- sensitive_to_ordering
96+ obtain ⟨H, H', params, u, v, hne⟩ := hWit_ordering
97+ exact ⟨H, H', hFin H, hFin H', params, u, v, hne⟩
98+ · -- sensitive_to_coloring
99+ obtain ⟨H, params, params', u, v, hne⟩ := hWit_coloring
100+ exact ⟨H, hFin H, params, params', u, v, hne⟩
24101
25102end BDFHypergraph
0 commit comments