Goal:
  
  A : Type
  a : option A
  l : list (option A)
  l' : list A
  IHl : forall l' : list A, map_option_out l = Some l' -> #|l| = #|l'|
  ============================
   (match a with
    | Some hd =>
        match map_option_out l with
        | Some tl => Some (hd :: tl)
        | None => None
        end
    | None => None
    end = Some l' -> S #|l| = #|l'|)


DEBUG:Going to execute:
destruct a

Goals:
  
  A : Type
  a : A
  l : list (option A)
  l' : list A
  IHl : forall l' : list A, map_option_out l = Some l' -> #|l| = #|l'|
  ============================
   (match map_option_out l with
    | Some tl => Some (a :: tl)
    | None => None
    end = Some l' -> S #|l| = #|l'|)

  
  A : Type
  l : list (option A)
  l' : list A
  IHl : forall l' : list A, map_option_out l = Some l' -> #|l| = #|l'|
  ============================
   (None = Some l' -> S #|l| = #|l'|)


DEBUG:Going to execute:
try discriminate
DEBUG LTAC Evaluated term: a