doc-src/TutorialI/todo.tobias
author nipkow
Thu, 29 Nov 2001 14:12:42 +0100
changeset 12328 7c4ec77a8715
parent 11561 6a95f3eaa54f
child 12332 aea72a834c85
permissions -rw-r--r--
*** empty log message ***
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
11548
0028bd06a19c *** empty log message ***
nipkow
parents: 11282
diff changeset
     1
"You know my methods. Apply them!"
0028bd06a19c *** empty log message ***
nipkow
parents: 11282
diff changeset
     2
12328
7c4ec77a8715 *** empty log message ***
nipkow
parents: 11561
diff changeset
     3
Explain indentation of apply's
7c4ec77a8715 *** empty log message ***
nipkow
parents: 11561
diff changeset
     4
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
     5
Implementation
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
     6
==============
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
     7
11158
5652018b809a *** empty log message ***
nipkow
parents: 10995
diff changeset
     8
- (#2 * x) = #2 * - x is not proved by arith
5652018b809a *** empty log message ***
nipkow
parents: 10995
diff changeset
     9
11160
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    10
a simp command for terms
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    11
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    12
----------------------------------------------------------------------
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    13
primrec 
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    14
"(foorec [] []) = []"
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    15
"(foorec [] (y # ys)) = (y # (foorec [] ys))"
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    16
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    17
*** Primrec definition error:
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    18
*** extra variables on rhs: "y", "ys"
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    19
*** in
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    20
*** "((foorec [] ((y::'a_1) # (ys::'a_1 list))) = (y # (foorec [] ys)))"
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    21
*** At command "primrec".
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    22
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    23
Bessere Fehlermeldung!
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    24
----------------------------------------------------------------------
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    25
10608
620647438780 *** empty log message ***
nipkow
parents: 10520
diff changeset
    26
Relation: comp -> composition
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    27
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    28
Add map_cong?? (upto 10% slower)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    29
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    30
Recdef: Get rid of function name in header.
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    31
Support mutual recursion (Konrad?)
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    32
11282
297a58ea405f *** empty log message ***
nipkow
parents: 11256
diff changeset
    33
improve solver in simplifier: treat & and ! ...
297a58ea405f *** empty log message ***
nipkow
parents: 11256
diff changeset
    34
297a58ea405f *** empty log message ***
nipkow
parents: 11256
diff changeset
    35
better 1 point rules:
297a58ea405f *** empty log message ***
nipkow
parents: 11256
diff changeset
    36
!x. !y. x = f y --> P x y  should reduce to  !y. P (f y) y.
297a58ea405f *** empty log message ***
nipkow
parents: 11256
diff changeset
    37
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    38
use arith_tac in recdef to solve termination conditions?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    39
-> new example in Recdef/termination
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    40
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    41
a tactic for replacing a specific occurrence:
10654
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
    42
apply(subst [2] thm)
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    43
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    44
it would be nice if @term could deal with ?-vars.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    45
then a number of (unchecked!) @texts could be converted to @terms.
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    46
10189
865918597b63 *** empty log message ***
nipkow
parents: 10186
diff changeset
    47
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
    48
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    49
More predefined functions for datatypes: map?
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    50
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    51
Induction rules for int: int_le/ge_induct?
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    52
Needed for ifak example. But is that example worth it?
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
    53
10608
620647438780 *** empty log message ***
nipkow
parents: 10520
diff changeset
    54
Komischerweise geht das Splitten von _Annahmen_ auch mit simp_tac, was
620647438780 *** empty log message ***
nipkow
parents: 10520
diff changeset
    55
ein generelles Feature ist, das man vielleicht mal abstellen sollte.
620647438780 *** empty log message ***
nipkow
parents: 10520
diff changeset
    56
10520
bb9dfcc87951 *** empty log message ***
nipkow
parents: 10509
diff changeset
    57
proper mutual simplification
bb9dfcc87951 *** empty log message ***
nipkow
parents: 10509
diff changeset
    58
bb9dfcc87951 *** empty log message ***
nipkow
parents: 10509
diff changeset
    59
defs with = and pattern matching??
10340
0a380ac80e7d *** empty log message ***
nipkow
parents: 10283
diff changeset
    60
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    61
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    62
Minor fixes in the tutorial
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    63
===========================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    64
11561
6a95f3eaa54f *** empty log message ***
nipkow
parents: 11548
diff changeset
    65
1/2 no longer abbrevs for Suc.
6a95f3eaa54f *** empty log message ***
nipkow
parents: 11548
diff changeset
    66
Warning: needs simplification to turn 1 into Suc 0. arith does so
6a95f3eaa54f *** empty log message ***
nipkow
parents: 11548
diff changeset
    67
automatically.
6a95f3eaa54f *** empty log message ***
nipkow
parents: 11548
diff changeset
    68
11282
297a58ea405f *** empty log message ***
nipkow
parents: 11256
diff changeset
    69
recdef: failed tcs no longer shown! (sec:Recursion over nested datatypes)
11256
49afcce3bada *** empty log message ***
nipkow
parents: 11235
diff changeset
    70
say something about how conditions are proved?
49afcce3bada *** empty log message ***
nipkow
parents: 11235
diff changeset
    71
No, better show failed proof attempts.
11160
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    72
11256
49afcce3bada *** empty log message ***
nipkow
parents: 11235
diff changeset
    73
Advanced recdef: explain recdef_tc? No. Adjust recdef!
11160
e0ab13bec5c8 *** empty log message ***
nipkow
parents: 11158
diff changeset
    74
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10971
diff changeset
    75
Adjust FP textbook refs: new Bird, Hudak
59961d32b1ae *** empty log message ***
nipkow
parents: 10971
diff changeset
    76
Discrete math textbook: Rosen?
10340
0a380ac80e7d *** empty log message ***
nipkow
parents: 10283
diff changeset
    77
10983
59961d32b1ae *** empty log message ***
nipkow
parents: 10971
diff changeset
    78
adjust type of ^ in tab:overloading
10509
ff24ac6678dd *** empty log message ***
nipkow
parents: 10340
diff changeset
    79
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    80
an example of induction: !y. A --> B --> C ??
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    81
10509
ff24ac6678dd *** empty log message ***
nipkow
parents: 10340
diff changeset
    82
Explain type_definition and mention pre-proved thms in subset.thy?
ff24ac6678dd *** empty log message ***
nipkow
parents: 10340
diff changeset
    83
-> Types/typedef
ff24ac6678dd *** empty log message ***
nipkow
parents: 10340
diff changeset
    84
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    85
Appendix: Lexical: long ids.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    86
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    87
Warning: infixes automatically become reserved words!
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    88
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    89
Forward ref from blast proof of Puzzle (AdvancedInd) to Isar proof?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    90
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    91
recdef with nested recursion: either an example or at least a pointer to the
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    92
literature. In Recdef/termination.thy, at the end.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    93
%FIXME, with one exception: nested recursion.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
    94
11202
f8da11ca4c6e *** empty log message ***
nipkow
parents: 11201
diff changeset
    95
Syntax section: syntax annotations not just for consts but also for constdefs and datatype.
10186
499637e8f2c6 *** empty log message ***
nipkow
parents: 10177
diff changeset
    96
10283
ff003e2b790c *** empty log message ***
nipkow
parents: 10281
diff changeset
    97
Appendix with list functions.
ff003e2b790c *** empty log message ***
nipkow
parents: 10281
diff changeset
    98
11235
860c65c7388a *** empty log message ***
nipkow
parents: 11206
diff changeset
    99
All theory sources on the web?
860c65c7388a *** empty log message ***
nipkow
parents: 11206
diff changeset
   100
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   101
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   102
Minor additions to the tutorial, unclear where
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   103
==============================================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   104
10855
140a1ed65665 *** empty log message ***
nipkow
parents: 10845
diff changeset
   105
unfold?
10845
3696bc935bbd *** empty log message ***
nipkow
parents: 10676
diff changeset
   106
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   107
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   108
Possible exercises
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   109
==================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   110
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   111
Exercises
10971
6852682eaf16 *** empty log message ***
nipkow
parents: 10855
diff changeset
   112
6852682eaf16 *** empty log message ***
nipkow
parents: 10855
diff changeset
   113
For extensionality (in Sets chapter): prove
6852682eaf16 *** empty log message ***
nipkow
parents: 10855
diff changeset
   114
valif o norm = valif
6852682eaf16 *** empty log message ***
nipkow
parents: 10855
diff changeset
   115
in If-expression case study (Ifexpr)
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   116
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   117
Nested inductive datatypes: another example/exercise:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   118
 size(t) <= size(subst s t)?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   119
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   120
insertion sort: primrec, later recdef
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   121
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   122
OTree:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   123
 first version only for non-empty trees:
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   124
 Tip 'a | Node tree tree
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   125
 Then real version?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   126
 First primrec, then recdef?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   127
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   128
Ind. sets: define ABC inductively and prove
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   129
ABC = {rep A n @ rep B n @ rep C n. True}
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   130
10654
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   131
Partial rekursive functions / Nontermination:
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   132
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   133
Exercise: ?! f. !i. f i = if i=0 then 1 else i*f(i-1)
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   134
(What about sum? Is there one, a unique one?)
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   135
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   136
Exercise
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   137
Better(?) sum i = fst(while (%(s,i). i=0) (%(s,i). (s+i,i-1)) (0,i))
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   138
Prove 0 <= i ==> sum i = i*(i+1) via while-rule
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   139
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   140
Possible examples/case studies
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   141
==============================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   142
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   143
Trie: Define functional version
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   144
datatype ('a,'b)trie = Trie ('b option) ('a => ('a,'b)trie option)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   145
lookup t [] = value t
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   146
lookup t (a#as) = case tries t a of None => None | Some s => lookup s as
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   147
Maybe as an exercise?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   148
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   149
Trie: function for partial matches (prefixes). Needs sets for spec/proof.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   150
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   151
Sets via ordered list of intervals. (Isa/Interval(2))
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   152
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   153
propositional logic (soundness and completeness?),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   154
predicate logic (soundness?),
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   155
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   156
Tautology checker. Based on Ifexpr or prop.logic?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   157
Include forward reference in relevant section.
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   158
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   159
Sorting with comp-parameter and with type class (<)
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   160
10654
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   161
Recdef:more example proofs:
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   162
 if-normalization with measure function,
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   163
 nested if-normalization,
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   164
 quicksort
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   165
 Trie?
458068404143 *** empty log message ***
nipkow
parents: 10608
diff changeset
   166
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   167
New book by Bird?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   168
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   169
Steps Towards Mechanizing Program Transformations Using PVS by N. Shankar,
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   170
      Science of Computer Programming, 26(1-3):33-57, 1996. 
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   171
You can get it from http://www.csl.sri.com/scp95.html
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   172
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   173
J Moore article Towards a ...
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   174
Mergesort, JVM
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
Additional topics
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   178
=================
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   179
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
   180
Recdef with nested recursion?
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   181
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   182
Extensionality: applications in
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   183
- boolean expressions: valif o bool2if = value
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   184
- Advanced datatypes exercise subst (f o g) = subst f o subst g
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   185
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   186
A look at the library?
10281
9554ce1c2e54 *** empty log message ***
nipkow
parents: 10242
diff changeset
   187
Map.
10177
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   188
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   189
Prototyping?
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   190
383b0a1837a9 *** empty log message ***
nipkow
parents:
diff changeset
   191
==============================================================