Goal:
  
  G1 : t
  G2 : t
  H : acyclic_no_loop G1
  H0 : invariants G1
  hext : forall l1 : labelling,
         correct_labelling G1 l1 ->
         exists l2 : labelling,
           correct_labelling G2 l2 /\
           (forall v : VSet.elt, VSet.In v (V G1) -> l1 v = l2 v)
  vx : VSet.elt
  vy : VSet.elt
  hvx : VSet.In vx (V G1)
  hvy : VSet.In vy (V G1)
  nxy2 : Z
  eqlsp2 : lsp G2 vx vy = Some nxy2
  n := match lsp G1 vx vy with
       | Some n => n
       | None => nxy2 - 1
       end : Z
  hbound : (lsp G1 vx vy <= Some n)%nbar
  hl : correct_labelling G1 (RelabelWrtEdge.l' G1 vx vy n)
  l' : labelling
  hl' : correct_labelling G2 l'
  ll' : forall v : VSet.elt,
        VSet.In v (V G1) -> RelabelWrtEdge.l' G1 vx vy n v = l' v
  hdiff : Z.of_nat (l' vy) - Z.of_nat (RelabelWrtEdge.l' G1 vx vy n vx) <= n
  ============================
   (Some nxy2 <= lsp G1 vx vy)%nbar


DEBUG:Going to execute:
solve
[ do
![ solve
 [ trivial | apply : eq_sym ; trivial ]
 | discriminate
 | contradiction
 | Ltac.split ]
| case not_locked_false_eq_true; Ltac.assumption
| match goal with
  | H:~ _ |- _ => solve [ case H; trivial ]
  end ]