Auslander-Reiten Quivers#
- class sage.quivers.ar_quiver.AuslanderReitenQuiver(quiver)[source]#
Bases:
UniqueRepresentation
,Parent
The Auslander-Reiten quiver.
Let \(Q = (Q_0, Q_1)\) be a finite acyclic quiver. The Auslander-Reiten quiver (AR quiver) \(\Gamma_Q\) is the quiver whose vertices correspond to the indecompositible modules of \(Q\) (equivalently its path algebra over an algebraically closed field) and edges are irreducible morphisms.
In this implementation, we denote the vertices of \(\Gamma_Q\) as certain pairs \(\langle v, k \rangle\), where \(v \in Q_0\) and \(k \in \ZZ \setminus \{0\}\) is called the level. When \(k > 0\) (resp. \(k < 0\)), then it corresponds to a preprojective (resp. postinjective) module. When the quiver is a finite type Dynkin quiver, we consider all modules to be preprojectives and denoted by a positive level.
Note
We use the terminology postinjective instead of preinjective given that they follow from injectives by AR translation.
ALGORITHM:
We compute the dimension vectors of a projective \(\langle v, 1 \rangle\) by counting the number of (directed) paths \(u \to v\) in \(Q\). We then proceed inductively to compute all of the dimension vectors of level \(k\) by using the translation equation
\[dim \langle v, k-1 \rangle + \dim \langle v, k \rangle = \sum_{u,k'} \dim \langle u, k' \rangle,\]where the sum is over all paths from \(\langle v, k-1 \rangle\) to \(\langle v, k \rangle\) in \(\Gamma_Q\). More specifically, for each edge \((u, v, \ell) \in Q_1\) (resp. \((v, u, \ell) \in Q_1\)), we have \(\langle u, k-1 \rangle\) (resp. \(\langle u, k \rangle\)) in the sum (assuming the node is in the AR quiver).
The algorithm for postinjectives is dual to the above.
Todo
This only is implemented for the preprojectives and postinjectives when the quiver is not a finite type Dynkin quiver.
Todo
Implement this for general Artinian algebras.
EXAMPLES:
We create the AR quivers for finite type \(A_3\) Dynkin quivers:
sage: DA = DiGraph([[1, 2], [2, 3]]) sage: AR = DA.auslander_reiten_quiver() sage: AR.digraph().edges(labels=False) [(<1, 1>, <2, 2>), (<2, 1>, <1, 1>), (<2, 1>, <3, 2>), (<3, 1>, <2, 1>), (<2, 2>, <3, 3>), (<3, 2>, <2, 2>)] sage: DA = DiGraph([[1, 2], [3, 2]]) sage: AR = DA.auslander_reiten_quiver() sage: AR.digraph().edges(labels=False) [(<1, 1>, <2, 2>), (<2, 1>, <1, 1>), (<2, 1>, <3, 1>), (<3, 1>, <2, 2>), (<2, 2>, <1, 2>), (<2, 2>, <3, 2>)] sage: DA = DiGraph([[2, 1], [2, 3]]) sage: AR = DA.auslander_reiten_quiver() sage: AR.digraph().edges(labels=False) [(<1, 1>, <2, 1>), (<2, 1>, <1, 2>), (<2, 1>, <3, 2>), (<3, 1>, <2, 1>), (<1, 2>, <2, 2>), (<3, 2>, <2, 2>)] sage: DA = DiGraph([[2, 1], [3, 2]]) sage: AR = DA.auslander_reiten_quiver() sage: AR.digraph().edges(labels=False) [(<1, 1>, <2, 1>), (<2, 1>, <3, 1>), (<2, 1>, <1, 2>), (<3, 1>, <2, 2>), (<1, 2>, <2, 2>), (<2, 2>, <1, 3>)]
>>> from sage.all import * >>> DA = DiGraph([[Integer(1), Integer(2)], [Integer(2), Integer(3)]]) >>> AR = DA.auslander_reiten_quiver() >>> AR.digraph().edges(labels=False) [(<1, 1>, <2, 2>), (<2, 1>, <1, 1>), (<2, 1>, <3, 2>), (<3, 1>, <2, 1>), (<2, 2>, <3, 3>), (<3, 2>, <2, 2>)] >>> DA = DiGraph([[Integer(1), Integer(2)], [Integer(3), Integer(2)]]) >>> AR = DA.auslander_reiten_quiver() >>> AR.digraph().edges(labels=False) [(<1, 1>, <2, 2>), (<2, 1>, <1, 1>), (<2, 1>, <3, 1>), (<3, 1>, <2, 2>), (<2, 2>, <1, 2>), (<2, 2>, <3, 2>)] >>> DA = DiGraph([[Integer(2), Integer(1)], [Integer(2), Integer(3)]]) >>> AR = DA.auslander_reiten_quiver() >>> AR.digraph().edges(labels=False) [(<1, 1>, <2, 1>), (<2, 1>, <1, 2>), (<2, 1>, <3, 2>), (<3, 1>, <2, 1>), (<1, 2>, <2, 2>), (<3, 2>, <2, 2>)] >>> DA = DiGraph([[Integer(2), Integer(1)], [Integer(3), Integer(2)]]) >>> AR = DA.auslander_reiten_quiver() >>> AR.digraph().edges(labels=False) [(<1, 1>, <2, 1>), (<2, 1>, <3, 1>), (<2, 1>, <1, 2>), (<3, 1>, <2, 2>), (<1, 2>, <2, 2>), (<2, 2>, <1, 3>)]
An example for the type \(D_5\) Dynkin quiver:
sage: DD = DiGraph([[5,3], [4,3], [3,2], [2,1]]) sage: AR = DD.auslander_reiten_quiver() sage: AR Auslander-Reiten quiver of a ['D', 5] Dynkin quiver sage: len(list(DD)) 5
>>> from sage.all import * >>> DD = DiGraph([[Integer(5),Integer(3)], [Integer(4),Integer(3)], [Integer(3),Integer(2)], [Integer(2),Integer(1)]]) >>> AR = DD.auslander_reiten_quiver() >>> AR Auslander-Reiten quiver of a ['D', 5] Dynkin quiver >>> len(list(DD)) 5
An \(E_8\) Dynkin quiver:
sage: DE = DiGraph([[8,7], [7,6], [5,6], [5,3], [3,4], [3,2], [2,1]]) sage: AR = DE.auslander_reiten_quiver() sage: AR Auslander-Reiten quiver of a ['E', 8] Dynkin quiver sage: len(list(AR)) 120 sage: len(list(RootSystem(['E', 8]).root_lattice().positive_roots())) 120
>>> from sage.all import * >>> DE = DiGraph([[Integer(8),Integer(7)], [Integer(7),Integer(6)], [Integer(5),Integer(6)], [Integer(5),Integer(3)], [Integer(3),Integer(4)], [Integer(3),Integer(2)], [Integer(2),Integer(1)]]) >>> AR = DE.auslander_reiten_quiver() >>> AR Auslander-Reiten quiver of a ['E', 8] Dynkin quiver >>> len(list(AR)) 120 >>> len(list(RootSystem(['E', Integer(8)]).root_lattice().positive_roots())) 120
The Kronecker quiver:
sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: for i in range(1, 5): ....: for v in D.vertices(): ....: pp = AR(v, i) ....: pi = AR(v, -i) ....: print(pp, pp.dimension_vector(), " ", pi, pi.dimension_vector()) <1, 1> v1 + 2*v2 <1, -1> v1 <2, 1> v2 <2, -1> 2*v1 + v2 <1, 2> 3*v1 + 4*v2 <1, -2> 3*v1 + 2*v2 <2, 2> 2*v1 + 3*v2 <2, -2> 4*v1 + 3*v2 <1, 3> 5*v1 + 6*v2 <1, -3> 5*v1 + 4*v2 <2, 3> 4*v1 + 5*v2 <2, -3> 6*v1 + 5*v2 <1, 4> 7*v1 + 8*v2 <1, -4> 7*v1 + 6*v2 <2, 4> 6*v1 + 7*v2 <2, -4> 8*v1 + 7*v2
>>> from sage.all import * >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> for i in range(Integer(1), Integer(5)): ... for v in D.vertices(): ... pp = AR(v, i) ... pi = AR(v, -i) ... print(pp, pp.dimension_vector(), " ", pi, pi.dimension_vector()) <1, 1> v1 + 2*v2 <1, -1> v1 <2, 1> v2 <2, -1> 2*v1 + v2 <1, 2> 3*v1 + 4*v2 <1, -2> 3*v1 + 2*v2 <2, 2> 2*v1 + 3*v2 <2, -2> 4*v1 + 3*v2 <1, 3> 5*v1 + 6*v2 <1, -3> 5*v1 + 4*v2 <2, 3> 4*v1 + 5*v2 <2, -3> 6*v1 + 5*v2 <1, 4> 7*v1 + 8*v2 <1, -4> 7*v1 + 6*v2 <2, 4> 6*v1 + 7*v2 <2, -4> 8*v1 + 7*v2
- class Element(parent, vertex, level)[source]#
Bases:
Element
A node in the AR quiver.
- dimension_vector()[source]#
Return the dimension vector of
self
.EXAMPLES:
sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: node = AR(2, -4) sage: node.dimension_vector() 8*v1 + 7*v2
>>> from sage.all import * >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> node = AR(Integer(2), -Integer(4)) >>> node.dimension_vector() 8*v1 + 7*v2
- inverse_translation()[source]#
Return the inverse AR translation of
self
.EXAMPLES:
sage: DA = DiGraph([[2,3], [2,1]]) sage: AR = DA.auslander_reiten_quiver() sage: node = AR(1, 1) sage: node.inverse_translation() <1, 2> sage: node = AR(1, 2) sage: node.inverse_translation() is None True sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: AR(2, -1).inverse_translation() is None True
>>> from sage.all import * >>> DA = DiGraph([[Integer(2),Integer(3)], [Integer(2),Integer(1)]]) >>> AR = DA.auslander_reiten_quiver() >>> node = AR(Integer(1), Integer(1)) >>> node.inverse_translation() <1, 2> >>> node = AR(Integer(1), Integer(2)) >>> node.inverse_translation() is None True >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> AR(Integer(2), -Integer(1)).inverse_translation() is None True
- level()[source]#
Return the level of
self
.EXAMPLES:
sage: DA = DiGraph([[2,3], [2,1]]) sage: AR = DA.auslander_reiten_quiver() sage: node = AR(1, 2) sage: node.level() 2
>>> from sage.all import * >>> DA = DiGraph([[Integer(2),Integer(3)], [Integer(2),Integer(1)]]) >>> AR = DA.auslander_reiten_quiver() >>> node = AR(Integer(1), Integer(2)) >>> node.level() 2
- translation()[source]#
Return the AR translation of
self
.EXAMPLES:
sage: DA = DiGraph([[4,3], [3,2], [2,1]]) sage: AR = DA.auslander_reiten_quiver() sage: node = AR(1, 1) sage: node.translation() is None True sage: node = AR(1, 2) sage: node.translation() <1, 1>
>>> from sage.all import * >>> DA = DiGraph([[Integer(4),Integer(3)], [Integer(3),Integer(2)], [Integer(2),Integer(1)]]) >>> AR = DA.auslander_reiten_quiver() >>> node = AR(Integer(1), Integer(1)) >>> node.translation() is None True >>> node = AR(Integer(1), Integer(2)) >>> node.translation() <1, 1>
- vertex()[source]#
Return the vertex of the quiver corresponding to
self
.EXAMPLES:
sage: DA = DiGraph([[2,3], [2,1]]) sage: AR = DA.auslander_reiten_quiver() sage: node = AR(1, 2) sage: node.vertex() 1
>>> from sage.all import * >>> DA = DiGraph([[Integer(2),Integer(3)], [Integer(2),Integer(1)]]) >>> AR = DA.auslander_reiten_quiver() >>> node = AR(Integer(1), Integer(2)) >>> node.vertex() 1
- digraph(with_translations=False)[source]#
Return the diagraph of
self
.INPUT:
with_translations
– (default:False
) ifTrue
, then include the arrows corresponding to the translations.
EXAMPLES:
sage: DA = DiGraph([[1,2]]) sage: AR = DA.auslander_reiten_quiver() sage: G = AR.digraph(); G Digraph on 3 vertices sage: G.edges() [(<1, 1>, <2, 2>, None), (<2, 1>, <1, 1>, None)] sage: GT = AR.digraph(with_translations=True) sage: GT.edges() [(<1, 1>, <2, 2>, None), (<2, 1>, <1, 1>, None), (<2, 2>, <2, 1>, 'ART')]
>>> from sage.all import * >>> DA = DiGraph([[Integer(1),Integer(2)]]) >>> AR = DA.auslander_reiten_quiver() >>> G = AR.digraph(); G Digraph on 3 vertices >>> G.edges() [(<1, 1>, <2, 2>, None), (<2, 1>, <1, 1>, None)] >>> GT = AR.digraph(with_translations=True) >>> GT.edges() [(<1, 1>, <2, 2>, None), (<2, 1>, <1, 1>, None), (<2, 2>, <2, 1>, 'ART')]
- digraph_postinjectives(max_depth, with_translations=False)[source]#
Return the diagraph of postinjectives of
self
up tomax_depth
.EXAMPLES:
sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: G = AR.digraph_postinjectives(3) sage: [node.dimension_vector() for node in G] [5*v1 + 4*v2, 6*v1 + 5*v2, 3*v1 + 2*v2, 4*v1 + 3*v2, v1, 2*v1 + v2] sage: AR.digraph_postinjectives(0) Digraph on 0 vertices
>>> from sage.all import * >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> G = AR.digraph_postinjectives(Integer(3)) >>> [node.dimension_vector() for node in G] [5*v1 + 4*v2, 6*v1 + 5*v2, 3*v1 + 2*v2, 4*v1 + 3*v2, v1, 2*v1 + v2] >>> AR.digraph_postinjectives(Integer(0)) Digraph on 0 vertices
- digraph_preprojectives(max_depth, with_translations=False)[source]#
Return the diagraph of preprojectives of
self
up tomax_depth
.EXAMPLES:
sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: G = AR.digraph_preprojectives(3) sage: [node.dimension_vector() for node in G] [v1 + 2*v2, v2, 3*v1 + 4*v2, 2*v1 + 3*v2, 5*v1 + 6*v2, 4*v1 + 5*v2] sage: AR.digraph_preprojectives(0) Digraph on 0 vertices
>>> from sage.all import * >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> G = AR.digraph_preprojectives(Integer(3)) >>> [node.dimension_vector() for node in G] [v1 + 2*v2, v2, 3*v1 + 4*v2, 2*v1 + 3*v2, 5*v1 + 6*v2, 4*v1 + 5*v2] >>> AR.digraph_preprojectives(Integer(0)) Digraph on 0 vertices
- dimension_vectors_of_level(k)[source]#
Return a
Family
of dimension vectors of levelk
.EXAMPLES:
sage: DA = DiGraph([[4,3], [2,3], [2,1]]) sage: AR = DA.auslander_reiten_quiver() sage: AR.dimension_vectors_of_level(1) {1: v1, 2: v1 + v2 + v3, 3: v3, 4: v3 + v4} sage: AR.dimension_vectors_of_level(3) {1: v4, 3: v2} sage: AR.dimension_vectors_of_level(10) {} sage: AR.dimension_vectors_of_level(-1) {1: v1 + v2, 2: v2, 3: v2 + v3 + v4, 4: v4} sage: AR.dimension_vectors_of_level(-2) {1: v3 + v4, 2: v1 + v2 + v3 + v4, 3: v1 + v2 + v3, 4: v2 + v3} sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: AR.dimension_vectors_of_level(1) {1: v1 + 2*v2, 2: v2} sage: AR.dimension_vectors_of_level(3) {1: 5*v1 + 6*v2, 2: 4*v1 + 5*v2} sage: AR.dimension_vectors_of_level(-1) {1: v1, 2: 2*v1 + v2} sage: AR.dimension_vectors_of_level(-3) {1: 5*v1 + 4*v2, 2: 6*v1 + 5*v2}
>>> from sage.all import * >>> DA = DiGraph([[Integer(4),Integer(3)], [Integer(2),Integer(3)], [Integer(2),Integer(1)]]) >>> AR = DA.auslander_reiten_quiver() >>> AR.dimension_vectors_of_level(Integer(1)) {1: v1, 2: v1 + v2 + v3, 3: v3, 4: v3 + v4} >>> AR.dimension_vectors_of_level(Integer(3)) {1: v4, 3: v2} >>> AR.dimension_vectors_of_level(Integer(10)) {} >>> AR.dimension_vectors_of_level(-Integer(1)) {1: v1 + v2, 2: v2, 3: v2 + v3 + v4, 4: v4} >>> AR.dimension_vectors_of_level(-Integer(2)) {1: v3 + v4, 2: v1 + v2 + v3 + v4, 3: v1 + v2 + v3, 4: v2 + v3} >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> AR.dimension_vectors_of_level(Integer(1)) {1: v1 + 2*v2, 2: v2} >>> AR.dimension_vectors_of_level(Integer(3)) {1: 5*v1 + 6*v2, 2: 4*v1 + 5*v2} >>> AR.dimension_vectors_of_level(-Integer(1)) {1: v1, 2: 2*v1 + v2} >>> AR.dimension_vectors_of_level(-Integer(3)) {1: 5*v1 + 4*v2, 2: 6*v1 + 5*v2}
- injectives()[source]#
Return the injectives of
self
.EXAMPLES:
sage: DE = DiGraph([[7,6], [6,5], [5,3], [4,3], [2,3], [1,2]]) sage: AR = DE.auslander_reiten_quiver() sage: AR.injectives() Finite family {1: <1, 9>, 2: <2, 9>, 3: <3, 9>, 4: <4, 9>, 5: <5, 9>, 6: <6, 9>, 7: <7, 9>}
>>> from sage.all import * >>> DE = DiGraph([[Integer(7),Integer(6)], [Integer(6),Integer(5)], [Integer(5),Integer(3)], [Integer(4),Integer(3)], [Integer(2),Integer(3)], [Integer(1),Integer(2)]]) >>> AR = DE.auslander_reiten_quiver() >>> AR.injectives() Finite family {1: <1, 9>, 2: <2, 9>, 3: <3, 9>, 4: <4, 9>, 5: <5, 9>, 6: <6, 9>, 7: <7, 9>}
- projectives()[source]#
Return the projectives of
self
.EXAMPLES:
sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: AR = D.auslander_reiten_quiver() sage: AR.projectives() Finite family {1: <1, 1>, 2: <2, 1>}
>>> from sage.all import * >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> AR = D.auslander_reiten_quiver() >>> AR.projectives() Finite family {1: <1, 1>, 2: <2, 1>}
- quiver()[source]#
Return the quiver defining
self
.EXAMPLES:
sage: DE = DiGraph([[7,8], [7,6], [5,6], [3,5], [4,3], [2,3], [1,2]]) sage: AR = DE.auslander_reiten_quiver() sage: AR.quiver() == DE True
>>> from sage.all import * >>> DE = DiGraph([[Integer(7),Integer(8)], [Integer(7),Integer(6)], [Integer(5),Integer(6)], [Integer(3),Integer(5)], [Integer(4),Integer(3)], [Integer(2),Integer(3)], [Integer(1),Integer(2)]]) >>> AR = DE.auslander_reiten_quiver() >>> AR.quiver() == DE True
- simples()[source]#
Return the simples of
self
.EXAMPLES:
sage: DE = DiGraph([[7,8], [7,6], [5,6], [3,5], [4,3], [2,3], [1,2]]) sage: AR = DE.auslander_reiten_quiver() sage: AR.simples() Finite family {1: <1, 15>, 2: <1, 14>, 3: <8, 4>, 4: <4, 15>, 5: <8, 3>, 6: <6, 1>, 7: <7, 15>, 8: <8, 1>}
>>> from sage.all import * >>> DE = DiGraph([[Integer(7),Integer(8)], [Integer(7),Integer(6)], [Integer(5),Integer(6)], [Integer(3),Integer(5)], [Integer(4),Integer(3)], [Integer(2),Integer(3)], [Integer(1),Integer(2)]]) >>> AR = DE.auslander_reiten_quiver() >>> AR.simples() Finite family {1: <1, 15>, 2: <1, 14>, 3: <8, 4>, 4: <4, 15>, 5: <8, 3>, 6: <6, 1>, 7: <7, 15>, 8: <8, 1>}
- sage.quivers.ar_quiver.detect_dynkin_quiver(quiver)[source]#
Determine if
quiver
is a finite type Dynkin quiver.EXAMPLES:
sage: from sage.quivers.ar_quiver import detect_dynkin_quiver sage: D = DiGraph([[1,2], [2,3], [3, 4], [4,0], ['a','b'], ['b','c'], ['c','d'], ['c','e']]) sage: detect_dynkin_quiver(D) D5xA5 sage: D = DiGraph([[1,2,'a'], [1,2,'b']], multiedges=True) sage: detect_dynkin_quiver(D) is None True sage: D = DiGraph([[1, 2], [2, 3], [1, 3]]) sage: detect_dynkin_quiver(D) is None True sage: D = DiGraph([[1,2], [1,3], [1,4], [1,5]]) sage: detect_dynkin_quiver(D) is None True sage: D = DiGraph([[1,2], [2,3], [2,4], [4,5], [6,4]]) sage: detect_dynkin_quiver(D) is None True sage: D = DiGraph([[1,2], [2,3], [3,4], [4,5], [5,6], [6,7], [7,8], [8,9], [0,3]]) sage: detect_dynkin_quiver(D) is None True sage: D = DiGraph([[1,2], [2,3], [3,4], [4,5], [5,6], [6,7], [0,4]]) sage: detect_dynkin_quiver(D) is None True
>>> from sage.all import * >>> from sage.quivers.ar_quiver import detect_dynkin_quiver >>> D = DiGraph([[Integer(1),Integer(2)], [Integer(2),Integer(3)], [Integer(3), Integer(4)], [Integer(4),Integer(0)], ['a','b'], ['b','c'], ['c','d'], ['c','e']]) >>> detect_dynkin_quiver(D) D5xA5 >>> D = DiGraph([[Integer(1),Integer(2),'a'], [Integer(1),Integer(2),'b']], multiedges=True) >>> detect_dynkin_quiver(D) is None True >>> D = DiGraph([[Integer(1), Integer(2)], [Integer(2), Integer(3)], [Integer(1), Integer(3)]]) >>> detect_dynkin_quiver(D) is None True >>> D = DiGraph([[Integer(1),Integer(2)], [Integer(1),Integer(3)], [Integer(1),Integer(4)], [Integer(1),Integer(5)]]) >>> detect_dynkin_quiver(D) is None True >>> D = DiGraph([[Integer(1),Integer(2)], [Integer(2),Integer(3)], [Integer(2),Integer(4)], [Integer(4),Integer(5)], [Integer(6),Integer(4)]]) >>> detect_dynkin_quiver(D) is None True >>> D = DiGraph([[Integer(1),Integer(2)], [Integer(2),Integer(3)], [Integer(3),Integer(4)], [Integer(4),Integer(5)], [Integer(5),Integer(6)], [Integer(6),Integer(7)], [Integer(7),Integer(8)], [Integer(8),Integer(9)], [Integer(0),Integer(3)]]) >>> detect_dynkin_quiver(D) is None True >>> D = DiGraph([[Integer(1),Integer(2)], [Integer(2),Integer(3)], [Integer(3),Integer(4)], [Integer(4),Integer(5)], [Integer(5),Integer(6)], [Integer(6),Integer(7)], [Integer(0),Integer(4)]]) >>> detect_dynkin_quiver(D) is None True