Theorems¶
Definitions and theorems by file. The tables omit hypotheses (mostly \(1 < u\) and \(u \leq v\)); see the source. The library builds with no sorry, and the 78 declarations in Verify.lean use only propext, Classical.choice and Quot.sound.
Headline theorems¶
F1: log-ratio limit (FlowerDimension.lean)¶
theorem flowerDimension (u v : ℕ) (hu : 1 < u) (huv : u ≤ v) :
Tendsto (fun g : ℕ ↦ log ↑(flowerVertCount u v g) / log ↑(flowerHubDist u v g))
atTop (nhds (log ↑(u + v) / log ↑u))
F2: hub distance (FlowerConstruction.lean)¶
theorem flowerGraph_dist_hub0_hub1 (u v g : ℕ) (hu : 1 < u) (huv : u ≤ v) :
(flowerGraph u v g hu huv).dist (hub0 u v g) (hub1 u v g) = u ^ g
hub0 and hub1 are the indices 0 and 1, where flowerVertEquiv sends the construction's hubs; see Graph Construction.
F3: log-ratio dimension of the graphs (FlowerGraphDimension.lean)¶
theorem flowerGraph_hasLogRatioDimension (u v : ℕ) (hu : 1 < u) (huv : u ≤ v) :
HasLogRatioDimension (fun g ↦ flowerGraph u v g hu huv) (hub0 u v) (hub1 u v)
(log ↑(u + v) / log ↑u)
HasLogRatioDimension (FlowerLogRatio.lean)¶
def HasLogRatioDimension
{V : ℕ → Type*} [∀ g, Fintype (V g)]
(G : (g : ℕ) → SimpleGraph (V g))
(s t : (g : ℕ) → V g)
(d : ℝ) : Prop :=
Tendsto (fun g ↦ log (Fintype.card (V g) : ℝ) / log ((G g).dist (s g) (t g) : ℝ))
atTop (nhds d)
For a family of finite graphs with distinguished vertices, the log-ratio of vertex count to their distance tends to \(d\). F3 proves it for the flower graphs.
F4: box-counting dimension of the graphs (FlowerBoxDimension.lean)¶
theorem flowerGraph_hasBoxDimension (hu : 1 < u) (huv : u ≤ v) :
HasBoxDimension (fun g ↦ flowerGraph u v g hu huv) (log ↑(u + v) / log ↑u)
HasBoxDimension (FlowerBoxDimension.lean)¶
def HasBoxDimension {V : ℕ → Type*} (G : (g : ℕ) → SimpleGraph (V g)) (d : ℝ) : Prop :=
(∀ g, Finite (V g)) ∧ Tendsto (fun g ↦ ((G g).diam : ℝ)) atTop atTop ∧
∀ ℓ : ℕ → ℕ, (∀ g, 0 < ℓ g) →
Tendsto (fun g ↦ ((G g).diam : ℝ) / ℓ g) atTop atTop →
Tendsto (fun g ↦ log ((G g).boxCount (ℓ g) : ℝ) / log (((G g).diam : ℝ) / ℓ g))
atTop (𝓝 d)
boxCount ℓ is the fewest vertex sets of extended diameter \(< \ell\) that cover the graph (Song, Havlin & Makse 2005). HasBoxDimension is a network box dimension: it concerns a sequence of finite graphs as the generation \(g \to \infty\), not the classical box dimension of one bounded metric space as the scale tends to zero. The diameters must diverge, and the limit is required along every scale sequence with \(\operatorname{diam} G_g / \ell_g \to \infty\), so it does not depend on a choice of scales, and \(d\) is unique (HasBoxDimension.unique). At \(\ell_g = 1\) it contains the mass-scaling law \(\log \lvert V_g \rvert / \log \operatorname{diam} G_g \to d\) (HasBoxDimension.tendsto_log_card_div_log_diam). The graphs must be finite, so boxCount never takes its junk value. F4 proves it for the flower graphs; see Proof Strategy.
Counts (FlowerCounts.lean)¶
\(E_0 = 1\), \(E_{g+1} = (u+v)\,E_g\); \(N_0 = 2\), \(N_{g+1} = N_g + (u+v-2)\,E_g\); \(w = u + v\).
| Theorem | Statement |
|---|---|
flowerEdgeCount_eq_pow |
\(E_g = w^g\) |
flowerVertCount_eq |
\((w-1)\,N_g = (w-2)\,w^g + w\) |
flowerVertCount_lower |
\((w-2)\,w^g \leq (w-1)\,N_g\) |
flowerVertCount_upper |
\((w-1)\,N_g \leq 2(w-1)\,w^g\) |
flowerEdgeCount_pos, flowerVertCount_pos |
\(0 < E_g\), \(0 < N_g\) |
flowerEdgeCount_strict_mono, flowerVertCount_strict_mono |
\(E_g < E_{g+1}\), \(N_g < N_{g+1}\) |
flowerVertCount_cast_eq |
the exact recurrence in \(\mathbb{R}\) |
Hub distance (FlowerHubDist.lean)¶
\(L_0 = 1\), \(L_{g+1} = u\,L_g\).
| Theorem | Statement |
|---|---|
flowerHubDist_eq_pow |
\(L_g = u^g\) |
flowerHubDist_pos, flowerHubDist_strict_mono |
\(0 < L_g\), \(L_g < L_{g+1}\) |
flowerHubDist_cast_eq_pow |
\(\uparrow\!L_g = (\uparrow\!u)^g\) in \(\mathbb{R}\) |
Logs (FlowerLog.lean)¶
| Theorem | Statement |
|---|---|
log_flowerHubDist_eq |
\(\log L_g = g \log u\) |
log_flowerEdgeCount_eq |
\(\log E_g = g \log w\) |
log_flowerVertCount_residual_lower |
\(\log\frac{w-2}{w-1} \leq \log N_g - g \log w\) |
log_flowerVertCount_residual_upper |
\(\log N_g - g \log w \leq \log 2\) |
Hubs on Fin (FlowerGraph.lean)¶
hub0, hub1 : Fin (flowerVertCount u v g) are the indices 0 and 1, with two_le_flowerVertCount (\(2 \leq N_g\)) and hub0_ne_hub1.
Graph construction (FlowerConstruction.lean)¶
| Declaration | Content |
|---|---|
GadgetPos, LocalEdge, FlowerEdge, FlowerVert |
gadget positions, edge and vertex types |
flowerGraph' |
the flower graph on FlowerVert |
flowerGraph'_adj_iff |
adjacency iff flowerAdj' |
gadgetInternal_card |
\(u + v - 2\) internal vertices per gadget |
flowerVert_card |
Fintype.card (FlowerVert u v g) = flowerVertCount u v g |
flowerGraph'_connected |
the flower graph is connected |
flowerGraph'_dist_hubs |
hub distance \(u^g\) on FlowerVert |
flowerVertEquiv_hub0, flowerVertEquiv_hub1 |
flowerVertEquiv sends the hubs to hub0, hub1 |
flowerGraph_dist_hubs |
hub distance on Fin, via flowerVertEquiv |
flowerGraph_dist_hub0_hub1 |
F2 (see above) |
Path graphs (PathGraphDist.lean)¶
In pathGraph (n + 1), pathGraph_edist and pathGraph_dist give \(|i - j|\), and pathGraph_edist_zero_last and pathGraph_dist_zero_last give \(n\) between the endpoints.
Box covering (BoxCounting.lean)¶
For any simple graph \(G\):
| Declaration | Content |
|---|---|
IsBox ℓ B |
the points of \(B\) are pairwise at extended distance \(< \ell\) |
boxCount ℓ |
\(N_B(G, \ell)\), the fewest boxes of size \(\ell\) covering every vertex |
boxCount_le_of_cover |
any cover by \(n\) boxes gives \(N_B \leq n\) |
le_boxCount_of_separated |
\(n\) points pairwise at distance \(\geq \ell\) give \(n \leq N_B\) |
boxCount_anti, boxCount_pos, boxCount_le_card |
antitone in \(\ell\); \(0 < N_B \leq \lvert V \rvert\) |
boxCount_one |
at \(\ell = 1\) every box is a single vertex, so \(N_B = \lvert V \rvert\) |
Iso.boxCount_eq |
isomorphic graphs have equal box counts |
Hom.dist_le |
graph homomorphisms do not increase distance |
le_add_dist_of_lipschitz, tent_lipschitz |
a 1-Lipschitz potential bounds distance; folding it into a tent keeps it 1-Lipschitz |
Scaling (BoxScaling.lean)¶
Real.tendsto_log_count_div_log_scale: if \(N(g, \ell)\) is antitone in \(\ell\) and within a constant factor of \(b^{g-m}\) at \(\ell = u^m\), then along any scales with \(L_g / \ell_g \to \infty\) (where \(L_g\) is comparable to \(u^g\)), \(\log N(g, \ell_g) / \log(L_g / \ell_g) \to \log b / \log u\).
Cells (FlowerCells.lean)¶
A generation-\(k\) edge \(e\) is replaced, \(j\) generations later, by a copy of the generation-\(j\) flower.
| Declaration | Content |
|---|---|
FlowerEdge.graft, trunc, suffix |
split a generation-\((k + j)\) edge into its generation-\(k\) ancestor and the rest |
cellEmbed k e j |
the generation-\(j\) flower mapped onto the cell of \(e\) |
cellEmbed_injective, cellHom |
each cell is an injective graph homomorphism image |
exists_cellEmbed_eq |
the \((u+v)^k\) cells cover every vertex |
cellEmbed_eq_of_ne |
distinct cells meet only at hubs |
cellPotential_lipschitz |
a hub-vanishing 1-Lipschitz potential moved onto one cell stays 1-Lipschitz |
Rank and radius (FlowerRadius.lean)¶
| Theorem | Statement |
|---|---|
rank_le_pow, exists_rank_eq |
ranks lie in \([0, u^g]\), and each value is taken |
dist_hub_le |
every vertex is within \(v\,u^g\) of a hub |
flowerGraph'_dist_le |
the diameter is at most \((2v + 1)\,u^g\) |
Box counts of the flowers (FlowerBoxDimension.lean)¶
| Theorem | Statement |
|---|---|
flower_boxCount_ge |
for \(0 < j\), \((u+v)^k \leq N_B(G_{k+j}, u^j / 2)\): cell centres are \(u^j / 2\)-separated |
flower_boxCount_le |
\(N_B(G_{k+j}, (2v + 1)\,u^j + 1) \leq (u+v)^k\): cells are boxes |
flowerGraph'_diam_bounds |
\(u^g \leq \operatorname{diam} G_g \leq (2v + 1)\,u^g\) |
flowerGraph_hasBoxDimension |
F4 (see above) |