| 8020 |      1 | 
 | 
| 10007 |      2 | header {* An old chestnut *}
 | 
| 8020 |      3 | 
 | 
| 10007 |      4 | theory Puzzle = Main:
 | 
| 8020 |      5 | 
 | 
|  |      6 | text_raw {*
 | 
| 10436 |      7 |  \footnote{A question from ``Bundeswettbewerb Mathematik''.  Original
 | 
|  |      8 |  pen-and-paper proof due to Herbert Ehler; Isabelle tactic script by
 | 
|  |      9 |  Tobias Nipkow.}
 | 
| 8020 |     10 | 
 | 
| 10436 |     11 |  \medskip \textbf{Problem.}  Given some function $f\colon \Nat \to
 | 
|  |     12 |  \Nat$ such that $f \ap (f \ap n) < f \ap (\idt{Suc} \ap n)$ for all
 | 
|  |     13 |  $n$.  Demonstrate that $f$ is the identity.
 | 
| 10007 |     14 | *}
 | 
| 8020 |     15 | 
 | 
| 10436 |     16 | theorem "(!!n::nat. f (f n) < f (Suc n)) ==> f n = n"
 | 
|  |     17 | proof (rule order_antisym)
 | 
|  |     18 |   assume f_ax: "!!n. f (f n) < f (Suc n)"
 | 
| 8020 |     19 | 
 | 
|  |     20 |   txt {*
 | 
|  |     21 |     Note that the generalized form of $n \le f \ap n$ is required
 | 
|  |     22 |     later for monotonicity as well.
 | 
| 10007 |     23 |   *}
 | 
|  |     24 |   show ge: "!!n. n <= f n"
 | 
|  |     25 |   proof -
 | 
| 10436 |     26 |     fix k show "!!n. k == f n ==> n <= k" (is "PROP ?P k")
 | 
|  |     27 |     proof (induct k
 | 
|  |     28 |         rule: nat_less_induct [rule_format])
 | 
|  |     29 |       fix k assume hyp: "!!m. m < k ==> PROP ?P m"
 | 
|  |     30 |       fix n assume k_def: "k == f n"
 | 
|  |     31 |       show "n <= k"
 | 
|  |     32 |       proof (cases n)
 | 
|  |     33 |         assume "n = 0" thus ?thesis by simp
 | 
| 10007 |     34 |       next
 | 
| 10436 |     35 |         fix m assume Suc: "n = Suc m"
 | 
|  |     36 |         from f_ax have "f (f m) < f (Suc m)" .
 | 
|  |     37 |         with hyp k_def Suc have "f m <= f (f m)" by simp
 | 
|  |     38 |         also from f_ax have "... < f (Suc m)" .
 | 
|  |     39 |         finally have less: "f m < f (Suc m)" .
 | 
|  |     40 |         with hyp k_def Suc have "m <= f m" by simp
 | 
|  |     41 |         also note less
 | 
|  |     42 |         finally have "m < f (Suc m)" .
 | 
|  |     43 |         hence "n <= f n" by (simp only: Suc)
 | 
|  |     44 |         thus ?thesis by (simp only: k_def)
 | 
| 10007 |     45 |       qed
 | 
|  |     46 |     qed
 | 
|  |     47 |   qed
 | 
| 8020 |     48 | 
 | 
|  |     49 |   txt {*
 | 
|  |     50 |     In order to show the other direction, we first establish
 | 
|  |     51 |     monotonicity of $f$.
 | 
| 10007 |     52 |   *}
 | 
| 10436 |     53 |   {
 | 
| 10007 |     54 |     fix m n
 | 
| 10436 |     55 |     have "m <= n \<Longrightarrow> f m <= f n" (is "PROP ?P n")
 | 
| 10007 |     56 |     proof (induct n)
 | 
| 10436 |     57 |       assume "m <= 0" hence "m = 0" by simp
 | 
|  |     58 |       thus "f m <= f 0" by simp
 | 
|  |     59 |     next
 | 
|  |     60 |       fix n assume hyp: "PROP ?P n"
 | 
|  |     61 |       assume "m <= Suc n"
 | 
|  |     62 |       thus "f m <= f (Suc n)"
 | 
|  |     63 |       proof (rule le_SucE)
 | 
|  |     64 |         assume "m <= n"
 | 
|  |     65 |         with hyp have "f m <= f n" .
 | 
|  |     66 |         also from ge f_ax have "... < f (Suc n)"
 | 
|  |     67 |           by (rule le_less_trans)
 | 
|  |     68 |         finally show ?thesis by simp
 | 
|  |     69 |       next
 | 
|  |     70 |         assume "m = Suc n"
 | 
|  |     71 |         thus ?thesis by simp
 | 
| 10007 |     72 |       qed
 | 
|  |     73 |     qed
 | 
| 10436 |     74 |   } note mono = this
 | 
| 8020 |     75 | 
 | 
| 10007 |     76 |   show "f n <= n"
 | 
| 10436 |     77 |   proof -
 | 
|  |     78 |     have "~ n < f n"
 | 
| 10007 |     79 |     proof
 | 
|  |     80 |       assume "n < f n"
 | 
| 10436 |     81 |       hence "Suc n <= f n" by simp
 | 
|  |     82 |       hence "f (Suc n) <= f (f n)" by (rule mono)
 | 
| 10007 |     83 |       also have "... < f (Suc n)" by (rule f_ax)
 | 
|  |     84 |       finally have "... < ..." . thus False ..
 | 
|  |     85 |     qed
 | 
| 10436 |     86 |     thus ?thesis by simp
 | 
| 10007 |     87 |   qed
 | 
|  |     88 | qed
 | 
| 8020 |     89 | 
 | 
| 10007 |     90 | end
 |