Isogeny volcanoes
StructureMultigraph#✓fully proved
A multigraph on a vertex set \(V\) is given by an edge multiplicity function \(m\) that assigns to every two vertices \(v, w \in V\) a natural number \(m(v, w)\) and is symmetric: \(m(v, w) = m(w, v)\) for all \(v, w \in V\). Loops are permitted: \(m(v, v)\) may be positive.
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
edgeMult : V → V → ℕ
MathlibExt/Combinatorics/IsogenyVolcano.lean:34
Used by 17
DefinitionAdjacency in a multigraph#✓fully proved
Two vertices \(v\) and \(w\) of a multigraph \(G\) are adjacent when the edge multiplicity between \(v\) and \(w\) is positive.
def Adj (G : Multigraph V) (v w : V) : Prop :=
0 < G.edgeMult v w
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 1 · Used by 3
DefinitionDegree of a vertex in a multigraph#✓fully proved
For a multigraph \(G\) on a finite vertex set \(V\) with edge multiplicity \(m\), the degree of a vertex \(v\) is \(\sum_{w \in V} m(v, w)\). A loop at \(v\) contributes its multiplicity once, matching the outgoing-isogeny convention.
def degree (G : Multigraph V) [Fintype V] (v : V) : ℕ :=
∑ w : V, G.edgeMult v w
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 1 · Used by 2
DefinitionDegree restricted to a predicate#✓fully proved
Let \(G\) be a multigraph on a finite vertex set \(V\) with edge multiplicity \(m\), let \(v \in V\) and let \(P\) be a decidable predicate on \(V\). The degree of \(v\) restricted to \(P\) is \(\sum_{w \in V,\, P(w)} m(v, w)\).
def degreeOn (G : Multigraph V) [Fintype V] (v : V)
(P : V → Prop) [DecidablePred P] : ℕ :=
∑ w ∈ Finset.univ.filter P, G.edgeMult v w
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 1 · Used by 4
DefinitionConnectivity of vertices in a multigraph#✓fully proved
Two vertices \(v\) and \(w\) of a multigraph \(G\) are connected when they are related by the reflexive-transitive closure of adjacency, that is, when there is a finite sequence of vertices \(v = u_0, u_1, \dots, u_k = w\) with \(k \ge 0\) and \(u_i\) adjacent to \(u_{i+1}\) for each \(i < k\).
def Connected (G : Multigraph V) (v w : V) : Prop :=
Relation.ReflTransGen G.Adj v w
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 2 · Used by 2
DefinitionConnected multigraph#✓fully proved
A multigraph \(G\) is connected when every two vertices \(v\) and \(w\) of \(G\) are joined by a walk, that is, \(w\) is reachable from \(v\) by a finite (possibly empty) sequence of steps along edges of positive multiplicity.
def IsConnected (G : Multigraph V) : Prop :=
∀ v w, G.Connected v w
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 2 · Used by 1
TheoremSymmetry of adjacency in a multigraph#✓fully proved
In a multigraph \(G\), a vertex \(v\) is adjacent to a vertex \(w\) if and only if \(w\) is adjacent to \(v\).
theorem adj_comm (G : Multigraph V) (v w : V) :
G.Adj v w ↔ G.Adj w v
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 2
TheoremEvery vertex is connected to itself#✓fully proved
In a multigraph \(G\), every vertex \(v\) is connected to \(v\).
theorem connected_refl (G : Multigraph V) (v : V) :
G.Connected v v
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 3
TheoremDegree splits over a predicate and its complement#✓fully proved
Let \(G\) be a multigraph on a finite vertex set \(V\), let \(v \in V\) and let \(P\) be a decidable predicate on \(V\). Then the degree of \(v\) equals the degree of \(v\) restricted to \(P\) plus the degree of \(v\) restricted to \(\neg P\).
theorem degreeOn_compl (G : Multigraph V) [Fintype V]
(v : V) (P : V → Prop) [DecidablePred P] :
G.degree v = G.degreeOn v P + G.degreeOn v (fun w => ¬ P w)
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 3
TheoremRestricted degree depends only on the neighbours#✓fully proved
Let \(G\) be a multigraph on a finite vertex set \(V\), let \(v \in V\) and let \(P\) and \(Q\) be decidable predicates on \(V\). If \(P(w) \iff Q(w)\) for every vertex \(w\) whose edge multiplicity with \(v\) is positive, then the degree of \(v\) restricted to \(P\) equals the degree of \(v\) restricted to \(Q\).
theorem degreeOn_congr (G : Multigraph V) [Fintype V]
(v : V) {P Q : V → Prop}
[DecidablePred P] [DecidablePred Q]
(h : ∀ w, G.edgeMult v w > 0 → (P w ↔ Q w)) :
G.degreeOn v P = G.degreeOn v Q
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
Uses 2 · Used by 1
StructureIsogeny volcano#✓fully proved
Let \(\ell\) be a prime. An \(\ell\)-isogeny volcano consists of a finite vertex set \(V\), a multigraph on \(V\) with edge multiplicities \(m(v, w)\), a depth \(d \in \mathbb{N}\), a surjective level map \(\mathrm{lev} : V \to \{0, 1, \dots, d\}\) and a surface degree \(s \in \mathbb{N}\) with \(s \le 2\), subject to the following conditions, where the surface is the set of vertices of level \(0\). Every surface vertex \(v\) satisfies \(\sum_{w \in V,\ \mathrm{lev}(w) = 0} m(v, w) = s\). Every vertex \(v\) of positive level has a unique parent: \(\sum_{w \in V,\ \mathrm{lev}(w) + 1 = \mathrm{lev}(v)} m(v, w) = 1\). Whenever \(m(v, w) > 0\), either \(v\) and \(w\) both lie on the surface or their levels differ by exactly one. Every vertex \(v\) with \(\mathrm{lev}(v) < d\) has degree \(\sum_{w \in V} m(v, w) = \ell + 1\), where a loop at \(v\) contributes its multiplicity once. Finally, the multigraph is connected: any two vertices are joined by a path along which consecutive vertices have positive edge multiplicity.
IsogenyVolcano · 41 lines
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
depth : ℕ
/-- Level of each vertex. -/
level : V → Fin (depth + 1)
/-- Every level is inhabited. -/
level_surj : Function.Surjective level
/-- Surface degree. -/
surfaceDegree : ℕ
/-- Surface degree is at most two. -/
surfaceDegree_le : surfaceDegree ≤ 2
/-- Surface regularity. -/
surface_regular : ∀ v,
level v = ⟨0, Nat.zero_lt_succ _⟩ →
graph.degreeOn v
(fun w => level w = ⟨0, Nat.zero_lt_succ _⟩) =
surfaceDegree
/-- Every nonsurface vertex has a unique parent. -/
unique_parent : ∀ v, (level v : ℕ) > 0 →
graph.degreeOn v
(fun w => (level w : ℕ) + 1 = (level v : ℕ)) = 1
/-- Positive edges stay within or across adjacent levels. -/
edges_between_levels : ∀ v w, graph.edgeMult v w > 0 →
((level v : ℕ) = 0 ∧ (level w : ℕ) = 0) ∨
(level w : ℕ) + 1 = (level v : ℕ) ∨
(level v : ℕ) + 1 = (level w : ℕ)
/-- Regularity below the floor. -/
degree_eq : ∀ v, (level v : ℕ) < depth →
graph.degree v = ℓ + 1
/-- The graph is connected. -/
connected : graph.IsConnected
V : Type*
MathlibExt/Combinatorics/IsogenyVolcano.lean:138
structure Multigraph (V : Type*) where
/-- The multiplicity of edges between two vertices. -/
edgeMult : V → V → ℕ
/-- Edge multiplicity is symmetric. -/
symm : ∀ v w, edgeMult v w = edgeMult w v
MathlibExt/Combinatorics/IsogenyVolcano.lean:32
depth : ℕ
MathlibExt/Combinatorics/IsogenyVolcano.lean:146
level : V → Fin (depth + 1)
MathlibExt/Combinatorics/IsogenyVolcano.lean:148
surfaceDegree : ℕ
MathlibExt/Combinatorics/IsogenyVolcano.lean:152
graph : Multigraph V
MathlibExt/Combinatorics/IsogenyVolcano.lean:144
Uses 4 · Used by 13
DefinitionSurface of a volcano#✓fully proved
A vertex \(v\) of an \(\ell\)-isogeny volcano \(C\) lies on the surface of \(C\) when its level is \(0\).
def isSurface (C : IsogenyVolcano ℓ) (v : C.V) : Prop :=
C.level v = 0
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 1 · Used by 2
DefinitionFloor of a volcano#✓fully proved
A vertex \(v\) of an \(\ell\)-isogeny volcano \(C\) of depth \(d\) lies on the floor of \(C\) when its level is \(d\), the last of the levels \(0, 1, \dots, d\).
def isFloor (C : IsogenyVolcano ℓ) (v : C.V) : Prop :=
C.level v = Fin.last C.depth
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 1 · Used by 1
DefinitionDepth of an isogeny volcano#✓fully proved
The depth of an \(\ell\)-isogeny volcano \(C\) is the natural number \(d\) recorded in \(C\): the levels of the vertices of \(C\) are exactly \(0, 1, \dots, d\), with level \(0\) the surface and level \(d\) the floor.
def volcanoDepth (C : IsogenyVolcano ℓ) : ℕ :=
C.depth
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 1
DefinitionHorizontal edge#✓fully proved
In an \(\ell\)-isogeny volcano \(C\), the pair \((v, w)\) of vertices is a horizontal edge when the edge multiplicity between \(v\) and \(w\) is positive and both \(v\) and \(w\) lie on the surface, that is, both have level \(0\).
def IsHorizontalEdge (C : IsogenyVolcano ℓ)
(v w : C.V) : Prop :=
C.graph.edgeMult v w > 0 ∧
(C.level v : ℕ) = 0 ∧ (C.level w : ℕ) = 0
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 2 · Used by 1
DefinitionDescending edge#✓fully proved
In an \(\ell\)-isogeny volcano \(C\), the pair \((v, w)\) of vertices is a descending edge when the edge multiplicity between \(v\) and \(w\) is positive and \(w\) lies one level below \(v\), that is, the level of \(v\) plus one equals the level of \(w\) (level \(0\) being the surface).
def IsDescendingEdge (C : IsogenyVolcano ℓ)
(v w : C.V) : Prop :=
C.graph.edgeMult v w > 0 ∧
(C.level v : ℕ) + 1 = (C.level w : ℕ)
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 2 · Used by 4
DefinitionAscending edge#✓fully proved
In an \(\ell\)-isogeny volcano \(C\), the pair \((v, w)\) of vertices is an ascending edge when the edge multiplicity between \(v\) and \(w\) is positive and \(w\) lies one level above \(v\), that is, the level of \(w\) plus one equals the level of \(v\) (level \(0\) being the surface).
def IsAscendingEdge (C : IsogenyVolcano ℓ)
(v w : C.V) : Prop :=
C.graph.edgeMult v w > 0 ∧
(C.level w : ℕ) + 1 = (C.level v : ℕ)
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 2 · Used by 4
DefinitionVertical edge#✓fully proved
In an \(\ell\)-isogeny volcano \(C\), the pair \((v, w)\) of vertices is a vertical edge when it is a descending edge or an ascending edge, that is, when the edge multiplicity between \(v\) and \(w\) is positive and the levels of \(v\) and \(w\) differ by exactly one.
def IsVerticalEdge (C : IsogenyVolcano ℓ)
(v w : C.V) : Prop :=
C.IsDescendingEdge v w ∨ C.IsAscendingEdge v w
structure IsogenyVolcano (ℓ : ℕ) where
/-- The isogeny degree is prime. -/
prime : Nat.Prime ℓ
/-- Vertex type. -/
V : Type*
/-- Finite vertices. -/
instFintype : Fintype V
/-- Decidable equality on vertices. -/
instDecEq : DecidableEq V
/-- Underlying multigraph. -/
graph : Multigraph V
/-- Depth of the volcano. -/
⋯
MathlibExt/Combinatorics/IsogenyVolcano.lean:134
Uses 3
TheoremReversing a descending edge gives an ascending edge#✓fully proved
In an \(\ell\)-isogeny volcano, for vertices \(v\) and \(w\), \((v, w)\) is a descending edge if and only if \((w, v)\) is an ascending edge.
theorem descending_iff_ascending_symm (v w : C.V) :
C.IsDescendingEdge v w ↔ C.IsAscendingEdge w v
Uses 4
TheoremReversing an ascending edge gives a descending edge#✓fully proved
In an \(\ell\)-isogeny volcano, for vertices \(v\) and \(w\), \((v, w)\) is an ascending edge if and only if \((w, v)\) is a descending edge.
theorem ascending_iff_descending_symm (v w : C.V) :
C.IsAscendingEdge v w ↔ C.IsDescendingEdge w v
Uses 4
TheoremEvery edge of an isogeny volcano is horizontal, descending or ascending#✓fully proved
Let \(C\) be an \(\ell\)-isogeny volcano, with levels numbered from \(0\) at the surface, and let \(v, w\) be vertices of \(C\) whose edge multiplicity is positive. Then \((v, w)\) is a horizontal edge (both \(v\) and \(w\) have level \(0\)), a descending edge (the level of \(w\) is the level of \(v\) plus one) or an ascending edge (the level of \(v\) is the level of \(w\) plus one).
theorem edge_direction (v w : C.V)
(h : C.graph.edgeMult v w > 0) :
C.IsHorizontalEdge v w ∨ C.IsDescendingEdge v w ∨
C.IsAscendingEdge v w
Uses 5
TheoremSurface vertices are those of level zero#✓fully proved
A vertex \(v\) of an \(\ell\)-isogeny volcano \(C\) lies on the surface of \(C\) if and only if the level of \(v\), as a natural number, is \(0\).
@[simp] theorem isSurface_iff (v : C.V) :
C.isSurface v ↔ (C.level v : ℕ) = 0
Uses 2 · Used by 1
TheoremFloor vertices are those whose level equals the depth#✓fully proved
A vertex \(v\) of an \(\ell\)-isogeny volcano \(C\) lies on the floor of \(C\) if and only if the level of \(v\), as a natural number, equals the depth of \(C\).
@[simp] theorem isFloor_iff (v : C.V) :
C.isFloor v ↔ (C.level v : ℕ) = C.depth
Uses 2
TheoremSurface regularity of an isogeny volcano#✓fully proved
Let \(C\) be an \(\ell\)-isogeny volcano with edge multiplicities \(m\) and surface degree \(s\). For every surface vertex \(v\) of \(C\), that is, every vertex of level \(0\), the sum of \(m(v, w)\) over all surface vertices \(w\) of \(C\) equals \(s\).
This restates the surface-regularity condition of an isogeny volcano in terms of the surface predicate.
@[simp] theorem surface_degreeOn (v : C.V) (hv : C.isSurface v) :
C.graph.degreeOn v (fun w => C.isSurface w) = C.surfaceDegree
Uses 6
Loading dependency explorer…
The dependency explorer needs JavaScript and its graph data.