Goal:
    P : elt -> elt -> Prop  s : t
  ============================
   ((forall x : elt, In x s -> forall x0 : elt, In x0 s -> P x x0) <->
    (forall v1 v2 : elt, In v1 s -> In v2 s -> P v1 v2))


DEBUG:Going to execute:
fun => <coq-core.plugins.ltac::split@0>

Goals:
    P : elt -> elt -> Prop  s : t
  ============================
   ((forall x : elt, In x s -> forall x0 : elt, In x0 s -> P x x0) ->
    forall v1 v2 : elt, In v1 s -> In v2 s -> P v1 v2)

    P : elt -> elt -> Prop  s : t
  ============================
   ((forall v1 v2 : elt, In v1 s -> In v2 s -> P v1 v2) ->
    forall x : elt, In x s -> forall x0 : elt, In x0 s -> P x x0)


DEBUG:Going to execute:
<Coq.Init.Tauto.not_dep_intros>

Goals:
    P : elt -> elt -> Prop  s : t
  ============================
   ((forall x : elt, In x s -> forall x0 : elt, In x0 s -> P x x0) ->
    forall v1 v2 : elt, In v1 s -> In v2 s -> P v1 v2)

    P : elt -> elt -> Prop  s : t
  ============================
   ((forall v1 v2 : elt, In v1 s -> In v2 s -> P v1 v2) ->
    forall x : elt, In x s -> forall x0 : elt, In x0 s -> P x x0)


DEBUG:Going to execute:
repeat
            match goal with
            | |- ?X1 -> ?X2 => intro
            | |- ~ _ => unfold not at 1; intro
            end