8.1 Refine

## 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.`