=== Normalisation checks (trivial instances) ===
one arc r->v, r_1=r_2=r, U_1=U_2={r,v}:            PC False  ARB False  LOC False
two parallel arcs r->v, same roots and sets:        PC True  ARB True  LOC True
r_1->r_2->v, U_1={r_1,r_2,v}, U_2={r_2,v}:           PC False  ARB False  LOC False
the same with the extra arc r_1->v:                 PC True  ARB True  LOC True
r_1->x<-r_2, x->v, U_1={r_1,x,v}, U_2={r_2,x,v}:     PC False  ARB False  LOC False

=== Worked example ===
vertices 0..9, arcs [(0, 3), (0, 4), (0, 5), (1, 3), (1, 4), (2, 3), (2, 5), (3, 6), (3, 7), (4, 5), (4, 6), (4, 7), (5, 6), (5, 9), (6, 7), (6, 8), (6, 9), (7, 9)]
roots r_1, r_2, r_3 = [0, 1, 2]
U_1 = [0, 3, 4, 5, 6, 7, 9]
U_2 = [1, 3, 4, 5, 6, 7, 8, 9]
U_3 = [2, 3, 5, 6, 7, 9]
sets convex: [True, True, True]
(PC) by max-flow: True ; (PC) by path enumeration: True ; (LOC): True
in-neighbours: {3: [0, 1, 2], 4: [0, 1], 5: [0, 2, 4], 6: [3, 4, 5], 7: [3, 4, 6], 8: [6], 9: [5, 6, 7]}
I(v): {0: [1], 1: [2], 2: [3], 3: [1, 2, 3], 4: [1, 2], 5: [1, 2, 3], 6: [1, 2, 3], 7: [1, 2, 3], 8: [2], 9: [1, 2, 3]}
families of independent arborescences on all 10 vertices: 6
families on the vertices 0..8: 5 ; of these 2 cannot be extended to vertex 9 (a greedy choice can get stuck):
   root paths to 5, 6, 7 in F_1 | F_2 | F_3: 5: [0, 5] | [1, 4, 5] | [2, 5] ; 6: [0, 3, 6] | [1, 4, 6] | [2, 5, 6] ; 7: [0, 4, 7] | [1, 3, 7] | [2, 5, 6, 7]
   root paths to 5, 6, 7 in F_1 | F_2 | F_3: 5: [0, 5] | [1, 4, 5] | [2, 5] ; 6: [0, 4, 6] | [1, 3, 6] | [2, 5, 6] ; 7: [0, 3, 7] | [1, 4, 7] | [2, 5, 6, 7]

certificate (indices 1,2,3 of RESULT.md are 0,1,2 here; "-" = v is not in that set):
  v : tail of the arc of F_1, F_2, F_3 entering v : potential (f_1, f_2, f_3)
  3 : 0, 1, 2 : (1, 0, -2)
  4 : 0, 1, - : (2, 0, -)
  5 : 0, 4, 2 : (-2, 0, 0)
  6 : 5, 4, 3 : (0, 0, 1)
  7 : 6, 4, 3 : (1, 0, -1)
  8 : -, 6, - : (-, 0, -)
  9 : 5, 6, 7 : (-1, 0, 0)
admissible (A1)-(A3) at every vertex: True
inequality (P) at every vertex: True
independent arborescences (verifier working with explicit paths): True
  vertex 3, J = [1, 2, 3]: admissible assignments (cost, tails in the order of J): [(0, (0, 1, 2))]
  vertex 4, J = [1, 2]: admissible assignments (cost, tails in the order of J): [(0, (0, 1))]
  vertex 5, J = [1, 2, 3]: admissible assignments (cost, tails in the order of J): [(0, (0, 4, 2))]
  vertex 6, J = [1, 2, 3]: admissible assignments (cost, tails in the order of J): [(-4, (5, 4, 3)), (0, (4, 5, 3)), (1, (3, 4, 5)), (2, (4, 3, 5))]
  vertex 7, J = [1, 2, 3]: admissible assignments (cost, tails in the order of J): [(-2, (6, 4, 3)), (0, (4, 6, 3)), (2, (3, 4, 6)), (3, (4, 3, 6))]
  vertex 8, J = [2]: admissible assignments (cost, tails in the order of J): [(0, (6,))]
  vertex 9, J = [1, 2, 3]: admissible assignments (cost, tails in the order of J): [(-3, (5, 6, 7)), (-1, (5, 7, 6)), (-1, (6, 5, 7)), (0, (6, 7, 5)), (1, (7, 6, 5)), (2, (7, 5, 6))]
chosen assignment = unique minimum-cost admissible assignment at every vertex: True
root paths to 7: [[0, 5, 6, 7], [1, 4, 7], [2, 3, 7]]
root paths to 9: [[0, 5, 9], [1, 4, 6, 9], [2, 3, 7, 9]]
