summaryrefslogtreecommitdiff
path: root/chain/src/plan.org
diff options
context:
space:
mode:
authorJSDurand <mmemmew@gmail.com>2023-01-06 23:42:28 +0800
committerJSDurand <mmemmew@gmail.com>2023-01-06 23:42:28 +0800
commitf27d604d93ce583d4404e1874664e08382ea2f00 (patch)
tree6fa8df26af954e94f3604ffabde4961ee8108c41 /chain/src/plan.org
parent7dd4935230e303aef8d295d992239d59d95b32d7 (diff)
Save before system restart.
I am about to re-start my system, so I save before any crashes happen.
Diffstat (limited to 'chain/src/plan.org')
-rw-r--r--chain/src/plan.org28
1 files changed, 26 insertions, 2 deletions
diff --git a/chain/src/plan.org b/chain/src/plan.org
index 75acf30..bbd6683 100644
--- a/chain/src/plan.org
+++ b/chain/src/plan.org
@@ -38,11 +38,30 @@
finite automata.
* [X] Test the removal of dead states, where a state is dead if
and only if no other states have an edge into that state.
-- [-] Refactor [2/5]
+- [-] Refactor [2/8]
+ [X] Implement a data type for graphs with labels on vertices and
edges, but do not need to index edges by labels, which can index
vertices by labels instead.
+ * [X] Test it.
+ [X] Implement a builder that borrows a graph mutably.
+ * [X] Test it.
+ + [ ] Implement a data type for graphs in which every node knows its
+ parents, and every node has a unique label but edges have no
+ labels.
+ * [ ] Test it.
+ + [ ] We need to record the expansions of those "virtual nodes".
+ That is, the virtual nodes represent atomic languages such as
+ [s]^{(t)} where s is a non-terminal and t is a terminal. To be more
+ specific, it represents the derivative of the left-linear closure
+ of the non-terminal s with respect to the terminal t. The
+ left-linear closure of s is the set of all strings (consisting of
+ terminals and non-terminals alike) that are derivable from s
+ alone, without consuming any inputs, by expanding according to the
+ grammar rules. This means that we need to know which
+ non-terminals were expanded in order to get to a state in [s]^{(t)}.
+ + [ ] Each edge in the chain-rule machine needs to be labelled also
+ with a position in the forest. This perfectly solves the problem
+ of those "plugs"!
+ [ ] When we pull in some regular language because of the
left-linear expansion, we need to mark that branch as coming from
left-linear expansions. This is necessary because we cannot
@@ -66,7 +85,12 @@
+ [X] First define a trait with the expected behaviours.
+ [ ] Then implement them as doubly labelled graphs.
+ [ ] Thenimplement finding derivatives by use of the chain rule.
-- [-] Implement forests [1/2]
+- [-] Implement forests [2/3]
+ + [X] Design a format of forests. This should be the most crucial
+ thing to do, in order to have a better understanding of the whole
+ picture. I need to have a clear understanding of the details of
+ the binarised shared packed parsed forests, that reflects the
+ regular expressions in the grammar equations.
+ [X] Define a trait with the expected behaviours.
+ [-] Implement them using adjacency map: we only need one label per
edge, and we do not wish to exclude duplicate edges, and we do not