keywords, phrases, and descriptions related to making systems easier to think about and easier to write down, by simplifying both the way information is expressed and the way ideas are organized.
simply collect relevant words/keywords/vocabulary. build clusters of related concepts. identify transferable knowledge. structure notes as conceptual clusters with cleverly chosen category names.
labelling introduces discrete boundaries in the problem space. discretization permits combinatorial search, recombination, inference, and comparison. the manipulation of symbols, rather than undifferentiated experience, enables the detection of sameness, adjacency, and absence. it also supports compression of reasoning.
find the smallest high-leverage fact set that yields broad understanding. use a "20-questions" framing: each question carves the search space, reduces ambiguity, and links categories.
computation viewed as a triplet: (input process output).
triplet reasoning treats each unit as a relation in which any two elements determine the third:
(input, transformation) -> output (output, transformation) -> input (input, output) -> transformation
this yields:
therefore:
in programming language design, the triplet describes the semantic core:
(expression, environment) -> value (value, environment) -> expression (only if representation is retained)
thus the same principle:
practical use:
computation viewed as a duplet: (input output).
a duplet omits the internal process. only two questions remain:
this yields a minimal observable model.
input -> output
duplet reasoning focuses on what flows and where it ends up, independent of how it is produced.
it can be notated as nested sets of value identifiers to show what is being mapped. for example: a (b (c d)) -> a (e f), where parentheses mark collections.
to avoid duplication of definitions at other places, it usually makes sense to describe structures somewhere else, given them a name, and then have a flat list of input and output values. for example: a g -> a h, where g and h are described separately.
a mapping of input to output arguments is specified by two orthogonal choices:
four primitives span all cases:
this will show transformed input and output, and values that are merely passed on unmodified.
about the compact description of algorithms.
an encoding of algorithmic identity provides a language-independent description of a method. sufficient to distinguish algorithmic families such as quicksort versus mergesort. it abstracts from machine details and retains only defining structure, recurrence, or partitioning.
good encodings are judged by:
questions that can bring forth fundamental properties.