8.1 Refine

This tactic applies to any goal. It behaves like Exact with a big difference : the user can leave some holes (denoted by ? or (?::type)) in the term. Refine will generate as many subgoals as they are holes in the term. The type of holes must be either synthesized by the system or declared by an explicit cast like (?::nat->Prop). This low-level tactic can be useful to advanced users.
Example:

Coq < Inductive Option: Set := Fail : Option | Ok : bool->Option.
Coq < Definition get: (x:Option)~x=Fail->bool.
1 subgoal
  
  ============================
   (x:Option)~x=Fail->bool

Coq < Refine
Coq <   [x:Option]<[x:Option]~x=Fail->bool>Cases x of
Coq <         Fail   =>  ?
Coq <       | (Ok b) =>  [_:?]b end.
1 subgoal
  
  x : Option
  ============================
   ~Fail=Fail->bool

Coq < Intros;Absurd Fail=Fail;Trivial.
Subtree proved!
Coq < Defined.