Dear reader: these NOTES.md
documents are mostly for myself (Grigore), to
keep track of changes and updates that need to be made as things evolve
in the K framework. You can safely ignore them. However, if you are curious
how things will change and decide to read them, I would be grateful if you
let me know whenever you find inconsistencies or things that I forgot to
mention here. Or even better, feel free to make pull requests with suggested
changes or updates.
Global changes that need to be made:
- Replace
when
in rules withrequires
Things to revise each time the structure of the tutorial changes:
1_k\2_imp\lesson_1\README.md
refers to Tutorial 11_k\2_imp\lesson_4\README.md
refers to Lesson 11_k\2_imp\lesson_4\README.md
refers to Tutorial 1, Lesson 2.51_k\3_lambda++\lesson_1\README.md
refers to Lesson 8, Tutorial 1- `1_k\3_lambda++\lesson_1\exercises refers to Lesson 1, tests/config.xml
1_k\3_lambda++\lesson_2\README.md
Lesson 1, Tutorial 1; Tutorial 6; Part 1, 21_k\3_lambda++\lesson_3\README.md
refers to Lesson 7, Tutorial 11_k\3_lambda++\lesson_4\README.md
refers to Lesson 11_k\3_lambda++\lesson_5\README.md
refers to Lesson 4, Lesson 8 and Lesson 7 of Tutorial 11_k\3_lambda++\lesson_6\README.md
refers to Parts 3 and 4 of the tutorial1_k\4_imp++\lesson_1\README.md
refers to Lesson 4, Tutorial 2; also Tutorial 3 (at the end)1_k\4_imp++\lesson_2\README.md
refers to Tutorial 3; Tutorial 21_k\4_imp++\lesson_3\README.md
refers to Lesson 1, Lesson 61_k\4_imp++\lesson_4\README.md
refers to Tutorial 61_k\4_imp++\lesson_5\README.md
refers to Lesson 4; Tutorial 31_k\4_imp++\lesson_6\README.md
refers to Lesson 31_k\4_imp++\lesson_7\README.md
refers to Lesson 1, 61_k\5_types\lesson_1\README.md
refers to Part 4; SIMPLE1_k\5_types\lesson_2\NOTES/README.md
refer to Tutorial 11_k\5_types\lesson_3\README.md
refers to Part 1; Lesson 1,21_k\5_types\lesson_4\README.md
refers to Part 1, and to Lessons 2 and 31_k\5_types\lesson_5\README.md
refers to Lessons 4, 3, 21_k\5_types\lesson_6\README.md
refers to Lesson 5; SIMPLE, KOOL, IMP++1_k\5_types\lesson_7\README.md
refers to Lesson 4, 8, 91_k\5_types\lesson_8\README.md
refers to Lessons 5, 71_k\5_types\lesson_9\README.md
refers to Lessons 8, 5, 7, 4
1_k\4_imp++\lesson_2\README.md
states "generates a term of the form
symNat(n)
of sort Nat
", but the representation of symbolic numbers may
have changed
Describe/use/explain/justify the terminology "the <k/>
cell" as opposed to "the k
cell".
Would it be a good idea to make the README files self contained, that is,
to include the entire lang.k
code in them, spread over the entire README, as things
are discussed? In case we decide not to, make sure that the code snippets mentioned
in the READMEs are in perfect correspondence to the code in the actual .k definitions.
Maybe add a tag before each code snippet saying what file and what lines in that
file comes from, then we can use a script to check them to be identical.
1_k\5_types\lesson_4\README.md
refers to polymorphism, but some may say that is not precisely
polymorphism, because the types are not universally quantified. Explain that better.
Modify the entire tutorial to use .
or, if needed, .::Map
, etc.,
instead of .Map
, etc.. Check for each instance specifically, because
the surrounding text may also need to be modified.
We sometimes use "Kompile", or "kompile", as a verb instead of "Compile", or "compile", to indicate that we mean compilation with K. Similarly for "Krun", or "krun", instead of "Run" or "run".
Add citations to:
- chemical abstract machine
- logics, where the distinction between side condition and premise is explained
- reduction semantics with evaluation contexts
Replace I1 +Int I2
, notBool B
, etc., with (I1 + I2)@INT
, (not B)@Bool
,
etc., when we have module qualification in place and working.
Explain isSort(T)
for all sorts Sort
, in one place, when it is first used.
Explain also that T:Sort
yields a side condition isSort(T)
.
Currently all the K collections are "untyped", that is, over the sort K
.
In the future we want to have parametric collections. Make sure the tutorial
is systematically changed when this happens.
See issue #2023 and modify pl-tutorial/1_k/2_imp/lesson_4 accordingly, if needed.
All definitions, and corresponding READMEs, should be changed to take advantage of modules and module operations. Ideally, we'd like to have no code repetition in any examples, except for demonstration purposes.
In the PL semantics book, define print(AExps) to have the same semantics as in IMP++: evaluates and prints each of its arguments in order (as opposed to first evaluate all of them and then print them---for example, if the second argument performs a division by zero, I still want to print the first argument.)