| 8745 |      1 | (*<*)
 | 
| 58860 |      2 | theory prime_def imports Main begin
 | 
| 11457 |      3 | consts prime :: "nat \<Rightarrow> bool"
 | 
| 8745 |      4 | (*>*)
 | 
| 67406 |      5 | text\<open>
 | 
| 9844 |      6 | \begin{warn}
 | 
|  |      7 | A common mistake when writing definitions is to introduce extra free
 | 
| 11456 |      8 | variables on the right-hand side.  Consider the following, flawed definition
 | 
| 69505 |      9 | (where \<open>dvd\<close> means ``divides''):
 | 
| 67613 |     10 | @{term[display,quotes]"prime(p) \<equiv> 1 < p \<and> (m dvd p \<longrightarrow> (m=1 \<or> m=p))"}
 | 
| 11457 |     11 | \par\noindent\hangindent=0pt
 | 
| 69597 |     12 | Isabelle rejects this ``definition'' because of the extra \<^term>\<open>m\<close> on the
 | 
| 11456 |     13 | right-hand side, which would introduce an inconsistency (why?). 
 | 
|  |     14 | The correct version is
 | 
| 67613 |     15 | @{term[display,quotes]"prime(p) \<equiv> 1 < p \<and> (\<forall>m. m dvd p \<longrightarrow> (m=1 \<or> m=p))"}
 | 
| 9844 |     16 | \end{warn}
 | 
| 67406 |     17 | \<close>
 | 
| 8745 |     18 | (*<*)
 | 
|  |     19 | end
 | 
|  |     20 | (*>*)
 |