| 16417 |      1 | theory FP0 imports PreList begin
 | 
| 13262 |      2 | 
 | 
|  |      3 | datatype 'a list = Nil                          ("[]")
 | 
|  |      4 |                  | Cons 'a "'a list"            (infixr "#" 65)
 | 
|  |      5 | 
 | 
|  |      6 | consts app :: "'a list \<Rightarrow> 'a list \<Rightarrow> 'a list"   (infixr "@" 65)
 | 
|  |      7 |        rev :: "'a list \<Rightarrow> 'a list"
 | 
|  |      8 | 
 | 
|  |      9 | primrec
 | 
|  |     10 | "[] @ ys       = ys"
 | 
|  |     11 | "(x # xs) @ ys = x # (xs @ ys)"
 | 
|  |     12 | 
 | 
|  |     13 | primrec
 | 
|  |     14 | "rev []        = []"
 | 
|  |     15 | "rev (x # xs)  = (rev xs) @ (x # [])"
 | 
|  |     16 | 
 | 
|  |     17 | theorem rev_rev [simp]: "rev(rev xs) = xs"
 | 
| 13439 |     18 | (*<*)oops(*>*)text_raw{*\isanewline\isanewline*}
 | 
| 13262 |     19 | 
 | 
|  |     20 | end
 |