## 13.6 Pattern-matching and coercions

If a mismatch occurs between the expected type of a pattern and its actual type, a coercion made from constructors is sought. If such a coercion can be found, it is automatically inserted around the pattern.
Example:
`Coq` `<``Inductive I : Set :=`
`Coq` `<``C1 : nat -``>``I`
`Coq` `<``| C2 : I -``>``I.`
`I is defined`
`I_rect is defined`
`I_ind is defined`
`I_rec is defined`
`Coq` `<``Coercion C1 : nat` `>``-``>``I.`
`C1 is now a coercion`
`Coq` `<``Check [x]Cases x of (C2 O) =``>``O | _ =``>``O end.`
`[x:I]`
`Cases x of`
`(C1 _) =``>``(0)`
`| (C2 i) =``>```
`Cases i of`
`(C1 n) =``>``Cases n of`
`0 =``>``(0)`
`| (S _) =``>``(0)`
`end`
`| (C2 _) =``>``(0)`
`end`
`end`
`: I-``>``nat`