doc-src/TutorialI/todo.tobias
author wenzelm
Sun, 15 Oct 2000 19:50:35 +0200
changeset 10220 2a726de6e124
parent 10217 e61e7e1eacaf
child 10236 7626cb4e1407
permissions -rw-r--r--
proper symbol markup with \isamath, \isatext; support sub/super scripts:
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     1
General questions
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     2
=================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     3
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     4
Here is an initial list:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     5
clarify, clarsimp, hyp_subst_tac, rename_tac, rotate_tac, split
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     6
single step tactics: (e/d/f)rule, insert
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     7
with instantiation: (e/d/f)rule_tac, insert_tac
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     8
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     9
Hide global names like Node.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    10
Why is comp needed in addition to op O?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    11
Explain in syntax section!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    12
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    13
Implementation
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    14
==============
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    15
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    16
swap in classical.ML has ugly name Pa in it. Rename.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    17
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    18
Induction rules for int: int_le/ge_induct?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    19
Needed for ifak example. But is that example worth it?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    20
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    21
Add map_cong?? (upto 10% slower)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    22
But we should install UN_cong and INT_cong too.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    23
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    24
recdef: funny behaviour with map (see email to Konrad.Slind, Recdef/Nested1)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    25
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    26
defs with = and pattern matching
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    27
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    28
use arith_tac in recdef to solve termination conditions?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    29
-> new example in Recdef/termination
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    30
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    31
a tactic for replacing a specific occurrence:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    32
apply(substitute [2] thm)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    33
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    34
it would be nice if @term could deal with ?-vars.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    35
then a number of (unchecked!) @texts could be converted to @terms.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    36
10189
865918597b63 *** empty log message ***
nipkow
parents: 10186
diff changeset
    37
it would be nice if one could get id to the enclosing quotes in the [source] option.
865918597b63 *** empty log message ***
nipkow
parents: 10186
diff changeset
    38
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    39
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    40
Minor fixes in the tutorial
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    41
===========================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    42
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    43
replace simp only split by split_tac.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    44
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    45
get rid of use_thy?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    46
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    47
Explain typographic conventions?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    48
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    49
an example of induction: !y. A --> B --> C ??
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    50
10217
e61e7e1eacaf *** empty log message ***
nipkow
parents: 10212
diff changeset
    51
Advanced Ind expects rule_format incl (no_asm) (which it currently explains!
e61e7e1eacaf *** empty log message ***
nipkow
parents: 10212
diff changeset
    52
Where explained?
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    53
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    54
Appendix: Lexical: long ids.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    55
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    56
Warning: infixes automatically become reserved words!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    57
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    58
Forward ref from blast proof of Puzzle (AdvancedInd) to Isar proof?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    59
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    60
mention split_split in advanced pair section.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    61
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    62
recdef with nested recursion: either an example or at least a pointer to the
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    63
literature. In Recdef/termination.thy, at the end.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    64
%FIXME, with one exception: nested recursion.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    65
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    66
Syntax section: syntax annotations nor just for consts but also for constdefs and datatype.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    67
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    68
Prove EU exercise in CTL.
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    69
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    70
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    71
Minor additions to the tutorial, unclear where
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    72
==============================================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    73
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    74
Tacticals: , ? +
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    75
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    76
"typedecl" is used in CTL/Base, but where is it introduced?
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    77
In More Types chapter? Rephrase the CTL bit accordingly.
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    78
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    79
print_simpset (-> print_simps?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    80
(Another subsection Useful theorems, methods, and commands?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    81
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    82
Mention that simp etc (big step tactics) insist on change?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    83
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    84
Explain what "by" and "." really do, and introduce "done".
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    85
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    86
A list of further useful commands (rules? tricks?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    87
prefer, defer
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    88
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    89
An overview of the automatic methods: simp, auto, fast, blast, force,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    90
clarify, clarsimp (intro, elim?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    91
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    92
explain rulify before induction section?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    93
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    94
demonstrate x : set xs in Sets. Or Tricks chapter?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    95
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    96
Appendix with HOL keywords. Say something about other keywords.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    97
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    98
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    99
Possible exercises
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   100
==================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   101
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   102
Exercises
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   103
%\begin{exercise}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   104
%Extend expressions by conditional expressions.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   105
braucht wfrec!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   106
%\end{exercise}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   107
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   108
Nested inductive datatypes: another example/exercise:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   109
 size(t) <= size(subst s t)?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   110
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   111
insertion sort: primrec, later recdef
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   112
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   113
OTree:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   114
 first version only for non-empty trees:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   115
 Tip 'a | Node tree tree
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   116
 Then real version?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   117
 First primrec, then recdef?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   118
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   119
Ind. sets: define ABC inductively and prove
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   120
ABC = {rep A n @ rep B n @ rep C n. True}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   121
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   122
Possible examples/case studies
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   123
==============================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   124
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   125
Trie: Define functional version
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   126
datatype ('a,'b)trie = Trie ('b option) ('a => ('a,'b)trie option)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   127
lookup t [] = value t
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   128
lookup t (a#as) = case tries t a of None => None | Some s => lookup s as
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   129
Maybe as an exercise?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   130
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   131
Trie: function for partial matches (prefixes). Needs sets for spec/proof.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   132
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   133
Sets via ordered list of intervals. (Isa/Interval(2))
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   134
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   135
Sets: PDL and CTL
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   136
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   137
Ind. defs: Grammar (for same number of as and bs),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   138
propositional logic (soundness and completeness?),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   139
predicate logic (soundness?),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   140
CTL proof.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   141
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   142
Tautology checker. Based on Ifexpr or prop.logic?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   143
Include forward reference in relevant section.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   144
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   145
Sorting with comp-parameter and with type class (<)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   146
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   147
New book by Bird?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   148
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   149
Steps Towards Mechanizing Program Transformations Using PVS by N. Shankar,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   150
      Science of Computer Programming, 26(1-3):33-57, 1996. 
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   151
You can get it from http://www.csl.sri.com/scp95.html
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   152
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   153
J Moore article Towards a ...
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   154
Mergesort, JVM
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   155
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   156
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   157
Additional topics
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   158
=================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   159
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   160
Beef up recdef (see below).
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   161
Nested recursion? Mutual recursion?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   162
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   163
Nested inductive datatypes: better recursion and induction
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   164
(see below)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   165
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   166
Extensionality: applications in
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   167
- boolean expressions: valif o bool2if = value
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   168
- Advanced datatypes exercise subst (f o g) = subst f o subst g
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   169
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   170
A look at the library?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   171
Functions. Relations. Lfp/Gfp. Map.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   172
If WF is discussed, make a link to it from AdvancedInd.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   173
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   174
Prototyping?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   175
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   176
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   177
Isabelle
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   178
========
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   179
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   180
Get rid of function name in recdef header
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   181
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   182
More predefined functions for datatypes: map?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   183
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   184
1 and 2 on nat?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   185
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   186
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   187
==============================================================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   188
Nested inductive datatypes: better recursion and induction
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   189
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   190
Show how to derive simpler primrec functions using eg map. Text:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   191
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   192
Returning to the definition of \texttt{subst}, we have to admit that it does
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   193
not really need the auxiliary \texttt{substs} function. The \texttt{App}-case
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   194
can directly be expressed as
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   195
\begin{ttbox}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   196
\input{Datatype/appmap}\end{ttbox}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   197
Although Isabelle insists on the more verbose version, we can easily {\em
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   198
  prove} that the \texttt{map}-equation holds: simply by induction on
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   199
\texttt{ts} followed by \texttt{Auto_tac}.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   200
lemma "subst s (App f ts) = App f (map (subst s) ts)";
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   201
by(induct_tac ts, auto);
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   202
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   203
Now explain how to remove old eqns from simpset by naming them.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   204
But: the new eqn only helps if the induction schema is also modified
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   205
accordingly:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   206
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   207
val prems =
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   208
Goal "[| !!v. P(Var v); !!f ts. (!!t. t : set ts ==> P t) ==> P(App f ts) |] \
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   209
\     ==> P t & (!t: set ts. P t)";
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   210
by(induct_tac "t ts" 1);
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   211
brs prems 1;
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   212
brs prems 1;
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   213
by(Blast_tac 1);
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   214
by(Simp_tac 1);
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   215
by(Asm_simp_tac 1);
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   216
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   217
Now the following exercise has an easy proof:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   218
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   219
\begin{exercise}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   220
  Define a function \texttt{rev_term} of type \texttt{term -> term} that
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   221
  recursively reverses the order of arguments of all function symbols in a
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   222
  term. Prove that \texttt{rev_term(rev_term t) = t}.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   223
\end{exercise}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   224
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   225
==============================================================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   226
Recdef:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   227
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   228
nested recursion
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   229
more example proofs:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   230
 if-normalization with measure function,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   231
 nested if-normalization,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   232
 quicksort
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   233
 Trie?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   234
a case study?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   235
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   236
A separate subsection on recdef beyond measure, eg <*lex*> and psubset.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   237
Example: some finite fixpoint computation? MC, Grammar?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   238
How to modify wf-prover?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   239
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   240
----------
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   241
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   242
Partial rekursive functions / Nontermination
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   243
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   244
What appears to be the problem:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   245
axiom f n = f n + 1
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   246
lemma False
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   247
apply(cut_facts_tac axiom, simp).
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   248
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   249
1. Guarded recursion
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   250
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   251
Scheme:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   252
f x = if $x \in dom(f)$ then ... else arbitrary
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   253
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   254
Example: sum/fact: int -> int (for no good reason because we have nat)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   255
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   256
Exercise: ?! f. !i. f i = if i=0 then 1 else i*f(i-1)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   257
(What about sum? Is there one, a unique one?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   258
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   259
[Alternative: include argument that is counted down
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   260
 f x n = if n=0 then None else ...
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   261
Refer to Boyer and Moore]
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   262
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   263
More complex: same_fst
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   264
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   265
chase(f,x) = if wf{(f x,x) . f x ~= x}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   266
             then if f x = x then x else chase(f,f x)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   267
             else arb
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   268
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   269
Prove wf ==> f(chase(f,x)) = chase(f,x)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   270
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   271
2. While / Tail recursion
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   272
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   273
chase f x = fst(while (%(x,fx). x=fx) (%(x,fx). (fx,f fx)) (x,f x))
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   274
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   275
==> unfold eqn for chase? Prove fixpoint property?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   276
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   277
Better(?) sum i = fst(while (%(s,i). i=0) (%(s,i). (s+i,i-1)) (0,i))
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   278
Prove 0 <= i ==> sum i = i*(i+1) via while-rule
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   279
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   280
Mention prototyping?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   281
==============================================================