Auslander-Reiten Quivers - Quivers

Skip to content
Back to top
View this page
Edit this page

# Auslander-Reiten Quivers

class sage.quivers.ar_quiver.AuslanderReitenQuiver(quiver)

  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

      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>)]

  Python

      >>> 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

      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

  [Python]

      >>> 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

      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

  Python

      >>> 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

      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

  [Python]

      >>> 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)

    Bases: `Element`

    A node in the AR quiver.

    dimension_vector()

      Return the dimension vector of `self`.

      EXAMPLES:

      Sage

          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

      Python

          >>> 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()

      Return the inverse AR translation of `self`.

      EXAMPLES:

      Sage

          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

      Python

          >>> 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()

      Return the level of `self`.

      EXAMPLES:

      Sage

          sage: DA = DiGraph([[2,3], [2,1]])
          sage: AR = DA.auslander_reiten_quiver()
          sage: node = AR(1, 2)
          sage: node.level()
          2

      Python

          >>> 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()

      Return the AR translation of `self`.

      EXAMPLES:

      Sage

          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>

      Python

          >>> 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()

      Return the vertex of the quiver corresponding to `self`.

      EXAMPLES:

      Sage

          sage: DA = DiGraph([[2,3], [2,1]])
          sage: AR = DA.auslander_reiten_quiver()
          sage: node = AR(1, 2)
          sage: node.vertex()
          1

      Python

          >>> 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)

    Return the digraph of `self`.

    INPUT:

    - `with_translations` – boolean (default: `False`); if `True`, then include the arrows corresponding to the translations

    EXAMPLES:

    Sage

        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')]

    Python

        >>> 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)

    Return the digraph of postinjectives of `self` up to `max_depth`.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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)

    Return the digraph of preprojectives of `self` up to `max_depth`.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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)

    Return a `Family` of dimension vectors of level `k`.

    EXAMPLES:

    Sage

        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}

    Python

        >>> 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()

    Return the injectives of `self`.

    EXAMPLES:

    Sage

        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>}

    Python

        >>> 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>}

  options = Current options for AuslanderReitenQuiver - latex: node
  projectives()

    Return the projectives of `self`.

    EXAMPLES:

    Sage

        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>}

    Python

        >>> 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()

    Return the quiver defining `self`.

    EXAMPLES:

    Sage

        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

    Python

        >>> 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()

    Return the simples of `self`.

    EXAMPLES:

    Sage

        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>}

    Python

        >>> 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)

  Determine if `quiver` is a finite type Dynkin quiver.

  EXAMPLES:

  Sage

      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

  Python

      >>> 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