doc-src/TutorialI/todo.tobias
author wenzelm
Mon, 23 Oct 2000 11:14:00 +0200
changeset 10289 475ea668c67d
parent 10283 ff003e2b790c
child 10340 0a380ac80e7d
permissions -rw-r--r--
tuned deps;
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
     1
Implementation
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
     2
==============
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     3
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     4
Hide global names like Node.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     5
Why is comp needed in addition to op O?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     6
Explain in syntax section!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     7
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
     8
defs with = and pattern matching
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     9
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    10
replace "simp only split" by "split_tac".
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    11
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    12
arithmetic: allow mixed nat/int formulae
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    13
-> simplify proof of part1 in Inductive/AB.thy
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    14
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    15
Add map_cong?? (upto 10% slower)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    16
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    17
Recdef: Get rid of function name in header.
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    18
Support mutual recursion (Konrad?)
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    19
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    20
use arith_tac in recdef to solve termination conditions?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    21
-> new example in Recdef/termination
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    22
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    23
a tactic for replacing a specific occurrence:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    24
apply(substitute [2] thm)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    25
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    26
it would be nice if @term could deal with ?-vars.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    27
then a number of (unchecked!) @texts could be converted to @terms.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    28
10189
865918597b63 *** empty log message ***
nipkow
parents: 10186
diff changeset
    29
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
    30
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    31
More predefined functions for datatypes: map?
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    32
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    33
Induction rules for int: int_le/ge_induct?
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    34
Needed for ifak example. But is that example worth it?
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    35
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    36
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    37
Minor fixes in the tutorial
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    38
===========================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    39
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    40
explanation of absence of contrapos_pn in Rules?
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    41
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    42
get rid of use_thy in tutorial?
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    43
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    44
Explain typographic conventions?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    45
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    46
an example of induction: !y. A --> B --> C ??
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    47
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    48
Appendix: Lexical: long ids.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    49
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    50
Warning: infixes automatically become reserved words!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    51
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    52
Forward ref from blast proof of Puzzle (AdvancedInd) to Isar proof?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    53
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    54
mention split_split in advanced pair section.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    55
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    56
recdef with nested recursion: either an example or at least a pointer to the
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    57
literature. In Recdef/termination.thy, at the end.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    58
%FIXME, with one exception: nested recursion.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    59
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    60
Syntax section: syntax annotations nor just for consts but also for constdefs and datatype.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    61
10283
ff003e2b790c *** empty log message ***
nipkow
parents: 10281
diff changeset
    62
Appendix with list functions.
ff003e2b790c *** empty log message ***
nipkow
parents: 10281
diff changeset
    63
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    64
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    65
Minor additions to the tutorial, unclear where
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    66
==============================================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    67
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    68
Tacticals: , ? +
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    69
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    70
Mention that simp etc (big step tactics) insist on change?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    71
10237
875bf54b5d74 *** empty log message ***
nipkow
parents: 10236
diff changeset
    72
Rules: Introduce "by" (as a kind of shorthand for apply+done, except that it
875bf54b5d74 *** empty log message ***
nipkow
parents: 10236
diff changeset
    73
does more.)
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    74
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    75
A list of further useful commands (rules? tricks?)
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    76
prefer, defer, print_simpset (-> print_simps?)
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    77
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    78
An overview of the automatic methods: simp, auto, fast, blast, force,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    79
clarify, clarsimp (intro, elim?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    80
10237
875bf54b5d74 *** empty log message ***
nipkow
parents: 10236
diff changeset
    81
Advanced Ind expects rule_format incl (no_asm) (which it currently explains!)
10242
028f54cd2cc9 *** empty log message ***
nipkow
parents: 10237
diff changeset
    82
Where explained? Should go into a separate section as Inductive needs it as
028f54cd2cc9 *** empty log message ***
nipkow
parents: 10237
diff changeset
    83
well.
10237
875bf54b5d74 *** empty log message ***
nipkow
parents: 10236
diff changeset
    84
875bf54b5d74 *** empty log message ***
nipkow
parents: 10236
diff changeset
    85
Where is "simplified" explained? Needed by Inductive/AB.thy
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    86
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    87
demonstrate x : set xs in Sets. Or Tricks chapter?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    88
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    89
Appendix with HOL keywords. Say something about other keywords.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    90
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    91
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    92
Possible exercises
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    93
==================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    94
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    95
Exercises
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    96
%\begin{exercise}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    97
%Extend expressions by conditional expressions.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    98
braucht wfrec!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    99
%\end{exercise}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   100
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   101
Nested inductive datatypes: another example/exercise:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   102
 size(t) <= size(subst s t)?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   103
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   104
insertion sort: primrec, later recdef
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   105
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   106
OTree:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   107
 first version only for non-empty trees:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   108
 Tip 'a | Node tree tree
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   109
 Then real version?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   110
 First primrec, then recdef?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   111
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   112
Ind. sets: define ABC inductively and prove
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   113
ABC = {rep A n @ rep B n @ rep C n. True}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   114
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   115
Possible examples/case studies
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   116
==============================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   117
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   118
Trie: Define functional version
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   119
datatype ('a,'b)trie = Trie ('b option) ('a => ('a,'b)trie option)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   120
lookup t [] = value t
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   121
lookup t (a#as) = case tries t a of None => None | Some s => lookup s as
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   122
Maybe as an exercise?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   123
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   124
Trie: function for partial matches (prefixes). Needs sets for spec/proof.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   125
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   126
Sets via ordered list of intervals. (Isa/Interval(2))
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   127
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   128
propositional logic (soundness and completeness?),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   129
predicate logic (soundness?),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   130
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   131
Tautology checker. Based on Ifexpr or prop.logic?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   132
Include forward reference in relevant section.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   133
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   134
Sorting with comp-parameter and with type class (<)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   135
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   136
New book by Bird?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   137
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   138
Steps Towards Mechanizing Program Transformations Using PVS by N. Shankar,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   139
      Science of Computer Programming, 26(1-3):33-57, 1996. 
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   140
You can get it from http://www.csl.sri.com/scp95.html
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   141
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   142
J Moore article Towards a ...
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   143
Mergesort, JVM
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   144
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   145
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   146
Additional topics
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   147
=================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   148
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
   149
Recdef with nested recursion?
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   150
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   151
Extensionality: applications in
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   152
- boolean expressions: valif o bool2if = value
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   153
- Advanced datatypes exercise subst (f o g) = subst f o subst g
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   154
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   155
A look at the library?
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
   156
Map.
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   157
If WF is discussed, make a link to it from AdvancedInd.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   158
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   159
Prototyping?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   160
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   161
==============================================================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   162
Recdef:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   163
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   164
nested recursion
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   165
more example proofs:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   166
 if-normalization with measure function,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   167
 nested if-normalization,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   168
 quicksort
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   169
 Trie?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   170
a case study?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   171
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   172
----------
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   173
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   174
Partial rekursive functions / Nontermination
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   175
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   176
What appears to be the problem:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   177
axiom f n = f n + 1
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   178
lemma False
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   179
apply(cut_facts_tac axiom, simp).
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   180
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   181
1. Guarded recursion
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   182
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   183
Scheme:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   184
f x = if $x \in dom(f)$ then ... else arbitrary
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   185
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   186
Example: sum/fact: int -> int (for no good reason because we have nat)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   187
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   188
Exercise: ?! f. !i. f i = if i=0 then 1 else i*f(i-1)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   189
(What about sum? Is there one, a unique one?)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   190
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   191
[Alternative: include argument that is counted down
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   192
 f x n = if n=0 then None else ...
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   193
Refer to Boyer and Moore]
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   194
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   195
More complex: same_fst
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   196
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   197
chase(f,x) = if wf{(f x,x) . f x ~= x}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   198
             then if f x = x then x else chase(f,f x)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   199
             else arb
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   200
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   201
Prove wf ==> f(chase(f,x)) = chase(f,x)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   202
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   203
2. While / Tail recursion
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   204
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   205
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
   206
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   207
==> unfold eqn for chase? Prove fixpoint property?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   208
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   209
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
   210
Prove 0 <= i ==> sum i = i*(i+1) via while-rule
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   211
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   212
Mention prototyping?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   213
==============================================================