Goal:
  
  A : Type
  B : Type
  C : Type
  f : option A -> option B -> option C
  f_None_None : f None None = None
  m1 : tree A
  m2 : tree B
  i : positive
  ============================
   (get i (combine m1 m2) = f (get i m1) (get i m2))


DEBUG:Going to execute:
destruct m1 as [| m1], m2 as [| m2]

Goals:
  
  A : Type
  B : Type
  C : Type
  f : option A -> option B -> option C
  f_None_None : f None None = None
  i : positive
  ============================
   (get i (combine Empty Empty) = f (get i Empty) (get i Empty))

  
  A : Type
  B : Type
  C : Type
  f : option A -> option B -> option C
  f_None_None : f None None = None
  m2 : tree' B
  i : positive
  ============================
   (get i (combine Empty (Nodes m2)) = f (get i Empty) (get i (Nodes m2)))

  
  A : Type
  B : Type
  C : Type
  f : option A -> option B -> option C
  f_None_None : f None None = None
  m1 : tree' A
  i : positive
  ============================
   (get i (combine (Nodes m1) Empty) = f (get i (Nodes m1)) (get i Empty))

  
  A : Type
  B : Type
  C : Type
  f : option A -> option B -> option C
  f_None_None : f None None = None
  m1 : tree' A
  m2 : tree' B
  i : positive
  ============================
   (get i (combine (Nodes m1) (Nodes m2)) =
    f (get i (Nodes m1)) (get i (Nodes m2)))


DEBUG:Going to execute:
simpl
DEBUG LTAC Evaluated term: m1
DEBUG LTAC Evaluated term: m2
DEBUG LTAC Evaluated term: m2