Goal:
  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  ============================
   ({M.Raw.bst t} + {~ M.Raw.bst t})


DEBUG:Going to execute:
<coq-core.plugins.ltac::refine@0> $1

Goals:
  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  ============================
   (M.Raw.bst (M.Raw.Leaf elt))

  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  l : M.Raw.tree elt
  k : M.Raw.key
  n : elt
  r : M.Raw.tree elt
  z : Int.Z_as_Int.t
  p1 : M.Raw.bst l
  p2 : M.Raw.bst r
  p3 : M.Raw.lt_tree k l
  p4 : M.Raw.gt_tree k r
  ============================
   (M.Raw.bst (M.Raw.Node l k n r z))

  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  l : M.Raw.tree elt
  k : M.Raw.key
  n : elt
  r : M.Raw.tree elt
  z : Int.Z_as_Int.t
  b : M.Raw.bst l
  b0 : M.Raw.bst r
  l0 : M.Raw.lt_tree k l
  pf : ~ M.Raw.gt_tree k r
  ============================
   (~ M.Raw.bst (M.Raw.Node l k n r z))

  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  l : M.Raw.tree elt
  k : M.Raw.key
  n : elt
  r : M.Raw.tree elt
  z : Int.Z_as_Int.t
  b : M.Raw.bst l
  b0 : M.Raw.bst r
  pf : ~ M.Raw.lt_tree k l
  s := gt_tree_dec k r : {M.Raw.gt_tree k r} + {~ M.Raw.gt_tree k r}
  ============================
   (~ M.Raw.bst (M.Raw.Node l k n r z))

  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  l : M.Raw.tree elt
  k : M.Raw.key
  n : elt
  r : M.Raw.tree elt
  z : Int.Z_as_Int.t
  b : M.Raw.bst l
  pf : ~ M.Raw.bst r
  s := lt_tree_dec k l : {M.Raw.lt_tree k l} + {~ M.Raw.lt_tree k l}
  s0 := gt_tree_dec k r : {M.Raw.gt_tree k r} + {~ M.Raw.gt_tree k r}
  ============================
   (~ M.Raw.bst (M.Raw.Node l k n r z))

  
  elt : Type
  bst_dec : forall t : M.Raw.tree elt, {M.Raw.bst t} + {~ M.Raw.bst t}
  t : M.Raw.tree elt
  l : M.Raw.tree elt
  k : M.Raw.key
  n : elt
  r : M.Raw.tree elt
  z : Int.Z_as_Int.t
  pf : ~ M.Raw.bst l
  s := bst_dec r : {M.Raw.bst r} + {~ M.Raw.bst r}
  s0 := lt_tree_dec k l : {M.Raw.lt_tree k l} + {~ M.Raw.lt_tree k l}
  s1 := gt_tree_dec k r : {M.Raw.gt_tree k r} + {~ M.Raw.gt_tree k r}
  ============================
   (~ M.Raw.bst (M.Raw.Node l k n r z))


DEBUG:Going to execute:
try (solve [ constructor; assumption | inversion 1; subst; auto ])