Goal:
    x : V.t  s : VSet.t
  ============================
   (~ VSet.In x (VSet.remove x s))


DEBUG:Going to execute:
fail "no need to abstract a variable"
Level 2: evaluation returns
<coq-core.plugins.ltac::is_hyp@0>
where
$1 := x
of type
constr of type tacvalue


Goals:
    x : V.t  s : VSet.t  y : VSet.elt
  ============================
   ((VSet.In y (VSet.add x s) -> x = y \/ VSet.In y (VSet.remove x s)) /\
    (x = y \/ VSet.In y (VSet.remove x s) -> VSet.In y (VSet.add x s)))

    x : V.t  s : VSet.t
  ============================
   (~ VSet.In x (VSet.remove x s))


DEBUG:Going to execute:
VSetDecide.MSetDecideAuxiliary.no_logical_interdep
Level 1: Backtrace:

Tactic failure: no need to abstract a variable.
Level 2: Backtrace:

Tactic failure: no need to abstract a variable.
Level 2: Backtrace:

Tactic failure: no need to abstract a variable.
Level 1: Backtrace:

Tactic failure: no need to abstract a variable.
Level 2: Backtrace:

Tactic failure: no need to abstract a variable.
Level 2: Backtrace:

Tactic failure: no need to abstract a variable.
Level 1: Backtrace:

Tactic failure: no need to abstract a variable.
Level 0: Backtrace:

No matching clauses for match.

Goals:
    x : V.t  s : VSet.t  y : VSet.elt
  ============================
   ((VSet.In y (VSet.add x s) -> x = y \/ VSet.In y (VSet.remove x s)) /\
    (x = y \/ VSet.In y (VSet.remove x s) -> VSet.In y (VSet.add x s)))

    x : V.t  s : VSet.t
  ============================
   (~ VSet.In x (VSet.remove x s))


DEBUG:Going to execute:
match goal with
           | H:?P
             |- _ =>
                 match type of P with
                 | Prop =>
                     match goal with
                     | H':context [ H ] |- _ => clear dependent H'
                     end
                 | _ => fail
                 end; VSetDecide.MSetDecideAuxiliary.no_logical_interdep
           | _ => idtac
           end