Goal:
  
  A : Type
  x : nat
  y : nat
  args : list A
  IHx : ∀ (y : nat) (args : list A),
          firstn (x + y) args = firstn x args ++ firstn y (skipn x args)
  ============================
   (firstn (S (x + y)) args =
    firstn (S x) args ++ firstn y (skipn (S x) args))


DEBUG:Going to execute:
destruct args

Goals:
  
  A : Type
  x : nat
  y : nat
  IHx : ∀ (y : nat) (args : list A),
          firstn (x + y) args = firstn x args ++ firstn y (skipn x args)
  ============================
   (firstn (S (x + y)) [] = firstn (S x) [] ++ firstn y (skipn (S x) []))

  
  A : Type
  x : nat
  y : nat
  a : A
  args : list A
  IHx : ∀ (y : nat) (args : list A),
          firstn (x + y) args = firstn x args ++ firstn y (skipn x args)
  ============================
   (firstn (S (x + y)) (a :: args) =
    firstn (S x) (a :: args) ++ firstn y (skipn (S x) (a :: args)))


DEBUG:Going to execute:
simpl
DEBUG LTAC Evaluated term: args