Goal:
  
  hd : A.t
  tl : t
  tl' : t
  X : lt_ tl tl'
  IHX : let H := CoreTactics.block in
        forall x : t,
        {| pr1 := x; pr2 := x |} = {| pr1 := tl; pr2 := tl' |} ->
        let H0 := CoreTactics.block in let H1 := CoreTactics.block in False
  ============================
   (let H := CoreTactics.block in
    forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd :: tl' |} ->
    let H0 := CoreTactics.block in let H1 := CoreTactics.block in False)


DEBUG:Going to execute:
intros _

Goals:
    hd : A.t  tl : list A.t
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := []; pr2 := hd :: tl |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

    hd : A.t  tl : list A.t  hd' : A.t  tl' : list A.t  H : A.lt hd hd'
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd' :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

  
  hd : A.t
  tl : t
  tl' : t
  X : lt_ tl tl'
  IHX : let H := CoreTactics.block in
        forall x : t,
        {| pr1 := x; pr2 := x |} = {| pr1 := tl; pr2 := tl' |} ->
        let H0 := CoreTactics.block in let H1 := CoreTactics.block in False
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)


DEBUG:Going to execute:
DepElim.simpl_dep_elim

Goals:
    hd : A.t  tl : list A.t
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := []; pr2 := hd :: tl |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

    hd : A.t  tl : list A.t  hd' : A.t  tl' : list A.t  H : A.lt hd hd'
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd' :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

  
  hd : A.t
  tl : t
  tl' : t
  X : lt_ tl tl'
  IHX : let H := CoreTactics.block in
        forall x : t,
        {| pr1 := x; pr2 := x |} = {| pr1 := tl; pr2 := tl' |} ->
        let H0 := CoreTactics.block in let H1 := CoreTactics.block in False
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)


DEBUG:Going to execute:
DepElim.simplify_dep_elim; DepElim.simplify_IH_hyps;
            DepElim.unblock_dep_elim

Goals:
    hd : A.t  tl : list A.t
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := []; pr2 := hd :: tl |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

    hd : A.t  tl : list A.t  hd' : A.t  tl' : list A.t  H : A.lt hd hd'
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd' :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

  
  hd : A.t
  tl : t
  tl' : t
  X : lt_ tl tl'
  IHX : let H := CoreTactics.block in
        forall x : t,
        {| pr1 := x; pr2 := x |} = {| pr1 := tl; pr2 := tl' |} ->
        let H0 := CoreTactics.block in let H1 := CoreTactics.block in False
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)


DEBUG:Going to execute:
DepElim.simplify_dep_elim; DepElim.simplify_IH_hyps

Goals:
    hd : A.t  tl : list A.t
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := []; pr2 := hd :: tl |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

    hd : A.t  tl : list A.t  hd' : A.t  tl' : list A.t  H : A.lt hd hd'
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd' :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

  
  hd : A.t
  tl : t
  tl' : t
  X : lt_ tl tl'
  IHX : let H := CoreTactics.block in
        forall x : t,
        {| pr1 := x; pr2 := x |} = {| pr1 := tl; pr2 := tl' |} ->
        let H0 := CoreTactics.block in let H1 := CoreTactics.block in False
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)


DEBUG:Going to execute:
DepElim.simplify_dep_elim

Goals:
    hd : A.t  tl : list A.t
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := []; pr2 := hd :: tl |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

    hd : A.t  tl : list A.t  hd' : A.t  tl' : list A.t  H : A.lt hd hd'
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd' :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)

  
  hd : A.t
  tl : t
  tl' : t
  X : lt_ tl tl'
  IHX : let H := CoreTactics.block in
        forall x : t,
        {| pr1 := x; pr2 := x |} = {| pr1 := tl; pr2 := tl' |} ->
        let H0 := CoreTactics.block in let H1 := CoreTactics.block in False
  ============================
   (forall x : t,
    {| pr1 := x; pr2 := x |} = {| pr1 := hd :: tl; pr2 := hd :: tl' |} ->
    let H := CoreTactics.block in let H0 := CoreTactics.block in False)


DEBUG:Going to execute:
repeat DepElim.simplify_one_dep_elim